actual-css 0.1.0
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 +11 -0
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/dist/actual.css +4929 -0
- package/dist/actual.js +3 -0
- package/dist/actual.js.map +31 -0
- package/dist/actual.min.css +1 -0
- package/docs/README.md +26 -0
- package/docs/components.md +860 -0
- package/docs/design-notes/accessibility-decisions.md +32 -0
- package/docs/design-notes/browser-support.md +93 -0
- package/docs/design-notes/cascade-layer.md +52 -0
- package/docs/design-notes/css-anchor.md +33 -0
- package/docs/design-notes/naming.md +37 -0
- package/docs/design-notes/previous-work.md +5 -0
- package/docs/design-notes/references.md +324 -0
- package/docs/forms.md +1265 -0
- package/docs/javascript.md +426 -0
- package/docs/layout.md +480 -0
- package/docs/mental-model.md +73 -0
- package/docs/patterns.md +415 -0
- package/docs/reserved.md +7 -0
- package/docs/tokens.md +455 -0
- package/docs/typography.md +159 -0
- package/docs/ui.md +937 -0
- package/docs/utilities.md +384 -0
- package/llms.txt +17 -0
- package/package.json +101 -0
- package/src/css/actual.css +17 -0
- package/src/css/actual.full.css +2 -0
- package/src/css/actual.layer.css +3 -0
- package/src/css/base.css +70 -0
- package/src/css/components/accordion.css +97 -0
- package/src/css/components/actions.css +21 -0
- package/src/css/components/alert.css +137 -0
- package/src/css/components/avatar.css +199 -0
- package/src/css/components/badge.css +143 -0
- package/src/css/components/breadcrumb.css +56 -0
- package/src/css/components/busy.css +44 -0
- package/src/css/components/button.css +216 -0
- package/src/css/components/card.css +140 -0
- package/src/css/components/drawer.css +122 -0
- package/src/css/components/flyout.css +243 -0
- package/src/css/components/index.css +41 -0
- package/src/css/components/join.css +106 -0
- package/src/css/components/key.css +25 -0
- package/src/css/components/meter.css +81 -0
- package/src/css/components/modal.css +162 -0
- package/src/css/components/navbar.css +98 -0
- package/src/css/components/overline.css +49 -0
- package/src/css/components/pagination.css +30 -0
- package/src/css/components/progress.css +126 -0
- package/src/css/components/scrollspy.css +27 -0
- package/src/css/components/skeleton.css +67 -0
- package/src/css/components/spinner.css +60 -0
- package/src/css/components/status-bar.css +82 -0
- package/src/css/components/surface.css +48 -0
- package/src/css/components/tab.css +128 -0
- package/src/css/components/table.css +64 -0
- package/src/css/components/tooltip.css +107 -0
- package/src/css/dialog-fallback.css +56 -0
- package/src/css/focus.css +13 -0
- package/src/css/forms/choice-card.css +158 -0
- package/src/css/forms/choice.css +196 -0
- package/src/css/forms/control.css +106 -0
- package/src/css/forms/custom-select.css +93 -0
- package/src/css/forms/form-actions.css +43 -0
- package/src/css/forms/form.css +57 -0
- package/src/css/forms/index.css +15 -0
- package/src/css/forms/input-icon.css +36 -0
- package/src/css/forms/native.css +68 -0
- package/src/css/forms/select.css +36 -0
- package/src/css/forms/switch.css +127 -0
- package/src/css/forms/validation.css +63 -0
- package/src/css/grid.css +95 -0
- package/src/css/intents.css +33 -0
- package/src/css/layout.css +80 -0
- package/src/css/optional/index.css +5 -0
- package/src/css/optional/layout-extra.css +55 -0
- package/src/css/optional/scroll-snap.css +51 -0
- package/src/css/optional/scroller.css +51 -0
- package/src/css/optional/typography-fluid.css +48 -0
- package/src/css/optional/utilities-extra.css +289 -0
- package/src/css/print.css +47 -0
- package/src/css/prose.css +187 -0
- package/src/css/reset.css +56 -0
- package/src/css/theme.css +186 -0
- package/src/css/themes/corporate.css +60 -0
- package/src/css/themes/cyberpunk.css +60 -0
- package/src/css/themes/dark.css +32 -0
- package/src/css/themes/dim.css +33 -0
- package/src/css/themes/edge.css +143 -0
- package/src/css/themes/forest.css +65 -0
- package/src/css/themes/gradient.css +97 -0
- package/src/css/themes/index.css +43 -0
- package/src/css/themes/lavender.css +66 -0
- package/src/css/themes/mono.css +60 -0
- package/src/css/themes/neon.css +66 -0
- package/src/css/themes/ocean.css +60 -0
- package/src/css/themes/petrol.css +64 -0
- package/src/css/themes/spruce.css +64 -0
- package/src/css/themes/square.css +68 -0
- package/src/css/themes/sunset.css +66 -0
- package/src/css/tokens.css +122 -0
- package/src/css/utilities.css +162 -0
- package/src/css/variants.css +118 -0
- package/src/js/command.js +165 -0
- package/src/js/context-menu.js +291 -0
- package/src/js/dialog-fallback.js +163 -0
- package/src/js/dialog.js +503 -0
- package/src/js/enhance.js +208 -0
- package/src/js/events.js +22 -0
- package/src/js/filter.js +122 -0
- package/src/js/floating.js +462 -0
- package/src/js/flyout.js +187 -0
- package/src/js/focus.js +35 -0
- package/src/js/index.js +26 -0
- package/src/js/input.js +47 -0
- package/src/js/keys.js +30 -0
- package/src/js/mask.js +184 -0
- package/src/js/menu.js +88 -0
- package/src/js/password.js +98 -0
- package/src/js/scrollspy.js +121 -0
- package/src/js/selectors.js +59 -0
- package/src/js/status.js +158 -0
- package/src/js/surface.js +358 -0
- package/src/js/tab.js +173 -0
- package/src/js/tooltip.js +374 -0
- package/src/js/validation.js +419 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* Opt-in theme bundle. Importing this file pulls in every theme below, each
|
|
2
|
+
* gated by [data-theme="…"]. The light baseline is :root in src/css/theme.css —
|
|
3
|
+
* there is no light.css here.
|
|
4
|
+
*
|
|
5
|
+
* The themes are illustrative: each one demonstrates a different set of knobs
|
|
6
|
+
* the token contract exposes, beyond recoloring.
|
|
7
|
+
*
|
|
8
|
+
* dark — canonical dark (single block, color-scheme: dark only)
|
|
9
|
+
* dim — dark variant with lifted surface tones
|
|
10
|
+
* corporate — reference paired light/dark recolor via light-dark()
|
|
11
|
+
* forest — paired recolor + scaled-up radius tokens
|
|
12
|
+
* ocean — reference paired recolor
|
|
13
|
+
* spruce — deep spruce-green primary + copper secondary
|
|
14
|
+
* petrol — desaturated petrol-blue primary + apricot secondary
|
|
15
|
+
* sunset — paired recolor + selection and shadow-color theming
|
|
16
|
+
* lavender — paired recolor + soft-variant tuning, tinted shadows
|
|
17
|
+
* mono — grayscale palette, colored status intents only
|
|
18
|
+
* square — paired recolor + full radius scale forced to 0
|
|
19
|
+
* edge — paired recolor + intent-colored button lower edge
|
|
20
|
+
* cyberpunk — light-only stress test: yellow canvas, dark-on-bright
|
|
21
|
+
* intents, 2px borders, hard offset shadows
|
|
22
|
+
* neon — dark-only + wide-gamut P3 upgrade via oklch(), glow
|
|
23
|
+
* shadows, soft-variant tuning
|
|
24
|
+
* gradient — paired recolor + Bootstrap 4 style gradient on solid buttons
|
|
25
|
+
* via component-local button tokens
|
|
26
|
+
*
|
|
27
|
+
* Single-block themes (dark, dim, cyberpunk, neon) pin one color-scheme and
|
|
28
|
+
* cannot adapt to prefers-color-scheme; the paired ones follow the OS. */
|
|
29
|
+
@import "./dark.css";
|
|
30
|
+
@import "./dim.css";
|
|
31
|
+
@import "./corporate.css";
|
|
32
|
+
@import "./forest.css";
|
|
33
|
+
@import "./ocean.css";
|
|
34
|
+
@import "./spruce.css";
|
|
35
|
+
@import "./petrol.css";
|
|
36
|
+
@import "./sunset.css";
|
|
37
|
+
@import "./lavender.css";
|
|
38
|
+
@import "./mono.css";
|
|
39
|
+
@import "./square.css";
|
|
40
|
+
@import "./edge.css";
|
|
41
|
+
@import "./cyberpunk.css";
|
|
42
|
+
@import "./neon.css";
|
|
43
|
+
@import "./gradient.css";
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
[data-theme="lavender"] {
|
|
2
|
+
color-scheme: light dark;
|
|
3
|
+
|
|
4
|
+
--primary: hsl(258 70% 58%);
|
|
5
|
+
--primary-fg: white;
|
|
6
|
+
--secondary: hsl(305 45% 48%);
|
|
7
|
+
--secondary-fg: white;
|
|
8
|
+
--success: hsl(150 50% 33%);
|
|
9
|
+
--success-fg: white;
|
|
10
|
+
--warning: hsl(42 90% 52%);
|
|
11
|
+
--warning-fg: hsl(35 35% 12%);
|
|
12
|
+
--danger: hsl(350 68% 52%);
|
|
13
|
+
--danger-fg: white;
|
|
14
|
+
--neutral: hsl(260 10% 42%);
|
|
15
|
+
--neutral-fg: white;
|
|
16
|
+
|
|
17
|
+
--surface: hsl(260 45% 98%);
|
|
18
|
+
--surface-raised: hsl(0 0% 100%);
|
|
19
|
+
--surface-subtle: hsl(260 35% 94%);
|
|
20
|
+
--surface-solid: hsl(260 30% 18%);
|
|
21
|
+
|
|
22
|
+
--text: hsl(260 28% 15%);
|
|
23
|
+
--text-muted: hsl(260 12% 43%);
|
|
24
|
+
--text-subtle: hsl(260 10% 57%);
|
|
25
|
+
|
|
26
|
+
--border: hsl(260 28% 85%);
|
|
27
|
+
--focus: var(--primary);
|
|
28
|
+
--focus-ring: hsl(258 70% 58% / 0.22);
|
|
29
|
+
|
|
30
|
+
/* Pastel tuning — demonstrates the soft-variant knobs (paler tints, gentler
|
|
31
|
+
hovers) and violet-tinted shadows. */
|
|
32
|
+
--soft-bg-mix: 92%;
|
|
33
|
+
--soft-hover-alpha: 8%;
|
|
34
|
+
--shadow-color: hsl(260 45% 20%);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@supports (color: light-dark(red, blue)) {
|
|
38
|
+
[data-theme="lavender"] {
|
|
39
|
+
--primary: light-dark(hsl(258 70% 58%), hsl(258 75% 80%));
|
|
40
|
+
--primary-fg: light-dark(white, hsl(258 30% 12%));
|
|
41
|
+
--secondary: light-dark(hsl(305 45% 48%), hsl(305 53% 80%));
|
|
42
|
+
--secondary-fg: light-dark(white, hsl(305 30% 12%));
|
|
43
|
+
--success: light-dark(hsl(150 50% 33%), hsl(150 58% 80%));
|
|
44
|
+
--success-fg: light-dark(white, hsl(150 30% 12%));
|
|
45
|
+
--warning: light-dark(hsl(42 90% 52%), hsl(42 75% 80%));
|
|
46
|
+
--warning-fg: light-dark(hsl(35 35% 12%), hsl(42 30% 12%));
|
|
47
|
+
--danger: light-dark(hsl(350 68% 52%), hsl(350 75% 80%));
|
|
48
|
+
--danger-fg: light-dark(white, hsl(350 30% 12%));
|
|
49
|
+
--neutral: light-dark(hsl(260 10% 42%), hsl(260 18% 80%));
|
|
50
|
+
--neutral-fg: light-dark(white, hsl(260 30% 12%));
|
|
51
|
+
|
|
52
|
+
--surface: light-dark(hsl(260 45% 98%), hsl(260 18% 8%));
|
|
53
|
+
--surface-raised: light-dark(hsl(0 0% 100%), hsl(260 16% 11%));
|
|
54
|
+
--surface-subtle: light-dark(hsl(260 35% 94%), hsl(260 14% 16%));
|
|
55
|
+
--surface-solid: light-dark(hsl(260 30% 18%), hsl(0 0% 96%));
|
|
56
|
+
|
|
57
|
+
--text: light-dark(hsl(260 28% 15%), hsl(0 0% 96%));
|
|
58
|
+
--text-muted: light-dark(hsl(260 12% 43%), hsl(260 8% 68%));
|
|
59
|
+
--text-subtle: light-dark(hsl(260 10% 57%), hsl(260 7% 55%));
|
|
60
|
+
|
|
61
|
+
--border: light-dark(hsl(260 28% 85%), hsl(260 12% 24%));
|
|
62
|
+
--focus-ring: light-dark(hsl(258 70% 58% / 0.22), hsl(258 75% 80% / 0.28));
|
|
63
|
+
--hover-overlay: light-dark(hsl(220 30% 10% / 0.04), hsl(0 0% 100% / 0.06));
|
|
64
|
+
--shadow-color: light-dark(hsl(260 45% 20%), hsl(260 40% 2%));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
[data-theme="mono"] {
|
|
2
|
+
color-scheme: light dark;
|
|
3
|
+
|
|
4
|
+
--primary: hsl(220 8% 18%);
|
|
5
|
+
--primary-fg: white;
|
|
6
|
+
--secondary: hsl(220 7% 34%);
|
|
7
|
+
--secondary-fg: white;
|
|
8
|
+
--success: hsl(145 42% 32%);
|
|
9
|
+
--success-fg: white;
|
|
10
|
+
--warning: hsl(40 70% 44%);
|
|
11
|
+
--warning-fg: hsl(35 35% 10%);
|
|
12
|
+
--danger: hsl(0 56% 46%);
|
|
13
|
+
--danger-fg: white;
|
|
14
|
+
--neutral: hsl(220 6% 45%);
|
|
15
|
+
--neutral-fg: white;
|
|
16
|
+
|
|
17
|
+
--surface: hsl(0 0% 99%);
|
|
18
|
+
--surface-raised: hsl(0 0% 100%);
|
|
19
|
+
--surface-subtle: hsl(220 8% 94%);
|
|
20
|
+
--surface-solid: hsl(220 8% 15%);
|
|
21
|
+
|
|
22
|
+
--text: hsl(220 8% 12%);
|
|
23
|
+
--text-muted: hsl(220 6% 42%);
|
|
24
|
+
--text-subtle: hsl(220 5% 58%);
|
|
25
|
+
|
|
26
|
+
--border: hsl(220 8% 84%);
|
|
27
|
+
--focus: var(--primary);
|
|
28
|
+
--focus-ring: hsl(220 8% 18% / 0.22);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@supports (color: light-dark(red, blue)) {
|
|
32
|
+
[data-theme="mono"] {
|
|
33
|
+
--primary: light-dark(hsl(220 8% 18%), hsl(220 16% 80%));
|
|
34
|
+
--primary-fg: light-dark(white, hsl(220 30% 12%));
|
|
35
|
+
--secondary: light-dark(hsl(220 7% 34%), hsl(220 15% 80%));
|
|
36
|
+
--secondary-fg: light-dark(white, hsl(220 30% 12%));
|
|
37
|
+
--success: light-dark(hsl(145 42% 32%), hsl(145 50% 80%));
|
|
38
|
+
--success-fg: light-dark(white, hsl(145 30% 12%));
|
|
39
|
+
--warning: light-dark(hsl(40 70% 44%), hsl(40 75% 80%));
|
|
40
|
+
--warning-fg: light-dark(hsl(35 35% 10%), hsl(40 30% 12%));
|
|
41
|
+
--danger: light-dark(hsl(0 56% 46%), hsl(0 64% 80%));
|
|
42
|
+
--danger-fg: light-dark(white, hsl(0 30% 12%));
|
|
43
|
+
--neutral: light-dark(hsl(220 6% 45%), hsl(220 14% 80%));
|
|
44
|
+
--neutral-fg: light-dark(white, hsl(220 30% 12%));
|
|
45
|
+
|
|
46
|
+
--surface: light-dark(hsl(0 0% 99%), hsl(0 0% 8%));
|
|
47
|
+
--surface-raised: light-dark(hsl(0 0% 100%), hsl(0 0% 11%));
|
|
48
|
+
--surface-subtle: light-dark(hsl(220 8% 94%), hsl(0 0% 16%));
|
|
49
|
+
--surface-solid: light-dark(hsl(220 8% 15%), hsl(0 0% 96%));
|
|
50
|
+
|
|
51
|
+
--text: light-dark(hsl(220 8% 12%), hsl(0 0% 96%));
|
|
52
|
+
--text-muted: light-dark(hsl(220 6% 42%), hsl(0 0% 68%));
|
|
53
|
+
--text-subtle: light-dark(hsl(220 5% 58%), hsl(0 0% 55%));
|
|
54
|
+
|
|
55
|
+
--border: light-dark(hsl(220 8% 84%), hsl(0 0% 24%));
|
|
56
|
+
--focus-ring: light-dark(hsl(220 8% 18% / 0.22), hsl(220 16% 80% / 0.28));
|
|
57
|
+
--hover-overlay: light-dark(hsl(220 30% 10% / 0.04), hsl(0 0% 100% / 0.06));
|
|
58
|
+
--shadow-color: light-dark(hsl(220 30% 10%), hsl(0 0% 0%));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* Neon — dark-only theme (single block, color-scheme: dark, same shape as
|
|
2
|
+
* dark.css) that demonstrates wide-gamut progressive enhancement. The baseline
|
|
3
|
+
* block uses sRGB-safe hsl() and works everywhere dark.css works; on P3
|
|
4
|
+
* displays with oklch() support the intents are re-declared with chroma beyond
|
|
5
|
+
* sRGB. This is the pattern for shipping colors sRGB cannot express without
|
|
6
|
+
* breaking older screens or browsers. Also demonstrates the soft-variant
|
|
7
|
+
* tuning knobs and glow shadows on popovers. */
|
|
8
|
+
[data-theme="neon"] {
|
|
9
|
+
color-scheme: dark;
|
|
10
|
+
|
|
11
|
+
/* Electric intents over near-black: bright hues carry dark ink so solid
|
|
12
|
+
chips read as lit signs rather than white-on-color buttons. */
|
|
13
|
+
--primary: hsl(315 95% 62%);
|
|
14
|
+
--primary-fg: hsl(315 100% 8%);
|
|
15
|
+
--secondary: hsl(182 100% 46%);
|
|
16
|
+
--secondary-fg: hsl(182 100% 7%);
|
|
17
|
+
--success: hsl(135 85% 52%);
|
|
18
|
+
--success-fg: hsl(135 100% 6%);
|
|
19
|
+
--warning: hsl(55 95% 55%);
|
|
20
|
+
--warning-fg: hsl(55 100% 7%);
|
|
21
|
+
--danger: hsl(350 100% 64%);
|
|
22
|
+
--danger-fg: hsl(350 100% 8%);
|
|
23
|
+
--neutral: hsl(260 12% 76%);
|
|
24
|
+
--neutral-fg: hsl(260 25% 8%);
|
|
25
|
+
|
|
26
|
+
--surface: hsl(260 25% 6%);
|
|
27
|
+
--surface-raised: hsl(260 22% 9%);
|
|
28
|
+
--surface-subtle: hsl(260 20% 13%);
|
|
29
|
+
--surface-solid: hsl(0 0% 96%);
|
|
30
|
+
|
|
31
|
+
--text: hsl(0 0% 97%);
|
|
32
|
+
--text-muted: hsl(260 12% 70%);
|
|
33
|
+
--text-subtle: hsl(260 8% 55%);
|
|
34
|
+
|
|
35
|
+
--border: hsl(260 18% 24%);
|
|
36
|
+
--focus: var(--secondary);
|
|
37
|
+
--focus-ring: hsl(182 100% 46% / 0.35);
|
|
38
|
+
--hover-overlay: hsl(0 0% 100% / 0.07);
|
|
39
|
+
--shadow-color: hsl(260 60% 3%);
|
|
40
|
+
|
|
41
|
+
/* Neon tints: stronger soft surfaces and hovers than the default recipe,
|
|
42
|
+
so tinted chips glow against the near-black canvas. */
|
|
43
|
+
--soft-bg-mix: 80%;
|
|
44
|
+
--soft-border-mix: 45%;
|
|
45
|
+
--soft-hover-alpha: 20%;
|
|
46
|
+
|
|
47
|
+
/* Popovers and tooltips glow instead of dropping a shadow. */
|
|
48
|
+
--shadow-popout: 0 0 1rem hsl(315 95% 62% / 0.25);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/* Wide-gamut upgrade: chroma beyond sRGB on P3-capable displays. Both gates
|
|
52
|
+
are required — a P3 screen driven by an older browser keeps the hsl()
|
|
53
|
+
baseline above; -fg inks stay unchanged (near-black is gamut-safe). */
|
|
54
|
+
@media (color-gamut: p3) {
|
|
55
|
+
@supports (color: oklch(0% 0 0)) {
|
|
56
|
+
[data-theme="neon"] {
|
|
57
|
+
--primary: oklch(70% 0.32 340);
|
|
58
|
+
--secondary: oklch(85% 0.17 195);
|
|
59
|
+
--success: oklch(85% 0.28 148);
|
|
60
|
+
--warning: oklch(92% 0.2 105);
|
|
61
|
+
--danger: oklch(68% 0.26 15);
|
|
62
|
+
--focus-ring: oklch(85% 0.17 195 / 0.35);
|
|
63
|
+
--shadow-popout: 0 0 1rem oklch(70% 0.32 340 / 0.3);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
[data-theme="ocean"] {
|
|
2
|
+
color-scheme: light dark;
|
|
3
|
+
|
|
4
|
+
--primary: hsl(198 82% 35%);
|
|
5
|
+
--primary-fg: white;
|
|
6
|
+
--secondary: hsl(174 58% 30%);
|
|
7
|
+
--secondary-fg: white;
|
|
8
|
+
--success: hsl(160 62% 30%);
|
|
9
|
+
--success-fg: white;
|
|
10
|
+
--warning: hsl(36 90% 50%);
|
|
11
|
+
--warning-fg: hsl(35 35% 12%);
|
|
12
|
+
--danger: hsl(350 70% 52%);
|
|
13
|
+
--danger-fg: white;
|
|
14
|
+
--neutral: hsl(205 12% 38%);
|
|
15
|
+
--neutral-fg: white;
|
|
16
|
+
|
|
17
|
+
--surface: hsl(200 50% 98%);
|
|
18
|
+
--surface-raised: hsl(0 0% 100%);
|
|
19
|
+
--surface-subtle: hsl(198 42% 94%);
|
|
20
|
+
--surface-solid: hsl(204 38% 16%);
|
|
21
|
+
|
|
22
|
+
--text: hsl(205 34% 14%);
|
|
23
|
+
--text-muted: hsl(205 12% 42%);
|
|
24
|
+
--text-subtle: hsl(205 10% 56%);
|
|
25
|
+
|
|
26
|
+
--border: hsl(198 30% 84%);
|
|
27
|
+
--focus: var(--primary);
|
|
28
|
+
--focus-ring: hsl(198 82% 35% / 0.22);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@supports (color: light-dark(red, blue)) {
|
|
32
|
+
[data-theme="ocean"] {
|
|
33
|
+
--primary: light-dark(hsl(198 82% 35%), hsl(198 75% 80%));
|
|
34
|
+
--primary-fg: light-dark(white, hsl(198 30% 12%));
|
|
35
|
+
--secondary: light-dark(hsl(174 58% 30%), hsl(174 66% 80%));
|
|
36
|
+
--secondary-fg: light-dark(white, hsl(174 30% 12%));
|
|
37
|
+
--success: light-dark(hsl(160 62% 30%), hsl(160 70% 80%));
|
|
38
|
+
--success-fg: light-dark(white, hsl(160 30% 12%));
|
|
39
|
+
--warning: light-dark(hsl(36 90% 50%), hsl(36 75% 80%));
|
|
40
|
+
--warning-fg: light-dark(hsl(35 35% 12%), hsl(36 30% 12%));
|
|
41
|
+
--danger: light-dark(hsl(350 70% 52%), hsl(350 75% 80%));
|
|
42
|
+
--danger-fg: light-dark(white, hsl(350 30% 12%));
|
|
43
|
+
--neutral: light-dark(hsl(205 12% 38%), hsl(205 20% 80%));
|
|
44
|
+
--neutral-fg: light-dark(white, hsl(205 30% 12%));
|
|
45
|
+
|
|
46
|
+
--surface: light-dark(hsl(200 50% 98%), hsl(200 18% 8%));
|
|
47
|
+
--surface-raised: light-dark(hsl(0 0% 100%), hsl(200 16% 11%));
|
|
48
|
+
--surface-subtle: light-dark(hsl(198 42% 94%), hsl(200 14% 16%));
|
|
49
|
+
--surface-solid: light-dark(hsl(204 38% 16%), hsl(0 0% 96%));
|
|
50
|
+
|
|
51
|
+
--text: light-dark(hsl(205 34% 14%), hsl(0 0% 96%));
|
|
52
|
+
--text-muted: light-dark(hsl(205 12% 42%), hsl(200 8% 68%));
|
|
53
|
+
--text-subtle: light-dark(hsl(205 10% 56%), hsl(200 7% 55%));
|
|
54
|
+
|
|
55
|
+
--border: light-dark(hsl(198 30% 84%), hsl(200 12% 24%));
|
|
56
|
+
--focus-ring: light-dark(hsl(198 82% 35% / 0.22), hsl(198 75% 80% / 0.28));
|
|
57
|
+
--hover-overlay: light-dark(hsl(220 30% 10% / 0.04), hsl(0 0% 100% / 0.06));
|
|
58
|
+
--shadow-color: light-dark(hsl(220 30% 10%), hsl(0 0% 0%));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/* Petrol — desaturated petrol-blue primary with apricot secondary over cool
|
|
2
|
+
* blue-tinted neutrals. Paired light/dark via light-dark(). The most
|
|
3
|
+
* conventional of the bundled palettes: warm, highly legible, no semantic
|
|
4
|
+
* hue collisions. */
|
|
5
|
+
[data-theme="petrol"] {
|
|
6
|
+
color-scheme: light dark;
|
|
7
|
+
|
|
8
|
+
--primary: hsl(203 55% 30%);
|
|
9
|
+
--primary-fg: hsl(0 0% 98%);
|
|
10
|
+
--secondary: hsl(22 55% 47%);
|
|
11
|
+
--secondary-fg: hsl(0 0% 98%);
|
|
12
|
+
--success: hsl(155 45% 32%);
|
|
13
|
+
--success-fg: hsl(0 0% 98%);
|
|
14
|
+
--warning: hsl(38 70% 36%);
|
|
15
|
+
--warning-fg: hsl(0 0% 98%);
|
|
16
|
+
--danger: hsl(357 55% 45%);
|
|
17
|
+
--danger-fg: hsl(0 0% 98%);
|
|
18
|
+
--neutral: hsl(210 8% 43%);
|
|
19
|
+
--neutral-fg: hsl(0 0% 98%);
|
|
20
|
+
|
|
21
|
+
--surface: hsl(0 0% 100%);
|
|
22
|
+
--surface-raised: hsl(204 30% 98%);
|
|
23
|
+
--surface-subtle: hsl(204 25% 96%);
|
|
24
|
+
--surface-solid: hsl(207 25% 12%);
|
|
25
|
+
|
|
26
|
+
--text: hsl(207 25% 12%);
|
|
27
|
+
--text-muted: hsl(206 9% 42%);
|
|
28
|
+
--text-subtle: hsl(205 7% 57%);
|
|
29
|
+
|
|
30
|
+
--border: hsl(205 15% 87%);
|
|
31
|
+
--focus: var(--primary);
|
|
32
|
+
--focus-ring: hsl(203 55% 30% / 0.22);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@supports (color: light-dark(red, blue)) {
|
|
36
|
+
[data-theme="petrol"] {
|
|
37
|
+
--primary: light-dark(hsl(203 55% 30%), hsl(202 55% 72%));
|
|
38
|
+
--primary-fg: light-dark(hsl(0 0% 98%), hsl(204 40% 10%));
|
|
39
|
+
--secondary: light-dark(hsl(22 55% 47%), hsl(24 55% 70%));
|
|
40
|
+
--secondary-fg: light-dark(hsl(0 0% 98%), hsl(24 35% 11%));
|
|
41
|
+
--success: light-dark(hsl(155 45% 32%), hsl(155 40% 60%));
|
|
42
|
+
--success-fg: light-dark(hsl(0 0% 98%), hsl(155 35% 8%));
|
|
43
|
+
--warning: light-dark(hsl(38 70% 36%), hsl(40 62% 63%));
|
|
44
|
+
--warning-fg: light-dark(hsl(0 0% 98%), hsl(38 35% 10%));
|
|
45
|
+
--danger: light-dark(hsl(357 55% 45%), hsl(357 58% 70%));
|
|
46
|
+
--danger-fg: light-dark(hsl(0 0% 98%), hsl(357 35% 10%));
|
|
47
|
+
--neutral: light-dark(hsl(210 8% 43%), hsl(208 10% 71%));
|
|
48
|
+
--neutral-fg: light-dark(hsl(0 0% 98%), hsl(208 18% 10%));
|
|
49
|
+
|
|
50
|
+
--surface: light-dark(hsl(0 0% 100%), hsl(206 22% 9%));
|
|
51
|
+
--surface-raised: light-dark(hsl(204 30% 98%), hsl(206 19% 12%));
|
|
52
|
+
--surface-subtle: light-dark(hsl(204 25% 96%), hsl(206 15% 16%));
|
|
53
|
+
--surface-solid: light-dark(hsl(207 25% 12%), hsl(0 0% 96%));
|
|
54
|
+
|
|
55
|
+
--text: light-dark(hsl(207 25% 12%), hsl(205 12% 95%));
|
|
56
|
+
--text-muted: light-dark(hsl(206 9% 42%), hsl(205 8% 67%));
|
|
57
|
+
--text-subtle: light-dark(hsl(205 7% 57%), hsl(205 7% 53%));
|
|
58
|
+
|
|
59
|
+
--border: light-dark(hsl(205 15% 87%), hsl(206 12% 24%));
|
|
60
|
+
--focus-ring: light-dark(hsl(203 55% 30% / 0.22), hsl(202 55% 72% / 0.28));
|
|
61
|
+
--hover-overlay: light-dark(hsl(207 30% 10% / 0.04), hsl(0 0% 100% / 0.06));
|
|
62
|
+
--shadow-color: light-dark(hsl(207 30% 10%), hsl(0 0% 0%));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/* Spruce — deep spruce-green primary with copper secondary over sea-green
|
|
2
|
+
* tinted neutrals. Paired light/dark via light-dark(). The green primary is
|
|
3
|
+
* deliberately far from success in hue (174 vs 135) and saturation so the two
|
|
4
|
+
* never read as the same signal; keep that split when adjusting either. */
|
|
5
|
+
[data-theme="spruce"] {
|
|
6
|
+
color-scheme: light dark;
|
|
7
|
+
|
|
8
|
+
--primary: hsl(174 45% 24%);
|
|
9
|
+
--primary-fg: hsl(160 30% 97%);
|
|
10
|
+
--secondary: hsl(24 48% 42%);
|
|
11
|
+
--secondary-fg: hsl(0 0% 98%);
|
|
12
|
+
--success: hsl(135 38% 33%);
|
|
13
|
+
--success-fg: hsl(0 0% 98%);
|
|
14
|
+
--warning: hsl(42 72% 35%);
|
|
15
|
+
--warning-fg: hsl(0 0% 98%);
|
|
16
|
+
--danger: hsl(3 55% 44%);
|
|
17
|
+
--danger-fg: hsl(0 0% 98%);
|
|
18
|
+
--neutral: hsl(185 8% 40%);
|
|
19
|
+
--neutral-fg: hsl(0 0% 98%);
|
|
20
|
+
|
|
21
|
+
--surface: hsl(0 0% 100%);
|
|
22
|
+
--surface-raised: hsl(160 20% 98%);
|
|
23
|
+
--surface-subtle: hsl(168 18% 95%);
|
|
24
|
+
--surface-solid: hsl(185 25% 11%);
|
|
25
|
+
|
|
26
|
+
--text: hsl(185 25% 11%);
|
|
27
|
+
--text-muted: hsl(183 9% 40%);
|
|
28
|
+
--text-subtle: hsl(182 7% 55%);
|
|
29
|
+
|
|
30
|
+
--border: hsl(170 12% 86%);
|
|
31
|
+
--focus: var(--primary);
|
|
32
|
+
--focus-ring: hsl(174 45% 24% / 0.22);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@supports (color: light-dark(red, blue)) {
|
|
36
|
+
[data-theme="spruce"] {
|
|
37
|
+
--primary: light-dark(hsl(174 45% 24%), hsl(170 35% 66%));
|
|
38
|
+
--primary-fg: light-dark(hsl(160 30% 97%), hsl(174 40% 9%));
|
|
39
|
+
--secondary: light-dark(hsl(24 48% 42%), hsl(26 50% 70%));
|
|
40
|
+
--secondary-fg: light-dark(hsl(0 0% 98%), hsl(26 35% 11%));
|
|
41
|
+
--success: light-dark(hsl(135 38% 33%), hsl(135 35% 60%));
|
|
42
|
+
--success-fg: light-dark(hsl(0 0% 98%), hsl(135 35% 8%));
|
|
43
|
+
--warning: light-dark(hsl(42 72% 35%), hsl(44 60% 62%));
|
|
44
|
+
--warning-fg: light-dark(hsl(0 0% 98%), hsl(42 35% 10%));
|
|
45
|
+
--danger: light-dark(hsl(3 55% 44%), hsl(3 58% 69%));
|
|
46
|
+
--danger-fg: light-dark(hsl(0 0% 98%), hsl(3 35% 10%));
|
|
47
|
+
--neutral: light-dark(hsl(185 8% 40%), hsl(183 10% 70%));
|
|
48
|
+
--neutral-fg: light-dark(hsl(0 0% 98%), hsl(185 18% 10%));
|
|
49
|
+
|
|
50
|
+
--surface: light-dark(hsl(0 0% 100%), hsl(182 20% 8%));
|
|
51
|
+
--surface-raised: light-dark(hsl(160 20% 98%), hsl(182 17% 11%));
|
|
52
|
+
--surface-subtle: light-dark(hsl(168 18% 95%), hsl(182 14% 15%));
|
|
53
|
+
--surface-solid: light-dark(hsl(185 25% 11%), hsl(0 0% 96%));
|
|
54
|
+
|
|
55
|
+
--text: light-dark(hsl(185 25% 11%), hsl(175 12% 94%));
|
|
56
|
+
--text-muted: light-dark(hsl(183 9% 40%), hsl(180 8% 66%));
|
|
57
|
+
--text-subtle: light-dark(hsl(182 7% 55%), hsl(180 7% 52%));
|
|
58
|
+
|
|
59
|
+
--border: light-dark(hsl(170 12% 86%), hsl(182 12% 23%));
|
|
60
|
+
--focus-ring: light-dark(hsl(174 45% 24% / 0.22), hsl(170 35% 66% / 0.28));
|
|
61
|
+
--hover-overlay: light-dark(hsl(185 30% 10% / 0.04), hsl(0 0% 100% / 0.06));
|
|
62
|
+
--shadow-color: light-dark(hsl(185 30% 10%), hsl(0 0% 0%));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
[data-theme="square"] {
|
|
2
|
+
color-scheme: light dark;
|
|
3
|
+
|
|
4
|
+
--primary: hsl(220 90% 56%);
|
|
5
|
+
--primary-fg: white;
|
|
6
|
+
--secondary: hsl(270 60% 56%);
|
|
7
|
+
--secondary-fg: white;
|
|
8
|
+
--success: hsl(145 60% 32%);
|
|
9
|
+
--success-fg: white;
|
|
10
|
+
--warning: hsl(38 92% 50%);
|
|
11
|
+
--warning-fg: hsl(35 30% 12%);
|
|
12
|
+
--danger: hsl(0 75% 51%);
|
|
13
|
+
--danger-fg: white;
|
|
14
|
+
--neutral: hsl(220 10% 42%);
|
|
15
|
+
--neutral-fg: white;
|
|
16
|
+
|
|
17
|
+
--surface: hsl(0 0% 100%);
|
|
18
|
+
--surface-raised: hsl(0 0% 100%);
|
|
19
|
+
--surface-subtle: hsl(220 20% 96%);
|
|
20
|
+
--surface-solid: hsl(222 22% 12%);
|
|
21
|
+
|
|
22
|
+
--text: hsl(222 22% 12%);
|
|
23
|
+
--text-muted: hsl(220 10% 42%);
|
|
24
|
+
--text-subtle: hsl(220 8% 55%);
|
|
25
|
+
|
|
26
|
+
--border: hsl(220 15% 88%);
|
|
27
|
+
--focus: var(--primary);
|
|
28
|
+
--focus-ring: hsl(220 90% 56% / 0.22);
|
|
29
|
+
--hover-overlay: hsl(220 30% 10% / 0.04);
|
|
30
|
+
|
|
31
|
+
--radius: 0;
|
|
32
|
+
--radius-sm: 0;
|
|
33
|
+
--radius-lg: 0;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@supports (color: light-dark(red, blue)) {
|
|
37
|
+
/* Square — paired light/dark theme that demonstrates overriding the full
|
|
38
|
+
* --radius scale to 0 for sharp-cornered applications. The recolor is close to
|
|
39
|
+
* the default blue palette; the radius override is the point. */
|
|
40
|
+
[data-theme="square"] {
|
|
41
|
+
--primary: light-dark(hsl(220 90% 56%), hsl(220 75% 80%));
|
|
42
|
+
--primary-fg: light-dark(white, hsl(220 30% 12%));
|
|
43
|
+
--secondary: light-dark(hsl(270 60% 56%), hsl(270 68% 80%));
|
|
44
|
+
--secondary-fg: light-dark(white, hsl(270 30% 12%));
|
|
45
|
+
--success: light-dark(hsl(145 60% 32%), hsl(145 68% 80%));
|
|
46
|
+
--success-fg: light-dark(white, hsl(145 30% 12%));
|
|
47
|
+
--warning: light-dark(hsl(38 92% 50%), hsl(38 75% 80%));
|
|
48
|
+
--warning-fg: light-dark(hsl(35 30% 12%), hsl(38 30% 12%));
|
|
49
|
+
--danger: light-dark(hsl(0 75% 51%), hsl(0 75% 80%));
|
|
50
|
+
--danger-fg: light-dark(white, hsl(0 30% 12%));
|
|
51
|
+
--neutral: light-dark(hsl(220 10% 42%), hsl(220 18% 80%));
|
|
52
|
+
--neutral-fg: light-dark(white, hsl(220 30% 12%));
|
|
53
|
+
|
|
54
|
+
--surface: light-dark(hsl(0 0% 100%), hsl(222 18% 8%));
|
|
55
|
+
--surface-raised: light-dark(hsl(0 0% 100%), hsl(222 16% 11%));
|
|
56
|
+
--surface-subtle: light-dark(hsl(220 20% 96%), hsl(222 14% 16%));
|
|
57
|
+
--surface-solid: light-dark(hsl(222 22% 12%), hsl(0 0% 96%));
|
|
58
|
+
|
|
59
|
+
--text: light-dark(hsl(222 22% 12%), hsl(0 0% 96%));
|
|
60
|
+
--text-muted: light-dark(hsl(220 10% 42%), hsl(222 8% 68%));
|
|
61
|
+
--text-subtle: light-dark(hsl(220 8% 55%), hsl(222 7% 55%));
|
|
62
|
+
|
|
63
|
+
--border: light-dark(hsl(220 15% 88%), hsl(222 12% 24%));
|
|
64
|
+
--focus-ring: light-dark(hsl(220 90% 56% / 0.22), hsl(220 75% 80% / 0.28));
|
|
65
|
+
--hover-overlay: light-dark(hsl(220 30% 10% / 0.04), hsl(0 0% 100% / 0.06));
|
|
66
|
+
--shadow-color: light-dark(hsl(220 30% 10%), hsl(0 0% 0%));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
[data-theme="sunset"] {
|
|
2
|
+
color-scheme: light dark;
|
|
3
|
+
|
|
4
|
+
--primary: hsl(16 84% 43%);
|
|
5
|
+
--primary-fg: white;
|
|
6
|
+
--secondary: hsl(330 60% 52%);
|
|
7
|
+
--secondary-fg: white;
|
|
8
|
+
--success: hsl(142 52% 34%);
|
|
9
|
+
--success-fg: white;
|
|
10
|
+
--warning: hsl(42 94% 52%);
|
|
11
|
+
--warning-fg: hsl(30 35% 12%);
|
|
12
|
+
--danger: hsl(358 72% 52%);
|
|
13
|
+
--danger-fg: white;
|
|
14
|
+
--neutral: hsl(24 12% 38%);
|
|
15
|
+
--neutral-fg: white;
|
|
16
|
+
|
|
17
|
+
--surface: hsl(34 70% 97%);
|
|
18
|
+
--surface-raised: hsl(30 80% 99%);
|
|
19
|
+
--surface-subtle: hsl(28 62% 92%);
|
|
20
|
+
--surface-solid: hsl(18 34% 18%);
|
|
21
|
+
|
|
22
|
+
--text: hsl(20 34% 14%);
|
|
23
|
+
--text-muted: hsl(20 12% 42%);
|
|
24
|
+
--text-subtle: hsl(20 10% 55%);
|
|
25
|
+
|
|
26
|
+
--border: hsl(25 38% 84%);
|
|
27
|
+
--focus: var(--primary);
|
|
28
|
+
--focus-ring: hsl(16 84% 43% / 0.22);
|
|
29
|
+
|
|
30
|
+
/* Warm chrome — demonstrates selection and shadow-color theming. The
|
|
31
|
+
selection pair rides the intent tokens, so it adapts to dark for free. */
|
|
32
|
+
--selection-bg: var(--secondary);
|
|
33
|
+
--selection-fg: var(--secondary-fg);
|
|
34
|
+
--shadow-color: hsl(20 60% 12%);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@supports (color: light-dark(red, blue)) {
|
|
38
|
+
[data-theme="sunset"] {
|
|
39
|
+
--primary: light-dark(hsl(16 84% 43%), hsl(16 75% 80%));
|
|
40
|
+
--primary-fg: light-dark(white, hsl(16 30% 12%));
|
|
41
|
+
--secondary: light-dark(hsl(330 60% 52%), hsl(330 68% 80%));
|
|
42
|
+
--secondary-fg: light-dark(white, hsl(330 30% 12%));
|
|
43
|
+
--success: light-dark(hsl(142 52% 34%), hsl(142 60% 80%));
|
|
44
|
+
--success-fg: light-dark(white, hsl(142 30% 12%));
|
|
45
|
+
--warning: light-dark(hsl(42 94% 52%), hsl(42 75% 80%));
|
|
46
|
+
--warning-fg: light-dark(hsl(30 35% 12%), hsl(42 30% 12%));
|
|
47
|
+
--danger: light-dark(hsl(358 72% 52%), hsl(358 75% 80%));
|
|
48
|
+
--danger-fg: light-dark(white, hsl(358 30% 12%));
|
|
49
|
+
--neutral: light-dark(hsl(24 12% 38%), hsl(24 20% 80%));
|
|
50
|
+
--neutral-fg: light-dark(white, hsl(24 30% 12%));
|
|
51
|
+
|
|
52
|
+
--surface: light-dark(hsl(34 70% 97%), hsl(20 18% 8%));
|
|
53
|
+
--surface-raised: light-dark(hsl(30 80% 99%), hsl(20 16% 11%));
|
|
54
|
+
--surface-subtle: light-dark(hsl(28 62% 92%), hsl(20 14% 16%));
|
|
55
|
+
--surface-solid: light-dark(hsl(18 34% 18%), hsl(0 0% 96%));
|
|
56
|
+
|
|
57
|
+
--text: light-dark(hsl(20 34% 14%), hsl(0 0% 96%));
|
|
58
|
+
--text-muted: light-dark(hsl(20 12% 42%), hsl(20 8% 68%));
|
|
59
|
+
--text-subtle: light-dark(hsl(20 10% 55%), hsl(20 7% 55%));
|
|
60
|
+
|
|
61
|
+
--border: light-dark(hsl(25 38% 84%), hsl(20 12% 24%));
|
|
62
|
+
--focus-ring: light-dark(hsl(16 84% 43% / 0.22), hsl(16 75% 80% / 0.28));
|
|
63
|
+
--hover-overlay: light-dark(hsl(220 30% 10% / 0.04), hsl(0 0% 100% / 0.06));
|
|
64
|
+
--shadow-color: light-dark(hsl(20 60% 12%), hsl(20 40% 2%));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
:root {
|
|
2
|
+
/* Typography */
|
|
3
|
+
--font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
4
|
+
--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
5
|
+
--line-height: 1.5;
|
|
6
|
+
--line-height-tight: 1.25;
|
|
7
|
+
--line-height-relaxed: 1.75;
|
|
8
|
+
--font-weight: 400;
|
|
9
|
+
--font-weight-medium: 500;
|
|
10
|
+
--font-weight-strong: 650;
|
|
11
|
+
--font-weight-bold: 700;
|
|
12
|
+
|
|
13
|
+
/* Typography scale */
|
|
14
|
+
--font-size-xs: 0.8125rem;
|
|
15
|
+
--font-size-sm: 0.875rem;
|
|
16
|
+
--font-size-md: 1rem;
|
|
17
|
+
--font-size-lg: 1.125rem;
|
|
18
|
+
|
|
19
|
+
/* Spacing */
|
|
20
|
+
--gap: 0.75rem;
|
|
21
|
+
--variant-space: var(--space-4);
|
|
22
|
+
--space-1: 0.25rem;
|
|
23
|
+
--space-2: 0.5rem;
|
|
24
|
+
--space-3: 0.75rem;
|
|
25
|
+
--space-4: 1rem;
|
|
26
|
+
--space-5: 1.5rem;
|
|
27
|
+
--space-6: 2rem;
|
|
28
|
+
|
|
29
|
+
/* Shape */
|
|
30
|
+
--border-width: 1px;
|
|
31
|
+
--radius-full: 9999px;
|
|
32
|
+
--shadow: 0 0.5rem 1.5rem rgb(0 0 0 / 0.08);
|
|
33
|
+
--shadow-popout: 0 0.25rem 0.75rem rgb(0 0 0 / 0.15);
|
|
34
|
+
|
|
35
|
+
/* Motion — see reset.css for the prefers-reduced-motion hard reset.
|
|
36
|
+
--duration drives component transitions (hover/focus); the dedicated
|
|
37
|
+
animation rates below tune one-shot open/close and decorative loops. */
|
|
38
|
+
--duration: 150ms;
|
|
39
|
+
--duration-fast: 100ms;
|
|
40
|
+
--duration-slow: 200ms;
|
|
41
|
+
--duration-spin: 0.75s;
|
|
42
|
+
--duration-shimmer: 1.2s;
|
|
43
|
+
--ease: ease;
|
|
44
|
+
|
|
45
|
+
/* Focus ring — shared by every interactive component's :focus-visible */
|
|
46
|
+
--focus-outline: calc(var(--border-width) * 2) solid var(--focus);
|
|
47
|
+
--focus-outline-offset: 2px;
|
|
48
|
+
|
|
49
|
+
/* Status dot positioning — used by .avatar > .badge:empty. The offset is
|
|
50
|
+
the circle-aware inset (1 - 1/√2) / 2 ≈ 14.65%; the ring surrounds the
|
|
51
|
+
dot with the parent surface color. */
|
|
52
|
+
--indicator-offset: 14.65%;
|
|
53
|
+
--indicator-ring: var(--surface);
|
|
54
|
+
|
|
55
|
+
/* Shared backdrop — consumed by modal, drawer, and mobile flyout sheets. */
|
|
56
|
+
--backdrop-color: rgb(0 0 0);
|
|
57
|
+
--backdrop-opacity: 0.45;
|
|
58
|
+
--backdrop-fill: rgb(0 0 0 / var(--backdrop-opacity));
|
|
59
|
+
|
|
60
|
+
/* Progress / meter track height */
|
|
61
|
+
--bar-height: 0.65rem;
|
|
62
|
+
|
|
63
|
+
/* Controls — inputs and buttons share --control-size so heights always match.
|
|
64
|
+
.sm/.lg (variants.css) switch --control-size and --control-font-size. */
|
|
65
|
+
--control-size-sm: 2rem;
|
|
66
|
+
--control-size-md: 2.375rem;
|
|
67
|
+
--control-size-lg: 2.75rem;
|
|
68
|
+
--control-size: var(--control-size-md);
|
|
69
|
+
--control-pad-x: 1em;
|
|
70
|
+
--control-font-size: var(--font-size-md);
|
|
71
|
+
--disabled-opacity: 0.65;
|
|
72
|
+
|
|
73
|
+
/* Variant tuning — themes may adjust generated soft surfaces without
|
|
74
|
+
replacing the component rules. */
|
|
75
|
+
--soft-bg-mix: 88%;
|
|
76
|
+
--soft-border-mix: 65%;
|
|
77
|
+
--soft-hover-alpha: 12%;
|
|
78
|
+
|
|
79
|
+
/* Shared icons */
|
|
80
|
+
--icon-chevron-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
|
81
|
+
--icon-check-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
|
|
82
|
+
/* Native select uses background-image, which cannot inherit currentColor.
|
|
83
|
+
The stroke matches the default theme's text-subtle (hue 258 neutral). */
|
|
84
|
+
--icon-chevron-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%238a8594' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
|
|
85
|
+
|
|
86
|
+
/* Viewport size tokens — fallback vh/vw with dvh/vi enhancement.
|
|
87
|
+
Consumed by full-viewport components (app-shell, drawer, modal, flyout).
|
|
88
|
+
Custom properties keep the fallback explicit while allowing modern units
|
|
89
|
+
to enhance the same public tokens. */
|
|
90
|
+
--viewport-block: 100vh;
|
|
91
|
+
--viewport-inline: 100vw;
|
|
92
|
+
|
|
93
|
+
/* Layering */
|
|
94
|
+
--z-sticky: 10;
|
|
95
|
+
--z-menu: 20;
|
|
96
|
+
--z-tooltip: 50;
|
|
97
|
+
--z-status: 60;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
@supports (block-size: 100dvh) {
|
|
101
|
+
:root {
|
|
102
|
+
--viewport-block: 100dvh;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@supports (inline-size: 100vi) {
|
|
107
|
+
:root {
|
|
108
|
+
--viewport-inline: 100vi;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@supports (color: color-mix(in oklch, red, white)) {
|
|
113
|
+
:root {
|
|
114
|
+
--shadow: 0 0.5rem 1.5rem color-mix(in oklch, var(--shadow-color) 8%, transparent);
|
|
115
|
+
--shadow-popout: 0 0.25rem 0.75rem color-mix(in oklch, var(--shadow-color) 15%, transparent);
|
|
116
|
+
--backdrop-fill: color-mix(
|
|
117
|
+
in oklch,
|
|
118
|
+
var(--backdrop-color) calc(var(--backdrop-opacity) * 100%),
|
|
119
|
+
transparent
|
|
120
|
+
);
|
|
121
|
+
}
|
|
122
|
+
}
|