@keenmate/pure-css 1.0.0-rc01 → 1.0.0-rc03
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 +54 -0
- package/README.md +18 -23
- package/dist/css/base.css +5 -5
- package/dist/css/pure-css.css +133 -5
- package/dist/css/reboot.css +94 -0
- package/dist/css/scrollbars.css +32 -0
- package/package.json +6 -2
- package/src/scss/_base-css-variables.scss +6 -6
- package/src/scss/pure-css.scss +6 -2
- package/src/scss/reboot.scss +134 -0
- package/src/scss/scrollbars.scss +48 -0
- package/src/scss/variables/_colors.scss +6 -6
- package/src/scss/variables/_layout.scss +2 -5
- package/src/scss/variables/_system.scss +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,60 @@
|
|
|
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-rc03] — 2026-08-21 [PUBLISHED]
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- **BREAKING — renamed the top-bar region tokens from `header` to `navbar`.** The
|
|
11
|
+
foundation's top-region tokens named the bar as a *component block* rather than a
|
|
12
|
+
layout region, which read as misleading once pure-admin's navbar component dropped its
|
|
13
|
+
legacy `pa-header__*` block naming. Renamed:
|
|
14
|
+
- SCSS variables: `$header-height` → `$navbar-height`, `$header-bg` → `$navbar-bg`,
|
|
15
|
+
`$header-border-color` → `$navbar-border-color`, `$header-text` → `$navbar-text`,
|
|
16
|
+
`$header-text-secondary` → `$navbar-text-secondary`,
|
|
17
|
+
`$header-profile-name-color` → `$navbar-profile-name-color`,
|
|
18
|
+
`$z-index-header` → `$z-index-navbar`.
|
|
19
|
+
- CSS variables: `--pa-header-bg` → `--pa-navbar-bg`,
|
|
20
|
+
`--pa-header-border-color` → `--pa-navbar-border-color`,
|
|
21
|
+
`--pa-header-text` → `--pa-navbar-text`,
|
|
22
|
+
`--pa-header-text-secondary` → `--pa-navbar-text-secondary`,
|
|
23
|
+
`--pa-header-profile-name-color` → `--pa-navbar-profile-name-color`.
|
|
24
|
+
- `$footer-height` still mirrors the bar height (now `$navbar-height`); component-header
|
|
25
|
+
tokens (`$card-header-*`, `$table-header-*`) are unaffected.
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
|
|
29
|
+
- **Dead `$header-brand-padding-left` variable.** Superseded by the navbar's flex `gap`;
|
|
30
|
+
no live rule consumed it (only a stale comment referenced it).
|
|
31
|
+
|
|
32
|
+
## [1.0.0-rc02] — 2026-08-05 [PUBLISHED]
|
|
33
|
+
|
|
34
|
+
### Added
|
|
35
|
+
|
|
36
|
+
- **Reboot layer (`reboot.scss`) — the reset the foundation always assumed.** Emits
|
|
37
|
+
`html { font-size: 10px }` (the 10px rem base every pure-css rem value is authored
|
|
38
|
+
against — `$font-size-base: 1.6rem` is 16px *only* at a 10px root), a `box-sizing:
|
|
39
|
+
border-box` reset, neutral base styling for standard elements (headings, paragraphs,
|
|
40
|
+
links, lists, blockquotes, `hr`, `figure`), the `body` font/colour/background, and the
|
|
41
|
+
`button/input/select/textarea/label { font: inherit }` reset. Relocated from
|
|
42
|
+
pure-admin-core's `core-components/_base.scss` so it sits with the rem-scale variables
|
|
43
|
+
that depend on it. Analogous to Bootstrap's Reboot.
|
|
44
|
+
- **New `reboot.css` build artifact** + `./reboot` export, and `reboot` is now part of the
|
|
45
|
+
`pure-css.css` bundle (emitted before grid/utilities).
|
|
46
|
+
- **Themed scrollbars (`scrollbars.scss`).** The global `*::-webkit-scrollbar` + Firefox
|
|
47
|
+
`scrollbar-width`/`scrollbar-color` styling (thin scrollbars coloured from the `--pa-*`
|
|
48
|
+
cascade), relocated from pure-admin-core's `core-components/_scrollbars.scss`. Global browser
|
|
49
|
+
chrome belongs with the foundation's consistent-appearance promise, so a standalone pure-css
|
|
50
|
+
page gets the same themed scrollbars as a full pure-admin app instead of native ones. Part of
|
|
51
|
+
the `pure-css.css` bundle, plus a standalone `scrollbars.css` artifact + `./scrollbars` export.
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- **Standalone consumers no longer render 1.6× too large.** Before, the 10px base lived
|
|
56
|
+
only in pure-admin-core, so a page linking `pure-css.css` (or `base.css`) on its own
|
|
57
|
+
inherited the browser's 16px root and every rem was 1.6× oversized. The bundle now ships
|
|
58
|
+
the 10px base itself, so the sizing scale is correct out of the box.
|
|
59
|
+
|
|
6
60
|
## [1.0.0-rc01] — 2026-08-04
|
|
7
61
|
|
|
8
62
|
Initial extraction of the CSS foundation out of `@keenmate/pure-admin-core`.
|
package/README.md
CHANGED
|
@@ -4,29 +4,24 @@ 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-
|
|
8
|
-
|
|
9
|
-
- **
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
(
|
|
23
|
-
pure-admin
|
|
24
|
-
|
|
25
|
-
as the margin/padding helpers — the one spacing family core lacked.
|
|
26
|
-
- **Self-sufficient border/rounded utilities.** `.border` / `.rounded` consume
|
|
27
|
-
the emitted `--pa-border-*` variables, so `base.css` + `utilities.css` render
|
|
28
|
-
correct borders and radii standalone — no host stylesheet required.
|
|
29
|
-
- **`dist/` is committed** — vendor the built CSS with no Sass toolchain.
|
|
7
|
+
## What's New in 1.0.0-rc03
|
|
8
|
+
|
|
9
|
+
- **Theming contract — top-bar region tokens renamed from `header` to `navbar` (BREAKING).** The foundation's top-region tokens named the bar as a *component block* (`header`) rather than the layout region it actually is, which read as misleading once pure-admin's navbar component dropped its legacy `pa-header__*` block naming. Every top-bar token is renamed on both sides of the cascade: the `$header-*` SCSS source variables (`$header-height` → `$navbar-height`, `$header-bg` → `$navbar-bg`, `$header-border-color`, `$header-text`, `$header-text-secondary`, `$header-profile-name-color`, and `$z-index-header` → `$z-index-navbar`) and the emitted `--pa-header-*` custom properties (`--pa-navbar-bg`, `--pa-navbar-border-color`, `--pa-navbar-text`, `--pa-navbar-text-secondary`, `--pa-navbar-profile-name-color`). Consumers reading the old names must update — `$footer-height` still mirrors the bar height (now `$navbar-height`), and the component-header tokens (`$card-header-*`, `$table-header-*`) are deliberately untouched since those *are* component blocks.
|
|
10
|
+
- **Removed the dead `$header-brand-padding-left` variable.** It was superseded by the navbar's flex `gap`; no live rule consumed it — only a stale comment still referenced it — so it's gone from the source of truth.
|
|
11
|
+
|
|
12
|
+
## What's New in 1.0.0-rc02
|
|
13
|
+
|
|
14
|
+
- **Reboot layer — the 10px base is now built in.** pure-css ships
|
|
15
|
+
`html { font-size: 10px }` (plus a `box-sizing` reset and neutral base element
|
|
16
|
+
styling) via the new `reboot.scss`, included in the `pure-css.css` bundle and
|
|
17
|
+
available standalone as `reboot.css` / the `./reboot` export. Every pure-css
|
|
18
|
+
rem value assumes a 10px root, so previously a standalone consumer rendered
|
|
19
|
+
everything 1.6× too large until they added the base themselves — now it just
|
|
20
|
+
works out of the box.
|
|
21
|
+
- **Themed scrollbars, foundation-wide.** The global thin-scrollbar styling
|
|
22
|
+
(`scrollbars.scss`, coloured from the `--pa-*` cascade) moved out of
|
|
23
|
+
pure-admin-core, so a standalone pure-css page gets the same scrollbars as a
|
|
24
|
+
full admin app. In the bundle, or cherry-pick `scrollbars.css` / `./scrollbars`.
|
|
30
25
|
|
|
31
26
|
## Why
|
|
32
27
|
|
package/dist/css/base.css
CHANGED
|
@@ -132,11 +132,11 @@
|
|
|
132
132
|
--pa-detail-row-label: rgba(255, 255, 255, 0.75);
|
|
133
133
|
--pa-detail-title: rgba(255, 255, 255, 0.55);
|
|
134
134
|
--pa-detail-shadow: 0 1.4rem 3.6rem rgba(0, 0, 0, 0.55);
|
|
135
|
-
--pa-
|
|
136
|
-
--pa-
|
|
137
|
-
--pa-
|
|
138
|
-
--pa-
|
|
139
|
-
--pa-
|
|
135
|
+
--pa-navbar-bg: #ffffff;
|
|
136
|
+
--pa-navbar-border-color: #e1e5e9;
|
|
137
|
+
--pa-navbar-text: #2c3e50;
|
|
138
|
+
--pa-navbar-text-secondary: #6c757d;
|
|
139
|
+
--pa-navbar-profile-name-color: #2c3e50;
|
|
140
140
|
--pa-sidebar-bg: #f8f9fa;
|
|
141
141
|
--pa-sidebar-text: #2c3e50;
|
|
142
142
|
--pa-sidebar-text-secondary: #6c757d;
|
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;
|
|
@@ -4667,11 +4795,11 @@
|
|
|
4667
4795
|
--pa-detail-row-label: rgba(255, 255, 255, 0.75);
|
|
4668
4796
|
--pa-detail-title: rgba(255, 255, 255, 0.55);
|
|
4669
4797
|
--pa-detail-shadow: 0 1.4rem 3.6rem rgba(0, 0, 0, 0.55);
|
|
4670
|
-
--pa-
|
|
4671
|
-
--pa-
|
|
4672
|
-
--pa-
|
|
4673
|
-
--pa-
|
|
4674
|
-
--pa-
|
|
4798
|
+
--pa-navbar-bg: #ffffff;
|
|
4799
|
+
--pa-navbar-border-color: #e1e5e9;
|
|
4800
|
+
--pa-navbar-text: #2c3e50;
|
|
4801
|
+
--pa-navbar-text-secondary: #6c757d;
|
|
4802
|
+
--pa-navbar-profile-name-color: #2c3e50;
|
|
4675
4803
|
--pa-sidebar-bg: #f8f9fa;
|
|
4676
4804
|
--pa-sidebar-text: #2c3e50;
|
|
4677
4805
|
--pa-sidebar-text-secondary: #6c757d;
|
|
@@ -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-rc03",
|
|
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
|
},
|
|
@@ -378,12 +378,12 @@
|
|
|
378
378
|
// LAYOUT COLORS
|
|
379
379
|
// =========================================================================
|
|
380
380
|
|
|
381
|
-
//
|
|
382
|
-
--pa-
|
|
383
|
-
--pa-
|
|
384
|
-
--pa-
|
|
385
|
-
--pa-
|
|
386
|
-
--pa-
|
|
381
|
+
// Navbar
|
|
382
|
+
--pa-navbar-bg: #{$navbar-bg};
|
|
383
|
+
--pa-navbar-border-color: #{$navbar-border-color};
|
|
384
|
+
--pa-navbar-text: #{$navbar-text};
|
|
385
|
+
--pa-navbar-text-secondary: #{$navbar-text-secondary};
|
|
386
|
+
--pa-navbar-profile-name-color: #{$navbar-profile-name-color};
|
|
387
387
|
|
|
388
388
|
// Sidebar
|
|
389
389
|
--pa-sidebar-bg: #{$sidebar-bg};
|
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
|
+
}
|
|
@@ -19,12 +19,12 @@ $text-color-1: $base-text-color-1 !default;
|
|
|
19
19
|
$text-color-2: $base-text-color-2 !default;
|
|
20
20
|
$border-color: $base-border-color !default;
|
|
21
21
|
|
|
22
|
-
//
|
|
23
|
-
$
|
|
24
|
-
$
|
|
25
|
-
$
|
|
26
|
-
$
|
|
27
|
-
$
|
|
22
|
+
// Navbar colors
|
|
23
|
+
$navbar-bg: $base-main-bg !default;
|
|
24
|
+
$navbar-border-color: $base-border-color !default;
|
|
25
|
+
$navbar-text: $base-text-color-1 !default;
|
|
26
|
+
$navbar-text-secondary: $base-text-color-2 !default;
|
|
27
|
+
$navbar-profile-name-color: $base-text-color-1 !default;
|
|
28
28
|
|
|
29
29
|
// Sidebar colors
|
|
30
30
|
$sidebar-bg: $base-page-bg !default;
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
// NOTE: 10px rem base - all rem values are now in 10px units (1rem = 10px)
|
|
7
7
|
|
|
8
8
|
// Layout dimensions
|
|
9
|
-
$
|
|
10
|
-
$footer-height: $
|
|
9
|
+
$navbar-height: 4.8rem !default; // 48px (was 3rem)
|
|
10
|
+
$footer-height: $navbar-height !default; // Same as navbar
|
|
11
11
|
$sidebar-width: 28.8rem !default; // 288px (was 18rem)
|
|
12
12
|
$sidebar-max-width: 40rem !default; // 400px (was 25rem)
|
|
13
13
|
$sidebar-collapsed-width: 6.4rem !default; // 64px (was 4rem)
|
|
@@ -33,9 +33,6 @@ $burger-bar-spacing: 4px !default;
|
|
|
33
33
|
$burger-transform-offset: 3px !default;
|
|
34
34
|
$burger-menu-margin-left: 0.3rem !default; // ~3px (was 0.2rem)
|
|
35
35
|
|
|
36
|
-
// Header brand
|
|
37
|
-
$header-brand-padding-left: 2.1rem !default; // ~21px (was 1.3rem)
|
|
38
|
-
|
|
39
36
|
// Responsive breakpoints
|
|
40
37
|
$mobile-breakpoint: 768px !default;
|
|
41
38
|
$tablet-breakpoint: 1024px !default;
|
|
@@ -16,8 +16,8 @@ $z-index-base: 0 !default;
|
|
|
16
16
|
$z-index-content: 1000 !default;
|
|
17
17
|
$z-index-sidebar: 2000 !default;
|
|
18
18
|
$z-index-sidebar-fixed: 3000 !default;
|
|
19
|
-
$z-index-detail-panel-card: 3500 !default; // Card overlay detail panel (below
|
|
20
|
-
$z-index-
|
|
19
|
+
$z-index-detail-panel-card: 3500 !default; // Card overlay detail panel (below navbar)
|
|
20
|
+
$z-index-navbar: 4000 !default;
|
|
21
21
|
$z-index-profile-panel: 5000 !default;
|
|
22
22
|
$z-index-modal-backdrop: 6000 !default;
|
|
23
23
|
$z-index-modal: 7000 !default;
|