@keenmate/pure-css 1.0.0-rc01 → 1.0.0-rc02
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -0
- package/README.md +17 -2
- package/dist/css/pure-css.css +128 -0
- package/dist/css/reboot.css +94 -0
- package/dist/css/scrollbars.css +32 -0
- package/package.json +6 -2
- package/src/scss/pure-css.scss +6 -2
- package/src/scss/reboot.scss +134 -0
- package/src/scss/scrollbars.scss +48 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,34 @@
|
|
|
3
3
|
All notable changes to `@keenmate/pure-css` are documented here. Format based on
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
5
5
|
|
|
6
|
+
## [1.0.0-rc02] — 2026-08-05 [PUBLISHED]
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- **Reboot layer (`reboot.scss`) — the reset the foundation always assumed.** Emits
|
|
11
|
+
`html { font-size: 10px }` (the 10px rem base every pure-css rem value is authored
|
|
12
|
+
against — `$font-size-base: 1.6rem` is 16px *only* at a 10px root), a `box-sizing:
|
|
13
|
+
border-box` reset, neutral base styling for standard elements (headings, paragraphs,
|
|
14
|
+
links, lists, blockquotes, `hr`, `figure`), the `body` font/colour/background, and the
|
|
15
|
+
`button/input/select/textarea/label { font: inherit }` reset. Relocated from
|
|
16
|
+
pure-admin-core's `core-components/_base.scss` so it sits with the rem-scale variables
|
|
17
|
+
that depend on it. Analogous to Bootstrap's Reboot.
|
|
18
|
+
- **New `reboot.css` build artifact** + `./reboot` export, and `reboot` is now part of the
|
|
19
|
+
`pure-css.css` bundle (emitted before grid/utilities).
|
|
20
|
+
- **Themed scrollbars (`scrollbars.scss`).** The global `*::-webkit-scrollbar` + Firefox
|
|
21
|
+
`scrollbar-width`/`scrollbar-color` styling (thin scrollbars coloured from the `--pa-*`
|
|
22
|
+
cascade), relocated from pure-admin-core's `core-components/_scrollbars.scss`. Global browser
|
|
23
|
+
chrome belongs with the foundation's consistent-appearance promise, so a standalone pure-css
|
|
24
|
+
page gets the same themed scrollbars as a full pure-admin app instead of native ones. Part of
|
|
25
|
+
the `pure-css.css` bundle, plus a standalone `scrollbars.css` artifact + `./scrollbars` export.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **Standalone consumers no longer render 1.6× too large.** Before, the 10px base lived
|
|
30
|
+
only in pure-admin-core, so a page linking `pure-css.css` (or `base.css`) on its own
|
|
31
|
+
inherited the browser's 16px root and every rem was 1.6× oversized. The bundle now ships
|
|
32
|
+
the 10px base itself, so the sizing scale is correct out of the box.
|
|
33
|
+
|
|
6
34
|
## [1.0.0-rc01] — 2026-08-04
|
|
7
35
|
|
|
8
36
|
Initial extraction of the CSS foundation out of `@keenmate/pure-admin-core`.
|
package/README.md
CHANGED
|
@@ -4,6 +4,20 @@ The KeenMate CSS **foundation** — the `--base-*` theming contract, the flexbox
|
|
|
4
4
|
utility classes — extracted from [`@keenmate/pure-admin-core`](https://github.com/KeenMate/pure-admin)
|
|
5
5
|
so it can be consumed on its own.
|
|
6
6
|
|
|
7
|
+
## What's New in 1.0.0-rc02
|
|
8
|
+
|
|
9
|
+
- **Reboot layer — the 10px base is now built in.** pure-css ships
|
|
10
|
+
`html { font-size: 10px }` (plus a `box-sizing` reset and neutral base element
|
|
11
|
+
styling) via the new `reboot.scss`, included in the `pure-css.css` bundle and
|
|
12
|
+
available standalone as `reboot.css` / the `./reboot` export. Every pure-css
|
|
13
|
+
rem value assumes a 10px root, so previously a standalone consumer rendered
|
|
14
|
+
everything 1.6× too large until they added the base themselves — now it just
|
|
15
|
+
works out of the box.
|
|
16
|
+
- **Themed scrollbars, foundation-wide.** The global thin-scrollbar styling
|
|
17
|
+
(`scrollbars.scss`, coloured from the `--pa-*` cascade) moved out of
|
|
18
|
+
pure-admin-core, so a standalone pure-css page gets the same scrollbars as a
|
|
19
|
+
full admin app. In the bundle, or cherry-pick `scrollbars.css` / `./scrollbars`.
|
|
20
|
+
|
|
7
21
|
## What's New in 1.0.0-rc01
|
|
8
22
|
|
|
9
23
|
- **The KeenMate CSS foundation, now standalone.** The `--base-*` theming
|
|
@@ -14,8 +28,9 @@ so it can be consumed on its own.
|
|
|
14
28
|
truth; `pure-admin-core`, its `--pa-*` component variables, and every KeenMate
|
|
15
29
|
web/Svelte component derive from it via fallback chains — so one block of
|
|
16
30
|
`--base-*` overrides re-themes all of them at once.
|
|
17
|
-
- **
|
|
18
|
-
(variables only), `
|
|
31
|
+
- **Link targets.** `pure-css.css` (everything) or cherry-pick `base.css`
|
|
32
|
+
(variables only), `reboot.css` (reset + 10px base), `scrollbars.css`,
|
|
33
|
+
`grid.css`, `utilities.css`.
|
|
19
34
|
- **The native `.pa-row` / `.pa-col` grid** — flexbox columns in 5% percentage
|
|
20
35
|
increments plus intuitive fractions (`.pa-col-1-3`, `.pa-col-2-3`, …), with
|
|
21
36
|
container-query responsive variants (`.pa-col-md-*`) and RTL-aware gutters.
|
package/dist/css/pure-css.css
CHANGED
|
@@ -8,6 +8,134 @@
|
|
|
8
8
|
--pa-surface-track: color-mix(in srgb, var(--pa-text-color-1) 12%, transparent);
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
html {
|
|
12
|
+
font-size: 10px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
* {
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
h1, h2, h3, h4, h5, h6 {
|
|
20
|
+
margin: 2.4rem 0 0.8rem 0;
|
|
21
|
+
padding: 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
p {
|
|
25
|
+
margin: 0 0 1.6rem 0;
|
|
26
|
+
padding: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
:where(a) {
|
|
30
|
+
color: var(--pa-link-color);
|
|
31
|
+
text-decoration: underline;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
:where(a:hover) {
|
|
35
|
+
color: var(--pa-link-color-hover);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
:where(a:visited) {
|
|
39
|
+
color: var(--pa-link-color-visited);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
ul, ol {
|
|
43
|
+
margin: 0 0 1.6rem 0;
|
|
44
|
+
padding: 0;
|
|
45
|
+
padding-inline-start: 3.2rem;
|
|
46
|
+
}
|
|
47
|
+
ul li, ol li {
|
|
48
|
+
margin-bottom: 0.4rem;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
ul.unstyled, ol.unstyled {
|
|
52
|
+
list-style: none;
|
|
53
|
+
padding-inline-start: 0;
|
|
54
|
+
}
|
|
55
|
+
ul.unstyled li, ol.unstyled li {
|
|
56
|
+
margin-bottom: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
dl {
|
|
60
|
+
margin: 0 0 1.6rem 0;
|
|
61
|
+
padding: 0;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
dd {
|
|
65
|
+
margin: 0;
|
|
66
|
+
padding: 0;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
blockquote {
|
|
70
|
+
margin: 1.6rem 0 1.6rem 0;
|
|
71
|
+
padding-inline-start: 2.4rem;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
pre {
|
|
75
|
+
overflow-x: auto;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
hr {
|
|
79
|
+
margin: 2.4rem 0 2.4rem 0;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
figure {
|
|
83
|
+
margin: 1.6rem 0 1.6rem 0;
|
|
84
|
+
padding: 0;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
body {
|
|
88
|
+
margin: 0;
|
|
89
|
+
padding: 0;
|
|
90
|
+
font-family: var(--base-font-family);
|
|
91
|
+
font-size: 1.6rem;
|
|
92
|
+
color: var(--pa-text-color-1);
|
|
93
|
+
background-color: var(--pa-main-bg);
|
|
94
|
+
line-height: 1.5;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
button,
|
|
98
|
+
input,
|
|
99
|
+
select,
|
|
100
|
+
textarea,
|
|
101
|
+
label {
|
|
102
|
+
font-family: inherit;
|
|
103
|
+
font-size: inherit;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Webkit browsers (Chrome, Safari, Edge) */
|
|
107
|
+
*::-webkit-scrollbar {
|
|
108
|
+
width: 6px;
|
|
109
|
+
height: 6px;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
*::-webkit-scrollbar-track {
|
|
113
|
+
background: var(--pa-main-bg);
|
|
114
|
+
border-radius: var(--pa-border-radius-sm);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
*::-webkit-scrollbar-thumb {
|
|
118
|
+
background: var(--pa-border-color);
|
|
119
|
+
border-radius: var(--pa-border-radius-sm);
|
|
120
|
+
border: 1px solid var(--pa-main-bg);
|
|
121
|
+
}
|
|
122
|
+
*::-webkit-scrollbar-thumb:hover {
|
|
123
|
+
background: var(--pa-accent);
|
|
124
|
+
}
|
|
125
|
+
*::-webkit-scrollbar-thumb:active {
|
|
126
|
+
background: var(--pa-accent-hover);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
*::-webkit-scrollbar-corner {
|
|
130
|
+
background: var(--pa-main-bg);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* Firefox */
|
|
134
|
+
* {
|
|
135
|
+
scrollbar-width: thin;
|
|
136
|
+
scrollbar-color: var(--pa-border-color) var(--pa-main-bg);
|
|
137
|
+
}
|
|
138
|
+
|
|
11
139
|
.pa-row {
|
|
12
140
|
display: flex;
|
|
13
141
|
flex-wrap: wrap;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
html {
|
|
2
|
+
font-size: 10px;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
* {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
h1, h2, h3, h4, h5, h6 {
|
|
10
|
+
margin: 2.4rem 0 0.8rem 0;
|
|
11
|
+
padding: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
p {
|
|
15
|
+
margin: 0 0 1.6rem 0;
|
|
16
|
+
padding: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:where(a) {
|
|
20
|
+
color: var(--pa-link-color);
|
|
21
|
+
text-decoration: underline;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
:where(a:hover) {
|
|
25
|
+
color: var(--pa-link-color-hover);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where(a:visited) {
|
|
29
|
+
color: var(--pa-link-color-visited);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
ul, ol {
|
|
33
|
+
margin: 0 0 1.6rem 0;
|
|
34
|
+
padding: 0;
|
|
35
|
+
padding-inline-start: 3.2rem;
|
|
36
|
+
}
|
|
37
|
+
ul li, ol li {
|
|
38
|
+
margin-bottom: 0.4rem;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
ul.unstyled, ol.unstyled {
|
|
42
|
+
list-style: none;
|
|
43
|
+
padding-inline-start: 0;
|
|
44
|
+
}
|
|
45
|
+
ul.unstyled li, ol.unstyled li {
|
|
46
|
+
margin-bottom: 0;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
dl {
|
|
50
|
+
margin: 0 0 1.6rem 0;
|
|
51
|
+
padding: 0;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
dd {
|
|
55
|
+
margin: 0;
|
|
56
|
+
padding: 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
blockquote {
|
|
60
|
+
margin: 1.6rem 0 1.6rem 0;
|
|
61
|
+
padding-inline-start: 2.4rem;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
pre {
|
|
65
|
+
overflow-x: auto;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
hr {
|
|
69
|
+
margin: 2.4rem 0 2.4rem 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
figure {
|
|
73
|
+
margin: 1.6rem 0 1.6rem 0;
|
|
74
|
+
padding: 0;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
body {
|
|
78
|
+
margin: 0;
|
|
79
|
+
padding: 0;
|
|
80
|
+
font-family: var(--base-font-family);
|
|
81
|
+
font-size: 1.6rem;
|
|
82
|
+
color: var(--pa-text-color-1);
|
|
83
|
+
background-color: var(--pa-main-bg);
|
|
84
|
+
line-height: 1.5;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
button,
|
|
88
|
+
input,
|
|
89
|
+
select,
|
|
90
|
+
textarea,
|
|
91
|
+
label {
|
|
92
|
+
font-family: inherit;
|
|
93
|
+
font-size: inherit;
|
|
94
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* Webkit browsers (Chrome, Safari, Edge) */
|
|
2
|
+
*::-webkit-scrollbar {
|
|
3
|
+
width: 6px;
|
|
4
|
+
height: 6px;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
*::-webkit-scrollbar-track {
|
|
8
|
+
background: var(--pa-main-bg);
|
|
9
|
+
border-radius: var(--pa-border-radius-sm);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
*::-webkit-scrollbar-thumb {
|
|
13
|
+
background: var(--pa-border-color);
|
|
14
|
+
border-radius: var(--pa-border-radius-sm);
|
|
15
|
+
border: 1px solid var(--pa-main-bg);
|
|
16
|
+
}
|
|
17
|
+
*::-webkit-scrollbar-thumb:hover {
|
|
18
|
+
background: var(--pa-accent);
|
|
19
|
+
}
|
|
20
|
+
*::-webkit-scrollbar-thumb:active {
|
|
21
|
+
background: var(--pa-accent-hover);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
*::-webkit-scrollbar-corner {
|
|
25
|
+
background: var(--pa-main-bg);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Firefox */
|
|
29
|
+
* {
|
|
30
|
+
scrollbar-width: thin;
|
|
31
|
+
scrollbar-color: var(--pa-border-color) var(--pa-main-bg);
|
|
32
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keenmate/pure-css",
|
|
3
|
-
"version": "1.0.0-
|
|
3
|
+
"version": "1.0.0-rc02",
|
|
4
4
|
"description": "The KeenMate CSS foundation — --base-* theming contract, PureCSS grid and utility classes. Extracted from pure-admin-core so docs sites, standalone pages and every web/svelte component share one theming layer.",
|
|
5
5
|
"style": "dist/css/pure-css.css",
|
|
6
6
|
"exports": {
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
"./css": "./dist/css/pure-css.css",
|
|
9
9
|
"./css/*": "./dist/css/*",
|
|
10
10
|
"./base": "./dist/css/base.css",
|
|
11
|
+
"./reboot": "./dist/css/reboot.css",
|
|
12
|
+
"./scrollbars": "./dist/css/scrollbars.css",
|
|
11
13
|
"./grid": "./dist/css/grid.css",
|
|
12
14
|
"./utilities": "./dist/css/utilities.css",
|
|
13
15
|
"./scss": "./src/scss/pure-css.scss",
|
|
@@ -23,9 +25,11 @@
|
|
|
23
25
|
"scripts": {
|
|
24
26
|
"build:bundle": "sass src/scss/pure-css.scss dist/css/pure-css.css --no-source-map --silence-deprecation=import",
|
|
25
27
|
"build:base": "sass src/scss/base.scss dist/css/base.css --no-source-map --silence-deprecation=import",
|
|
28
|
+
"build:reboot": "sass src/scss/reboot.scss dist/css/reboot.css --no-source-map --silence-deprecation=import",
|
|
29
|
+
"build:scrollbars": "sass src/scss/scrollbars.scss dist/css/scrollbars.css --no-source-map --silence-deprecation=import",
|
|
26
30
|
"build:grid": "sass src/scss/grid.scss dist/css/grid.css --no-source-map --silence-deprecation=import",
|
|
27
31
|
"build:utilities": "sass src/scss/utilities.scss dist/css/utilities.css --no-source-map --silence-deprecation=import",
|
|
28
|
-
"build": "npm run build:bundle && npm run build:base && npm run build:grid && npm run build:utilities",
|
|
32
|
+
"build": "npm run build:bundle && npm run build:base && npm run build:reboot && npm run build:scrollbars && npm run build:grid && npm run build:utilities",
|
|
29
33
|
"watch": "sass --watch src/scss/pure-css.scss:dist/css/pure-css.css --silence-deprecation=import",
|
|
30
34
|
"prepublishOnly": "npm run build"
|
|
31
35
|
},
|
package/src/scss/pure-css.scss
CHANGED
|
@@ -7,14 +7,18 @@
|
|
|
7
7
|
//
|
|
8
8
|
// This bundle emits:
|
|
9
9
|
// 1. `:root` defaults for every --base-*/--pa-* variable (light values)
|
|
10
|
-
// 2. the
|
|
11
|
-
// 3.
|
|
10
|
+
// 2. the reboot (10px rem base + element reset — the sizing contract)
|
|
11
|
+
// 3. themed scrollbars (global browser chrome)
|
|
12
|
+
// 4. the native flexbox grid (.pa-row / .pa-col)
|
|
13
|
+
// 5. the utility classes (.m-*, .d-flex, .w-*, …)
|
|
12
14
|
//
|
|
13
15
|
// A *theme* is just an override of the `$base-*` SCSS variables (or the
|
|
14
16
|
// `--base-*` custom properties) — everything else re-derives. See README.
|
|
15
17
|
// ============================================================================
|
|
16
18
|
|
|
17
19
|
@use 'base-css-variables' as bcv;
|
|
20
|
+
@use 'reboot';
|
|
21
|
+
@use 'scrollbars';
|
|
18
22
|
@use 'pa-grid';
|
|
19
23
|
@use 'utilities';
|
|
20
24
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// @keenmate/pure-css — reset & base element styling ("reboot")
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// The foundation's reset layer. Establishes the 10px rem base that EVERY
|
|
4
|
+
// pure-css rem value assumes (see variables/_typography.scss — `$font-size-base:
|
|
5
|
+
// 1.6rem` is 16px only when the root is 10px), a border-box reset, and neutral
|
|
6
|
+
// base styling for standard HTML elements (headings, paragraphs, links, lists,
|
|
7
|
+
// blockquotes, rules, the body font/colour). Analogous to Bootstrap's Reboot.
|
|
8
|
+
//
|
|
9
|
+
// This lives in pure-css — not in a consuming app — because the 10px base is
|
|
10
|
+
// part of the foundation's sizing contract: without it, a standalone consumer
|
|
11
|
+
// inherits the browser's 16px root and every rem renders 1.6x too large. Link
|
|
12
|
+
// it (or the full `pure-css.css` bundle) and the scale just works.
|
|
13
|
+
//
|
|
14
|
+
// App-specific base rules (the admin dashboard's decorative body background,
|
|
15
|
+
// sidebar overflow handling) intentionally stay in pure-admin-core; a generic
|
|
16
|
+
// foundation shouldn't impose them on every consumer.
|
|
17
|
+
// ============================================================================
|
|
18
|
+
|
|
19
|
+
@use 'variables/index' as *;
|
|
20
|
+
|
|
21
|
+
// 10px rem base for intuitive sizing (1rem = 10px)
|
|
22
|
+
// This makes calculations simple: 1.5rem = 15px, 3.5rem = 35px
|
|
23
|
+
html {
|
|
24
|
+
font-size: 10px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Reset and base styles
|
|
28
|
+
* {
|
|
29
|
+
box-sizing: border-box;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Standard HTML element spacing (using framework variables)
|
|
33
|
+
// Headings
|
|
34
|
+
h1, h2, h3, h4, h5, h6 {
|
|
35
|
+
margin: $heading-margin-top 0 $heading-margin-bottom 0;
|
|
36
|
+
padding: 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Paragraphs
|
|
40
|
+
p {
|
|
41
|
+
margin: $paragraph-margin-top 0 $paragraph-margin-bottom 0;
|
|
42
|
+
padding: 0;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Links — global default. Wrapped in :where() so specificity is 0,
|
|
46
|
+
// letting component scopes (alerts, navbar, sidebar) override with even a
|
|
47
|
+
// single class without fighting the pseudo-class specificity raise that
|
|
48
|
+
// `a:hover` / `a:visited` would otherwise add (0,1,1 vs a class's 0,1,0).
|
|
49
|
+
:where(a) {
|
|
50
|
+
color: var(--pa-link-color);
|
|
51
|
+
text-decoration: underline;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
:where(a:hover) {
|
|
55
|
+
color: var(--pa-link-color-hover);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:where(a:visited) {
|
|
59
|
+
color: var(--pa-link-color-visited);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Lists - styled lists (default browser styling)
|
|
63
|
+
ul, ol {
|
|
64
|
+
margin: $list-margin-top 0 $list-margin-bottom 0;
|
|
65
|
+
padding: 0;
|
|
66
|
+
padding-inline-start: $list-padding-left; // RTL: flips to right
|
|
67
|
+
|
|
68
|
+
li {
|
|
69
|
+
margin-bottom: $list-item-margin-bottom;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Lists - unstyled (for navigation, etc.)
|
|
74
|
+
ul.unstyled, ol.unstyled {
|
|
75
|
+
list-style: none;
|
|
76
|
+
padding-inline-start: 0; // RTL: flips to right
|
|
77
|
+
|
|
78
|
+
li {
|
|
79
|
+
margin-bottom: 0;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Definition lists
|
|
84
|
+
dl {
|
|
85
|
+
margin: $list-margin-top 0 $list-margin-bottom 0;
|
|
86
|
+
padding: 0;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
dd {
|
|
90
|
+
margin: 0;
|
|
91
|
+
padding: 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Blockquote
|
|
95
|
+
blockquote {
|
|
96
|
+
margin: $blockquote-margin-top 0 $blockquote-margin-bottom 0;
|
|
97
|
+
padding-inline-start: $blockquote-padding-left; // RTL: flips to right
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Pre/Code blocks
|
|
101
|
+
pre {
|
|
102
|
+
overflow-x: auto;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Horizontal rule
|
|
106
|
+
hr {
|
|
107
|
+
margin: $hr-margin-top 0 $hr-margin-bottom 0;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Figure
|
|
111
|
+
figure {
|
|
112
|
+
margin: $figure-margin-top 0 $figure-margin-bottom 0;
|
|
113
|
+
padding: 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
body {
|
|
117
|
+
margin: 0;
|
|
118
|
+
padding: 0;
|
|
119
|
+
font-family: var(--base-font-family);
|
|
120
|
+
font-size: 1.6rem; // 16px default text (with 10px rem base)
|
|
121
|
+
color: var(--pa-text-color-1);
|
|
122
|
+
background-color: var(--pa-main-bg);
|
|
123
|
+
line-height: $line-height-base;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Ensure form elements and labels inherit theme font and size instead of browser defaults
|
|
127
|
+
button,
|
|
128
|
+
input,
|
|
129
|
+
select,
|
|
130
|
+
textarea,
|
|
131
|
+
label {
|
|
132
|
+
font-family: inherit;
|
|
133
|
+
font-size: inherit;
|
|
134
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// @keenmate/pure-css — global scrollbar styling
|
|
2
|
+
// ============================================================================
|
|
3
|
+
// Themed, consistent scrollbars across browsers (WebKit `::-webkit-scrollbar`
|
|
4
|
+
// pseudo-elements + the Firefox `scrollbar-width` / `scrollbar-color`
|
|
5
|
+
// properties). Global `*` chrome — part of the foundation's "consistent
|
|
6
|
+
// appearance" promise, so a standalone pure-css page gets the same thin themed
|
|
7
|
+
// scrollbars as a full pure-admin app rather than native browser ones.
|
|
8
|
+
//
|
|
9
|
+
// Colours come from the emitted `--pa-*` cascade, so scrollbars re-theme at
|
|
10
|
+
// runtime with everything else.
|
|
11
|
+
// ============================================================================
|
|
12
|
+
|
|
13
|
+
@use 'variables/index' as *;
|
|
14
|
+
|
|
15
|
+
/* Webkit browsers (Chrome, Safari, Edge) */
|
|
16
|
+
*::-webkit-scrollbar {
|
|
17
|
+
width: $scrollbar-width;
|
|
18
|
+
height: $scrollbar-width;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
*::-webkit-scrollbar-track {
|
|
22
|
+
background: var(--pa-main-bg);
|
|
23
|
+
border-radius: var(--pa-border-radius-sm);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
*::-webkit-scrollbar-thumb {
|
|
27
|
+
background: var(--pa-border-color);
|
|
28
|
+
border-radius: var(--pa-border-radius-sm);
|
|
29
|
+
border: $border-width-base solid var(--pa-main-bg);
|
|
30
|
+
|
|
31
|
+
&:hover {
|
|
32
|
+
background: var(--pa-accent);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
&:active {
|
|
36
|
+
background: var(--pa-accent-hover);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
*::-webkit-scrollbar-corner {
|
|
41
|
+
background: var(--pa-main-bg);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Firefox */
|
|
45
|
+
* {
|
|
46
|
+
scrollbar-width: thin;
|
|
47
|
+
scrollbar-color: var(--pa-border-color) var(--pa-main-bg);
|
|
48
|
+
}
|