css-is-awesome 1.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/AGENTS.md +343 -0
- package/CHANGELOG.md +1036 -0
- package/CLAUDE.md +9 -0
- package/CONTRACT.md +580 -0
- package/GEMINI.md +9 -0
- package/LICENSE +21 -0
- package/LICENSE-third-party +88 -0
- package/MIGRATION.md +312 -0
- package/README.md +380 -0
- package/ROADMAP.md +714 -0
- package/THEMING.md +290 -0
- package/THREE-TIERS.md +158 -0
- package/VERSIONING.md +200 -0
- package/_index.scss +34 -0
- package/api.scss +16 -0
- package/bin/README.md +57 -0
- package/bin/cia.cjs +114 -0
- package/bin/migrate-bootstrap.cjs +427 -0
- package/bin/migrate-tailwind.cjs +832 -0
- package/css-is-awesome.instructions.md +533 -0
- package/dist/css-is-awesome.core.css +598 -0
- package/dist/css-is-awesome.core.min.css +1 -0
- package/dist/css-is-awesome.css +3733 -0
- package/dist/css-is-awesome.min.css +1 -0
- package/dist/css-is-awesome.utilities.css +2445 -0
- package/dist/css-is-awesome.utilities.min.css +1 -0
- package/dist/tokens.css +508 -0
- package/dist/tokens.d.ts +266 -0
- package/dist/tokens.min.css +1 -0
- package/figma-tokens/README.md +57 -0
- package/figma-tokens/primitives-brand.scss +121 -0
- package/figma-tokens/semantic-dark.scss +61 -0
- package/figma-tokens/semantic-light.scss +61 -0
- package/figma-tokens/tokens.json +144 -0
- package/llm.txt +183 -0
- package/mcp/server.cjs +1495 -0
- package/package.json +199 -0
- package/public/icons/README.md +278 -0
- package/public/icons/arrow-right.svg +4 -0
- package/public/icons/check.svg +4 -0
- package/public/icons/chevron-down.svg +4 -0
- package/public/icons/close.svg +4 -0
- package/public/icons/core/arrow-down.svg +13 -0
- package/public/icons/core/arrow-left.svg +13 -0
- package/public/icons/core/arrow-right.svg +13 -0
- package/public/icons/core/arrow-up.svg +13 -0
- package/public/icons/core/bell.svg +13 -0
- package/public/icons/core/calendar.svg +15 -0
- package/public/icons/core/check.svg +12 -0
- package/public/icons/core/chevron-down.svg +12 -0
- package/public/icons/core/chevron-left.svg +12 -0
- package/public/icons/core/chevron-right.svg +12 -0
- package/public/icons/core/chevron-up.svg +12 -0
- package/public/icons/core/clock.svg +13 -0
- package/public/icons/core/close.svg +13 -0
- package/public/icons/core/copy.svg +13 -0
- package/public/icons/core/download.svg +14 -0
- package/public/icons/core/edit.svg +13 -0
- package/public/icons/core/error.svg +14 -0
- package/public/icons/core/external-link.svg +14 -0
- package/public/icons/core/eye-off.svg +15 -0
- package/public/icons/core/eye.svg +13 -0
- package/public/icons/core/filter.svg +12 -0
- package/public/icons/core/heart.svg +12 -0
- package/public/icons/core/help.svg +14 -0
- package/public/icons/core/home.svg +13 -0
- package/public/icons/core/info.svg +14 -0
- package/public/icons/core/loading.svg +12 -0
- package/public/icons/core/lock.svg +13 -0
- package/public/icons/core/mail.svg +13 -0
- package/public/icons/core/menu.svg +14 -0
- package/public/icons/core/message.svg +12 -0
- package/public/icons/core/minus.svg +12 -0
- package/public/icons/core/more-horizontal.svg +14 -0
- package/public/icons/core/pause.svg +13 -0
- package/public/icons/core/play.svg +12 -0
- package/public/icons/core/plus.svg +13 -0
- package/public/icons/core/refresh.svg +15 -0
- package/public/icons/core/save.svg +14 -0
- package/public/icons/core/search.svg +13 -0
- package/public/icons/core/settings.svg +13 -0
- package/public/icons/core/share.svg +14 -0
- package/public/icons/core/sort.svg +15 -0
- package/public/icons/core/star.svg +12 -0
- package/public/icons/core/success.svg +13 -0
- package/public/icons/core/trash.svg +16 -0
- package/public/icons/core/unlock.svg +13 -0
- package/public/icons/core/upload.svg +14 -0
- package/public/icons/core/user.svg +13 -0
- package/public/icons/core/users.svg +15 -0
- package/public/icons/core/warning.svg +14 -0
- package/public/icons/download.svg +4 -0
- package/public/icons/edit.svg +4 -0
- package/public/icons/menu.svg +4 -0
- package/public/icons/search.svg +4 -0
- package/public/theme.css +4179 -0
- package/public/themes/README.md +102 -0
- package/public/themes/boilerplate/theme.css +154 -0
- package/public/themes/boilerplate-dark/theme.css +171 -0
- package/public/themes/boilerplate-light/theme.css +171 -0
- package/public/themes/cupertino/theme.css +165 -0
- package/public/themes/cupertino-dark/theme.css +200 -0
- package/public/themes/cupertino-light/theme.css +227 -0
- package/public/themes/glass/theme.css +190 -0
- package/public/themes/glass-dark/theme.css +201 -0
- package/public/themes/glass-light/theme.css +229 -0
- package/public/themes/graphite/theme.css +155 -0
- package/public/themes/graphite-dark/theme.css +223 -0
- package/public/themes/graphite-light/theme.css +191 -0
- package/public/themes/press/theme.css +189 -0
- package/public/themes/press-dark/theme.css +199 -0
- package/public/themes/press-light/theme.css +235 -0
- package/public/themes/prism/theme.css +159 -0
- package/public/themes/prism-dark/theme.css +185 -0
- package/public/themes/prism-light/theme.css +188 -0
- package/public/themes/sketchbook/theme.css +152 -0
- package/public/themes/sketchbook-dark/theme.css +194 -0
- package/public/themes/sketchbook-light/theme.css +188 -0
- package/public/themes/terminal/theme.css +159 -0
- package/public/themes/terminal-dark/theme.css +229 -0
- package/public/themes/terminal-light/theme.css +152 -0
- package/scripts/README.md +70 -0
- package/scripts/icon-contract.json +67 -0
- package/scripts/icon-validator.js +205 -0
- package/scripts/prepare-dist.mjs +65 -0
- package/scripts/theme-a11y.js +415 -0
- package/scripts/theme-contract.json +171 -0
- package/scripts/theme-validator.js +674 -0
- package/scss/README.md +55 -0
- package/scss/_animations-utilities.scss +107 -0
- package/scss/_animations.scss +248 -0
- package/scss/_app-styles.scss +15 -0
- package/scss/_generator.scss +174 -0
- package/scss/_icons.scss +475 -0
- package/scss/_index.scss +17 -0
- package/scss/_layout.scss +597 -0
- package/scss/_mixins.scss +1036 -0
- package/scss/_system.scss +291 -0
- package/scss/_utilities.scss +377 -0
- package/scss/api.scss +61 -0
- package/scss/components/_accordion.scss +72 -0
- package/scss/components/_buttons.scss +171 -0
- package/scss/components/_copy-button.scss +69 -0
- package/scss/components/_data.scss +190 -0
- package/scss/components/_feedback.scss +197 -0
- package/scss/components/_forms.scss +272 -0
- package/scss/components/_index.scss +17 -0
- package/scss/components/_navigation.scss +186 -0
- package/scss/components/_overlay.scss +259 -0
- package/scss/components/_stepper.scss +159 -0
- package/scss/components/_tabs.scss +72 -0
- package/scss/core.scss +54 -0
- package/scss/examples/_theming.scss +107 -0
- package/scss/examples/_usage.scss +317 -0
- package/scss/main.scss +64 -0
- package/scss/recipes/README.md +110 -0
- package/scss/recipes/_bare-tags.scss +232 -0
- package/scss/recipes/_recipe-template.md +119 -0
- package/scss/recipes/combobox.md +509 -0
- package/scss/recipes/dialog.md +265 -0
- package/scss/recipes/print-to-pdf.md +263 -0
- package/scss/theme/README.md +67 -0
- package/scss/theme/_brand.scss +18 -0
- package/scss/theme/_colors-dark.scss +68 -0
- package/scss/theme/_colors-light.scss +70 -0
- package/scss/theme/_components.scss +94 -0
- package/scss/theme/_icons.scss +104 -0
- package/scss/theme/_index.scss +62 -0
- package/scss/theme/_shadows.scss +65 -0
- package/scss/theme/_shape.scss +13 -0
- package/scss/theme/_typography.scss +9 -0
- package/scss/theme/registry.json +447 -0
- package/scss/themes/boilerplate-dark.scss +212 -0
- package/scss/themes/boilerplate-light.scss +209 -0
- package/scss/themes/boilerplate.scss +181 -0
- package/scss/themes/cupertino-dark.scss +238 -0
- package/scss/themes/cupertino-light.scss +266 -0
- package/scss/themes/cupertino.scss +194 -0
- package/scss/themes/glass-dark.scss +238 -0
- package/scss/themes/glass-light.scss +266 -0
- package/scss/themes/glass.scss +220 -0
- package/scss/themes/graphite-dark.scss +260 -0
- package/scss/themes/graphite-light.scss +228 -0
- package/scss/themes/graphite.scss +182 -0
- package/scss/themes/press-dark.scss +237 -0
- package/scss/themes/press-light.scss +273 -0
- package/scss/themes/press.scss +241 -0
- package/scss/themes/prism-dark.scss +217 -0
- package/scss/themes/prism-light.scss +220 -0
- package/scss/themes/prism.scss +190 -0
- package/scss/themes/sketchbook-dark.scss +231 -0
- package/scss/themes/sketchbook-light.scss +231 -0
- package/scss/themes/sketchbook.scss +178 -0
- package/scss/themes/terminal-dark.scss +267 -0
- package/scss/themes/terminal-light.scss +175 -0
- package/scss/themes/terminal.scss +185 -0
- package/scss/tokens.scss +23 -0
- package/scss/utilities-only.scss +4 -0
package/public/theme.css
ADDED
|
@@ -0,0 +1,4179 @@
|
|
|
1
|
+
/* ============================================================
|
|
2
|
+
THEME — Consolidated (css-is-awesome)
|
|
3
|
+
-----------------------------------------------------------
|
|
4
|
+
GENERATED FILE — do not edit by hand.
|
|
5
|
+
Source: scss/themes/*.scss -> public/themes/<name>/theme.css
|
|
6
|
+
Rebuild: npm run build:css:themes
|
|
7
|
+
|
|
8
|
+
One stylesheet carrying every theme. Switch with the
|
|
9
|
+
data-theme attribute:
|
|
10
|
+
|
|
11
|
+
<html data-theme="sketchbook-light">
|
|
12
|
+
|
|
13
|
+
To ship a SINGLE theme instead, use that theme's standalone
|
|
14
|
+
file (public/themes/<name>/theme.css). Those emit a bare
|
|
15
|
+
:root as well, so dropping one in as theme.css restyles the
|
|
16
|
+
page with no markup change at all.
|
|
17
|
+
|
|
18
|
+
24 themes: boilerplate, boilerplate-dark, boilerplate-light, cupertino, cupertino-dark, cupertino-light, glass, glass-dark, glass-light, graphite, graphite-dark, graphite-light, press, press-dark, press-light, prism, prism-dark, prism-light, sketchbook, sketchbook-dark, sketchbook-light, terminal, terminal-dark, terminal-light
|
|
19
|
+
============================================================ */
|
|
20
|
+
|
|
21
|
+
@import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&display=swap';
|
|
22
|
+
@import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap';
|
|
23
|
+
@import 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Caveat:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap';
|
|
24
|
+
@import 'https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,700;1,900&family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&family=Caveat:wght@400;500;600;700&display=swap';
|
|
25
|
+
@import 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap';
|
|
26
|
+
@import 'https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Caveat:wght@400;500;600;700&family=Noto+Serif+JP:wght@400;500;700&family=Noto+Sans+JP:wght@300;400;500;600&family=JetBrains+Mono:wght@400;500;700&display=swap';
|
|
27
|
+
@import 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=IBM+Plex+Mono:wght@400;500;700&display=swap';
|
|
28
|
+
|
|
29
|
+
:root[data-theme=boilerplate] {
|
|
30
|
+
color-scheme: light dark;
|
|
31
|
+
/* Surfaces */
|
|
32
|
+
--paper: light-dark(#fff, #0f172a);
|
|
33
|
+
--paper-raised: light-dark(#f2f2f2, #1e293b);
|
|
34
|
+
--paper-sunk: light-dark(#f8fafc, #020617);
|
|
35
|
+
--paper-glass: light-dark(rgba(255, 255, 255, 0.85), rgba(15, 23, 42, 0.85));
|
|
36
|
+
/* Ink — slate neutral ramp */
|
|
37
|
+
--ink: light-dark(#0f172a, #f8fafc);
|
|
38
|
+
--ink-soft: light-dark(#1e293b, #e2e8f0);
|
|
39
|
+
--ink-faint: light-dark(#475569, #94a3b8);
|
|
40
|
+
--graphite: light-dark(#0f172a, #f1f5f9);
|
|
41
|
+
--muted: light-dark(#64748b, #64748b);
|
|
42
|
+
/* Lines */
|
|
43
|
+
--guide: light-dark(#cbd5e1, #334155);
|
|
44
|
+
--guide-soft: light-dark(#e2e8f0, #1e293b);
|
|
45
|
+
--hair: light-dark(#e2e8f0, #1e293b);
|
|
46
|
+
--hair-soft: light-dark(#f1f5f9, #0f172a);
|
|
47
|
+
/* Primary accent */
|
|
48
|
+
--ai: light-dark(#2563eb, #3b82f6);
|
|
49
|
+
--ai-ink: light-dark(#1d4ed8, #60a5fa);
|
|
50
|
+
--ai-wash: light-dark(#eff6ff, #1e3a8a);
|
|
51
|
+
/* Seal — red */
|
|
52
|
+
--shu: light-dark(#dc2626, #ef4444);
|
|
53
|
+
--shu-wash: light-dark(#fef2f2, #450a0a);
|
|
54
|
+
/* Tertiary — amber */
|
|
55
|
+
--ochre: light-dark(#d97706, #f59e0b);
|
|
56
|
+
--ochre-wash: light-dark(#fffbeb, #422006);
|
|
57
|
+
/* Code surface */
|
|
58
|
+
--code-bg: light-dark(#f8fafc, #020617);
|
|
59
|
+
--code-ink: light-dark(#0f172a, #e2e8f0);
|
|
60
|
+
--code-muted: light-dark(#5E6D83, #6F8098);
|
|
61
|
+
--code-accent: light-dark(#C1410C, #fb923c);
|
|
62
|
+
--code-green: light-dark(#147C3B, #4ade80);
|
|
63
|
+
--code-blue: light-dark(#2362EB, #60a5fa);
|
|
64
|
+
/* Typography — system stacks, no @import, identical */
|
|
65
|
+
--font-display: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
66
|
+
--font-script: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
67
|
+
--font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;
|
|
68
|
+
--font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
69
|
+
--font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
|
|
70
|
+
/* Radius — identical */
|
|
71
|
+
--r-sm: 4px;
|
|
72
|
+
--r-md: 6px;
|
|
73
|
+
--r-lg: 8px;
|
|
74
|
+
/* Shadow — subtle, neutral slate / heavier on dark */
|
|
75
|
+
--shadow-sm: 0 1px 2px light-dark(rgba(15, 23, 42, 0.04), rgba(0, 0, 0, 0.30));
|
|
76
|
+
--shadow-md: 0 1px 3px light-dark(rgba(15, 23, 42, 0.06), rgba(0, 0, 0, 0.40)),
|
|
77
|
+
0 1px 2px light-dark(rgba(15, 23, 42, 0.04), rgba(0, 0, 0, 0.30));
|
|
78
|
+
--shadow-lg: 0 4px 12px -2px light-dark(rgba(15, 23, 42, 0.08), rgba(0, 0, 0, 0.55)),
|
|
79
|
+
0 2px 4px -2px light-dark(rgba(15, 23, 42, 0.05), rgba(0, 0, 0, 0.30));
|
|
80
|
+
--shadow-xl: 0 12px 24px -8px light-dark(rgba(15, 23, 42, 0.10), rgba(0, 0, 0, 0.65)),
|
|
81
|
+
0 4px 8px -4px light-dark(rgba(15, 23, 42, 0.06), rgba(0, 0, 0, 0.40));
|
|
82
|
+
--shadow-2xl: 0 24px 48px -12px light-dark(rgba(15, 23, 42, 0.15), rgba(0, 0, 0, 0.75));
|
|
83
|
+
/* Blur / glow — none */
|
|
84
|
+
--blur-sm: none;
|
|
85
|
+
--blur-md: none;
|
|
86
|
+
--blur-lg: none;
|
|
87
|
+
--glow-sm: 0 0 0 transparent;
|
|
88
|
+
--glow-md: 0 0 0 transparent;
|
|
89
|
+
--glow-lg: 0 0 0 transparent;
|
|
90
|
+
/* Motion — identical */
|
|
91
|
+
--duration-fast: 120ms;
|
|
92
|
+
--duration-normal: 180ms;
|
|
93
|
+
--duration-slow: 280ms;
|
|
94
|
+
--ease: cubic-bezier(.4, 0, .2, 1);
|
|
95
|
+
/* Semantic aliases */
|
|
96
|
+
--background-default: var(--paper);
|
|
97
|
+
--background-subtle: var(--paper-sunk);
|
|
98
|
+
--background-navbar: light-dark(var(--paper), var(--paper-raised));
|
|
99
|
+
--surface-default: var(--paper);
|
|
100
|
+
--surface-raised: var(--paper-raised);
|
|
101
|
+
--surface-sunk: var(--paper-sunk);
|
|
102
|
+
--surface-muted: var(--paper-sunk);
|
|
103
|
+
--surface-subtle: light-dark(var(--paper-sunk), var(--paper-raised));
|
|
104
|
+
--surface-emphasis: var(--ink);
|
|
105
|
+
--surface-glass: var(--paper-glass);
|
|
106
|
+
--text-primary: var(--ink);
|
|
107
|
+
--text-secondary: var(--ink-soft);
|
|
108
|
+
--text-muted: var(--ink-faint);
|
|
109
|
+
--text-tertiary: var(--muted);
|
|
110
|
+
--text-inverse: var(--paper);
|
|
111
|
+
--text-link: var(--ai);
|
|
112
|
+
--text-link-hover: var(--ai-ink);
|
|
113
|
+
--border-default: var(--hair);
|
|
114
|
+
--border-subtle: var(--hair-soft);
|
|
115
|
+
--border-emphasis: var(--guide);
|
|
116
|
+
--border-focus: var(--ai);
|
|
117
|
+
--interactive-hover: light-dark(rgba(15, 23, 42, 0.04), rgba(248, 250, 252, 0.05));
|
|
118
|
+
--interactive-active: light-dark(rgba(15, 23, 42, 0.08), rgba(248, 250, 252, 0.10));
|
|
119
|
+
--brand-primary: var(--ai);
|
|
120
|
+
--brand-primary-hover: var(--ai-ink);
|
|
121
|
+
--action-primary-default: var(--ai);
|
|
122
|
+
--action-primary-hover: var(--ai-ink);
|
|
123
|
+
--action-primary-active: var(--ai-ink);
|
|
124
|
+
--action-primary-wash: var(--ai-wash);
|
|
125
|
+
--action-secondary-default: var(--shu);
|
|
126
|
+
--action-secondary-hover: var(--shu);
|
|
127
|
+
--action-secondary-active: var(--shu);
|
|
128
|
+
--action-secondary-wash: var(--shu-wash);
|
|
129
|
+
--action-tertiary-default: var(--ochre);
|
|
130
|
+
--action-tertiary-hover: var(--ochre);
|
|
131
|
+
--action-tertiary-active: var(--ochre);
|
|
132
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
133
|
+
--feedback-info: var(--ai);
|
|
134
|
+
--feedback-success: light-dark(#16a34a, #22c55e);
|
|
135
|
+
--feedback-warning: var(--ochre);
|
|
136
|
+
--feedback-error: var(--shu);
|
|
137
|
+
--info-default: var(--ai);
|
|
138
|
+
--info-subtle: var(--ai-wash);
|
|
139
|
+
--info-text: light-dark(var(--ai-ink), #85BFFF);
|
|
140
|
+
--success-default: light-dark(#16a34a, #22c55e);
|
|
141
|
+
--success-subtle: light-dark(#f0fdf4, #14532d);
|
|
142
|
+
--success-text: light-dark(#15803d, #4ade80);
|
|
143
|
+
--warning-default: var(--ochre);
|
|
144
|
+
--warning-subtle: var(--ochre-wash);
|
|
145
|
+
--warning-text: light-dark(#b45309, #fbbf24);
|
|
146
|
+
--error-default: var(--shu);
|
|
147
|
+
--error-subtle: var(--shu-wash);
|
|
148
|
+
--error-text: light-dark(#b91c1c, #fca5a5);
|
|
149
|
+
/* Library scales — identical */
|
|
150
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
151
|
+
The numbered scale is the source of truth: every component reads
|
|
152
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
153
|
+
are emitted by the library as references to these, so they follow
|
|
154
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
155
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
156
|
+
--space-0: 0; /* flush */
|
|
157
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
158
|
+
--space-2: 0.75rem; /* control padding */
|
|
159
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
160
|
+
--space-4: 1rem; /* default rhythm */
|
|
161
|
+
--space-5: 1.5rem; /* section gap */
|
|
162
|
+
--space-6: 2rem; /* block gap */
|
|
163
|
+
--space-7: 3rem; /* major gap */
|
|
164
|
+
--space-8: 4rem; /* page section */
|
|
165
|
+
--space-9: 6rem; /* hero rhythm */
|
|
166
|
+
--radius-sm: var(--r-sm);
|
|
167
|
+
--radius-md: var(--r-md);
|
|
168
|
+
--radius-lg: var(--r-lg);
|
|
169
|
+
--radius-xl: 12px;
|
|
170
|
+
--radius-full: 9999px;
|
|
171
|
+
--font-primary: var(--font-sans);
|
|
172
|
+
--font-size-base: 1rem;
|
|
173
|
+
--line-height-normal: 1.5;
|
|
174
|
+
--font-weight-medium: 500;
|
|
175
|
+
--z-sticky: 1020;
|
|
176
|
+
--z-dropdown: 1030;
|
|
177
|
+
--z-backdrop: 1040;
|
|
178
|
+
--z-modal: 1050;
|
|
179
|
+
--z-popover: 1060;
|
|
180
|
+
--z-tooltip: 1070;
|
|
181
|
+
}
|
|
182
|
+
:root[data-theme=boilerplate-dark] {
|
|
183
|
+
color-scheme: dark;
|
|
184
|
+
/* Surfaces — slate dark ramp */
|
|
185
|
+
--paper: #0f172a;
|
|
186
|
+
--paper-raised: #1e293b;
|
|
187
|
+
--paper-sunk: #020617;
|
|
188
|
+
--paper-glass: rgba(15, 23, 42, 0.85);
|
|
189
|
+
/* Ink — inverted slate */
|
|
190
|
+
--ink: #f8fafc;
|
|
191
|
+
--ink-soft: #e2e8f0;
|
|
192
|
+
--ink-faint: #94a3b8;
|
|
193
|
+
--graphite: #f1f5f9;
|
|
194
|
+
--muted: #64748b;
|
|
195
|
+
/* Lines — dark slate borders */
|
|
196
|
+
--guide: #334155;
|
|
197
|
+
--guide-soft: #1e293b;
|
|
198
|
+
--hair: #1e293b;
|
|
199
|
+
--hair-soft: #0f172a;
|
|
200
|
+
/* Primary accent — brighter blue for dark surfaces */
|
|
201
|
+
--ai: #3b82f6;
|
|
202
|
+
--ai-ink: #60a5fa;
|
|
203
|
+
--ai-wash: #1e3a8a;
|
|
204
|
+
/* Seal — red */
|
|
205
|
+
--shu: #ef4444;
|
|
206
|
+
--shu-wash: #450a0a;
|
|
207
|
+
/* Tertiary — amber */
|
|
208
|
+
--ochre: #f59e0b;
|
|
209
|
+
--ochre-wash: #422006;
|
|
210
|
+
/* Code — neutral dark syntax surface */
|
|
211
|
+
--code-bg: #020617;
|
|
212
|
+
--code-ink: #e2e8f0;
|
|
213
|
+
--code-muted: #708198;
|
|
214
|
+
--code-accent: #fb923c;
|
|
215
|
+
--code-green: #4ade80;
|
|
216
|
+
--code-blue: #60a5fa;
|
|
217
|
+
/* Typography — system stacks only (no @import) */
|
|
218
|
+
--font-display: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
219
|
+
--font-script: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
220
|
+
--font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;
|
|
221
|
+
--font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
222
|
+
--font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
|
|
223
|
+
/* Radius */
|
|
224
|
+
--r-sm: 4px;
|
|
225
|
+
--r-md: 6px;
|
|
226
|
+
--r-lg: 8px;
|
|
227
|
+
/* Shadow — heavier on dark, neutral black */
|
|
228
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, .30);
|
|
229
|
+
--shadow-md: 0 2px 4px rgba(0, 0, 0, .40);
|
|
230
|
+
--shadow-lg: 0 6px 16px -4px rgba(0, 0, 0, .55);
|
|
231
|
+
--shadow-xl: 0 16px 32px -8px rgba(0, 0, 0, .65);
|
|
232
|
+
--shadow-2xl: 0 24px 48px -12px rgba(0, 0, 0, .75);
|
|
233
|
+
/* Blur */
|
|
234
|
+
--blur-sm: none;
|
|
235
|
+
--blur-md: none;
|
|
236
|
+
--blur-lg: none;
|
|
237
|
+
/* Glow */
|
|
238
|
+
--glow-sm: 0 0 0 transparent;
|
|
239
|
+
--glow-md: 0 0 0 transparent;
|
|
240
|
+
--glow-lg: 0 0 0 transparent;
|
|
241
|
+
/* Motion */
|
|
242
|
+
--duration-fast: 120ms;
|
|
243
|
+
--duration-normal: 180ms;
|
|
244
|
+
--duration-slow: 280ms;
|
|
245
|
+
--ease: cubic-bezier(.4, 0, .2, 1);
|
|
246
|
+
/* Backgrounds */
|
|
247
|
+
--background-default: var(--paper);
|
|
248
|
+
--background-subtle: var(--paper-sunk);
|
|
249
|
+
--background-navbar: var(--paper-raised);
|
|
250
|
+
/* Surfaces (semantic) */
|
|
251
|
+
--surface-default: var(--paper);
|
|
252
|
+
--surface-raised: var(--paper-raised);
|
|
253
|
+
--surface-sunk: var(--paper-sunk);
|
|
254
|
+
--surface-muted: var(--paper-sunk);
|
|
255
|
+
--surface-subtle: var(--paper-raised);
|
|
256
|
+
--surface-emphasis: var(--ink);
|
|
257
|
+
--surface-glass: var(--paper-glass);
|
|
258
|
+
/* Text */
|
|
259
|
+
--text-primary: var(--ink);
|
|
260
|
+
--text-secondary: var(--ink-soft);
|
|
261
|
+
--text-muted: var(--ink-faint);
|
|
262
|
+
--text-tertiary: var(--muted);
|
|
263
|
+
--text-inverse: var(--paper);
|
|
264
|
+
--text-link: var(--ai);
|
|
265
|
+
--text-link-hover: var(--ai-ink);
|
|
266
|
+
/* Borders */
|
|
267
|
+
--border-default: var(--hair);
|
|
268
|
+
--border-subtle: var(--hair-soft);
|
|
269
|
+
--border-emphasis: var(--guide);
|
|
270
|
+
--border-focus: var(--ai);
|
|
271
|
+
/* Interactive overlays — light wash on dark */
|
|
272
|
+
--interactive-hover: rgba(248, 250, 252, 0.05);
|
|
273
|
+
--interactive-active: rgba(248, 250, 252, 0.10);
|
|
274
|
+
/* Brand */
|
|
275
|
+
--brand-primary: var(--ai);
|
|
276
|
+
--brand-primary-hover: var(--ai-ink);
|
|
277
|
+
/* Action triplets */
|
|
278
|
+
--action-primary-default: var(--ai);
|
|
279
|
+
--action-primary-hover: var(--ai-ink);
|
|
280
|
+
--action-primary-active: var(--ai-ink);
|
|
281
|
+
--action-primary-wash: var(--ai-wash);
|
|
282
|
+
--action-secondary-default: var(--shu);
|
|
283
|
+
--action-secondary-hover: var(--shu);
|
|
284
|
+
--action-secondary-active: var(--shu);
|
|
285
|
+
--action-secondary-wash: var(--shu-wash);
|
|
286
|
+
--action-tertiary-default: var(--ochre);
|
|
287
|
+
--action-tertiary-hover: var(--ochre);
|
|
288
|
+
--action-tertiary-active: var(--ochre);
|
|
289
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
290
|
+
/* Feedback */
|
|
291
|
+
--feedback-info: var(--ai);
|
|
292
|
+
--feedback-success: #22c55e;
|
|
293
|
+
--feedback-warning: var(--ochre);
|
|
294
|
+
--feedback-error: var(--shu);
|
|
295
|
+
/* Status — info */
|
|
296
|
+
--info-default: var(--ai);
|
|
297
|
+
--info-subtle: var(--ai-wash);
|
|
298
|
+
--info-text: #85BFFF;
|
|
299
|
+
/* Status — success */
|
|
300
|
+
--success-default: #22c55e;
|
|
301
|
+
--success-subtle: #14532d;
|
|
302
|
+
--success-text: #4ade80;
|
|
303
|
+
/* Status — warning */
|
|
304
|
+
--warning-default: var(--ochre);
|
|
305
|
+
--warning-subtle: var(--ochre-wash);
|
|
306
|
+
--warning-text: #fbbf24;
|
|
307
|
+
/* Status — error */
|
|
308
|
+
--error-default: var(--shu);
|
|
309
|
+
--error-subtle: var(--shu-wash);
|
|
310
|
+
--error-text: #fca5a5;
|
|
311
|
+
/* Space scale */
|
|
312
|
+
--space-2xs: 0.25rem;
|
|
313
|
+
--space-xs: 0.5rem;
|
|
314
|
+
--space-sm: 0.75rem;
|
|
315
|
+
--space-md: 1rem;
|
|
316
|
+
--space-lg: 1.5rem;
|
|
317
|
+
--space-xl: 2rem;
|
|
318
|
+
/* Radius alias */
|
|
319
|
+
--radius-sm: var(--r-sm);
|
|
320
|
+
--radius-md: var(--r-md);
|
|
321
|
+
--radius-lg: var(--r-lg);
|
|
322
|
+
--radius-xl: 12px;
|
|
323
|
+
--radius-full: 9999px;
|
|
324
|
+
/* Typography */
|
|
325
|
+
--font-primary: var(--font-sans);
|
|
326
|
+
--font-size-base: 1rem;
|
|
327
|
+
--line-height-normal: 1.5;
|
|
328
|
+
--font-weight-medium: 500;
|
|
329
|
+
/* Z-index layers */
|
|
330
|
+
--z-sticky: 1020;
|
|
331
|
+
--z-dropdown: 1030;
|
|
332
|
+
--z-backdrop: 1040;
|
|
333
|
+
--z-modal: 1050;
|
|
334
|
+
--z-popover: 1060;
|
|
335
|
+
--z-tooltip: 1070;
|
|
336
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
337
|
+
The numbered scale is the source of truth: every component reads
|
|
338
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
339
|
+
are emitted by the library as references to these, so they follow
|
|
340
|
+
automatically. Change a value here and the whole page re-proportions. */
|
|
341
|
+
--space-0: 0;
|
|
342
|
+
--space-1: 0.5rem;
|
|
343
|
+
--space-2: 0.75rem;
|
|
344
|
+
--space-3: 0.875rem;
|
|
345
|
+
--space-4: 1rem;
|
|
346
|
+
--space-5: 1.5rem;
|
|
347
|
+
--space-6: 2rem;
|
|
348
|
+
--space-7: 3rem;
|
|
349
|
+
--space-8: 4rem;
|
|
350
|
+
--space-9: 6rem;
|
|
351
|
+
}
|
|
352
|
+
:root[data-theme=boilerplate-light] {
|
|
353
|
+
color-scheme: light;
|
|
354
|
+
/* Surfaces — off-white paper, light gray sunk */
|
|
355
|
+
--paper: #fff;
|
|
356
|
+
--paper-raised: #f2f2f2;
|
|
357
|
+
--paper-sunk: #f8fafc;
|
|
358
|
+
--paper-glass: rgba(255, 255, 255, 0.85);
|
|
359
|
+
/* Ink — slate neutral ramp */
|
|
360
|
+
--ink: #0f172a;
|
|
361
|
+
--ink-soft: #1e293b;
|
|
362
|
+
--ink-faint: #475569;
|
|
363
|
+
--graphite: #0f172a;
|
|
364
|
+
--muted: #64748b;
|
|
365
|
+
/* Lines — light slate borders */
|
|
366
|
+
--guide: #cbd5e1;
|
|
367
|
+
--guide-soft: #e2e8f0;
|
|
368
|
+
--hair: #e2e8f0;
|
|
369
|
+
--hair-soft: #f1f5f9;
|
|
370
|
+
/* Primary accent — clean, recognizable blue */
|
|
371
|
+
--ai: #2563eb;
|
|
372
|
+
--ai-ink: #1d4ed8;
|
|
373
|
+
--ai-wash: #eff6ff;
|
|
374
|
+
/* Seal — red (used for error / secondary action) */
|
|
375
|
+
--shu: #dc2626;
|
|
376
|
+
--shu-wash: #fef2f2;
|
|
377
|
+
/* Tertiary — amber (used for warning) */
|
|
378
|
+
--ochre: #d97706;
|
|
379
|
+
--ochre-wash: #fffbeb;
|
|
380
|
+
/* Code — neutral light syntax surface */
|
|
381
|
+
--code-bg: #f8fafc;
|
|
382
|
+
--code-ink: #0f172a;
|
|
383
|
+
--code-muted: #64748b;
|
|
384
|
+
--code-accent: #c2410c;
|
|
385
|
+
--code-green: #15803d;
|
|
386
|
+
--code-blue: #2563eb;
|
|
387
|
+
/* Typography — system stacks only (no @import) */
|
|
388
|
+
--font-display: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
389
|
+
--font-script: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
390
|
+
--font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;
|
|
391
|
+
--font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
392
|
+
--font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
|
|
393
|
+
/* Radius — standard, unsurprising */
|
|
394
|
+
--r-sm: 4px;
|
|
395
|
+
--r-md: 6px;
|
|
396
|
+
--r-lg: 8px;
|
|
397
|
+
/* Shadow — subtle, neutral slate */
|
|
398
|
+
--shadow-sm: 0 1px 2px rgba(15, 23, 42, .04);
|
|
399
|
+
--shadow-md: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);
|
|
400
|
+
--shadow-lg: 0 4px 12px -2px rgba(15, 23, 42, .08), 0 2px 4px -2px rgba(15, 23, 42, .05);
|
|
401
|
+
--shadow-xl: 0 12px 24px -8px rgba(15, 23, 42, .10), 0 4px 8px -4px rgba(15, 23, 42, .06);
|
|
402
|
+
--shadow-2xl: 0 24px 48px -12px rgba(15, 23, 42, .15);
|
|
403
|
+
/* Blur — Boilerplate doesn't use frosted surfaces */
|
|
404
|
+
--blur-sm: none;
|
|
405
|
+
--blur-md: none;
|
|
406
|
+
--blur-lg: none;
|
|
407
|
+
/* Glow — Boilerplate doesn't use glow effects */
|
|
408
|
+
--glow-sm: 0 0 0 transparent;
|
|
409
|
+
--glow-md: 0 0 0 transparent;
|
|
410
|
+
--glow-lg: 0 0 0 transparent;
|
|
411
|
+
/* Motion — moderate, not flashy */
|
|
412
|
+
--duration-fast: 120ms;
|
|
413
|
+
--duration-normal: 180ms;
|
|
414
|
+
--duration-slow: 280ms;
|
|
415
|
+
--ease: cubic-bezier(.4, 0, .2, 1);
|
|
416
|
+
/* Backgrounds */
|
|
417
|
+
--background-default: var(--paper);
|
|
418
|
+
--background-subtle: var(--paper-sunk);
|
|
419
|
+
--background-navbar: var(--paper);
|
|
420
|
+
/* Surfaces (semantic) */
|
|
421
|
+
--surface-default: var(--paper);
|
|
422
|
+
--surface-raised: var(--paper-raised);
|
|
423
|
+
--surface-sunk: var(--paper-sunk);
|
|
424
|
+
--surface-muted: var(--paper-sunk);
|
|
425
|
+
--surface-subtle: var(--paper-sunk);
|
|
426
|
+
--surface-emphasis: var(--ink);
|
|
427
|
+
--surface-glass: var(--paper-glass);
|
|
428
|
+
/* Text */
|
|
429
|
+
--text-primary: var(--ink);
|
|
430
|
+
--text-secondary: var(--ink-soft);
|
|
431
|
+
--text-muted: var(--ink-faint);
|
|
432
|
+
--text-tertiary: var(--muted);
|
|
433
|
+
--text-inverse: var(--paper);
|
|
434
|
+
--text-link: var(--ai);
|
|
435
|
+
--text-link-hover: var(--ai-ink);
|
|
436
|
+
/* Borders */
|
|
437
|
+
--border-default: var(--hair);
|
|
438
|
+
--border-subtle: var(--hair-soft);
|
|
439
|
+
--border-emphasis: var(--guide);
|
|
440
|
+
--border-focus: var(--ai);
|
|
441
|
+
/* Interactive overlays */
|
|
442
|
+
--interactive-hover: rgba(15, 23, 42, 0.04);
|
|
443
|
+
--interactive-active: rgba(15, 23, 42, 0.08);
|
|
444
|
+
/* Brand */
|
|
445
|
+
--brand-primary: var(--ai);
|
|
446
|
+
--brand-primary-hover: var(--ai-ink);
|
|
447
|
+
/* Action triplets */
|
|
448
|
+
--action-primary-default: var(--ai);
|
|
449
|
+
--action-primary-hover: var(--ai-ink);
|
|
450
|
+
--action-primary-active: var(--ai-ink);
|
|
451
|
+
--action-primary-wash: var(--ai-wash);
|
|
452
|
+
--action-secondary-default: var(--shu);
|
|
453
|
+
--action-secondary-hover: var(--shu);
|
|
454
|
+
--action-secondary-active: var(--shu);
|
|
455
|
+
--action-secondary-wash: var(--shu-wash);
|
|
456
|
+
--action-tertiary-default: var(--ochre);
|
|
457
|
+
--action-tertiary-hover: var(--ochre);
|
|
458
|
+
--action-tertiary-active: var(--ochre);
|
|
459
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
460
|
+
/* Feedback */
|
|
461
|
+
--feedback-info: var(--ai);
|
|
462
|
+
--feedback-success: #16a34a;
|
|
463
|
+
--feedback-warning: var(--ochre);
|
|
464
|
+
--feedback-error: var(--shu);
|
|
465
|
+
/* Status — info */
|
|
466
|
+
--info-default: var(--ai);
|
|
467
|
+
--info-subtle: var(--ai-wash);
|
|
468
|
+
--info-text: var(--ai-ink);
|
|
469
|
+
/* Status — success */
|
|
470
|
+
--success-default: #16a34a;
|
|
471
|
+
--success-subtle: #f0fdf4;
|
|
472
|
+
--success-text: #15803d;
|
|
473
|
+
/* Status — warning */
|
|
474
|
+
--warning-default: var(--ochre);
|
|
475
|
+
--warning-subtle: var(--ochre-wash);
|
|
476
|
+
--warning-text: #b45309;
|
|
477
|
+
/* Status — error */
|
|
478
|
+
--error-default: var(--shu);
|
|
479
|
+
--error-subtle: var(--shu-wash);
|
|
480
|
+
--error-text: #b91c1c;
|
|
481
|
+
/* Space scale */
|
|
482
|
+
--space-2xs: 0.25rem;
|
|
483
|
+
--space-xs: 0.5rem;
|
|
484
|
+
--space-sm: 0.75rem;
|
|
485
|
+
--space-md: 1rem;
|
|
486
|
+
--space-lg: 1.5rem;
|
|
487
|
+
--space-xl: 2rem;
|
|
488
|
+
/* Radius alias */
|
|
489
|
+
--radius-sm: var(--r-sm);
|
|
490
|
+
--radius-md: var(--r-md);
|
|
491
|
+
--radius-lg: var(--r-lg);
|
|
492
|
+
--radius-xl: 12px;
|
|
493
|
+
--radius-full: 9999px;
|
|
494
|
+
/* Typography */
|
|
495
|
+
--font-primary: var(--font-sans);
|
|
496
|
+
--font-size-base: 1rem;
|
|
497
|
+
--line-height-normal: 1.5;
|
|
498
|
+
--font-weight-medium: 500;
|
|
499
|
+
/* Z-index layers */
|
|
500
|
+
--z-sticky: 1020;
|
|
501
|
+
--z-dropdown: 1030;
|
|
502
|
+
--z-backdrop: 1040;
|
|
503
|
+
--z-modal: 1050;
|
|
504
|
+
--z-popover: 1060;
|
|
505
|
+
--z-tooltip: 1070;
|
|
506
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
507
|
+
The numbered scale is the source of truth: every component reads
|
|
508
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
509
|
+
are emitted by the library as references to these, so they follow
|
|
510
|
+
automatically. Change a value here and the whole page re-proportions. */
|
|
511
|
+
--space-0: 0;
|
|
512
|
+
--space-1: 0.5rem;
|
|
513
|
+
--space-2: 0.75rem;
|
|
514
|
+
--space-3: 0.875rem;
|
|
515
|
+
--space-4: 1rem;
|
|
516
|
+
--space-5: 1.5rem;
|
|
517
|
+
--space-6: 2rem;
|
|
518
|
+
--space-7: 3rem;
|
|
519
|
+
--space-8: 4rem;
|
|
520
|
+
--space-9: 6rem;
|
|
521
|
+
}
|
|
522
|
+
:root[data-theme=cupertino] {
|
|
523
|
+
color-scheme: light dark;
|
|
524
|
+
/* Surfaces — AppKit panels */
|
|
525
|
+
--paper: light-dark(#F5F5F7, #1E1E1E);
|
|
526
|
+
--paper-raised: light-dark(#FFF, #2A2A2A);
|
|
527
|
+
--paper-sunk: light-dark(#E9E9EC, #141414);
|
|
528
|
+
--paper-glass: light-dark(rgba(255, 255, 255, 0.72), rgba(42, 42, 42, 0.72));
|
|
529
|
+
/* Ink — warm black / warm white, never pure */
|
|
530
|
+
--ink: light-dark(#1D1D1F, #F5F5F7);
|
|
531
|
+
--ink-soft: light-dark(#3A3A3C, #C7C7CC);
|
|
532
|
+
--ink-faint: light-dark(#66666B, #98989D);
|
|
533
|
+
--graphite: light-dark(#2C2C2E, #AEAEB2);
|
|
534
|
+
--muted: light-dark(#6E6E73, #6E6E73);
|
|
535
|
+
/* Hairlines — solid in light, translucent white in dark */
|
|
536
|
+
--guide: light-dark(#D2D2D7, rgba(255, 255, 255, 0.16));
|
|
537
|
+
--guide-soft: light-dark(#E5E5EA, rgba(255, 255, 255, 0.08));
|
|
538
|
+
--hair: light-dark(#D2D2D7, rgba(255, 255, 255, 0.12));
|
|
539
|
+
--hair-soft: light-dark(#E5E5EA, rgba(255, 255, 255, 0.06));
|
|
540
|
+
/* Primary accent — Apple system blue (dark variant brighter) */
|
|
541
|
+
--ai: light-dark(#005EBB, #0A84FF);
|
|
542
|
+
--ai-ink: light-dark(#0058B0, #409CFF);
|
|
543
|
+
--ai-wash: light-dark(#E5F0FB, rgba(10, 132, 255, 0.16));
|
|
544
|
+
/* Seal — Apple system red */
|
|
545
|
+
--shu: light-dark(#FF3B30, #FF453A);
|
|
546
|
+
--shu-wash: light-dark(#FFEAE8, rgba(255, 69, 58, 0.16));
|
|
547
|
+
/* Accent — Apple system orange */
|
|
548
|
+
--ochre: light-dark(#FF9F0A, #FF9F0A);
|
|
549
|
+
--ochre-wash: light-dark(#FFF4E0, rgba(255, 159, 10, 0.16));
|
|
550
|
+
/* Code surface — Xcode dark in both modes (intentional editorial) */
|
|
551
|
+
--code-bg: light-dark(#1C1C1E, #0F0F0F);
|
|
552
|
+
--code-ink: light-dark(#F2F2F7, #F2F2F7);
|
|
553
|
+
--code-muted: #8E8E93;
|
|
554
|
+
--code-accent: #FF9F0A;
|
|
555
|
+
--code-green: #30D158;
|
|
556
|
+
--code-blue: #64D2FF;
|
|
557
|
+
/* Typography — SF system stack, identical */
|
|
558
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
559
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
560
|
+
--font-serif: ui-serif, 'New York', 'Iowan Old Style', 'Palatino', Georgia, serif;
|
|
561
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
562
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', 'Menlo', Consolas, monospace;
|
|
563
|
+
/* Radius — AppKit corners, identical */
|
|
564
|
+
--r-sm: 8px;
|
|
565
|
+
--r-md: 10px;
|
|
566
|
+
--r-lg: 14px;
|
|
567
|
+
/* Shadows — small, diffuse, lifted, deeper on dark */
|
|
568
|
+
--shadow-sm: 0 1px 2px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30)),
|
|
569
|
+
0 0 0 0.5px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30));
|
|
570
|
+
--shadow-md: 0 4px 14px light-dark(rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.40)),
|
|
571
|
+
0 1px 3px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30));
|
|
572
|
+
--shadow-lg: 0 12px 40px light-dark(rgba(0, 0, 0, 0.10), rgba(0, 0, 0, 0.50)),
|
|
573
|
+
0 2px 6px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30));
|
|
574
|
+
--shadow-xl: 0 20px 50px light-dark(rgba(0, 0, 0, 0.14), rgba(0, 0, 0, 0.60)),
|
|
575
|
+
0 4px 10px light-dark(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.32));
|
|
576
|
+
--shadow-2xl: 0 28px 70px light-dark(rgba(0, 0, 0, 0.20), rgba(0, 0, 0, 0.72)),
|
|
577
|
+
0 6px 14px light-dark(rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.36));
|
|
578
|
+
/* Blur — vibrancy signature, identical */
|
|
579
|
+
--blur-sm: blur(20px) saturate(180%);
|
|
580
|
+
--blur-md: blur(30px) saturate(180%);
|
|
581
|
+
--blur-lg: blur(40px) saturate(180%);
|
|
582
|
+
/* Glow — Cupertino doesn't glow, it lifts */
|
|
583
|
+
--glow-sm: 0 0 0 transparent;
|
|
584
|
+
--glow-md: 0 0 0 transparent;
|
|
585
|
+
--glow-lg: 0 0 0 transparent;
|
|
586
|
+
/* Motion — Apple-snappy, identical */
|
|
587
|
+
--duration-fast: 160ms;
|
|
588
|
+
--duration-normal: 220ms;
|
|
589
|
+
--duration-slow: 320ms;
|
|
590
|
+
--ease: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
591
|
+
/* Semantic aliases */
|
|
592
|
+
--background-default: var(--paper);
|
|
593
|
+
--background-subtle: var(--paper-sunk);
|
|
594
|
+
--background-navbar: var(--paper-raised);
|
|
595
|
+
--surface-default: var(--paper);
|
|
596
|
+
--surface-raised: var(--paper-raised);
|
|
597
|
+
--surface-sunk: var(--paper-sunk);
|
|
598
|
+
--surface-muted: var(--paper-sunk);
|
|
599
|
+
--surface-subtle: var(--paper-raised);
|
|
600
|
+
--surface-emphasis: var(--ink);
|
|
601
|
+
--surface-glass: var(--paper-glass);
|
|
602
|
+
--text-primary: var(--ink);
|
|
603
|
+
--text-secondary: var(--ink-soft);
|
|
604
|
+
--text-muted: var(--ink-faint);
|
|
605
|
+
--text-tertiary: var(--muted);
|
|
606
|
+
--text-inverse: var(--paper);
|
|
607
|
+
--text-link: var(--ai);
|
|
608
|
+
--text-link-hover: var(--ai-ink);
|
|
609
|
+
--border-default: var(--hair);
|
|
610
|
+
--border-subtle: var(--hair-soft);
|
|
611
|
+
--border-emphasis: var(--ink);
|
|
612
|
+
--border-focus: var(--ai);
|
|
613
|
+
--interactive-hover: light-dark(rgba(0, 0, 0, 0.04), rgba(255, 255, 255, 0.06));
|
|
614
|
+
--interactive-active: light-dark(rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.10));
|
|
615
|
+
--brand-primary: var(--ai);
|
|
616
|
+
--brand-primary-hover: var(--ai-ink);
|
|
617
|
+
--action-primary-default: var(--ai);
|
|
618
|
+
--action-primary-hover: var(--ai-ink);
|
|
619
|
+
--action-primary-active: var(--ai-ink);
|
|
620
|
+
--action-primary-wash: var(--ai-wash);
|
|
621
|
+
--action-secondary-default: var(--shu);
|
|
622
|
+
--action-secondary-hover: var(--shu);
|
|
623
|
+
--action-secondary-active: var(--shu);
|
|
624
|
+
--action-secondary-wash: var(--shu-wash);
|
|
625
|
+
--action-tertiary-default: var(--ochre);
|
|
626
|
+
--action-tertiary-hover: var(--ochre);
|
|
627
|
+
--action-tertiary-active: var(--ochre);
|
|
628
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
629
|
+
--feedback-info: var(--ai);
|
|
630
|
+
--feedback-success: var(--code-green);
|
|
631
|
+
--feedback-warning: var(--ochre);
|
|
632
|
+
--feedback-error: var(--shu);
|
|
633
|
+
--info-default: var(--ai);
|
|
634
|
+
--info-subtle: var(--ai-wash);
|
|
635
|
+
--info-text: var(--ai-ink);
|
|
636
|
+
--success-default: light-dark(var(--code-green), #30D158);
|
|
637
|
+
--success-subtle: light-dark(rgba(48, 209, 88, 0.12), rgba(48, 209, 88, 0.16));
|
|
638
|
+
--success-text: light-dark(#0F6E22, #5FE37F);
|
|
639
|
+
--warning-default: var(--ochre);
|
|
640
|
+
--warning-subtle: var(--ochre-wash);
|
|
641
|
+
--warning-text: light-dark(#985000, #FFB340);
|
|
642
|
+
--error-default: var(--shu);
|
|
643
|
+
--error-subtle: light-dark(rgba(255, 59, 48, 0.12), rgba(255, 69, 58, 0.16));
|
|
644
|
+
--error-text: light-dark(#A8281F, #FF6961);
|
|
645
|
+
/* Library scales — identical */
|
|
646
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
647
|
+
The numbered scale is the source of truth: every component reads
|
|
648
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
649
|
+
are emitted by the library as references to these, so they follow
|
|
650
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
651
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
652
|
+
--space-0: 0; /* flush */
|
|
653
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
654
|
+
--space-2: 0.75rem; /* control padding */
|
|
655
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
656
|
+
--space-4: 1rem; /* default rhythm */
|
|
657
|
+
--space-5: 1.5rem; /* section gap */
|
|
658
|
+
--space-6: 2rem; /* block gap */
|
|
659
|
+
--space-7: 3rem; /* major gap */
|
|
660
|
+
--space-8: 4rem; /* page section */
|
|
661
|
+
--space-9: 6rem; /* hero rhythm */
|
|
662
|
+
--radius-sm: var(--r-sm);
|
|
663
|
+
--radius-md: var(--r-md);
|
|
664
|
+
--radius-lg: var(--r-lg);
|
|
665
|
+
--radius-xl: 0.75rem;
|
|
666
|
+
--radius-full: 9999px;
|
|
667
|
+
--font-primary: var(--font-sans);
|
|
668
|
+
--font-size-base: 1rem;
|
|
669
|
+
--line-height-normal: 1.5;
|
|
670
|
+
--font-weight-medium: 500;
|
|
671
|
+
--z-sticky: 1020;
|
|
672
|
+
--z-dropdown: 1030;
|
|
673
|
+
--z-backdrop: 1040;
|
|
674
|
+
--z-modal: 1050;
|
|
675
|
+
--z-popover: 1060;
|
|
676
|
+
--z-tooltip: 1070;
|
|
677
|
+
/* Component overrides — AppKit identity */
|
|
678
|
+
--btn-radius: var(--r-md);
|
|
679
|
+
--card-radius: var(--r-lg);
|
|
680
|
+
--card-shadow: var(--shadow-sm);
|
|
681
|
+
--input-radius: var(--r-sm);
|
|
682
|
+
--modal-radius: var(--r-lg);
|
|
683
|
+
--tooltip-radius: var(--r-sm);
|
|
684
|
+
}
|
|
685
|
+
:root[data-theme=cupertino-dark] {
|
|
686
|
+
color-scheme: dark;
|
|
687
|
+
/* Surfaces — AppKit dark panels */
|
|
688
|
+
--paper: #1E1E1E;
|
|
689
|
+
--paper-raised: #2A2A2A;
|
|
690
|
+
--paper-sunk: #141414;
|
|
691
|
+
--paper-glass: rgba(42, 42, 42, 0.72);
|
|
692
|
+
/* Ink — warm white, never pure */
|
|
693
|
+
--ink: #F5F5F7;
|
|
694
|
+
--ink-soft: #C7C7CC;
|
|
695
|
+
--ink-faint: #98989D;
|
|
696
|
+
--graphite: #AEAEB2;
|
|
697
|
+
--muted: #6E6E73;
|
|
698
|
+
/* Hairlines / guides — translucent white */
|
|
699
|
+
--guide: rgba(255, 255, 255, 0.16);
|
|
700
|
+
--guide-soft: rgba(255, 255, 255, 0.08);
|
|
701
|
+
--hair: rgba(255, 255, 255, 0.12);
|
|
702
|
+
--hair-soft: rgba(255, 255, 255, 0.06);
|
|
703
|
+
/* Primary accent — Apple system blue (dark variant) */
|
|
704
|
+
--ai: #0A84FF;
|
|
705
|
+
--ai-ink: #409CFF;
|
|
706
|
+
--ai-wash: rgba(10, 132, 255, 0.16);
|
|
707
|
+
/* Seal — Apple system red (dark variant) */
|
|
708
|
+
--shu: #FF453A;
|
|
709
|
+
--shu-wash: rgba(255, 69, 58, 0.16);
|
|
710
|
+
/* Accent — Apple system orange (dark variant) */
|
|
711
|
+
--ochre: #FF9F0A;
|
|
712
|
+
--ochre-wash: rgba(255, 159, 10, 0.16);
|
|
713
|
+
/* Code surface — AppKit dark code panel */
|
|
714
|
+
--code-bg: #0F0F0F;
|
|
715
|
+
--code-ink: #F2F2F7;
|
|
716
|
+
--code-muted: #8E8E93;
|
|
717
|
+
--code-accent: #FF9F0A;
|
|
718
|
+
--code-green: #30D158;
|
|
719
|
+
--code-blue: #64D2FF;
|
|
720
|
+
/* Typography — match Cupertino (SF system stack) */
|
|
721
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
722
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
723
|
+
--font-serif: ui-serif, 'New York', 'Iowan Old Style', 'Palatino', Georgia, serif;
|
|
724
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
725
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', 'Menlo', Consolas, monospace;
|
|
726
|
+
/* Radius — match Cupertino (AppKit corners) */
|
|
727
|
+
--r-sm: 8px;
|
|
728
|
+
--r-md: 10px;
|
|
729
|
+
--r-lg: 14px;
|
|
730
|
+
/* Shadows — small, diffuse, lifted (deeper for dark) */
|
|
731
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.30), 0 0 0 0.5px rgba(0, 0, 0, 0.30);
|
|
732
|
+
--shadow-md: 0 4px 14px rgba(0, 0, 0, 0.40), 0 1px 3px rgba(0, 0, 0, 0.30);
|
|
733
|
+
--shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.50), 0 2px 6px rgba(0, 0, 0, 0.30);
|
|
734
|
+
--shadow-xl: 0 20px 50px rgba(0, 0, 0, 0.60), 0 4px 10px rgba(0, 0, 0, 0.32);
|
|
735
|
+
--shadow-2xl: 0 28px 70px rgba(0, 0, 0, 0.72), 0 6px 14px rgba(0, 0, 0, 0.36);
|
|
736
|
+
/* Blur — vibrancy (Cupertino's signature, match light) */
|
|
737
|
+
--blur-sm: blur(20px) saturate(180%);
|
|
738
|
+
--blur-md: blur(30px) saturate(180%);
|
|
739
|
+
--blur-lg: blur(40px) saturate(180%);
|
|
740
|
+
/* Glow — Cupertino doesn't glow, it lifts */
|
|
741
|
+
--glow-sm: 0 0 0 transparent;
|
|
742
|
+
--glow-md: 0 0 0 transparent;
|
|
743
|
+
--glow-lg: 0 0 0 transparent;
|
|
744
|
+
/* Motion — Apple-snappy, match Cupertino */
|
|
745
|
+
--duration-fast: 160ms;
|
|
746
|
+
--duration-normal: 220ms;
|
|
747
|
+
--duration-slow: 320ms;
|
|
748
|
+
--ease: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
749
|
+
/* ----------------------------------------------------------
|
|
750
|
+
SEMANTIC ALIASES
|
|
751
|
+
---------------------------------------------------------- */
|
|
752
|
+
/* Backgrounds */
|
|
753
|
+
--background-default: var(--paper);
|
|
754
|
+
--background-subtle: var(--paper-sunk);
|
|
755
|
+
--background-navbar: var(--paper-raised);
|
|
756
|
+
/* Surfaces */
|
|
757
|
+
--surface-default: var(--paper);
|
|
758
|
+
--surface-raised: var(--paper-raised);
|
|
759
|
+
--surface-sunk: var(--paper-sunk);
|
|
760
|
+
--surface-muted: var(--paper-sunk);
|
|
761
|
+
--surface-subtle: var(--paper-raised);
|
|
762
|
+
--surface-emphasis: var(--ink);
|
|
763
|
+
--surface-glass: var(--paper-glass);
|
|
764
|
+
/* Text */
|
|
765
|
+
--text-primary: var(--ink);
|
|
766
|
+
--text-secondary: var(--ink-soft);
|
|
767
|
+
--text-muted: var(--ink-faint);
|
|
768
|
+
--text-tertiary: var(--muted);
|
|
769
|
+
--text-inverse: var(--paper);
|
|
770
|
+
--text-link: var(--ai);
|
|
771
|
+
--text-link-hover: var(--ai-ink);
|
|
772
|
+
/* Borders */
|
|
773
|
+
--border-default: var(--hair);
|
|
774
|
+
--border-subtle: var(--hair-soft);
|
|
775
|
+
--border-emphasis: var(--ink);
|
|
776
|
+
--border-focus: var(--ai);
|
|
777
|
+
/* Interactive — translucent white on dark (macOS Dark convention) */
|
|
778
|
+
--interactive-hover: rgba(255, 255, 255, 0.06);
|
|
779
|
+
--interactive-active: rgba(255, 255, 255, 0.10);
|
|
780
|
+
/* Brand */
|
|
781
|
+
--brand-primary: var(--ai);
|
|
782
|
+
--brand-primary-hover: var(--ai-ink);
|
|
783
|
+
/* Action triplets */
|
|
784
|
+
--action-primary-default: var(--ai);
|
|
785
|
+
--action-primary-hover: var(--ai-ink);
|
|
786
|
+
--action-primary-active: var(--ai-ink);
|
|
787
|
+
--action-primary-wash: var(--ai-wash);
|
|
788
|
+
--action-secondary-default: var(--shu);
|
|
789
|
+
--action-secondary-hover: var(--shu);
|
|
790
|
+
--action-secondary-active: var(--shu);
|
|
791
|
+
--action-secondary-wash: var(--shu-wash);
|
|
792
|
+
--action-tertiary-default: var(--ochre);
|
|
793
|
+
--action-tertiary-hover: var(--ochre);
|
|
794
|
+
--action-tertiary-active: var(--ochre);
|
|
795
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
796
|
+
/* Feedback */
|
|
797
|
+
--feedback-info: var(--ai);
|
|
798
|
+
--feedback-success: var(--code-green);
|
|
799
|
+
--feedback-warning: var(--ochre);
|
|
800
|
+
--feedback-error: var(--shu);
|
|
801
|
+
/* Status — info */
|
|
802
|
+
--info-default: var(--ai);
|
|
803
|
+
--info-subtle: var(--ai-wash);
|
|
804
|
+
--info-text: var(--ai-ink);
|
|
805
|
+
/* Status — success (macOS dark green) */
|
|
806
|
+
--success-default: #30D158;
|
|
807
|
+
--success-subtle: rgba(48, 209, 88, 0.16);
|
|
808
|
+
--success-text: #5FE37F;
|
|
809
|
+
/* Status — warning (macOS dark orange) */
|
|
810
|
+
--warning-default: var(--ochre);
|
|
811
|
+
--warning-subtle: var(--ochre-wash);
|
|
812
|
+
--warning-text: #FFB340;
|
|
813
|
+
/* Status — error (macOS dark red) */
|
|
814
|
+
--error-default: var(--shu);
|
|
815
|
+
--error-subtle: var(--shu-wash);
|
|
816
|
+
--error-text: #FF6961;
|
|
817
|
+
/* ----------------------------------------------------------
|
|
818
|
+
LIBRARY SCALES
|
|
819
|
+
---------------------------------------------------------- */
|
|
820
|
+
/* Space scale */
|
|
821
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
822
|
+
The numbered scale is the source of truth: every component reads
|
|
823
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
824
|
+
are emitted by the library as references to these, so they follow
|
|
825
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
826
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
827
|
+
--space-0: 0; /* flush */
|
|
828
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
829
|
+
--space-2: 0.75rem; /* control padding */
|
|
830
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
831
|
+
--space-4: 1rem; /* default rhythm */
|
|
832
|
+
--space-5: 1.5rem; /* section gap */
|
|
833
|
+
--space-6: 2rem; /* block gap */
|
|
834
|
+
--space-7: 3rem; /* major gap */
|
|
835
|
+
--space-8: 4rem; /* page section */
|
|
836
|
+
--space-9: 6rem; /* hero rhythm */
|
|
837
|
+
/* Radius alias */
|
|
838
|
+
--radius-sm: var(--r-sm);
|
|
839
|
+
--radius-md: var(--r-md);
|
|
840
|
+
--radius-lg: var(--r-lg);
|
|
841
|
+
--radius-xl: 0.75rem;
|
|
842
|
+
--radius-full: 9999px;
|
|
843
|
+
/* Typography */
|
|
844
|
+
--font-primary: var(--font-sans);
|
|
845
|
+
--font-size-base: 1rem;
|
|
846
|
+
--line-height-normal: 1.5;
|
|
847
|
+
--font-weight-medium: 500;
|
|
848
|
+
/* Z-index */
|
|
849
|
+
--z-sticky: 1020;
|
|
850
|
+
--z-dropdown: 1030;
|
|
851
|
+
--z-backdrop: 1040;
|
|
852
|
+
--z-modal: 1050;
|
|
853
|
+
--z-popover: 1060;
|
|
854
|
+
--z-tooltip: 1070;
|
|
855
|
+
/* ----------------------------------------------------------
|
|
856
|
+
OPTIONAL COMPONENT OVERRIDES — match Cupertino
|
|
857
|
+
---------------------------------------------------------- */
|
|
858
|
+
--btn-radius: var(--r-md); /* 10px — AppKit control */
|
|
859
|
+
--card-radius: var(--r-lg); /* 14px — panel corner */
|
|
860
|
+
--card-shadow: var(--shadow-sm); /* diffuse, lifted */
|
|
861
|
+
--input-radius: var(--r-sm); /* 8px — text field */
|
|
862
|
+
--modal-radius: var(--r-lg); /* matches panel */
|
|
863
|
+
--tooltip-radius: var(--r-sm); /* bezel tooltip */
|
|
864
|
+
}
|
|
865
|
+
:root[data-theme=cupertino-light] {
|
|
866
|
+
color-scheme: light;
|
|
867
|
+
/* Surfaces — AppKit panels */
|
|
868
|
+
--paper: #F5F5F7;
|
|
869
|
+
--paper-raised: #FFF;
|
|
870
|
+
--paper-sunk: #E9E9EC;
|
|
871
|
+
--paper-glass: rgba(255, 255, 255, 0.72);
|
|
872
|
+
/* Ink — warm black, never pure */
|
|
873
|
+
--ink: #1D1D1F;
|
|
874
|
+
--ink-soft: #3A3A3C;
|
|
875
|
+
--ink-faint: #66666B;
|
|
876
|
+
--graphite: #2C2C2E;
|
|
877
|
+
--muted: #6E6E73;
|
|
878
|
+
/* Hairlines / guides */
|
|
879
|
+
--guide: #D2D2D7;
|
|
880
|
+
--guide-soft: #E5E5EA;
|
|
881
|
+
--hair: #D2D2D7;
|
|
882
|
+
--hair-soft: #E5E5EA;
|
|
883
|
+
/* Primary accent — system blue */
|
|
884
|
+
--ai: #005EBB;
|
|
885
|
+
--ai-ink: #0058B0;
|
|
886
|
+
--ai-wash: #E5F0FB;
|
|
887
|
+
/* Seal — system red */
|
|
888
|
+
--shu: #FF3B30;
|
|
889
|
+
--shu-wash: #FFEAE8;
|
|
890
|
+
/* Accent — system orange / amber */
|
|
891
|
+
--ochre: #FF9F0A;
|
|
892
|
+
--ochre-wash: #FFF4E0;
|
|
893
|
+
/* Code surface — native Xcode dark */
|
|
894
|
+
--code-bg: #1C1C1E;
|
|
895
|
+
--code-ink: #F2F2F7;
|
|
896
|
+
--code-muted: #8E8E93;
|
|
897
|
+
--code-accent: #FF9F0A;
|
|
898
|
+
--code-green: #30D158;
|
|
899
|
+
--code-blue: #64D2FF;
|
|
900
|
+
/* Typography — SF system stack */
|
|
901
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
902
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
903
|
+
--font-serif: ui-serif, 'New York', 'Iowan Old Style', 'Palatino', Georgia, serif;
|
|
904
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
905
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', 'Menlo', Consolas, monospace;
|
|
906
|
+
/* Radius — AppKit corners */
|
|
907
|
+
--r-sm: 8px;
|
|
908
|
+
--r-md: 10px;
|
|
909
|
+
--r-lg: 14px;
|
|
910
|
+
/* Shadows — small, diffuse, lifted */
|
|
911
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04), 0 0 0 0.5px rgba(0, 0, 0, 0.04);
|
|
912
|
+
--shadow-md: 0 4px 14px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04);
|
|
913
|
+
--shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.04);
|
|
914
|
+
/* Blur — vibrancy (Cupertino's signature) */
|
|
915
|
+
--blur-sm: blur(20px) saturate(180%);
|
|
916
|
+
--blur-md: blur(30px) saturate(180%);
|
|
917
|
+
--blur-lg: blur(40px) saturate(180%);
|
|
918
|
+
/* Glow — Cupertino doesn't glow, it lifts */
|
|
919
|
+
--glow-sm: 0 0 0 transparent;
|
|
920
|
+
--glow-md: 0 0 0 transparent;
|
|
921
|
+
--glow-lg: 0 0 0 transparent;
|
|
922
|
+
/* Motion — Apple-snappy */
|
|
923
|
+
--duration-fast: 160ms;
|
|
924
|
+
--duration-normal: 220ms;
|
|
925
|
+
--duration-slow: 320ms;
|
|
926
|
+
--ease: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
927
|
+
/* ----------------------------------------------------------
|
|
928
|
+
SEMANTIC ALIASES
|
|
929
|
+
-----------------------------------------------------------
|
|
930
|
+
Bridge the library's expected names to this theme's native
|
|
931
|
+
palette. Components can now write m.color(surface-default)
|
|
932
|
+
or var(--surface-default) and reskin with the theme
|
|
933
|
+
automatically.
|
|
934
|
+
---------------------------------------------------------- */
|
|
935
|
+
/* Backgrounds (page-level) */
|
|
936
|
+
--background-default: var(--paper);
|
|
937
|
+
--background-subtle: var(--paper-sunk);
|
|
938
|
+
--background-navbar: var(--paper-raised);
|
|
939
|
+
/* Surfaces */
|
|
940
|
+
--surface-default: var(--paper);
|
|
941
|
+
--surface-raised: var(--paper-raised);
|
|
942
|
+
--surface-sunk: var(--paper-sunk);
|
|
943
|
+
--surface-muted: var(--paper-sunk);
|
|
944
|
+
--surface-subtle: var(--paper-raised);
|
|
945
|
+
--surface-emphasis: var(--ink);
|
|
946
|
+
--surface-glass: var(--paper-glass);
|
|
947
|
+
/* Text */
|
|
948
|
+
--text-primary: var(--ink);
|
|
949
|
+
--text-secondary: var(--ink-soft);
|
|
950
|
+
--text-muted: var(--ink-faint);
|
|
951
|
+
--text-tertiary: var(--muted);
|
|
952
|
+
--text-inverse: var(--paper);
|
|
953
|
+
--text-link: var(--ai);
|
|
954
|
+
--text-link-hover: var(--ai-ink);
|
|
955
|
+
/* Borders */
|
|
956
|
+
--border-default: var(--hair);
|
|
957
|
+
--border-subtle: var(--hair-soft);
|
|
958
|
+
--border-emphasis: var(--ink);
|
|
959
|
+
--border-focus: var(--ai);
|
|
960
|
+
/* Interactive (hover / active wash layers) — macOS faint ink overlay */
|
|
961
|
+
--interactive-hover: rgba(0, 0, 0, 0.04);
|
|
962
|
+
--interactive-active: rgba(0, 0, 0, 0.08);
|
|
963
|
+
/* Brand (identity — action-primary usually references these) */
|
|
964
|
+
--brand-primary: var(--ai);
|
|
965
|
+
--brand-primary-hover: var(--ai-ink);
|
|
966
|
+
/* Action (primary / secondary / tertiary) */
|
|
967
|
+
--action-primary-default: var(--ai);
|
|
968
|
+
--action-primary-hover: var(--ai-ink);
|
|
969
|
+
--action-primary-active: var(--ai-ink);
|
|
970
|
+
--action-primary-wash: var(--ai-wash);
|
|
971
|
+
--action-secondary-default: var(--shu);
|
|
972
|
+
--action-secondary-hover: var(--shu);
|
|
973
|
+
--action-secondary-active: var(--shu);
|
|
974
|
+
--action-secondary-wash: var(--shu-wash);
|
|
975
|
+
--action-tertiary-default: var(--ochre);
|
|
976
|
+
--action-tertiary-hover: var(--ochre);
|
|
977
|
+
--action-tertiary-active: var(--ochre);
|
|
978
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
979
|
+
/* Feedback / status (high-level semantic) */
|
|
980
|
+
--feedback-info: var(--ai);
|
|
981
|
+
--feedback-success: var(--code-green);
|
|
982
|
+
--feedback-warning: var(--ochre);
|
|
983
|
+
--feedback-error: var(--shu);
|
|
984
|
+
/* Status — info (three-part: default / subtle / text) */
|
|
985
|
+
--info-default: var(--ai);
|
|
986
|
+
--info-subtle: var(--ai-wash);
|
|
987
|
+
--info-text: var(--ai-ink);
|
|
988
|
+
/* Status — success (macOS system green) */
|
|
989
|
+
--success-default: var(--code-green);
|
|
990
|
+
--success-subtle: rgba(48, 209, 88, 0.12);
|
|
991
|
+
--success-text: #0F6E22;
|
|
992
|
+
/* Status — warning (macOS system orange) */
|
|
993
|
+
--warning-default: var(--ochre);
|
|
994
|
+
--warning-subtle: var(--ochre-wash);
|
|
995
|
+
--warning-text: #985000;
|
|
996
|
+
/* Status — error (macOS system red) */
|
|
997
|
+
--error-default: var(--shu);
|
|
998
|
+
--error-subtle: rgba(255, 59, 48, 0.12);
|
|
999
|
+
--error-text: #A8281F;
|
|
1000
|
+
/* ----------------------------------------------------------
|
|
1001
|
+
LIBRARY SCALES (space / radius / type / motion / z)
|
|
1002
|
+
-----------------------------------------------------------
|
|
1003
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
1004
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
1005
|
+
Themes declare the slots so those mixins always resolve.
|
|
1006
|
+
---------------------------------------------------------- */
|
|
1007
|
+
/* Space scale (rem for accessibility) */
|
|
1008
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
1009
|
+
The numbered scale is the source of truth: every component reads
|
|
1010
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
1011
|
+
are emitted by the library as references to these, so they follow
|
|
1012
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
1013
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
1014
|
+
--space-0: 0; /* flush */
|
|
1015
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
1016
|
+
--space-2: 0.75rem; /* control padding */
|
|
1017
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
1018
|
+
--space-4: 1rem; /* default rhythm */
|
|
1019
|
+
--space-5: 1.5rem; /* section gap */
|
|
1020
|
+
--space-6: 2rem; /* block gap */
|
|
1021
|
+
--space-7: 3rem; /* major gap */
|
|
1022
|
+
--space-8: 4rem; /* page section */
|
|
1023
|
+
--space-9: 6rem; /* hero rhythm */
|
|
1024
|
+
/* Radius alias — mirrors --r-* with standard names so
|
|
1025
|
+
`m.radius(size)` in the library finds --radius-<size>. */
|
|
1026
|
+
--radius-sm: var(--r-sm);
|
|
1027
|
+
--radius-md: var(--r-md);
|
|
1028
|
+
--radius-lg: var(--r-lg);
|
|
1029
|
+
--radius-xl: 0.75rem;
|
|
1030
|
+
--radius-full: 9999px;
|
|
1031
|
+
/* Shadow — higher-elevation slots (AppKit floating surfaces) */
|
|
1032
|
+
--shadow-xl: 0 20px 50px rgba(0, 0, 0, 0.14), 0 4px 10px rgba(0, 0, 0, 0.05);
|
|
1033
|
+
--shadow-2xl: 0 28px 70px rgba(0, 0, 0, 0.20), 0 6px 14px rgba(0, 0, 0, 0.06);
|
|
1034
|
+
/* Typography — base body font + key scale slots (SF Pro stack) */
|
|
1035
|
+
--font-primary: var(--font-sans);
|
|
1036
|
+
--font-size-base: 1rem;
|
|
1037
|
+
--line-height-normal: 1.5;
|
|
1038
|
+
--font-weight-medium: 500;
|
|
1039
|
+
/* Z-index layers */
|
|
1040
|
+
--z-sticky: 1020;
|
|
1041
|
+
--z-dropdown: 1030;
|
|
1042
|
+
--z-backdrop: 1040;
|
|
1043
|
+
--z-modal: 1050;
|
|
1044
|
+
--z-popover: 1060;
|
|
1045
|
+
--z-tooltip: 1070;
|
|
1046
|
+
/* ----------------------------------------------------------
|
|
1047
|
+
OPTIONAL COMPONENT OVERRIDES (Feature 1.3)
|
|
1048
|
+
-----------------------------------------------------------
|
|
1049
|
+
Cupertino expresses AppKit UI: softly rounded controls,
|
|
1050
|
+
diffuse card lift, larger panel radii. Overrides are
|
|
1051
|
+
intentionally sparse — pick the ones that carry the
|
|
1052
|
+
identity of the OS, leave the rest on library defaults.
|
|
1053
|
+
---------------------------------------------------------- */
|
|
1054
|
+
--btn-radius: var(--r-md); /* 10px — AppKit control */
|
|
1055
|
+
--card-radius: var(--r-lg); /* 14px — panel corner */
|
|
1056
|
+
--card-shadow: var(--shadow-sm); /* diffuse, lifted */
|
|
1057
|
+
--input-radius: var(--r-sm); /* 8px — text field */
|
|
1058
|
+
--modal-radius: var(--r-lg); /* matches panel */
|
|
1059
|
+
--tooltip-radius: var(--r-sm); /* bezel tooltip */
|
|
1060
|
+
}
|
|
1061
|
+
:root[data-theme=glass] {
|
|
1062
|
+
color-scheme: light dark;
|
|
1063
|
+
/* Surfaces — frosted translucent / blue-black void */
|
|
1064
|
+
--paper: light-dark(#F4EEFF, #0A0F1A);
|
|
1065
|
+
--paper-raised: light-dark(#FFF, #141E32);
|
|
1066
|
+
--paper-sunk: light-dark(#E8E0F5, #050810);
|
|
1067
|
+
--paper-glass: light-dark(rgba(255, 255, 255, 0.55), rgba(20, 30, 50, 0.60));
|
|
1068
|
+
/* Ink — warm near-black / cool near-white */
|
|
1069
|
+
--ink: light-dark(#1D1D1F, #F0F4FF);
|
|
1070
|
+
--ink-soft: light-dark(#3A3A3C, #C8CFE0);
|
|
1071
|
+
--ink-faint: light-dark(#65656A, #8A92A8);
|
|
1072
|
+
--graphite: light-dark(#2C2C2E, #DCE2F0);
|
|
1073
|
+
--muted: light-dark(#6E6E73, #5A627A);
|
|
1074
|
+
/* Construction lines — translucent */
|
|
1075
|
+
--guide: light-dark(rgba(29, 29, 31, 0.14), rgba(240, 244, 255, 0.16));
|
|
1076
|
+
--guide-soft: light-dark(rgba(29, 29, 31, 0.10), rgba(240, 244, 255, 0.08));
|
|
1077
|
+
--hair: light-dark(rgba(29, 29, 31, 0.08), rgba(240, 244, 255, 0.12));
|
|
1078
|
+
--hair-soft: light-dark(rgba(29, 29, 31, 0.04), rgba(240, 244, 255, 0.06));
|
|
1079
|
+
/* Primary accent — iOS indigo / vibrant dark blue */
|
|
1080
|
+
--ai: light-dark(#5957E2, #6FA9FF);
|
|
1081
|
+
--ai-ink: light-dark(#3634A3, #93C2FF);
|
|
1082
|
+
--ai-wash: light-dark(rgba(89, 87, 226, 0.12), rgba(111, 169, 255, 0.16));
|
|
1083
|
+
/* Seal — iOS system pink */
|
|
1084
|
+
--shu: light-dark(#FF375F, #FF6B8A);
|
|
1085
|
+
--shu-wash: light-dark(rgba(255, 55, 95, 0.12), rgba(255, 107, 138, 0.16));
|
|
1086
|
+
/* Draft / marginalia — iOS orange */
|
|
1087
|
+
--ochre: light-dark(#FF9500, #FFC56B);
|
|
1088
|
+
--ochre-wash: light-dark(rgba(255, 149, 0, 0.14), rgba(255, 197, 107, 0.16));
|
|
1089
|
+
/* Code surface */
|
|
1090
|
+
--code-bg: light-dark(rgba(29, 29, 31, 0.82), rgba(5, 8, 16, 0.82));
|
|
1091
|
+
--code-ink: light-dark(#F5F5F7, #F0F4FF);
|
|
1092
|
+
--code-muted: light-dark(#BCBCC0, #8A92A8);
|
|
1093
|
+
--code-accent: #FFD60A;
|
|
1094
|
+
--code-green: light-dark(#30D158, #5FE37F);
|
|
1095
|
+
--code-blue: light-dark(#64D2FF, #93C2FF);
|
|
1096
|
+
/* Typography — SF stack, identical */
|
|
1097
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', system-ui, sans-serif;
|
|
1098
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
1099
|
+
--font-serif: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', Georgia, serif;
|
|
1100
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Inter', system-ui, sans-serif;
|
|
1101
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', Menlo, Consolas, monospace;
|
|
1102
|
+
/* Radius — soft and large, identical */
|
|
1103
|
+
--r-sm: 10px;
|
|
1104
|
+
--r-md: 18px;
|
|
1105
|
+
--r-lg: 24px;
|
|
1106
|
+
/* Shadows — floaty with cool-blue undertone / deep dark drops */
|
|
1107
|
+
--shadow-sm: 0 2px 10px light-dark(rgba(31, 38, 135, 0.06), rgba(0, 0, 0, 0.30));
|
|
1108
|
+
--shadow-md: 0 8px 32px light-dark(rgba(31, 38, 135, 0.10), rgba(0, 0, 0, 0.42));
|
|
1109
|
+
--shadow-lg: 0 24px 60px light-dark(rgba(31, 38, 135, 0.14), rgba(0, 0, 0, 0.55));
|
|
1110
|
+
--shadow-xl: 0 40px 80px light-dark(rgba(31, 38, 135, 0.18), rgba(0, 0, 0, 0.65));
|
|
1111
|
+
--shadow-2xl: 0 56px 112px light-dark(rgba(31, 38, 135, 0.24), rgba(0, 0, 0, 0.75));
|
|
1112
|
+
/* Blur — LIGHT defaults; dark overrides below via nested @media */
|
|
1113
|
+
--blur-sm: blur(14px) saturate(160%);
|
|
1114
|
+
--blur-md: blur(22px) saturate(170%);
|
|
1115
|
+
--blur-lg: blur(30px) saturate(180%);
|
|
1116
|
+
/* Glow — dual-inset rim highlight (LIGHT defaults; dark overrides below) */
|
|
1117
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.70);
|
|
1118
|
+
--glow-md:
|
|
1119
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.85),
|
|
1120
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.20),
|
|
1121
|
+
inset 1px 0 0 rgba(255, 255, 255, 0.35),
|
|
1122
|
+
inset -1px 0 0 rgba(255, 255, 255, 0.20);
|
|
1123
|
+
--glow-lg:
|
|
1124
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.95),
|
|
1125
|
+
inset 0 -2px 0 rgba(255, 255, 255, 0.25),
|
|
1126
|
+
inset 2px 0 0 rgba(255, 255, 255, 0.45),
|
|
1127
|
+
inset -2px 0 0 rgba(255, 255, 255, 0.25),
|
|
1128
|
+
inset 0 0 40px rgba(255, 255, 255, 0.15);
|
|
1129
|
+
/* Motion — identical */
|
|
1130
|
+
--duration-fast: 180ms;
|
|
1131
|
+
--duration-normal: 240ms;
|
|
1132
|
+
--duration-slow: 380ms;
|
|
1133
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
1134
|
+
/* ---- Pattern C: dark-mode overrides for NON-COLOR tokens ----
|
|
1135
|
+
* stylelint can't trace through @include m.theme() to know the
|
|
1136
|
+
* parent selector is :root[data-theme="glass"]; the declarations
|
|
1137
|
+
* below are valid in compiled output (Sass hoists @media + scopes
|
|
1138
|
+
* the vars under the parent selector). */
|
|
1139
|
+
/* stylelint-disable no-invalid-position-declaration -- see comment above */
|
|
1140
|
+
}
|
|
1141
|
+
:root[data-theme=glass] {
|
|
1142
|
+
/* stylelint-enable no-invalid-position-declaration */
|
|
1143
|
+
/* Semantic aliases */
|
|
1144
|
+
--background-default: var(--paper);
|
|
1145
|
+
--background-subtle: var(--paper-sunk);
|
|
1146
|
+
--background-navbar: var(--paper-raised);
|
|
1147
|
+
--surface-default: var(--paper);
|
|
1148
|
+
--surface-raised: var(--paper-raised);
|
|
1149
|
+
--surface-sunk: var(--paper-sunk);
|
|
1150
|
+
--surface-muted: var(--paper-sunk);
|
|
1151
|
+
--surface-subtle: var(--paper-raised);
|
|
1152
|
+
--surface-emphasis: var(--ink);
|
|
1153
|
+
--surface-glass: var(--paper-glass);
|
|
1154
|
+
--text-primary: var(--ink);
|
|
1155
|
+
--text-secondary: var(--ink-soft);
|
|
1156
|
+
--text-muted: var(--ink-faint);
|
|
1157
|
+
--text-tertiary: var(--muted);
|
|
1158
|
+
--text-inverse: var(--paper);
|
|
1159
|
+
--text-link: var(--ai);
|
|
1160
|
+
--text-link-hover: var(--ai-ink);
|
|
1161
|
+
--border-default: var(--hair);
|
|
1162
|
+
--border-subtle: var(--hair-soft);
|
|
1163
|
+
--border-emphasis: var(--ink);
|
|
1164
|
+
--border-focus: var(--ai);
|
|
1165
|
+
--interactive-hover: light-dark(rgba(29, 29, 31, 0.04), rgba(240, 244, 255, 0.05));
|
|
1166
|
+
--interactive-active: light-dark(rgba(29, 29, 31, 0.08), rgba(240, 244, 255, 0.10));
|
|
1167
|
+
--brand-primary: var(--ai);
|
|
1168
|
+
--brand-primary-hover: var(--ai-ink);
|
|
1169
|
+
--action-primary-default: var(--ai);
|
|
1170
|
+
--action-primary-hover: var(--ai-ink);
|
|
1171
|
+
--action-primary-active: var(--ai-ink);
|
|
1172
|
+
--action-primary-wash: var(--ai-wash);
|
|
1173
|
+
--action-secondary-default: var(--shu);
|
|
1174
|
+
--action-secondary-hover: var(--shu);
|
|
1175
|
+
--action-secondary-active: var(--shu);
|
|
1176
|
+
--action-secondary-wash: var(--shu-wash);
|
|
1177
|
+
--action-tertiary-default: var(--ochre);
|
|
1178
|
+
--action-tertiary-hover: var(--ochre);
|
|
1179
|
+
--action-tertiary-active: var(--ochre);
|
|
1180
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
1181
|
+
--feedback-info: var(--ai);
|
|
1182
|
+
--feedback-success: var(--code-green);
|
|
1183
|
+
--feedback-warning: var(--ochre);
|
|
1184
|
+
--feedback-error: var(--shu);
|
|
1185
|
+
--info-default: var(--ai);
|
|
1186
|
+
--info-subtle: light-dark(rgba(89, 87, 226, 0.12), rgba(111, 169, 255, 0.16));
|
|
1187
|
+
--info-text: var(--ai-ink);
|
|
1188
|
+
--success-default: light-dark(#34C759, #30D158);
|
|
1189
|
+
--success-subtle: light-dark(rgba(52, 199, 89, 0.12), rgba(48, 209, 88, 0.16));
|
|
1190
|
+
--success-text: light-dark(#0F6A22, #5FE37F);
|
|
1191
|
+
--warning-default: var(--ochre);
|
|
1192
|
+
--warning-subtle: var(--ochre-wash);
|
|
1193
|
+
--warning-text: light-dark(#985000, #FFD79A);
|
|
1194
|
+
--error-default: var(--shu);
|
|
1195
|
+
--error-subtle: var(--shu-wash);
|
|
1196
|
+
--error-text: light-dark(#A3193A, #FF93AB);
|
|
1197
|
+
/* Library scales — identical */
|
|
1198
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
1199
|
+
The numbered scale is the source of truth: every component reads
|
|
1200
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
1201
|
+
are emitted by the library as references to these, so they follow
|
|
1202
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
1203
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
1204
|
+
--space-0: 0; /* flush */
|
|
1205
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
1206
|
+
--space-2: 0.75rem; /* control padding */
|
|
1207
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
1208
|
+
--space-4: 1rem; /* default rhythm */
|
|
1209
|
+
--space-5: 1.5rem; /* section gap */
|
|
1210
|
+
--space-6: 2rem; /* block gap */
|
|
1211
|
+
--space-7: 3rem; /* major gap */
|
|
1212
|
+
--space-8: 4rem; /* page section */
|
|
1213
|
+
--space-9: 6rem; /* hero rhythm */
|
|
1214
|
+
--radius-sm: var(--r-sm);
|
|
1215
|
+
--radius-md: var(--r-md);
|
|
1216
|
+
--radius-lg: var(--r-lg);
|
|
1217
|
+
--radius-xl: 0.75rem;
|
|
1218
|
+
--radius-full: 9999px;
|
|
1219
|
+
--font-primary: var(--font-sans);
|
|
1220
|
+
--font-size-base: 1rem;
|
|
1221
|
+
--line-height-normal: 1.5;
|
|
1222
|
+
--font-weight-medium: 500;
|
|
1223
|
+
--z-sticky: 1020;
|
|
1224
|
+
--z-dropdown: 1030;
|
|
1225
|
+
--z-backdrop: 1040;
|
|
1226
|
+
--z-modal: 1050;
|
|
1227
|
+
--z-popover: 1060;
|
|
1228
|
+
--z-tooltip: 1070;
|
|
1229
|
+
}
|
|
1230
|
+
:root[data-theme=glass-dark] {
|
|
1231
|
+
color-scheme: dark;
|
|
1232
|
+
/* Surfaces — frosted translucent over deep blue-black */
|
|
1233
|
+
--paper: #0A0F1A;
|
|
1234
|
+
--paper-raised: #141E32;
|
|
1235
|
+
--paper-sunk: #050810;
|
|
1236
|
+
--paper-glass: rgba(20, 30, 50, 0.60);
|
|
1237
|
+
/* Ink — cool near-white, glassy */
|
|
1238
|
+
--ink: #F0F4FF;
|
|
1239
|
+
--ink-soft: #C8CFE0;
|
|
1240
|
+
--ink-faint: #8A92A8;
|
|
1241
|
+
--graphite: #DCE2F0;
|
|
1242
|
+
--muted: #5A627A;
|
|
1243
|
+
/* Construction lines — translucent white hairlines */
|
|
1244
|
+
--guide: rgba(240, 244, 255, 0.16);
|
|
1245
|
+
--guide-soft: rgba(240, 244, 255, 0.08);
|
|
1246
|
+
--hair: rgba(240, 244, 255, 0.12);
|
|
1247
|
+
--hair-soft: rgba(240, 244, 255, 0.06);
|
|
1248
|
+
/* Primary accent — vibrant iOS dark indigo/blue */
|
|
1249
|
+
--ai: #6FA9FF;
|
|
1250
|
+
--ai-ink: #93C2FF;
|
|
1251
|
+
--ai-wash: rgba(111, 169, 255, 0.16);
|
|
1252
|
+
/* Seal — vibrant iOS dark pink */
|
|
1253
|
+
--shu: #FF6B8A;
|
|
1254
|
+
--shu-wash: rgba(255, 107, 138, 0.16);
|
|
1255
|
+
/* Draft / marginalia — vibrant iOS dark orange */
|
|
1256
|
+
--ochre: #FFC56B;
|
|
1257
|
+
--ochre-wash: rgba(255, 197, 107, 0.16);
|
|
1258
|
+
/* Code surface — translucent over deep paper */
|
|
1259
|
+
--code-bg: rgba(5, 8, 16, 0.82);
|
|
1260
|
+
--code-ink: #F0F4FF;
|
|
1261
|
+
--code-muted: #8A92A8;
|
|
1262
|
+
--code-accent: #FFD60A;
|
|
1263
|
+
--code-green: #5FE37F;
|
|
1264
|
+
--code-blue: #93C2FF;
|
|
1265
|
+
/* Typography — match Glass (SF system stack) */
|
|
1266
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', system-ui, sans-serif;
|
|
1267
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
1268
|
+
--font-serif: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', Georgia, serif;
|
|
1269
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Inter', system-ui, sans-serif;
|
|
1270
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', Menlo, Consolas, monospace;
|
|
1271
|
+
/* Radius — match Glass (soft and large, iOS-style) */
|
|
1272
|
+
--r-sm: 10px;
|
|
1273
|
+
--r-md: 18px;
|
|
1274
|
+
--r-lg: 24px;
|
|
1275
|
+
/* Shadows — floaty with deep undertone (dark needs heavier drops) */
|
|
1276
|
+
--shadow-sm: 0 2px 10px rgba(0, 0, 0, 0.30);
|
|
1277
|
+
--shadow-md: 0 8px 32px rgba(0, 0, 0, 0.42);
|
|
1278
|
+
--shadow-lg: 0 24px 60px rgba(0, 0, 0, 0.55);
|
|
1279
|
+
--shadow-xl: 0 40px 80px rgba(0, 0, 0, 0.65);
|
|
1280
|
+
--shadow-2xl: 0 56px 112px rgba(0, 0, 0, 0.75);
|
|
1281
|
+
/* Blur — THE star token; tuned for dark-glass depth */
|
|
1282
|
+
--blur-sm: blur(12px) saturate(160%);
|
|
1283
|
+
--blur-md: blur(18px) saturate(180%);
|
|
1284
|
+
--blur-lg: blur(20px) saturate(200%);
|
|
1285
|
+
/* Glow — dual-inset rim highlight (visionOS dark catches less but still rims) */
|
|
1286
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.16);
|
|
1287
|
+
--glow-md:
|
|
1288
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.22),
|
|
1289
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.06),
|
|
1290
|
+
inset 1px 0 0 rgba(255, 255, 255, 0.10),
|
|
1291
|
+
inset -1px 0 0 rgba(255, 255, 255, 0.06);
|
|
1292
|
+
--glow-lg:
|
|
1293
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.28),
|
|
1294
|
+
inset 0 -2px 0 rgba(255, 255, 255, 0.08),
|
|
1295
|
+
inset 2px 0 0 rgba(255, 255, 255, 0.14),
|
|
1296
|
+
inset -2px 0 0 rgba(255, 255, 255, 0.08),
|
|
1297
|
+
inset 0 0 40px rgba(111, 169, 255, 0.08);
|
|
1298
|
+
/* Motion — match Glass */
|
|
1299
|
+
--duration-fast: 180ms;
|
|
1300
|
+
--duration-normal: 240ms;
|
|
1301
|
+
--duration-slow: 380ms;
|
|
1302
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
1303
|
+
/* ----------------------------------------------------------
|
|
1304
|
+
SEMANTIC ALIASES
|
|
1305
|
+
---------------------------------------------------------- */
|
|
1306
|
+
/* Backgrounds */
|
|
1307
|
+
--background-default: var(--paper);
|
|
1308
|
+
--background-subtle: var(--paper-sunk);
|
|
1309
|
+
--background-navbar: var(--paper-raised);
|
|
1310
|
+
/* Surfaces */
|
|
1311
|
+
--surface-default: var(--paper);
|
|
1312
|
+
--surface-raised: var(--paper-raised);
|
|
1313
|
+
--surface-sunk: var(--paper-sunk);
|
|
1314
|
+
--surface-muted: var(--paper-sunk);
|
|
1315
|
+
--surface-subtle: var(--paper-raised);
|
|
1316
|
+
--surface-emphasis: var(--ink);
|
|
1317
|
+
--surface-glass: var(--paper-glass);
|
|
1318
|
+
/* Text */
|
|
1319
|
+
--text-primary: var(--ink);
|
|
1320
|
+
--text-secondary: var(--ink-soft);
|
|
1321
|
+
--text-muted: var(--ink-faint);
|
|
1322
|
+
--text-tertiary: var(--muted);
|
|
1323
|
+
--text-inverse: var(--paper);
|
|
1324
|
+
--text-link: var(--ai);
|
|
1325
|
+
--text-link-hover: var(--ai-ink);
|
|
1326
|
+
/* Borders */
|
|
1327
|
+
--border-default: var(--hair);
|
|
1328
|
+
--border-subtle: var(--hair-soft);
|
|
1329
|
+
--border-emphasis: var(--ink);
|
|
1330
|
+
--border-focus: var(--ai);
|
|
1331
|
+
/* Interactive — kept very subtle so glass translucency reads through */
|
|
1332
|
+
--interactive-hover: rgba(240, 244, 255, 0.05);
|
|
1333
|
+
--interactive-active: rgba(240, 244, 255, 0.10);
|
|
1334
|
+
/* Brand */
|
|
1335
|
+
--brand-primary: var(--ai);
|
|
1336
|
+
--brand-primary-hover: var(--ai-ink);
|
|
1337
|
+
/* Action triplets */
|
|
1338
|
+
--action-primary-default: var(--ai);
|
|
1339
|
+
--action-primary-hover: var(--ai-ink);
|
|
1340
|
+
--action-primary-active: var(--ai-ink);
|
|
1341
|
+
--action-primary-wash: var(--ai-wash);
|
|
1342
|
+
--action-secondary-default: var(--shu);
|
|
1343
|
+
--action-secondary-hover: var(--shu);
|
|
1344
|
+
--action-secondary-active: var(--shu);
|
|
1345
|
+
--action-secondary-wash: var(--shu-wash);
|
|
1346
|
+
--action-tertiary-default: var(--ochre);
|
|
1347
|
+
--action-tertiary-hover: var(--ochre);
|
|
1348
|
+
--action-tertiary-active: var(--ochre);
|
|
1349
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
1350
|
+
/* Feedback */
|
|
1351
|
+
--feedback-info: var(--ai);
|
|
1352
|
+
--feedback-success: var(--code-green);
|
|
1353
|
+
--feedback-warning: var(--ochre);
|
|
1354
|
+
--feedback-error: var(--shu);
|
|
1355
|
+
/* Status — info */
|
|
1356
|
+
--info-default: var(--ai);
|
|
1357
|
+
--info-subtle: rgba(111, 169, 255, 0.16);
|
|
1358
|
+
--info-text: var(--ai-ink);
|
|
1359
|
+
/* Status — success (iOS dark green) */
|
|
1360
|
+
--success-default: #30D158;
|
|
1361
|
+
--success-subtle: rgba(48, 209, 88, 0.16);
|
|
1362
|
+
--success-text: #5FE37F;
|
|
1363
|
+
/* Status — warning */
|
|
1364
|
+
--warning-default: var(--ochre);
|
|
1365
|
+
--warning-subtle: rgba(255, 197, 107, 0.16);
|
|
1366
|
+
--warning-text: #FFD79A;
|
|
1367
|
+
/* Status — error */
|
|
1368
|
+
--error-default: var(--shu);
|
|
1369
|
+
--error-subtle: rgba(255, 107, 138, 0.16);
|
|
1370
|
+
--error-text: #FF93AB;
|
|
1371
|
+
/* ----------------------------------------------------------
|
|
1372
|
+
LIBRARY SCALES
|
|
1373
|
+
---------------------------------------------------------- */
|
|
1374
|
+
/* Space scale */
|
|
1375
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
1376
|
+
The numbered scale is the source of truth: every component reads
|
|
1377
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
1378
|
+
are emitted by the library as references to these, so they follow
|
|
1379
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
1380
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
1381
|
+
--space-0: 0; /* flush */
|
|
1382
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
1383
|
+
--space-2: 0.75rem; /* control padding */
|
|
1384
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
1385
|
+
--space-4: 1rem; /* default rhythm */
|
|
1386
|
+
--space-5: 1.5rem; /* section gap */
|
|
1387
|
+
--space-6: 2rem; /* block gap */
|
|
1388
|
+
--space-7: 3rem; /* major gap */
|
|
1389
|
+
--space-8: 4rem; /* page section */
|
|
1390
|
+
--space-9: 6rem; /* hero rhythm */
|
|
1391
|
+
/* Radius alias */
|
|
1392
|
+
--radius-sm: var(--r-sm);
|
|
1393
|
+
--radius-md: var(--r-md);
|
|
1394
|
+
--radius-lg: var(--r-lg);
|
|
1395
|
+
--radius-xl: 0.75rem;
|
|
1396
|
+
--radius-full: 9999px;
|
|
1397
|
+
/* Typography */
|
|
1398
|
+
--font-primary: var(--font-sans);
|
|
1399
|
+
--font-size-base: 1rem;
|
|
1400
|
+
--line-height-normal: 1.5;
|
|
1401
|
+
--font-weight-medium: 500;
|
|
1402
|
+
/* Z-index */
|
|
1403
|
+
--z-sticky: 1020;
|
|
1404
|
+
--z-dropdown: 1030;
|
|
1405
|
+
--z-backdrop: 1040;
|
|
1406
|
+
--z-modal: 1050;
|
|
1407
|
+
--z-popover: 1060;
|
|
1408
|
+
--z-tooltip: 1070;
|
|
1409
|
+
}
|
|
1410
|
+
:root[data-theme=glass-light] {
|
|
1411
|
+
color-scheme: light;
|
|
1412
|
+
/* Surfaces — frosted translucent over a lavender-tint base */
|
|
1413
|
+
--paper: #F4EEFF;
|
|
1414
|
+
--paper-raised: #FFF;
|
|
1415
|
+
--paper-sunk: #E8E0F5;
|
|
1416
|
+
--paper-glass: rgba(255, 255, 255, 0.55);
|
|
1417
|
+
/* Ink — warm near-black, Apple style */
|
|
1418
|
+
--ink: #1D1D1F;
|
|
1419
|
+
--ink-soft: #3A3A3C;
|
|
1420
|
+
--ink-faint: #65656A;
|
|
1421
|
+
--graphite: #2C2C2E;
|
|
1422
|
+
--muted: #6E6E73;
|
|
1423
|
+
/* Construction lines — glass doesn't like hard edges */
|
|
1424
|
+
--guide: rgba(29, 29, 31, 0.14);
|
|
1425
|
+
--guide-soft: rgba(29, 29, 31, 0.10);
|
|
1426
|
+
--hair: rgba(29, 29, 31, 0.08);
|
|
1427
|
+
--hair-soft: rgba(29, 29, 31, 0.04);
|
|
1428
|
+
/* Primary accent — iOS indigo */
|
|
1429
|
+
--ai: #5957E2;
|
|
1430
|
+
--ai-ink: #3634A3;
|
|
1431
|
+
--ai-wash: rgba(89, 87, 226, 0.12);
|
|
1432
|
+
/* Seal — iOS system pink (draft / emphasis) */
|
|
1433
|
+
--shu: #FF375F;
|
|
1434
|
+
--shu-wash: rgba(255, 55, 95, 0.12);
|
|
1435
|
+
/* Draft / marginalia — iOS orange */
|
|
1436
|
+
--ochre: #FF9500;
|
|
1437
|
+
--ochre-wash: rgba(255, 149, 0, 0.14);
|
|
1438
|
+
/* Code surface */
|
|
1439
|
+
--code-bg: rgba(29, 29, 31, 0.82);
|
|
1440
|
+
--code-ink: #F5F5F7;
|
|
1441
|
+
--code-muted: #BABABE;
|
|
1442
|
+
--code-accent: #FFD60A;
|
|
1443
|
+
--code-green: #30D158;
|
|
1444
|
+
--code-blue: #64D2FF;
|
|
1445
|
+
/* Typography — SF system stack */
|
|
1446
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', system-ui, sans-serif;
|
|
1447
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
1448
|
+
--font-serif: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', Georgia, serif;
|
|
1449
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'SF Pro Text', 'Inter', system-ui, sans-serif;
|
|
1450
|
+
--font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', Menlo, Consolas, monospace;
|
|
1451
|
+
/* Radius — soft and large, iOS-style */
|
|
1452
|
+
--r-sm: 10px;
|
|
1453
|
+
--r-md: 18px;
|
|
1454
|
+
--r-lg: 24px;
|
|
1455
|
+
/* Shadows — floaty with a cool-blue undertone */
|
|
1456
|
+
--shadow-sm: 0 2px 10px rgba(31, 38, 135, 0.06);
|
|
1457
|
+
--shadow-md: 0 8px 32px rgba(31, 38, 135, 0.10);
|
|
1458
|
+
--shadow-lg: 0 24px 60px rgba(31, 38, 135, 0.14);
|
|
1459
|
+
--shadow-xl: 0 40px 80px rgba(31, 38, 135, 0.18);
|
|
1460
|
+
--shadow-2xl: 0 56px 112px rgba(31, 38, 135, 0.24);
|
|
1461
|
+
/* Blur — the star of this theme; pair with --paper-glass */
|
|
1462
|
+
--blur-sm: blur(14px) saturate(160%);
|
|
1463
|
+
--blur-md: blur(22px) saturate(170%);
|
|
1464
|
+
--blur-lg: blur(30px) saturate(180%);
|
|
1465
|
+
/* Glow — dual-inset rim highlight (catches light like visionOS) */
|
|
1466
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.70);
|
|
1467
|
+
--glow-md:
|
|
1468
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.85),
|
|
1469
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.20),
|
|
1470
|
+
inset 1px 0 0 rgba(255, 255, 255, 0.35),
|
|
1471
|
+
inset -1px 0 0 rgba(255, 255, 255, 0.20);
|
|
1472
|
+
--glow-lg:
|
|
1473
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.95),
|
|
1474
|
+
inset 0 -2px 0 rgba(255, 255, 255, 0.25),
|
|
1475
|
+
inset 2px 0 0 rgba(255, 255, 255, 0.45),
|
|
1476
|
+
inset -2px 0 0 rgba(255, 255, 255, 0.25),
|
|
1477
|
+
inset 0 0 40px rgba(255, 255, 255, 0.15);
|
|
1478
|
+
/* Motion */
|
|
1479
|
+
--duration-fast: 180ms;
|
|
1480
|
+
--duration-normal: 240ms;
|
|
1481
|
+
--duration-slow: 380ms;
|
|
1482
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
1483
|
+
/* ----------------------------------------------------------
|
|
1484
|
+
SEMANTIC ALIASES
|
|
1485
|
+
-----------------------------------------------------------
|
|
1486
|
+
Bridge the library's expected names to this theme's native
|
|
1487
|
+
palette. Components can now write m.color(surface-default)
|
|
1488
|
+
or var(--surface-default) and reskin with the theme
|
|
1489
|
+
automatically.
|
|
1490
|
+
---------------------------------------------------------- */
|
|
1491
|
+
/* Backgrounds (page-level) */
|
|
1492
|
+
--background-default: var(--paper);
|
|
1493
|
+
--background-subtle: var(--paper-sunk);
|
|
1494
|
+
--background-navbar: var(--paper-raised);
|
|
1495
|
+
/* Surfaces */
|
|
1496
|
+
--surface-default: var(--paper);
|
|
1497
|
+
--surface-raised: var(--paper-raised);
|
|
1498
|
+
--surface-sunk: var(--paper-sunk);
|
|
1499
|
+
--surface-muted: var(--paper-sunk);
|
|
1500
|
+
--surface-subtle: var(--paper-raised);
|
|
1501
|
+
--surface-emphasis: var(--ink);
|
|
1502
|
+
--surface-glass: var(--paper-glass);
|
|
1503
|
+
/* Text */
|
|
1504
|
+
--text-primary: var(--ink);
|
|
1505
|
+
--text-secondary: var(--ink-soft);
|
|
1506
|
+
--text-muted: var(--ink-faint);
|
|
1507
|
+
--text-tertiary: var(--muted);
|
|
1508
|
+
--text-inverse: var(--paper);
|
|
1509
|
+
--text-link: var(--ai);
|
|
1510
|
+
--text-link-hover: var(--ai-ink);
|
|
1511
|
+
/* Borders */
|
|
1512
|
+
--border-default: var(--hair);
|
|
1513
|
+
--border-subtle: var(--hair-soft);
|
|
1514
|
+
--border-emphasis: var(--ink);
|
|
1515
|
+
--border-focus: var(--ai);
|
|
1516
|
+
/* Interactive (hover / active wash layers)
|
|
1517
|
+
Kept subtle so glass translucency reads through. */
|
|
1518
|
+
--interactive-hover: rgba(29, 29, 31, 0.04);
|
|
1519
|
+
--interactive-active: rgba(29, 29, 31, 0.08);
|
|
1520
|
+
/* Brand (identity — action-primary usually references these) */
|
|
1521
|
+
--brand-primary: var(--ai);
|
|
1522
|
+
--brand-primary-hover: var(--ai-ink);
|
|
1523
|
+
/* Action (primary / secondary / tertiary) */
|
|
1524
|
+
--action-primary-default: var(--ai);
|
|
1525
|
+
--action-primary-hover: var(--ai-ink);
|
|
1526
|
+
--action-primary-active: var(--ai-ink);
|
|
1527
|
+
--action-primary-wash: var(--ai-wash);
|
|
1528
|
+
--action-secondary-default: var(--shu);
|
|
1529
|
+
--action-secondary-hover: var(--shu);
|
|
1530
|
+
--action-secondary-active: var(--shu);
|
|
1531
|
+
--action-secondary-wash: var(--shu-wash);
|
|
1532
|
+
--action-tertiary-default: var(--ochre);
|
|
1533
|
+
--action-tertiary-hover: var(--ochre);
|
|
1534
|
+
--action-tertiary-active: var(--ochre);
|
|
1535
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
1536
|
+
/* Feedback / status (high-level semantic) */
|
|
1537
|
+
--feedback-info: var(--ai);
|
|
1538
|
+
--feedback-success: var(--code-green);
|
|
1539
|
+
--feedback-warning: var(--ochre);
|
|
1540
|
+
--feedback-error: var(--shu);
|
|
1541
|
+
/* Status — info (three-part: default / subtle / text) */
|
|
1542
|
+
--info-default: var(--ai);
|
|
1543
|
+
--info-subtle: rgba(89, 87, 226, 0.12);
|
|
1544
|
+
--info-text: var(--ai-ink);
|
|
1545
|
+
/* Status — success (iOS system green) */
|
|
1546
|
+
--success-default: #34C759;
|
|
1547
|
+
--success-subtle: rgba(52, 199, 89, 0.12);
|
|
1548
|
+
--success-text: #0F6A22;
|
|
1549
|
+
/* Status — warning (iOS system orange) */
|
|
1550
|
+
--warning-default: var(--ochre);
|
|
1551
|
+
--warning-subtle: rgba(255, 149, 0, 0.12);
|
|
1552
|
+
--warning-text: #985000;
|
|
1553
|
+
/* Status — error (iOS system pink) */
|
|
1554
|
+
--error-default: var(--shu);
|
|
1555
|
+
--error-subtle: rgba(255, 55, 95, 0.12);
|
|
1556
|
+
--error-text: #A3193A;
|
|
1557
|
+
/* ----------------------------------------------------------
|
|
1558
|
+
LIBRARY SCALES (space / radius / type / motion / z)
|
|
1559
|
+
-----------------------------------------------------------
|
|
1560
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
1561
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
1562
|
+
Themes declare the slots so those mixins always resolve.
|
|
1563
|
+
---------------------------------------------------------- */
|
|
1564
|
+
/* Space scale (rem for accessibility) */
|
|
1565
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
1566
|
+
The numbered scale is the source of truth: every component reads
|
|
1567
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
1568
|
+
are emitted by the library as references to these, so they follow
|
|
1569
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
1570
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
1571
|
+
--space-0: 0; /* flush */
|
|
1572
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
1573
|
+
--space-2: 0.75rem; /* control padding */
|
|
1574
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
1575
|
+
--space-4: 1rem; /* default rhythm */
|
|
1576
|
+
--space-5: 1.5rem; /* section gap */
|
|
1577
|
+
--space-6: 2rem; /* block gap */
|
|
1578
|
+
--space-7: 3rem; /* major gap */
|
|
1579
|
+
--space-8: 4rem; /* page section */
|
|
1580
|
+
--space-9: 6rem; /* hero rhythm */
|
|
1581
|
+
/* Radius alias — mirrors --r-* with standard names so
|
|
1582
|
+
`m.radius(size)` in the library finds --radius-<size>. */
|
|
1583
|
+
--radius-sm: var(--r-sm);
|
|
1584
|
+
--radius-md: var(--r-md);
|
|
1585
|
+
--radius-lg: var(--r-lg);
|
|
1586
|
+
--radius-xl: 0.75rem;
|
|
1587
|
+
--radius-full: 9999px;
|
|
1588
|
+
/* Typography — base body font + key scale slots */
|
|
1589
|
+
--font-primary: var(--font-sans);
|
|
1590
|
+
--font-size-base: 1rem;
|
|
1591
|
+
--line-height-normal: 1.5;
|
|
1592
|
+
--font-weight-medium: 500;
|
|
1593
|
+
/* Z-index layers */
|
|
1594
|
+
--z-sticky: 1020;
|
|
1595
|
+
--z-dropdown: 1030;
|
|
1596
|
+
--z-backdrop: 1040;
|
|
1597
|
+
--z-modal: 1050;
|
|
1598
|
+
--z-popover: 1060;
|
|
1599
|
+
--z-tooltip: 1070;
|
|
1600
|
+
}
|
|
1601
|
+
:root[data-theme=graphite] {
|
|
1602
|
+
color-scheme: light dark;
|
|
1603
|
+
/* Surfaces — silver (light) / dark aluminum (dark) */
|
|
1604
|
+
--paper: light-dark(#F2F4F6, #1A1A1C);
|
|
1605
|
+
--paper-raised: light-dark(#FFF, #242426);
|
|
1606
|
+
--paper-sunk: light-dark(#E2E5E8, #141416);
|
|
1607
|
+
--paper-glass: light-dark(rgba(255, 255, 255, 0.72), rgba(36, 36, 38, 0.72));
|
|
1608
|
+
/* Ink — cool near-black / warm white */
|
|
1609
|
+
--ink: light-dark(#1A1F26, #F5F5F7);
|
|
1610
|
+
--ink-soft: light-dark(#3A4048, #C7C7CC);
|
|
1611
|
+
--ink-faint: light-dark(#5E646D, #98989D);
|
|
1612
|
+
--graphite: light-dark(#2A2F36, #AEAEB2);
|
|
1613
|
+
--muted: light-dark(#878D95, #6A6A6E);
|
|
1614
|
+
/* Construction lines — translucent ink (light) / translucent white (dark) */
|
|
1615
|
+
--guide: light-dark(rgba(26, 31, 38, 0.16), rgba(255, 255, 255, 0.16));
|
|
1616
|
+
--guide-soft: light-dark(rgba(26, 31, 38, 0.08), rgba(255, 255, 255, 0.08));
|
|
1617
|
+
--hair: light-dark(rgba(26, 31, 38, 0.12), rgba(255, 255, 255, 0.12));
|
|
1618
|
+
--hair-soft: light-dark(rgba(26, 31, 38, 0.06), rgba(255, 255, 255, 0.06));
|
|
1619
|
+
/* Primary accent — cool blue-gray (light) / Apple dark blue (dark) */
|
|
1620
|
+
--ai: light-dark(#4A6585, #0A84FF);
|
|
1621
|
+
--ai-ink: light-dark(#2F4866, #409CFF);
|
|
1622
|
+
--ai-wash: light-dark(rgba(74, 101, 133, 0.10), rgba(10, 132, 255, 0.14));
|
|
1623
|
+
/* Seal */
|
|
1624
|
+
--shu: light-dark(#C24D40, #FF453A);
|
|
1625
|
+
--shu-wash: light-dark(rgba(194, 77, 64, 0.10), rgba(255, 69, 58, 0.14));
|
|
1626
|
+
/* Draft / marginalia */
|
|
1627
|
+
--ochre: light-dark(#B5873A, #FF9F0A);
|
|
1628
|
+
--ochre-wash: light-dark(rgba(181, 135, 58, 0.10), rgba(255, 159, 10, 0.12));
|
|
1629
|
+
/* Code surface */
|
|
1630
|
+
--code-bg: light-dark(#F6F7F9, #0D0D0F);
|
|
1631
|
+
--code-ink: light-dark(#1A1F26, #E8E8ED);
|
|
1632
|
+
--code-muted: light-dark(#666B73, #818186);
|
|
1633
|
+
--code-accent: light-dark(#87652B, #FFB86C);
|
|
1634
|
+
--code-green: light-dark(#3D7746, #A8E6A1);
|
|
1635
|
+
--code-blue: light-dark(#4A6585, #9AD4F7);
|
|
1636
|
+
/* Typography — SF stack, identical */
|
|
1637
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
1638
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
1639
|
+
--font-serif: 'New York', 'Iowan Old Style', 'Cormorant Garamond', Georgia, serif;
|
|
1640
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
1641
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', 'SFMono-Regular', ui-monospace, Menlo, Consolas, monospace;
|
|
1642
|
+
/* Radius — identical */
|
|
1643
|
+
--r-sm: 6px;
|
|
1644
|
+
--r-md: 10px;
|
|
1645
|
+
--r-lg: 14px;
|
|
1646
|
+
/* Shadows — restrained / deep drop on dark */
|
|
1647
|
+
--shadow-sm: 0 1px 2px light-dark(rgba(26, 31, 38, 0.05), rgba(0, 0, 0, 0.35));
|
|
1648
|
+
--shadow-md: 0 4px 14px light-dark(rgba(26, 31, 38, 0.07), rgba(0, 0, 0, 0.45));
|
|
1649
|
+
--shadow-lg: 0 12px 32px light-dark(rgba(26, 31, 38, 0.10), rgba(0, 0, 0, 0.55));
|
|
1650
|
+
--shadow-xl: 0 20px 50px light-dark(rgba(26, 31, 38, 0.13), rgba(0, 0, 0, 0.65));
|
|
1651
|
+
--shadow-2xl: 0 28px 70px light-dark(rgba(26, 31, 38, 0.17), rgba(0, 0, 0, 0.75));
|
|
1652
|
+
/* Blur — graphite doesn't use it */
|
|
1653
|
+
--blur-sm: none;
|
|
1654
|
+
--blur-md: none;
|
|
1655
|
+
--blur-lg: none;
|
|
1656
|
+
/* Glow — inset rim-highlight that sells milled metal in BOTH modes */
|
|
1657
|
+
--glow-sm: inset 0 1px 0 light-dark(rgba(255, 255, 255, 0.50), rgba(255, 255, 255, 0.06));
|
|
1658
|
+
--glow-md: inset 0 1px 0 light-dark(rgba(255, 255, 255, 0.65), rgba(255, 255, 255, 0.08)),
|
|
1659
|
+
0 1px 3px light-dark(rgba(26, 31, 38, 0.06), rgba(0, 0, 0, 0.35));
|
|
1660
|
+
--glow-lg: inset 0 1px 0 light-dark(rgba(255, 255, 255, 0.75), rgba(255, 255, 255, 0.10)),
|
|
1661
|
+
0 12px 32px light-dark(rgba(26, 31, 38, 0.10), rgba(0, 0, 0, 0.55));
|
|
1662
|
+
/* Motion — Apple-snappy, identical */
|
|
1663
|
+
--duration-fast: 160ms;
|
|
1664
|
+
--duration-normal: 220ms;
|
|
1665
|
+
--duration-slow: 340ms;
|
|
1666
|
+
--ease: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
1667
|
+
/* Semantic aliases */
|
|
1668
|
+
--background-default: var(--paper);
|
|
1669
|
+
--background-subtle: var(--paper-sunk);
|
|
1670
|
+
--background-navbar: var(--paper-raised);
|
|
1671
|
+
--surface-default: var(--paper);
|
|
1672
|
+
--surface-raised: var(--paper-raised);
|
|
1673
|
+
--surface-sunk: var(--paper-sunk);
|
|
1674
|
+
--surface-muted: var(--paper-sunk);
|
|
1675
|
+
--surface-subtle: var(--paper-raised);
|
|
1676
|
+
--surface-emphasis: var(--ink);
|
|
1677
|
+
--surface-glass: var(--paper-glass);
|
|
1678
|
+
--text-primary: var(--ink);
|
|
1679
|
+
--text-secondary: var(--ink-soft);
|
|
1680
|
+
--text-muted: var(--ink-faint);
|
|
1681
|
+
--text-tertiary: var(--muted);
|
|
1682
|
+
--text-inverse: var(--paper);
|
|
1683
|
+
--text-link: var(--ai);
|
|
1684
|
+
--text-link-hover: var(--ai-ink);
|
|
1685
|
+
--border-default: var(--hair);
|
|
1686
|
+
--border-subtle: var(--hair-soft);
|
|
1687
|
+
--border-emphasis: var(--ink);
|
|
1688
|
+
--border-focus: var(--ai);
|
|
1689
|
+
--interactive-hover: light-dark(rgba(26, 31, 38, 0.04), rgba(255, 255, 255, 0.06));
|
|
1690
|
+
--interactive-active: light-dark(rgba(26, 31, 38, 0.08), rgba(255, 255, 255, 0.10));
|
|
1691
|
+
--brand-primary: var(--ai);
|
|
1692
|
+
--brand-primary-hover: var(--ai-ink);
|
|
1693
|
+
--action-primary-default: var(--ai);
|
|
1694
|
+
--action-primary-hover: var(--ai-ink);
|
|
1695
|
+
--action-primary-active: var(--ai-ink);
|
|
1696
|
+
--action-primary-wash: var(--ai-wash);
|
|
1697
|
+
--action-secondary-default: var(--shu);
|
|
1698
|
+
--action-secondary-hover: var(--shu);
|
|
1699
|
+
--action-secondary-active: var(--shu);
|
|
1700
|
+
--action-secondary-wash: var(--shu-wash);
|
|
1701
|
+
--action-tertiary-default: var(--ochre);
|
|
1702
|
+
--action-tertiary-hover: var(--ochre);
|
|
1703
|
+
--action-tertiary-active: var(--ochre);
|
|
1704
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
1705
|
+
--feedback-info: var(--ai);
|
|
1706
|
+
--feedback-success: var(--code-green);
|
|
1707
|
+
--feedback-warning: var(--ochre);
|
|
1708
|
+
--feedback-error: var(--shu);
|
|
1709
|
+
--info-default: var(--ai);
|
|
1710
|
+
--info-subtle: light-dark(rgba(74, 101, 133, 0.10), rgba(10, 132, 255, 0.14));
|
|
1711
|
+
--info-text: light-dark(var(--ai-ink), #409CFF);
|
|
1712
|
+
--success-default: light-dark(#28A745, #30D158);
|
|
1713
|
+
--success-subtle: light-dark(rgba(40, 167, 69, 0.10), rgba(48, 209, 88, 0.14));
|
|
1714
|
+
--success-text: light-dark(#1B7530, #5FE37F);
|
|
1715
|
+
--warning-default: var(--ochre);
|
|
1716
|
+
--warning-subtle: light-dark(rgba(181, 135, 58, 0.10), rgba(255, 159, 10, 0.14));
|
|
1717
|
+
--warning-text: light-dark(#7A5A22, #FFB340);
|
|
1718
|
+
--error-default: var(--shu);
|
|
1719
|
+
--error-subtle: light-dark(rgba(194, 77, 64, 0.10), rgba(255, 69, 58, 0.14));
|
|
1720
|
+
--error-text: light-dark(#8A2F25, #FF6961);
|
|
1721
|
+
/* Library scales — identical */
|
|
1722
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
1723
|
+
The numbered scale is the source of truth: every component reads
|
|
1724
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
1725
|
+
are emitted by the library as references to these, so they follow
|
|
1726
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
1727
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
1728
|
+
--space-0: 0; /* flush */
|
|
1729
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
1730
|
+
--space-2: 0.75rem; /* control padding */
|
|
1731
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
1732
|
+
--space-4: 1rem; /* default rhythm */
|
|
1733
|
+
--space-5: 1.5rem; /* section gap */
|
|
1734
|
+
--space-6: 2rem; /* block gap */
|
|
1735
|
+
--space-7: 3rem; /* major gap */
|
|
1736
|
+
--space-8: 4rem; /* page section */
|
|
1737
|
+
--space-9: 6rem; /* hero rhythm */
|
|
1738
|
+
--radius-sm: var(--r-sm);
|
|
1739
|
+
--radius-md: var(--r-md);
|
|
1740
|
+
--radius-lg: var(--r-lg);
|
|
1741
|
+
--radius-xl: 0.75rem;
|
|
1742
|
+
--radius-full: 9999px;
|
|
1743
|
+
--font-primary: var(--font-sans);
|
|
1744
|
+
--font-size-base: 1rem;
|
|
1745
|
+
--line-height-normal: 1.5;
|
|
1746
|
+
--font-weight-medium: 500;
|
|
1747
|
+
--z-sticky: 1020;
|
|
1748
|
+
--z-dropdown: 1030;
|
|
1749
|
+
--z-backdrop: 1040;
|
|
1750
|
+
--z-modal: 1050;
|
|
1751
|
+
--z-popover: 1060;
|
|
1752
|
+
--z-tooltip: 1070;
|
|
1753
|
+
}
|
|
1754
|
+
:root[data-theme=graphite-dark] {
|
|
1755
|
+
color-scheme: dark;
|
|
1756
|
+
/* Surfaces — milled aluminum chassis (dark) */
|
|
1757
|
+
--paper: #1A1A1C;
|
|
1758
|
+
--paper-raised: #242426;
|
|
1759
|
+
--paper-sunk: #141416;
|
|
1760
|
+
--paper-glass: rgba(36, 36, 38, 0.72);
|
|
1761
|
+
/* Ink — warm whites on dark */
|
|
1762
|
+
--ink: #F5F5F7;
|
|
1763
|
+
--ink-soft: #C7C7CC;
|
|
1764
|
+
--ink-faint: #98989D;
|
|
1765
|
+
--graphite: #AEAEB2;
|
|
1766
|
+
--muted: #6A6A6E;
|
|
1767
|
+
/* Construction lines — translucent white hairlines */
|
|
1768
|
+
--guide: rgba(255, 255, 255, 0.16);
|
|
1769
|
+
--guide-soft: rgba(255, 255, 255, 0.08);
|
|
1770
|
+
--hair: rgba(255, 255, 255, 0.12);
|
|
1771
|
+
--hair-soft: rgba(255, 255, 255, 0.06);
|
|
1772
|
+
/* Primary accent — Apple dark-mode system blue */
|
|
1773
|
+
--ai: #0A84FF;
|
|
1774
|
+
--ai-ink: #409CFF;
|
|
1775
|
+
--ai-wash: rgba(10, 132, 255, 0.14);
|
|
1776
|
+
/* Seal — Apple dark-mode red (reserve for emphasis) */
|
|
1777
|
+
--shu: #FF453A;
|
|
1778
|
+
--shu-wash: rgba(255, 69, 58, 0.14);
|
|
1779
|
+
/* Draft / marginalia — Apple amber */
|
|
1780
|
+
--ochre: #FF9F0A;
|
|
1781
|
+
--ochre-wash: rgba(255, 159, 10, 0.12);
|
|
1782
|
+
/* Code surface — Xcode deep */
|
|
1783
|
+
--code-bg: #0D0D0F;
|
|
1784
|
+
--code-ink: #E8E8ED;
|
|
1785
|
+
--code-muted: #828287;
|
|
1786
|
+
--code-accent: #FFB86C;
|
|
1787
|
+
--code-green: #A8E6A1;
|
|
1788
|
+
--code-blue: #9AD4F7;
|
|
1789
|
+
/* Typography — SF system stack */
|
|
1790
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
1791
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
1792
|
+
--font-serif: 'New York', 'Iowan Old Style', 'Cormorant Garamond', Georgia, serif;
|
|
1793
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
1794
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', 'SFMono-Regular', ui-monospace, Menlo, Consolas, monospace;
|
|
1795
|
+
/* Radius — Apple UI standard */
|
|
1796
|
+
--r-sm: 6px;
|
|
1797
|
+
--r-md: 10px;
|
|
1798
|
+
--r-lg: 14px;
|
|
1799
|
+
/* Shadows — deep drop on black */
|
|
1800
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.35);
|
|
1801
|
+
--shadow-md: 0 4px 18px rgba(0, 0, 0, 0.45);
|
|
1802
|
+
--shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.55);
|
|
1803
|
+
--shadow-xl: 0 20px 50px rgba(0, 0, 0, 0.65);
|
|
1804
|
+
--shadow-2xl: 0 28px 70px rgba(0, 0, 0, 0.75);
|
|
1805
|
+
/* Blur — graphite doesn't use it; declared so swap stays lossless */
|
|
1806
|
+
--blur-sm: none;
|
|
1807
|
+
--blur-md: none;
|
|
1808
|
+
--blur-lg: none;
|
|
1809
|
+
/* Glow — inset rim-highlight that sells milled aluminum */
|
|
1810
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.06);
|
|
1811
|
+
--glow-md: inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 1px 3px rgba(0, 0, 0, 0.35);
|
|
1812
|
+
--glow-lg: inset 0 1px 0 rgba(255, 255, 255, 0.10), 0 12px 40px rgba(0, 0, 0, 0.55);
|
|
1813
|
+
/* Motion — Apple-snappy */
|
|
1814
|
+
--duration-fast: 160ms;
|
|
1815
|
+
--duration-normal: 220ms;
|
|
1816
|
+
--duration-slow: 340ms;
|
|
1817
|
+
--ease: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
1818
|
+
/* ----------------------------------------------------------
|
|
1819
|
+
SEMANTIC ALIASES
|
|
1820
|
+
-----------------------------------------------------------
|
|
1821
|
+
Bridge the library's expected names to this theme's native
|
|
1822
|
+
palette. Components can now write m.color(surface-default)
|
|
1823
|
+
or var(--surface-default) and reskin with the theme
|
|
1824
|
+
automatically.
|
|
1825
|
+
---------------------------------------------------------- */
|
|
1826
|
+
/* Backgrounds (page-level) */
|
|
1827
|
+
--background-default: var(--paper);
|
|
1828
|
+
--background-subtle: var(--paper-sunk);
|
|
1829
|
+
--background-navbar: var(--paper-raised);
|
|
1830
|
+
/* Surfaces */
|
|
1831
|
+
--surface-default: var(--paper);
|
|
1832
|
+
--surface-raised: var(--paper-raised);
|
|
1833
|
+
--surface-sunk: var(--paper-sunk);
|
|
1834
|
+
--surface-muted: var(--paper-sunk);
|
|
1835
|
+
--surface-subtle: var(--paper-raised);
|
|
1836
|
+
--surface-emphasis: var(--ink);
|
|
1837
|
+
--surface-glass: var(--paper-glass);
|
|
1838
|
+
/* Text */
|
|
1839
|
+
--text-primary: var(--ink);
|
|
1840
|
+
--text-secondary: var(--ink-soft);
|
|
1841
|
+
--text-muted: var(--ink-faint);
|
|
1842
|
+
--text-tertiary: var(--muted);
|
|
1843
|
+
--text-inverse: var(--paper);
|
|
1844
|
+
--text-link: var(--ai);
|
|
1845
|
+
--text-link-hover: var(--ai-ink);
|
|
1846
|
+
/* Borders */
|
|
1847
|
+
--border-default: var(--hair);
|
|
1848
|
+
--border-subtle: var(--hair-soft);
|
|
1849
|
+
--border-emphasis: var(--ink);
|
|
1850
|
+
--border-focus: var(--ai);
|
|
1851
|
+
/* Interactive (hover / active wash layers) — translucent WHITE on dark */
|
|
1852
|
+
--interactive-hover: rgba(255, 255, 255, 0.06);
|
|
1853
|
+
--interactive-active: rgba(255, 255, 255, 0.10);
|
|
1854
|
+
/* Brand (identity — action-primary usually references these) */
|
|
1855
|
+
--brand-primary: var(--ai);
|
|
1856
|
+
--brand-primary-hover: var(--ai-ink);
|
|
1857
|
+
/* Action (primary / secondary / tertiary) */
|
|
1858
|
+
--action-primary-default: var(--ai);
|
|
1859
|
+
--action-primary-hover: var(--ai-ink);
|
|
1860
|
+
--action-primary-active: var(--ai-ink);
|
|
1861
|
+
--action-primary-wash: var(--ai-wash);
|
|
1862
|
+
--action-secondary-default: var(--shu);
|
|
1863
|
+
--action-secondary-hover: var(--shu);
|
|
1864
|
+
--action-secondary-active: var(--shu);
|
|
1865
|
+
--action-secondary-wash: var(--shu-wash);
|
|
1866
|
+
--action-tertiary-default: var(--ochre);
|
|
1867
|
+
--action-tertiary-hover: var(--ochre);
|
|
1868
|
+
--action-tertiary-active: var(--ochre);
|
|
1869
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
1870
|
+
/* Feedback / status (high-level semantic) */
|
|
1871
|
+
--feedback-info: var(--ai);
|
|
1872
|
+
--feedback-success: var(--code-green);
|
|
1873
|
+
--feedback-warning: var(--ochre);
|
|
1874
|
+
--feedback-error: var(--shu);
|
|
1875
|
+
/* Status — info (three-part: default / subtle / text) */
|
|
1876
|
+
--info-default: var(--ai);
|
|
1877
|
+
--info-subtle: rgba(10, 132, 255, 0.14);
|
|
1878
|
+
--info-text: #409CFF;
|
|
1879
|
+
/* Status — success (Apple dark-mode green) */
|
|
1880
|
+
--success-default: #30D158;
|
|
1881
|
+
--success-subtle: rgba(48, 209, 88, 0.14);
|
|
1882
|
+
--success-text: #5FE37F;
|
|
1883
|
+
/* Status — warning */
|
|
1884
|
+
--warning-default: var(--ochre);
|
|
1885
|
+
--warning-subtle: rgba(255, 159, 10, 0.14);
|
|
1886
|
+
--warning-text: #FFB340;
|
|
1887
|
+
/* Status — error */
|
|
1888
|
+
--error-default: var(--shu);
|
|
1889
|
+
--error-subtle: rgba(255, 69, 58, 0.14);
|
|
1890
|
+
--error-text: #FF6961;
|
|
1891
|
+
/* ----------------------------------------------------------
|
|
1892
|
+
LIBRARY SCALES (space / radius / type / motion / z)
|
|
1893
|
+
-----------------------------------------------------------
|
|
1894
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
1895
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
1896
|
+
Themes declare the slots so those mixins always resolve.
|
|
1897
|
+
---------------------------------------------------------- */
|
|
1898
|
+
/* Space scale (rem for accessibility) */
|
|
1899
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
1900
|
+
The numbered scale is the source of truth: every component reads
|
|
1901
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
1902
|
+
are emitted by the library as references to these, so they follow
|
|
1903
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
1904
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
1905
|
+
--space-0: 0; /* flush */
|
|
1906
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
1907
|
+
--space-2: 0.75rem; /* control padding */
|
|
1908
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
1909
|
+
--space-4: 1rem; /* default rhythm */
|
|
1910
|
+
--space-5: 1.5rem; /* section gap */
|
|
1911
|
+
--space-6: 2rem; /* block gap */
|
|
1912
|
+
--space-7: 3rem; /* major gap */
|
|
1913
|
+
--space-8: 4rem; /* page section */
|
|
1914
|
+
--space-9: 6rem; /* hero rhythm */
|
|
1915
|
+
/* Radius alias — mirrors --r-* with standard names so
|
|
1916
|
+
`m.radius(size)` in the library finds --radius-<size>. */
|
|
1917
|
+
--radius-sm: var(--r-sm);
|
|
1918
|
+
--radius-md: var(--r-md);
|
|
1919
|
+
--radius-lg: var(--r-lg);
|
|
1920
|
+
--radius-xl: 0.75rem;
|
|
1921
|
+
--radius-full: 9999px;
|
|
1922
|
+
/* Typography — base body font + key scale slots */
|
|
1923
|
+
--font-primary: var(--font-sans);
|
|
1924
|
+
--font-size-base: 1rem;
|
|
1925
|
+
--line-height-normal: 1.5;
|
|
1926
|
+
--font-weight-medium: 500;
|
|
1927
|
+
/* Z-index layers */
|
|
1928
|
+
--z-sticky: 1020;
|
|
1929
|
+
--z-dropdown: 1030;
|
|
1930
|
+
--z-backdrop: 1040;
|
|
1931
|
+
--z-modal: 1050;
|
|
1932
|
+
--z-popover: 1060;
|
|
1933
|
+
--z-tooltip: 1070;
|
|
1934
|
+
}
|
|
1935
|
+
:root[data-theme=graphite-light] {
|
|
1936
|
+
color-scheme: light;
|
|
1937
|
+
/* Surfaces — brushed silver chassis (light) */
|
|
1938
|
+
--paper: #F2F4F6;
|
|
1939
|
+
--paper-raised: #FFF;
|
|
1940
|
+
--paper-sunk: #E2E5E8;
|
|
1941
|
+
--paper-glass: rgba(255, 255, 255, 0.72);
|
|
1942
|
+
/* Ink — cool near-black */
|
|
1943
|
+
--ink: #1A1F26;
|
|
1944
|
+
--ink-soft: #3A4048;
|
|
1945
|
+
--ink-faint: #5E646D;
|
|
1946
|
+
--graphite: #2A2F36;
|
|
1947
|
+
--muted: #878D95;
|
|
1948
|
+
/* Construction lines — translucent ink hairlines */
|
|
1949
|
+
--guide: rgba(26, 31, 38, 0.16);
|
|
1950
|
+
--guide-soft: rgba(26, 31, 38, 0.08);
|
|
1951
|
+
--hair: rgba(26, 31, 38, 0.12);
|
|
1952
|
+
--hair-soft: rgba(26, 31, 38, 0.06);
|
|
1953
|
+
/* Primary accent — cool blue-gray (Apple system blue, light) */
|
|
1954
|
+
--ai: #4A6585;
|
|
1955
|
+
--ai-ink: #2F4866;
|
|
1956
|
+
--ai-wash: rgba(74, 101, 133, 0.10);
|
|
1957
|
+
/* Seal — restrained warm red */
|
|
1958
|
+
--shu: #C24D40;
|
|
1959
|
+
--shu-wash: rgba(194, 77, 64, 0.10);
|
|
1960
|
+
/* Draft / marginalia — warm gold */
|
|
1961
|
+
--ochre: #B5873A;
|
|
1962
|
+
--ochre-wash: rgba(181, 135, 58, 0.10);
|
|
1963
|
+
/* Code surface — light Xcode */
|
|
1964
|
+
--code-bg: #F6F7F9;
|
|
1965
|
+
--code-ink: #1A1F26;
|
|
1966
|
+
--code-muted: #656A72;
|
|
1967
|
+
--code-accent: #86642B;
|
|
1968
|
+
--code-green: #3F7A48;
|
|
1969
|
+
--code-blue: #4A6585;
|
|
1970
|
+
/* Typography — match Graphite (SF system stack) */
|
|
1971
|
+
--font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
1972
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
1973
|
+
--font-serif: 'New York', 'Iowan Old Style', 'Cormorant Garamond', Georgia, serif;
|
|
1974
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
1975
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', 'SFMono-Regular', ui-monospace, Menlo, Consolas, monospace;
|
|
1976
|
+
/* Radius — match Graphite (Apple UI standard) */
|
|
1977
|
+
--r-sm: 6px;
|
|
1978
|
+
--r-md: 10px;
|
|
1979
|
+
--r-lg: 14px;
|
|
1980
|
+
/* Shadows — restrained, lifted (machined precision) */
|
|
1981
|
+
--shadow-sm: 0 1px 2px rgba(26, 31, 38, 0.05);
|
|
1982
|
+
--shadow-md: 0 4px 14px rgba(26, 31, 38, 0.07);
|
|
1983
|
+
--shadow-lg: 0 12px 32px rgba(26, 31, 38, 0.10);
|
|
1984
|
+
--shadow-xl: 0 20px 50px rgba(26, 31, 38, 0.13);
|
|
1985
|
+
--shadow-2xl: 0 28px 70px rgba(26, 31, 38, 0.17);
|
|
1986
|
+
/* Blur — graphite doesn't use it */
|
|
1987
|
+
--blur-sm: none;
|
|
1988
|
+
--blur-md: none;
|
|
1989
|
+
--blur-lg: none;
|
|
1990
|
+
/* Glow — inset rim-highlight (sells brushed metal even in light) */
|
|
1991
|
+
--glow-sm: inset 0 1px 0 rgba(255, 255, 255, 0.50);
|
|
1992
|
+
--glow-md: inset 0 1px 0 rgba(255, 255, 255, 0.65), 0 1px 3px rgba(26, 31, 38, 0.06);
|
|
1993
|
+
--glow-lg: inset 0 1px 0 rgba(255, 255, 255, 0.75), 0 12px 32px rgba(26, 31, 38, 0.10);
|
|
1994
|
+
/* Motion — Apple-snappy, match Graphite */
|
|
1995
|
+
--duration-fast: 160ms;
|
|
1996
|
+
--duration-normal: 220ms;
|
|
1997
|
+
--duration-slow: 340ms;
|
|
1998
|
+
--ease: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
1999
|
+
/* ----------------------------------------------------------
|
|
2000
|
+
SEMANTIC ALIASES
|
|
2001
|
+
---------------------------------------------------------- */
|
|
2002
|
+
/* Backgrounds */
|
|
2003
|
+
--background-default: var(--paper);
|
|
2004
|
+
--background-subtle: var(--paper-sunk);
|
|
2005
|
+
--background-navbar: var(--paper-raised);
|
|
2006
|
+
/* Surfaces */
|
|
2007
|
+
--surface-default: var(--paper);
|
|
2008
|
+
--surface-raised: var(--paper-raised);
|
|
2009
|
+
--surface-sunk: var(--paper-sunk);
|
|
2010
|
+
--surface-muted: var(--paper-sunk);
|
|
2011
|
+
--surface-subtle: var(--paper-raised);
|
|
2012
|
+
--surface-emphasis: var(--ink);
|
|
2013
|
+
--surface-glass: var(--paper-glass);
|
|
2014
|
+
/* Text */
|
|
2015
|
+
--text-primary: var(--ink);
|
|
2016
|
+
--text-secondary: var(--ink-soft);
|
|
2017
|
+
--text-muted: var(--ink-faint);
|
|
2018
|
+
--text-tertiary: var(--muted);
|
|
2019
|
+
--text-inverse: var(--paper);
|
|
2020
|
+
--text-link: var(--ai);
|
|
2021
|
+
--text-link-hover: var(--ai-ink);
|
|
2022
|
+
/* Borders */
|
|
2023
|
+
--border-default: var(--hair);
|
|
2024
|
+
--border-subtle: var(--hair-soft);
|
|
2025
|
+
--border-emphasis: var(--ink);
|
|
2026
|
+
--border-focus: var(--ai);
|
|
2027
|
+
/* Interactive — translucent ink wash on light silver */
|
|
2028
|
+
--interactive-hover: rgba(26, 31, 38, 0.04);
|
|
2029
|
+
--interactive-active: rgba(26, 31, 38, 0.08);
|
|
2030
|
+
/* Brand */
|
|
2031
|
+
--brand-primary: var(--ai);
|
|
2032
|
+
--brand-primary-hover: var(--ai-ink);
|
|
2033
|
+
/* Action triplets */
|
|
2034
|
+
--action-primary-default: var(--ai);
|
|
2035
|
+
--action-primary-hover: var(--ai-ink);
|
|
2036
|
+
--action-primary-active: var(--ai-ink);
|
|
2037
|
+
--action-primary-wash: var(--ai-wash);
|
|
2038
|
+
--action-secondary-default: var(--shu);
|
|
2039
|
+
--action-secondary-hover: var(--shu);
|
|
2040
|
+
--action-secondary-active: var(--shu);
|
|
2041
|
+
--action-secondary-wash: var(--shu-wash);
|
|
2042
|
+
--action-tertiary-default: var(--ochre);
|
|
2043
|
+
--action-tertiary-hover: var(--ochre);
|
|
2044
|
+
--action-tertiary-active: var(--ochre);
|
|
2045
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
2046
|
+
/* Feedback */
|
|
2047
|
+
--feedback-info: var(--ai);
|
|
2048
|
+
--feedback-success: var(--code-green);
|
|
2049
|
+
--feedback-warning: var(--ochre);
|
|
2050
|
+
--feedback-error: var(--shu);
|
|
2051
|
+
/* Status — info */
|
|
2052
|
+
--info-default: var(--ai);
|
|
2053
|
+
--info-subtle: rgba(74, 101, 133, 0.10);
|
|
2054
|
+
--info-text: var(--ai-ink);
|
|
2055
|
+
/* Status — success (Apple light-mode green) */
|
|
2056
|
+
--success-default: #28A745;
|
|
2057
|
+
--success-subtle: rgba(40, 167, 69, 0.10);
|
|
2058
|
+
--success-text: #1B7530;
|
|
2059
|
+
/* Status — warning */
|
|
2060
|
+
--warning-default: var(--ochre);
|
|
2061
|
+
--warning-subtle: rgba(181, 135, 58, 0.10);
|
|
2062
|
+
--warning-text: #7A5A22;
|
|
2063
|
+
/* Status — error */
|
|
2064
|
+
--error-default: var(--shu);
|
|
2065
|
+
--error-subtle: rgba(194, 77, 64, 0.10);
|
|
2066
|
+
--error-text: #8A2F25;
|
|
2067
|
+
/* ----------------------------------------------------------
|
|
2068
|
+
LIBRARY SCALES
|
|
2069
|
+
---------------------------------------------------------- */
|
|
2070
|
+
/* Space scale */
|
|
2071
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
2072
|
+
The numbered scale is the source of truth: every component reads
|
|
2073
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
2074
|
+
are emitted by the library as references to these, so they follow
|
|
2075
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
2076
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
2077
|
+
--space-0: 0; /* flush */
|
|
2078
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
2079
|
+
--space-2: 0.75rem; /* control padding */
|
|
2080
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
2081
|
+
--space-4: 1rem; /* default rhythm */
|
|
2082
|
+
--space-5: 1.5rem; /* section gap */
|
|
2083
|
+
--space-6: 2rem; /* block gap */
|
|
2084
|
+
--space-7: 3rem; /* major gap */
|
|
2085
|
+
--space-8: 4rem; /* page section */
|
|
2086
|
+
--space-9: 6rem; /* hero rhythm */
|
|
2087
|
+
/* Radius alias */
|
|
2088
|
+
--radius-sm: var(--r-sm);
|
|
2089
|
+
--radius-md: var(--r-md);
|
|
2090
|
+
--radius-lg: var(--r-lg);
|
|
2091
|
+
--radius-xl: 0.75rem;
|
|
2092
|
+
--radius-full: 9999px;
|
|
2093
|
+
/* Typography */
|
|
2094
|
+
--font-primary: var(--font-sans);
|
|
2095
|
+
--font-size-base: 1rem;
|
|
2096
|
+
--line-height-normal: 1.5;
|
|
2097
|
+
--font-weight-medium: 500;
|
|
2098
|
+
/* Z-index */
|
|
2099
|
+
--z-sticky: 1020;
|
|
2100
|
+
--z-dropdown: 1030;
|
|
2101
|
+
--z-backdrop: 1040;
|
|
2102
|
+
--z-modal: 1050;
|
|
2103
|
+
--z-popover: 1060;
|
|
2104
|
+
--z-tooltip: 1070;
|
|
2105
|
+
}
|
|
2106
|
+
:root[data-theme=press] {
|
|
2107
|
+
color-scheme: light dark;
|
|
2108
|
+
/* ----------------------------------------------------------------
|
|
2109
|
+
Surfaces — light: warm newsprint / dark: near-ink newsroom
|
|
2110
|
+
---------------------------------------------------------------- */
|
|
2111
|
+
--paper: light-dark(#FAFAF7, #0E0E0E);
|
|
2112
|
+
--paper-raised: light-dark(#FFF, #1A1A1A);
|
|
2113
|
+
--paper-sunk: light-dark(#F2F1EC, #060606);
|
|
2114
|
+
--paper-glass: light-dark(rgba(255, 255, 255, 0.80), rgba(26, 26, 26, 0.82));
|
|
2115
|
+
/* ----------------------------------------------------------------
|
|
2116
|
+
Ink — light: warm near-black / dark: warm off-white
|
|
2117
|
+
---------------------------------------------------------------- */
|
|
2118
|
+
--ink: light-dark(#0A0A0A, #FAFAF7);
|
|
2119
|
+
--ink-soft: light-dark(#555, #C8C6C0);
|
|
2120
|
+
--ink-faint: light-dark(#727069, #8A8A86);
|
|
2121
|
+
--graphite: light-dark(#1A1A1A, #ECEAE4);
|
|
2122
|
+
--muted: light-dark(#8E8C86, #6B6963);
|
|
2123
|
+
/* Rules / hairlines */
|
|
2124
|
+
--guide: light-dark(#1A1A1A, #ECEAE4);
|
|
2125
|
+
--guide-soft: light-dark(#D9D7D1, #2A2A2A);
|
|
2126
|
+
--hair: light-dark(#1A1A1A, #2A2A2A);
|
|
2127
|
+
--hair-soft: light-dark(#ECEAE4, #1A1A1A);
|
|
2128
|
+
/* Primary accent — near-ink editorial link */
|
|
2129
|
+
--ai: light-dark(#1A1A1A, #A8A8A8);
|
|
2130
|
+
--ai-ink: light-dark(#0A0A0A, #ECEAE4);
|
|
2131
|
+
--ai-wash: light-dark(#ECEAE4, #1F1F1F);
|
|
2132
|
+
/* Seal — press red */
|
|
2133
|
+
--shu: light-dark(#D93025, #FF4538);
|
|
2134
|
+
--shu-wash: light-dark(#FBEAE8, rgba(255, 69, 56, 0.14));
|
|
2135
|
+
/* Pull-quote / marginalia — warm gold */
|
|
2136
|
+
--ochre: light-dark(#B5873A, #E8B96E);
|
|
2137
|
+
--ochre-wash: light-dark(#F4EBD6, rgba(232, 185, 110, 0.12));
|
|
2138
|
+
/* Code surface */
|
|
2139
|
+
--code-bg: light-dark(#0A0A0A, #060606);
|
|
2140
|
+
--code-ink: #FAFAF7;
|
|
2141
|
+
--code-muted: #8A8A86;
|
|
2142
|
+
--code-accent: #E8B96E;
|
|
2143
|
+
--code-green: #B8C57A;
|
|
2144
|
+
--code-blue: #94AFC9;
|
|
2145
|
+
/* ----------------------------------------------------------------
|
|
2146
|
+
Typography — identical across modes
|
|
2147
|
+
---------------------------------------------------------------- */
|
|
2148
|
+
--font-display: 'Playfair Display', 'Tiempos', 'Fraunces', Georgia, serif;
|
|
2149
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
2150
|
+
--font-serif: 'Playfair Display', 'Tiempos', 'Cormorant Garamond', Georgia, serif;
|
|
2151
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
2152
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', Consolas, Menlo, monospace;
|
|
2153
|
+
/* ----------------------------------------------------------------
|
|
2154
|
+
Radius — identical, editorial = always tight
|
|
2155
|
+
---------------------------------------------------------------- */
|
|
2156
|
+
--r-sm: 2px;
|
|
2157
|
+
--r-md: 3px;
|
|
2158
|
+
--r-lg: 4px;
|
|
2159
|
+
/* ----------------------------------------------------------------
|
|
2160
|
+
Shadows — same shape, different alpha per mode (rgba is <color>)
|
|
2161
|
+
---------------------------------------------------------------- */
|
|
2162
|
+
--shadow-sm: 0 1px 2px light-dark(rgba(10, 10, 10, 0.05), rgba(0, 0, 0, 0.35));
|
|
2163
|
+
--shadow-md: 0 6px 24px light-dark(rgba(10, 10, 10, 0.06), rgba(0, 0, 0, 0.45));
|
|
2164
|
+
--shadow-lg: 0 18px 48px light-dark(rgba(10, 10, 10, 0.09), rgba(0, 0, 0, 0.55));
|
|
2165
|
+
--shadow-xl: 0 28px 64px light-dark(rgba(10, 10, 10, 0.12), rgba(0, 0, 0, 0.65));
|
|
2166
|
+
--shadow-2xl: 0 40px 96px light-dark(rgba(10, 10, 10, 0.18), rgba(0, 0, 0, 0.75));
|
|
2167
|
+
/* Blur / glow — editorial doesn't use these */
|
|
2168
|
+
--blur-sm: none;
|
|
2169
|
+
--blur-md: none;
|
|
2170
|
+
--blur-lg: none;
|
|
2171
|
+
--glow-sm: 0 0 0 transparent;
|
|
2172
|
+
--glow-md: 0 0 0 transparent;
|
|
2173
|
+
--glow-lg: 0 0 0 transparent;
|
|
2174
|
+
/* ----------------------------------------------------------------
|
|
2175
|
+
Motion — editorial pace, identical across modes
|
|
2176
|
+
---------------------------------------------------------------- */
|
|
2177
|
+
--duration-fast: 200ms;
|
|
2178
|
+
--duration-normal: 280ms;
|
|
2179
|
+
--duration-slow: 420ms;
|
|
2180
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
2181
|
+
/* ----------------------------------------------------------------
|
|
2182
|
+
SEMANTIC ALIASES — bridge library expected names to Press palette
|
|
2183
|
+
---------------------------------------------------------------- */
|
|
2184
|
+
/* Backgrounds */
|
|
2185
|
+
--background-default: var(--paper);
|
|
2186
|
+
--background-subtle: var(--paper-sunk);
|
|
2187
|
+
--background-navbar: var(--paper-raised);
|
|
2188
|
+
/* Surfaces */
|
|
2189
|
+
--surface-default: var(--paper);
|
|
2190
|
+
--surface-raised: var(--paper-raised);
|
|
2191
|
+
--surface-sunk: var(--paper-sunk);
|
|
2192
|
+
--surface-muted: var(--paper-sunk);
|
|
2193
|
+
--surface-subtle: var(--paper-raised);
|
|
2194
|
+
--surface-emphasis: var(--ink);
|
|
2195
|
+
--surface-glass: var(--paper-glass);
|
|
2196
|
+
/* Text */
|
|
2197
|
+
--text-primary: var(--ink);
|
|
2198
|
+
--text-secondary: var(--ink-soft);
|
|
2199
|
+
--text-muted: var(--ink-faint);
|
|
2200
|
+
--text-tertiary: var(--muted);
|
|
2201
|
+
--text-inverse: var(--paper);
|
|
2202
|
+
--text-link: light-dark(var(--ai), var(--ink));
|
|
2203
|
+
--text-link-hover: light-dark(var(--ai-ink), var(--shu));
|
|
2204
|
+
/* Borders */
|
|
2205
|
+
--border-default: var(--hair);
|
|
2206
|
+
--border-subtle: var(--hair-soft);
|
|
2207
|
+
--border-emphasis: var(--ink);
|
|
2208
|
+
--border-focus: light-dark(var(--ai), var(--shu));
|
|
2209
|
+
/* Interactive (hover / active wash) */
|
|
2210
|
+
--interactive-hover: light-dark(rgba(10, 10, 10, 0.05), rgba(250, 250, 247, 0.05));
|
|
2211
|
+
--interactive-active: light-dark(rgba(10, 10, 10, 0.10), rgba(250, 250, 247, 0.10));
|
|
2212
|
+
/* Brand */
|
|
2213
|
+
--brand-primary: light-dark(var(--ai), var(--ink));
|
|
2214
|
+
--brand-primary-hover: light-dark(var(--ai-ink), var(--shu));
|
|
2215
|
+
/* Action — three groups */
|
|
2216
|
+
--action-primary-default: light-dark(var(--ai), var(--ink));
|
|
2217
|
+
--action-primary-hover: var(--ai-ink);
|
|
2218
|
+
--action-primary-active: var(--ai-ink);
|
|
2219
|
+
--action-primary-wash: var(--ai-wash);
|
|
2220
|
+
--action-secondary-default: var(--shu);
|
|
2221
|
+
--action-secondary-hover: var(--shu);
|
|
2222
|
+
--action-secondary-active: var(--shu);
|
|
2223
|
+
--action-secondary-wash: var(--shu-wash);
|
|
2224
|
+
--action-tertiary-default: var(--ochre);
|
|
2225
|
+
--action-tertiary-hover: var(--ochre);
|
|
2226
|
+
--action-tertiary-active: var(--ochre);
|
|
2227
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
2228
|
+
/* Feedback (high-level semantic) */
|
|
2229
|
+
--feedback-info: var(--ai);
|
|
2230
|
+
--feedback-success: var(--code-green);
|
|
2231
|
+
--feedback-warning: var(--ochre);
|
|
2232
|
+
--feedback-error: var(--shu);
|
|
2233
|
+
/* Status — info */
|
|
2234
|
+
--info-default: var(--ai);
|
|
2235
|
+
--info-subtle: var(--ai-wash);
|
|
2236
|
+
--info-text: var(--ai-ink);
|
|
2237
|
+
/* Status — success (restrained editorial green) */
|
|
2238
|
+
--success-default: light-dark(#2F7A3A, #6FA85A);
|
|
2239
|
+
--success-subtle: light-dark(#E3EEDF, rgba(111, 168, 90, 0.14));
|
|
2240
|
+
--success-text: light-dark(#1F5228, #95C97F);
|
|
2241
|
+
/* Status — warning (warm editorial ochre) */
|
|
2242
|
+
--warning-default: light-dark(#A86A1A, var(--ochre));
|
|
2243
|
+
--warning-subtle: var(--ochre-wash);
|
|
2244
|
+
--warning-text: light-dark(#6B4512, #F0CC8E);
|
|
2245
|
+
/* Status — error (press red IS the error color) */
|
|
2246
|
+
--error-default: var(--shu);
|
|
2247
|
+
--error-subtle: var(--shu-wash);
|
|
2248
|
+
--error-text: light-dark(#8A1D15, #FF7A70);
|
|
2249
|
+
/* ----------------------------------------------------------------
|
|
2250
|
+
LIBRARY SCALES — identical across modes
|
|
2251
|
+
---------------------------------------------------------------- */
|
|
2252
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
2253
|
+
The numbered scale is the source of truth: every component reads
|
|
2254
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
2255
|
+
are emitted by the library as references to these, so they follow
|
|
2256
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
2257
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
2258
|
+
--space-0: 0; /* flush */
|
|
2259
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
2260
|
+
--space-2: 0.75rem; /* control padding */
|
|
2261
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
2262
|
+
--space-4: 1rem; /* default rhythm */
|
|
2263
|
+
--space-5: 1.5rem; /* section gap */
|
|
2264
|
+
--space-6: 2rem; /* block gap */
|
|
2265
|
+
--space-7: 3rem; /* major gap */
|
|
2266
|
+
--space-8: 4rem; /* page section */
|
|
2267
|
+
--space-9: 6rem; /* hero rhythm */
|
|
2268
|
+
--radius-sm: var(--r-sm);
|
|
2269
|
+
--radius-md: var(--r-md);
|
|
2270
|
+
--radius-lg: var(--r-lg);
|
|
2271
|
+
--radius-xl: 6px;
|
|
2272
|
+
--radius-full: 9999px;
|
|
2273
|
+
--font-primary: var(--font-sans);
|
|
2274
|
+
--font-size-base: 1rem;
|
|
2275
|
+
--line-height-normal: 1.5;
|
|
2276
|
+
--font-weight-medium: 500;
|
|
2277
|
+
--z-sticky: 1020;
|
|
2278
|
+
--z-dropdown: 1030;
|
|
2279
|
+
--z-backdrop: 1040;
|
|
2280
|
+
--z-modal: 1050;
|
|
2281
|
+
--z-popover: 1060;
|
|
2282
|
+
--z-tooltip: 1070;
|
|
2283
|
+
/* ----------------------------------------------------------------
|
|
2284
|
+
COMPONENT OVERRIDES — identical across modes
|
|
2285
|
+
---------------------------------------------------------------- */
|
|
2286
|
+
--btn-radius: var(--r-sm); /* 2px — near-square */
|
|
2287
|
+
--card-radius: var(--r-sm); /* 2px — boxed */
|
|
2288
|
+
--card-shadow: none; /* editorial is flat */
|
|
2289
|
+
--card-border: 1px solid var(--hair); /* thin rule instead */
|
|
2290
|
+
--input-radius: var(--r-sm); /* 2px */
|
|
2291
|
+
--modal-radius: var(--r-md); /* 3px */
|
|
2292
|
+
}
|
|
2293
|
+
:root[data-theme=press-dark] {
|
|
2294
|
+
color-scheme: dark;
|
|
2295
|
+
/* Surfaces — near-ink newsroom */
|
|
2296
|
+
--paper: #0E0E0E;
|
|
2297
|
+
--paper-raised: #1A1A1A;
|
|
2298
|
+
--paper-sunk: #060606;
|
|
2299
|
+
--paper-glass: rgba(26, 26, 26, 0.82);
|
|
2300
|
+
/* Ink — warm off-white headline */
|
|
2301
|
+
--ink: #FAFAF7;
|
|
2302
|
+
--ink-soft: #C8C6C0;
|
|
2303
|
+
--ink-faint: #8A8A86;
|
|
2304
|
+
--graphite: #ECEAE4;
|
|
2305
|
+
--muted: #6B6963;
|
|
2306
|
+
/* Rules / hairlines — thin editorial rules on dark */
|
|
2307
|
+
--guide: #ECEAE4;
|
|
2308
|
+
--guide-soft: #2A2A2A;
|
|
2309
|
+
--hair: #2A2A2A;
|
|
2310
|
+
--hair-soft: #1A1A1A;
|
|
2311
|
+
/* Primary accent — cool ink, near-mono editorial link */
|
|
2312
|
+
--ai: #A8A8A8;
|
|
2313
|
+
--ai-ink: #ECEAE4;
|
|
2314
|
+
--ai-wash: #1F1F1F;
|
|
2315
|
+
/* Seal — press red (kept hot) */
|
|
2316
|
+
--shu: #FF4538;
|
|
2317
|
+
--shu-wash: rgba(255, 69, 56, 0.14);
|
|
2318
|
+
/* Pull-quote / marginalia — warm gold */
|
|
2319
|
+
--ochre: #E8B96E;
|
|
2320
|
+
--ochre-wash: rgba(232, 185, 110, 0.12);
|
|
2321
|
+
/* Code surface — keep ink-slab, lifted slightly above paper */
|
|
2322
|
+
--code-bg: #060606;
|
|
2323
|
+
--code-ink: #FAFAF7;
|
|
2324
|
+
--code-muted: #8A8A86;
|
|
2325
|
+
--code-accent: #E8B96E;
|
|
2326
|
+
--code-green: #B8C57A;
|
|
2327
|
+
--code-blue: #94AFC9;
|
|
2328
|
+
/* Typography — match Press */
|
|
2329
|
+
--font-display: 'Playfair Display', 'Tiempos', 'Fraunces', Georgia, serif;
|
|
2330
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
2331
|
+
--font-serif: 'Playfair Display', 'Tiempos', 'Cormorant Garamond', Georgia, serif;
|
|
2332
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
2333
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', Consolas, Menlo, monospace;
|
|
2334
|
+
/* Radius — match Press, very square */
|
|
2335
|
+
--r-sm: 2px;
|
|
2336
|
+
--r-md: 3px;
|
|
2337
|
+
--r-lg: 4px;
|
|
2338
|
+
/* Shadows — minimal, deeper for dark */
|
|
2339
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);
|
|
2340
|
+
--shadow-md: 0 6px 24px rgba(0, 0, 0, .45);
|
|
2341
|
+
--shadow-lg: 0 18px 48px rgba(0, 0, 0, .55);
|
|
2342
|
+
--shadow-xl: 0 28px 64px rgba(0, 0, 0, .65);
|
|
2343
|
+
--shadow-2xl: 0 40px 96px rgba(0, 0, 0, .75);
|
|
2344
|
+
/* Blur — editorial doesn't use it */
|
|
2345
|
+
--blur-sm: none;
|
|
2346
|
+
--blur-md: none;
|
|
2347
|
+
--blur-lg: none;
|
|
2348
|
+
/* Glow — editorial doesn't use it */
|
|
2349
|
+
--glow-sm: 0 0 0 transparent;
|
|
2350
|
+
--glow-md: 0 0 0 transparent;
|
|
2351
|
+
--glow-lg: 0 0 0 transparent;
|
|
2352
|
+
/* Motion — editorial pace, match Press */
|
|
2353
|
+
--duration-fast: 200ms;
|
|
2354
|
+
--duration-normal: 280ms;
|
|
2355
|
+
--duration-slow: 420ms;
|
|
2356
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
2357
|
+
/* ----------------------------------------------------------
|
|
2358
|
+
SEMANTIC ALIASES
|
|
2359
|
+
---------------------------------------------------------- */
|
|
2360
|
+
/* Backgrounds */
|
|
2361
|
+
--background-default: var(--paper);
|
|
2362
|
+
--background-subtle: var(--paper-sunk);
|
|
2363
|
+
--background-navbar: var(--paper-raised);
|
|
2364
|
+
/* Surfaces */
|
|
2365
|
+
--surface-default: var(--paper);
|
|
2366
|
+
--surface-raised: var(--paper-raised);
|
|
2367
|
+
--surface-sunk: var(--paper-sunk);
|
|
2368
|
+
--surface-muted: var(--paper-sunk);
|
|
2369
|
+
--surface-subtle: var(--paper-raised);
|
|
2370
|
+
--surface-emphasis: var(--ink);
|
|
2371
|
+
--surface-glass: var(--paper-glass);
|
|
2372
|
+
/* Text */
|
|
2373
|
+
--text-primary: var(--ink);
|
|
2374
|
+
--text-secondary: var(--ink-soft);
|
|
2375
|
+
--text-muted: var(--ink-faint);
|
|
2376
|
+
--text-tertiary: var(--muted);
|
|
2377
|
+
--text-inverse: var(--paper);
|
|
2378
|
+
--text-link: var(--ink);
|
|
2379
|
+
--text-link-hover: var(--shu);
|
|
2380
|
+
/* Borders */
|
|
2381
|
+
--border-default: var(--hair);
|
|
2382
|
+
--border-subtle: var(--hair-soft);
|
|
2383
|
+
--border-emphasis: var(--ink);
|
|
2384
|
+
--border-focus: var(--shu);
|
|
2385
|
+
/* Interactive (hover / active wash) — light wash on dark */
|
|
2386
|
+
--interactive-hover: rgba(250, 250, 247, 0.05);
|
|
2387
|
+
--interactive-active: rgba(250, 250, 247, 0.10);
|
|
2388
|
+
/* Brand */
|
|
2389
|
+
--brand-primary: var(--ink);
|
|
2390
|
+
--brand-primary-hover: var(--shu);
|
|
2391
|
+
/* Action triplets */
|
|
2392
|
+
--action-primary-default: var(--ink);
|
|
2393
|
+
--action-primary-hover: var(--ai-ink);
|
|
2394
|
+
--action-primary-active: var(--ai-ink);
|
|
2395
|
+
--action-primary-wash: var(--ai-wash);
|
|
2396
|
+
--action-secondary-default: var(--shu);
|
|
2397
|
+
--action-secondary-hover: var(--shu);
|
|
2398
|
+
--action-secondary-active: var(--shu);
|
|
2399
|
+
--action-secondary-wash: var(--shu-wash);
|
|
2400
|
+
--action-tertiary-default: var(--ochre);
|
|
2401
|
+
--action-tertiary-hover: var(--ochre);
|
|
2402
|
+
--action-tertiary-active: var(--ochre);
|
|
2403
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
2404
|
+
/* Feedback */
|
|
2405
|
+
--feedback-info: var(--ai);
|
|
2406
|
+
--feedback-success: var(--code-green);
|
|
2407
|
+
--feedback-warning: var(--ochre);
|
|
2408
|
+
--feedback-error: var(--shu);
|
|
2409
|
+
/* Status — info (near-mono editorial) */
|
|
2410
|
+
--info-default: var(--ai);
|
|
2411
|
+
--info-subtle: var(--ai-wash);
|
|
2412
|
+
--info-text: var(--ai-ink);
|
|
2413
|
+
/* Status — success (restrained editorial green, lifted) */
|
|
2414
|
+
--success-default: #6FA85A;
|
|
2415
|
+
--success-subtle: rgba(111, 168, 90, 0.14);
|
|
2416
|
+
--success-text: #95C97F;
|
|
2417
|
+
/* Status — warning (warm editorial ochre) */
|
|
2418
|
+
--warning-default: var(--ochre);
|
|
2419
|
+
--warning-subtle: var(--ochre-wash);
|
|
2420
|
+
--warning-text: #F0CC8E;
|
|
2421
|
+
/* Status — error — press red IS the error color */
|
|
2422
|
+
--error-default: var(--shu);
|
|
2423
|
+
--error-subtle: var(--shu-wash);
|
|
2424
|
+
--error-text: #FF7A70;
|
|
2425
|
+
/* ----------------------------------------------------------
|
|
2426
|
+
LIBRARY SCALES
|
|
2427
|
+
---------------------------------------------------------- */
|
|
2428
|
+
/* Space scale */
|
|
2429
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
2430
|
+
The numbered scale is the source of truth: every component reads
|
|
2431
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
2432
|
+
are emitted by the library as references to these, so they follow
|
|
2433
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
2434
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
2435
|
+
--space-0: 0; /* flush */
|
|
2436
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
2437
|
+
--space-2: 0.75rem; /* control padding */
|
|
2438
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
2439
|
+
--space-4: 1rem; /* default rhythm */
|
|
2440
|
+
--space-5: 1.5rem; /* section gap */
|
|
2441
|
+
--space-6: 2rem; /* block gap */
|
|
2442
|
+
--space-7: 3rem; /* major gap */
|
|
2443
|
+
--space-8: 4rem; /* page section */
|
|
2444
|
+
--space-9: 6rem; /* hero rhythm */
|
|
2445
|
+
/* Radius alias — Press is editorial, xl stays tight (6px) */
|
|
2446
|
+
--radius-sm: var(--r-sm);
|
|
2447
|
+
--radius-md: var(--r-md);
|
|
2448
|
+
--radius-lg: var(--r-lg);
|
|
2449
|
+
--radius-xl: 6px;
|
|
2450
|
+
--radius-full: 9999px;
|
|
2451
|
+
/* Typography */
|
|
2452
|
+
--font-primary: var(--font-sans);
|
|
2453
|
+
--font-size-base: 1rem;
|
|
2454
|
+
--line-height-normal: 1.5;
|
|
2455
|
+
--font-weight-medium: 500;
|
|
2456
|
+
/* Z-index */
|
|
2457
|
+
--z-sticky: 1020;
|
|
2458
|
+
--z-dropdown: 1030;
|
|
2459
|
+
--z-backdrop: 1040;
|
|
2460
|
+
--z-modal: 1050;
|
|
2461
|
+
--z-popover: 1060;
|
|
2462
|
+
--z-tooltip: 1070;
|
|
2463
|
+
/* ----------------------------------------------------------
|
|
2464
|
+
OPTIONAL COMPONENT OVERRIDES — match Press exactly
|
|
2465
|
+
---------------------------------------------------------- */
|
|
2466
|
+
--btn-radius: var(--r-sm); /* 2px — near-square */
|
|
2467
|
+
--card-radius: var(--r-sm); /* 2px — boxed */
|
|
2468
|
+
--card-shadow: none; /* editorial is flat */
|
|
2469
|
+
--card-border: 1px solid var(--hair); /* thin rule instead */
|
|
2470
|
+
--input-radius: var(--r-sm); /* 2px */
|
|
2471
|
+
--modal-radius: var(--r-md); /* 3px */
|
|
2472
|
+
}
|
|
2473
|
+
:root[data-theme=press-light] {
|
|
2474
|
+
color-scheme: light;
|
|
2475
|
+
/* Surfaces — warm newsprint */
|
|
2476
|
+
--paper: #FAFAF7;
|
|
2477
|
+
--paper-raised: #FFF;
|
|
2478
|
+
--paper-sunk: #F2F1EC;
|
|
2479
|
+
--paper-glass: rgba(255, 255, 255, 0.80);
|
|
2480
|
+
/* Ink — warm near-black */
|
|
2481
|
+
--ink: #0A0A0A;
|
|
2482
|
+
--ink-soft: #555;
|
|
2483
|
+
--ink-faint: #727069;
|
|
2484
|
+
--graphite: #1A1A1A;
|
|
2485
|
+
--muted: #8E8C86;
|
|
2486
|
+
/* Rules / hairlines — thin editorial rules */
|
|
2487
|
+
--guide: #1A1A1A;
|
|
2488
|
+
--guide-soft: #D9D7D1;
|
|
2489
|
+
--hair: #1A1A1A;
|
|
2490
|
+
--hair-soft: #ECEAE4;
|
|
2491
|
+
/* Primary accent — near-ink editorial link (not a bright hue) */
|
|
2492
|
+
--ai: #1A1A1A;
|
|
2493
|
+
--ai-ink: #0A0A0A;
|
|
2494
|
+
--ai-wash: #ECEAE4;
|
|
2495
|
+
/* Seal — press red (the single editorial accent) */
|
|
2496
|
+
--shu: #D93025;
|
|
2497
|
+
--shu-wash: #FBEAE8;
|
|
2498
|
+
/* Pull-quote / marginalia — warm gold */
|
|
2499
|
+
--ochre: #B5873A;
|
|
2500
|
+
--ochre-wash: #F4EBD6;
|
|
2501
|
+
/* Code surface — keep editorial (ink slab) */
|
|
2502
|
+
--code-bg: #0A0A0A;
|
|
2503
|
+
--code-ink: #FAFAF7;
|
|
2504
|
+
--code-muted: #8A8A86;
|
|
2505
|
+
--code-accent: #E8B96E;
|
|
2506
|
+
--code-green: #B8C57A;
|
|
2507
|
+
--code-blue: #94AFC9;
|
|
2508
|
+
/* Typography */
|
|
2509
|
+
--font-display: 'Playfair Display', 'Tiempos', 'Fraunces', Georgia, serif;
|
|
2510
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
2511
|
+
--font-serif: 'Playfair Display', 'Tiempos', 'Cormorant Garamond', Georgia, serif;
|
|
2512
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
|
2513
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', Consolas, Menlo, monospace;
|
|
2514
|
+
/* Radius — editorial is tight, very square */
|
|
2515
|
+
--r-sm: 2px;
|
|
2516
|
+
--r-md: 3px;
|
|
2517
|
+
--r-lg: 4px;
|
|
2518
|
+
/* Shadows — minimal, single-layer, editorial flat */
|
|
2519
|
+
--shadow-sm: 0 1px 2px rgba(10, 10, 10, .05);
|
|
2520
|
+
--shadow-md: 0 6px 24px rgba(10, 10, 10, .06);
|
|
2521
|
+
--shadow-lg: 0 18px 48px rgba(10, 10, 10, .09);
|
|
2522
|
+
--shadow-xl: 0 28px 64px rgba(10, 10, 10, .12);
|
|
2523
|
+
--shadow-2xl: 0 40px 96px rgba(10, 10, 10, .18);
|
|
2524
|
+
/* Blur — editorial doesn't use it; declared so swap stays lossless */
|
|
2525
|
+
--blur-sm: none;
|
|
2526
|
+
--blur-md: none;
|
|
2527
|
+
--blur-lg: none;
|
|
2528
|
+
/* Glow — editorial doesn't use it; declared transparent */
|
|
2529
|
+
--glow-sm: 0 0 0 transparent;
|
|
2530
|
+
--glow-md: 0 0 0 transparent;
|
|
2531
|
+
--glow-lg: 0 0 0 transparent;
|
|
2532
|
+
/* Motion — editorial reads slower than digital */
|
|
2533
|
+
--duration-fast: 200ms;
|
|
2534
|
+
--duration-normal: 280ms;
|
|
2535
|
+
--duration-slow: 420ms;
|
|
2536
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
2537
|
+
/* ----------------------------------------------------------
|
|
2538
|
+
SEMANTIC ALIASES
|
|
2539
|
+
-----------------------------------------------------------
|
|
2540
|
+
Bridge the library's expected names to this theme's native
|
|
2541
|
+
palette. Components can now write m.color(surface-default)
|
|
2542
|
+
or var(--surface-default) and reskin with the theme
|
|
2543
|
+
automatically.
|
|
2544
|
+
---------------------------------------------------------- */
|
|
2545
|
+
/* Backgrounds (page-level) */
|
|
2546
|
+
--background-default: var(--paper);
|
|
2547
|
+
--background-subtle: var(--paper-sunk);
|
|
2548
|
+
--background-navbar: var(--paper-raised);
|
|
2549
|
+
/* Surfaces */
|
|
2550
|
+
--surface-default: var(--paper);
|
|
2551
|
+
--surface-raised: var(--paper-raised);
|
|
2552
|
+
--surface-sunk: var(--paper-sunk);
|
|
2553
|
+
--surface-muted: var(--paper-sunk);
|
|
2554
|
+
--surface-subtle: var(--paper-raised);
|
|
2555
|
+
--surface-emphasis: var(--ink);
|
|
2556
|
+
--surface-glass: var(--paper-glass);
|
|
2557
|
+
/* Text */
|
|
2558
|
+
--text-primary: var(--ink);
|
|
2559
|
+
--text-secondary: var(--ink-soft);
|
|
2560
|
+
--text-muted: var(--ink-faint);
|
|
2561
|
+
--text-tertiary: var(--muted);
|
|
2562
|
+
--text-inverse: var(--paper);
|
|
2563
|
+
--text-link: var(--ai);
|
|
2564
|
+
--text-link-hover: var(--ai-ink);
|
|
2565
|
+
/* Borders */
|
|
2566
|
+
--border-default: var(--hair);
|
|
2567
|
+
--border-subtle: var(--hair-soft);
|
|
2568
|
+
--border-emphasis: var(--ink);
|
|
2569
|
+
--border-focus: var(--ai);
|
|
2570
|
+
/* Interactive (hover / active wash layers) — ink overlays on paper */
|
|
2571
|
+
--interactive-hover: rgba(10, 10, 10, 0.05);
|
|
2572
|
+
--interactive-active: rgba(10, 10, 10, 0.10);
|
|
2573
|
+
/* Brand (identity — action-primary references these) */
|
|
2574
|
+
--brand-primary: var(--ai);
|
|
2575
|
+
--brand-primary-hover: var(--ai-ink);
|
|
2576
|
+
/* Action (primary / secondary / tertiary) */
|
|
2577
|
+
--action-primary-default: var(--ai);
|
|
2578
|
+
--action-primary-hover: var(--ai-ink);
|
|
2579
|
+
--action-primary-active: var(--ai-ink);
|
|
2580
|
+
--action-primary-wash: var(--ai-wash);
|
|
2581
|
+
--action-secondary-default: var(--shu);
|
|
2582
|
+
--action-secondary-hover: var(--shu);
|
|
2583
|
+
--action-secondary-active: var(--shu);
|
|
2584
|
+
--action-secondary-wash: var(--shu-wash);
|
|
2585
|
+
--action-tertiary-default: var(--ochre);
|
|
2586
|
+
--action-tertiary-hover: var(--ochre);
|
|
2587
|
+
--action-tertiary-active: var(--ochre);
|
|
2588
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
2589
|
+
/* Feedback / status (high-level semantic) */
|
|
2590
|
+
--feedback-info: var(--ai);
|
|
2591
|
+
--feedback-success: var(--code-green);
|
|
2592
|
+
--feedback-warning: var(--ochre);
|
|
2593
|
+
--feedback-error: var(--shu);
|
|
2594
|
+
/* Status — info (three-part: default / subtle / text).
|
|
2595
|
+
Press has no indigo; --ai is a near-ink editorial tone. */
|
|
2596
|
+
--info-default: var(--ai);
|
|
2597
|
+
--info-subtle: var(--ai-wash);
|
|
2598
|
+
--info-text: var(--ai-ink);
|
|
2599
|
+
/* Status — success. Restrained editorial green (desaturated). */
|
|
2600
|
+
--success-default: #2F7A3A;
|
|
2601
|
+
--success-subtle: #E3EEDF;
|
|
2602
|
+
--success-text: #1F5228;
|
|
2603
|
+
/* Status — warning. Warm editorial ochre. */
|
|
2604
|
+
--warning-default: #A86A1A;
|
|
2605
|
+
--warning-subtle: var(--ochre-wash);
|
|
2606
|
+
--warning-text: #6B4512;
|
|
2607
|
+
/* Status — error. Press red IS the error color. */
|
|
2608
|
+
--error-default: var(--shu);
|
|
2609
|
+
--error-subtle: var(--shu-wash);
|
|
2610
|
+
--error-text: #8A1D15;
|
|
2611
|
+
/* ----------------------------------------------------------
|
|
2612
|
+
LIBRARY SCALES (space / radius / type / z)
|
|
2613
|
+
-----------------------------------------------------------
|
|
2614
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
2615
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
2616
|
+
Themes declare the slots so those mixins always resolve.
|
|
2617
|
+
Numeric scales mirror Sketchbook so rhythm is consistent.
|
|
2618
|
+
---------------------------------------------------------- */
|
|
2619
|
+
/* Space scale (rem for accessibility) */
|
|
2620
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
2621
|
+
The numbered scale is the source of truth: every component reads
|
|
2622
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
2623
|
+
are emitted by the library as references to these, so they follow
|
|
2624
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
2625
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
2626
|
+
--space-0: 0; /* flush */
|
|
2627
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
2628
|
+
--space-2: 0.75rem; /* control padding */
|
|
2629
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
2630
|
+
--space-4: 1rem; /* default rhythm */
|
|
2631
|
+
--space-5: 1.5rem; /* section gap */
|
|
2632
|
+
--space-6: 2rem; /* block gap */
|
|
2633
|
+
--space-7: 3rem; /* major gap */
|
|
2634
|
+
--space-8: 4rem; /* page section */
|
|
2635
|
+
--space-9: 6rem; /* hero rhythm */
|
|
2636
|
+
/* Radius alias — mirrors --r-* with standard names so
|
|
2637
|
+
`m.radius(size)` in the library finds --radius-<size>.
|
|
2638
|
+
Press is editorial and angular: xl stays tight (4px). */
|
|
2639
|
+
--radius-sm: var(--r-sm);
|
|
2640
|
+
--radius-md: var(--r-md);
|
|
2641
|
+
--radius-lg: var(--r-lg);
|
|
2642
|
+
--radius-xl: 6px;
|
|
2643
|
+
--radius-full: 9999px;
|
|
2644
|
+
/* Typography — base body font + key scale slots.
|
|
2645
|
+
Press body is Inter (--font-sans). */
|
|
2646
|
+
--font-primary: var(--font-sans);
|
|
2647
|
+
--font-size-base: 1rem;
|
|
2648
|
+
--line-height-normal: 1.5;
|
|
2649
|
+
--font-weight-medium: 500;
|
|
2650
|
+
/* Z-index layers */
|
|
2651
|
+
--z-sticky: 1020;
|
|
2652
|
+
--z-dropdown: 1030;
|
|
2653
|
+
--z-backdrop: 1040;
|
|
2654
|
+
--z-modal: 1050;
|
|
2655
|
+
--z-popover: 1060;
|
|
2656
|
+
--z-tooltip: 1070;
|
|
2657
|
+
/* ----------------------------------------------------------
|
|
2658
|
+
OPTIONAL COMPONENT OVERRIDES (Feature 1.3)
|
|
2659
|
+
-----------------------------------------------------------
|
|
2660
|
+
Press is editorial newsprint: very tight radii (2–4px),
|
|
2661
|
+
shadowless cards (rules, not lifts), flat panels.
|
|
2662
|
+
Overrides are sparse — only the choices that define the
|
|
2663
|
+
editorial voice, defaults carry the rest.
|
|
2664
|
+
---------------------------------------------------------- */
|
|
2665
|
+
--btn-radius: var(--r-sm); /* 2px — near-square control */
|
|
2666
|
+
--card-radius: var(--r-sm); /* 2px — boxed layout */
|
|
2667
|
+
--card-shadow: none; /* editorial is flat */
|
|
2668
|
+
--card-border: 1px solid var(--hair); /* thin ink rule instead */
|
|
2669
|
+
--input-radius: var(--r-sm); /* 2px — text field */
|
|
2670
|
+
--modal-radius: var(--r-md); /* 3px — still tight */
|
|
2671
|
+
}
|
|
2672
|
+
:root[data-theme=prism] {
|
|
2673
|
+
color-scheme: light dark;
|
|
2674
|
+
/* Surfaces */
|
|
2675
|
+
--paper: light-dark(#fff, #09090b);
|
|
2676
|
+
--paper-raised: light-dark(#fff, #18181b);
|
|
2677
|
+
--paper-sunk: light-dark(#f4f4f5, #27272a);
|
|
2678
|
+
--paper-glass: light-dark(rgba(255, 255, 255, 0.80), rgba(24, 24, 27, 0.80));
|
|
2679
|
+
/* Ink — zinc neutral ramp */
|
|
2680
|
+
--ink: light-dark(#09090b, #fafafa);
|
|
2681
|
+
--ink-soft: light-dark(#27272a, #e4e4e7);
|
|
2682
|
+
--ink-faint: light-dark(#52525b, #a1a1aa);
|
|
2683
|
+
--graphite: light-dark(#18181b, #f4f4f5);
|
|
2684
|
+
--muted: light-dark(#71717a, #71717a);
|
|
2685
|
+
/* Lines */
|
|
2686
|
+
--guide: light-dark(#d4d4d8, #3f3f46);
|
|
2687
|
+
--guide-soft: light-dark(#e4e4e7, #27272a);
|
|
2688
|
+
--hair: light-dark(#e4e4e7, #27272a);
|
|
2689
|
+
--hair-soft: light-dark(#f4f4f5, #18181b);
|
|
2690
|
+
/* Primary accent — refined blue (brighter for dark) */
|
|
2691
|
+
--ai: light-dark(#2563eb, #3b82f6);
|
|
2692
|
+
--ai-ink: light-dark(#1d4ed8, #60a5fa);
|
|
2693
|
+
--ai-wash: light-dark(#eff6ff, #1e3a8a);
|
|
2694
|
+
/* Seal — red */
|
|
2695
|
+
--shu: light-dark(#dc2626, #ef4444);
|
|
2696
|
+
--shu-wash: light-dark(#fef2f2, #450a0a);
|
|
2697
|
+
/* Tertiary — amber */
|
|
2698
|
+
--ochre: light-dark(#ca8a04, #eab308);
|
|
2699
|
+
--ochre-wash: light-dark(#fefce8, #422006);
|
|
2700
|
+
/* Code surface */
|
|
2701
|
+
--code-bg: light-dark(#fafafa, #0a0a0a);
|
|
2702
|
+
--code-ink: light-dark(#18181b, #e4e4e7);
|
|
2703
|
+
--code-muted: light-dark(#6B6B73, #808089);
|
|
2704
|
+
--code-accent: light-dark(#C1410C, #fb923c);
|
|
2705
|
+
--code-green: light-dark(#117D39, #4ade80);
|
|
2706
|
+
--code-blue: light-dark(#2462EB, #60a5fa);
|
|
2707
|
+
/* Typography — identical across modes */
|
|
2708
|
+
--font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
2709
|
+
--font-script: 'Inter', cursive;
|
|
2710
|
+
--font-serif: Georgia, 'Times New Roman', Times, serif;
|
|
2711
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
2712
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', 'Roboto Mono', Consolas, Menlo, monospace;
|
|
2713
|
+
/* Radius — identical */
|
|
2714
|
+
--r-sm: 4px;
|
|
2715
|
+
--r-md: 6px;
|
|
2716
|
+
--r-lg: 8px;
|
|
2717
|
+
/* Shadow — extremely subtle, heavier on dark */
|
|
2718
|
+
--shadow-sm: 0 1px 1px light-dark(rgba(9, 9, 11, 0.03), rgba(0, 0, 0, 0.30));
|
|
2719
|
+
--shadow-md: 0 1px 2px light-dark(rgba(9, 9, 11, 0.05), rgba(0, 0, 0, 0.40));
|
|
2720
|
+
--shadow-lg: 0 4px 12px -4px light-dark(rgba(9, 9, 11, 0.08), rgba(0, 0, 0, 0.60));
|
|
2721
|
+
--shadow-xl: 0 16px 32px -16px light-dark(rgba(9, 9, 11, 0.15), rgba(0, 0, 0, 0.70));
|
|
2722
|
+
--shadow-2xl: 0 0 0 1px light-dark(#e4e4e7, #27272a), 0 8px 24px -8px light-dark(rgba(9, 9, 11, 0.12), rgba(0, 0, 0, 0.60));
|
|
2723
|
+
/* Blur / glow — Prism uses neither */
|
|
2724
|
+
--blur-sm: none;
|
|
2725
|
+
--blur-md: none;
|
|
2726
|
+
--blur-lg: none;
|
|
2727
|
+
--glow-sm: 0 0 0 transparent;
|
|
2728
|
+
--glow-md: 0 0 0 transparent;
|
|
2729
|
+
--glow-lg: 0 0 0 transparent;
|
|
2730
|
+
/* Motion — fast + crisp, identical */
|
|
2731
|
+
--duration-fast: 100ms;
|
|
2732
|
+
--duration-normal: 150ms;
|
|
2733
|
+
--duration-slow: 250ms;
|
|
2734
|
+
--ease: cubic-bezier(.32, .72, 0, 1);
|
|
2735
|
+
/* Semantic aliases */
|
|
2736
|
+
--background-default: var(--paper);
|
|
2737
|
+
--background-subtle: var(--paper-sunk);
|
|
2738
|
+
--background-navbar: var(--paper-raised);
|
|
2739
|
+
--surface-default: var(--paper);
|
|
2740
|
+
--surface-raised: var(--paper-raised);
|
|
2741
|
+
--surface-sunk: var(--paper-sunk);
|
|
2742
|
+
--surface-muted: var(--paper-sunk);
|
|
2743
|
+
--surface-subtle: var(--paper-raised);
|
|
2744
|
+
--surface-emphasis: var(--ink);
|
|
2745
|
+
--surface-glass: var(--paper-glass);
|
|
2746
|
+
--text-primary: var(--ink);
|
|
2747
|
+
--text-secondary: var(--ink-soft);
|
|
2748
|
+
--text-muted: var(--ink-faint);
|
|
2749
|
+
--text-tertiary: var(--muted);
|
|
2750
|
+
--text-inverse: var(--paper);
|
|
2751
|
+
--text-link: var(--ai);
|
|
2752
|
+
--text-link-hover: var(--ai-ink);
|
|
2753
|
+
--border-default: var(--hair);
|
|
2754
|
+
--border-subtle: var(--hair-soft);
|
|
2755
|
+
--border-emphasis: var(--guide);
|
|
2756
|
+
--border-focus: var(--ai);
|
|
2757
|
+
--interactive-hover: light-dark(rgba(9, 9, 11, 0.05), rgba(255, 255, 255, 0.05));
|
|
2758
|
+
--interactive-active: light-dark(rgba(9, 9, 11, 0.10), rgba(255, 255, 255, 0.10));
|
|
2759
|
+
--brand-primary: var(--ai);
|
|
2760
|
+
--brand-primary-hover: var(--ai-ink);
|
|
2761
|
+
--action-primary-default: var(--ai);
|
|
2762
|
+
--action-primary-hover: var(--ai-ink);
|
|
2763
|
+
--action-primary-active: var(--ai-ink);
|
|
2764
|
+
--action-primary-wash: var(--ai-wash);
|
|
2765
|
+
--action-secondary-default: var(--shu);
|
|
2766
|
+
--action-secondary-hover: var(--shu);
|
|
2767
|
+
--action-secondary-active: var(--shu);
|
|
2768
|
+
--action-secondary-wash: var(--shu-wash);
|
|
2769
|
+
--action-tertiary-default: var(--ochre);
|
|
2770
|
+
--action-tertiary-hover: var(--ochre);
|
|
2771
|
+
--action-tertiary-active: var(--ochre);
|
|
2772
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
2773
|
+
--feedback-info: var(--ai);
|
|
2774
|
+
--feedback-success: light-dark(#16a34a, #22c55e);
|
|
2775
|
+
--feedback-warning: var(--ochre);
|
|
2776
|
+
--feedback-error: var(--shu);
|
|
2777
|
+
--info-default: var(--ai);
|
|
2778
|
+
--info-subtle: var(--ai-wash);
|
|
2779
|
+
--info-text: light-dark(var(--ai-ink), #85BFFF);
|
|
2780
|
+
--success-default: light-dark(#16a34a, #22c55e);
|
|
2781
|
+
--success-subtle: light-dark(#f0fdf4, #14532d);
|
|
2782
|
+
--success-text: light-dark(#15803d, #4ade80);
|
|
2783
|
+
--warning-default: light-dark(#ca8a04, #eab308);
|
|
2784
|
+
--warning-subtle: light-dark(#fefce8, #422006);
|
|
2785
|
+
--warning-text: light-dark(#854d0e, #fde047);
|
|
2786
|
+
--error-default: light-dark(#dc2626, #ef4444);
|
|
2787
|
+
--error-subtle: light-dark(#fef2f2, #450a0a);
|
|
2788
|
+
--error-text: light-dark(#b91c1c, #fca5a5);
|
|
2789
|
+
/* Library scales — identical */
|
|
2790
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
2791
|
+
The numbered scale is the source of truth: every component reads
|
|
2792
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
2793
|
+
are emitted by the library as references to these, so they follow
|
|
2794
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
2795
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
2796
|
+
--space-0: 0; /* flush */
|
|
2797
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
2798
|
+
--space-2: 0.75rem; /* control padding */
|
|
2799
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
2800
|
+
--space-4: 1rem; /* default rhythm */
|
|
2801
|
+
--space-5: 1.5rem; /* section gap */
|
|
2802
|
+
--space-6: 2rem; /* block gap */
|
|
2803
|
+
--space-7: 3rem; /* major gap */
|
|
2804
|
+
--space-8: 4rem; /* page section */
|
|
2805
|
+
--space-9: 6rem; /* hero rhythm */
|
|
2806
|
+
--radius-sm: var(--r-sm);
|
|
2807
|
+
--radius-md: var(--r-md);
|
|
2808
|
+
--radius-lg: var(--r-lg);
|
|
2809
|
+
--radius-xl: 12px;
|
|
2810
|
+
--radius-full: 9999px;
|
|
2811
|
+
--font-primary: var(--font-sans);
|
|
2812
|
+
--font-size-base: 1rem;
|
|
2813
|
+
--line-height-normal: 1.5;
|
|
2814
|
+
--font-weight-medium: 500;
|
|
2815
|
+
--z-sticky: 1020;
|
|
2816
|
+
--z-dropdown: 1030;
|
|
2817
|
+
--z-backdrop: 1040;
|
|
2818
|
+
--z-modal: 1050;
|
|
2819
|
+
--z-popover: 1060;
|
|
2820
|
+
--z-tooltip: 1070;
|
|
2821
|
+
/* Component overrides — border-driven, tight radii */
|
|
2822
|
+
--btn-radius: var(--r-md);
|
|
2823
|
+
--card-radius: var(--r-md);
|
|
2824
|
+
--card-shadow: var(--shadow-sm);
|
|
2825
|
+
--card-border: 1px solid var(--hair);
|
|
2826
|
+
--input-radius: var(--r-md);
|
|
2827
|
+
--modal-radius: var(--r-lg);
|
|
2828
|
+
}
|
|
2829
|
+
:root[data-theme=prism-dark] {
|
|
2830
|
+
color-scheme: dark;
|
|
2831
|
+
/* Surfaces — Zinc dark ramp */
|
|
2832
|
+
--paper: #09090b;
|
|
2833
|
+
--paper-raised: #18181b;
|
|
2834
|
+
--paper-sunk: #27272a;
|
|
2835
|
+
--paper-glass: rgba(24, 24, 27, 0.80);
|
|
2836
|
+
/* Ink — inverted neutrals */
|
|
2837
|
+
--ink: #fafafa;
|
|
2838
|
+
--ink-soft: #e4e4e7;
|
|
2839
|
+
--ink-faint: #a1a1aa;
|
|
2840
|
+
--graphite: #f4f4f5;
|
|
2841
|
+
--muted: #71717a;
|
|
2842
|
+
/* Lines — dark borders */
|
|
2843
|
+
--guide: #3f3f46;
|
|
2844
|
+
--guide-soft: #27272a;
|
|
2845
|
+
--hair: #27272a;
|
|
2846
|
+
--hair-soft: #18181b;
|
|
2847
|
+
/* Primary accent — brighter blue for dark surfaces */
|
|
2848
|
+
--ai: #3b82f6;
|
|
2849
|
+
--ai-ink: #60a5fa;
|
|
2850
|
+
--ai-wash: #1e3a8a;
|
|
2851
|
+
/* Seal — red */
|
|
2852
|
+
--shu: #ef4444;
|
|
2853
|
+
--shu-wash: #450a0a;
|
|
2854
|
+
/* Tertiary — amber */
|
|
2855
|
+
--ochre: #eab308;
|
|
2856
|
+
--ochre-wash: #422006;
|
|
2857
|
+
/* Code — dark syntax surface */
|
|
2858
|
+
--code-bg: #0a0a0a;
|
|
2859
|
+
--code-ink: #e4e4e7;
|
|
2860
|
+
--code-muted: #808089;
|
|
2861
|
+
--code-accent: #fb923c;
|
|
2862
|
+
--code-green: #4ade80;
|
|
2863
|
+
--code-blue: #60a5fa;
|
|
2864
|
+
/* Typography */
|
|
2865
|
+
--font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
2866
|
+
--font-script: 'Inter', cursive;
|
|
2867
|
+
--font-serif: Georgia, 'Times New Roman', Times, serif;
|
|
2868
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
2869
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', 'Roboto Mono', Consolas, Menlo, monospace;
|
|
2870
|
+
/* Radius */
|
|
2871
|
+
--r-sm: 4px;
|
|
2872
|
+
--r-md: 6px;
|
|
2873
|
+
--r-lg: 8px;
|
|
2874
|
+
/* Shadow — heavier for dark backgrounds */
|
|
2875
|
+
--shadow-sm: 0 1px 1px rgba(0, 0, 0, .3);
|
|
2876
|
+
--shadow-md: 0 1px 2px rgba(0, 0, 0, .4);
|
|
2877
|
+
--shadow-lg: 0 4px 12px -4px rgba(0, 0, 0, .6);
|
|
2878
|
+
--shadow-xl: 0 16px 32px -16px rgba(0, 0, 0, .7);
|
|
2879
|
+
--shadow-2xl: 0 0 0 1px #27272a, 0 8px 24px -8px rgba(0, 0, 0, .6);
|
|
2880
|
+
/* Blur */
|
|
2881
|
+
--blur-sm: none;
|
|
2882
|
+
--blur-md: none;
|
|
2883
|
+
--blur-lg: none;
|
|
2884
|
+
/* Glow */
|
|
2885
|
+
--glow-sm: 0 0 0 transparent;
|
|
2886
|
+
--glow-md: 0 0 0 transparent;
|
|
2887
|
+
--glow-lg: 0 0 0 transparent;
|
|
2888
|
+
/* Motion */
|
|
2889
|
+
--duration-fast: 100ms;
|
|
2890
|
+
--duration-normal: 150ms;
|
|
2891
|
+
--duration-slow: 250ms;
|
|
2892
|
+
--ease: cubic-bezier(.32, .72, 0, 1);
|
|
2893
|
+
/* Backgrounds */
|
|
2894
|
+
--background-default: var(--paper);
|
|
2895
|
+
--background-subtle: var(--paper-sunk);
|
|
2896
|
+
--background-navbar: var(--paper-raised);
|
|
2897
|
+
/* Surfaces (semantic) */
|
|
2898
|
+
--surface-default: var(--paper);
|
|
2899
|
+
--surface-raised: var(--paper-raised);
|
|
2900
|
+
--surface-sunk: var(--paper-sunk);
|
|
2901
|
+
--surface-muted: var(--paper-sunk);
|
|
2902
|
+
--surface-subtle: var(--paper-raised);
|
|
2903
|
+
--surface-emphasis: var(--ink);
|
|
2904
|
+
--surface-glass: var(--paper-glass);
|
|
2905
|
+
/* Text */
|
|
2906
|
+
--text-primary: var(--ink);
|
|
2907
|
+
--text-secondary: var(--ink-soft);
|
|
2908
|
+
--text-muted: var(--ink-faint);
|
|
2909
|
+
--text-tertiary: var(--muted);
|
|
2910
|
+
--text-inverse: var(--paper);
|
|
2911
|
+
--text-link: var(--ai);
|
|
2912
|
+
--text-link-hover: var(--ai-ink);
|
|
2913
|
+
/* Borders */
|
|
2914
|
+
--border-default: var(--hair);
|
|
2915
|
+
--border-subtle: var(--hair-soft);
|
|
2916
|
+
--border-emphasis: var(--guide);
|
|
2917
|
+
--border-focus: var(--ai);
|
|
2918
|
+
/* Interactive overlays — light wash on dark */
|
|
2919
|
+
--interactive-hover: rgba(255, 255, 255, 0.05);
|
|
2920
|
+
--interactive-active: rgba(255, 255, 255, 0.10);
|
|
2921
|
+
/* Brand */
|
|
2922
|
+
--brand-primary: var(--ai);
|
|
2923
|
+
--brand-primary-hover: var(--ai-ink);
|
|
2924
|
+
/* Action triplets */
|
|
2925
|
+
--action-primary-default: var(--ai);
|
|
2926
|
+
--action-primary-hover: var(--ai-ink);
|
|
2927
|
+
--action-primary-active: var(--ai-ink);
|
|
2928
|
+
--action-primary-wash: var(--ai-wash);
|
|
2929
|
+
--action-secondary-default: var(--shu);
|
|
2930
|
+
--action-secondary-hover: var(--shu);
|
|
2931
|
+
--action-secondary-active: var(--shu);
|
|
2932
|
+
--action-secondary-wash: var(--shu-wash);
|
|
2933
|
+
--action-tertiary-default: var(--ochre);
|
|
2934
|
+
--action-tertiary-hover: var(--ochre);
|
|
2935
|
+
--action-tertiary-active: var(--ochre);
|
|
2936
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
2937
|
+
/* Feedback */
|
|
2938
|
+
--feedback-info: var(--ai);
|
|
2939
|
+
--feedback-success: #22c55e;
|
|
2940
|
+
--feedback-warning: var(--ochre);
|
|
2941
|
+
--feedback-error: var(--shu);
|
|
2942
|
+
/* Status — info */
|
|
2943
|
+
--info-default: var(--ai);
|
|
2944
|
+
--info-subtle: var(--ai-wash);
|
|
2945
|
+
--info-text: #85BFFF;
|
|
2946
|
+
/* Status — success */
|
|
2947
|
+
--success-default: #22c55e;
|
|
2948
|
+
--success-subtle: #14532d;
|
|
2949
|
+
--success-text: #4ade80;
|
|
2950
|
+
/* Status — warning */
|
|
2951
|
+
--warning-default: #eab308;
|
|
2952
|
+
--warning-subtle: #422006;
|
|
2953
|
+
--warning-text: #fde047;
|
|
2954
|
+
/* Status — error */
|
|
2955
|
+
--error-default: #ef4444;
|
|
2956
|
+
--error-subtle: #450a0a;
|
|
2957
|
+
--error-text: #fca5a5;
|
|
2958
|
+
/* Space scale */
|
|
2959
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
2960
|
+
The numbered scale is the source of truth: every component reads
|
|
2961
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
2962
|
+
are emitted by the library as references to these, so they follow
|
|
2963
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
2964
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
2965
|
+
--space-0: 0; /* flush */
|
|
2966
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
2967
|
+
--space-2: 0.75rem; /* control padding */
|
|
2968
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
2969
|
+
--space-4: 1rem; /* default rhythm */
|
|
2970
|
+
--space-5: 1.5rem; /* section gap */
|
|
2971
|
+
--space-6: 2rem; /* block gap */
|
|
2972
|
+
--space-7: 3rem; /* major gap */
|
|
2973
|
+
--space-8: 4rem; /* page section */
|
|
2974
|
+
--space-9: 6rem; /* hero rhythm */
|
|
2975
|
+
/* Radius alias */
|
|
2976
|
+
--radius-sm: var(--r-sm);
|
|
2977
|
+
--radius-md: var(--r-md);
|
|
2978
|
+
--radius-lg: var(--r-lg);
|
|
2979
|
+
--radius-xl: 12px;
|
|
2980
|
+
--radius-full: 9999px;
|
|
2981
|
+
/* Typography */
|
|
2982
|
+
--font-primary: var(--font-sans);
|
|
2983
|
+
--font-size-base: 1rem;
|
|
2984
|
+
--line-height-normal: 1.5;
|
|
2985
|
+
--font-weight-medium: 500;
|
|
2986
|
+
/* Z-index layers */
|
|
2987
|
+
--z-sticky: 1020;
|
|
2988
|
+
--z-dropdown: 1030;
|
|
2989
|
+
--z-backdrop: 1040;
|
|
2990
|
+
--z-modal: 1050;
|
|
2991
|
+
--z-popover: 1060;
|
|
2992
|
+
--z-tooltip: 1070;
|
|
2993
|
+
/* Component overrides */
|
|
2994
|
+
--btn-radius: var(--r-md);
|
|
2995
|
+
--card-radius: var(--r-md);
|
|
2996
|
+
--card-shadow: var(--shadow-sm);
|
|
2997
|
+
--card-border: 1px solid var(--hair);
|
|
2998
|
+
--input-radius: var(--r-md);
|
|
2999
|
+
--modal-radius: var(--r-lg);
|
|
3000
|
+
}
|
|
3001
|
+
:root[data-theme=prism-light] {
|
|
3002
|
+
color-scheme: light;
|
|
3003
|
+
/* Surfaces */
|
|
3004
|
+
--paper: #fff;
|
|
3005
|
+
--paper-raised: #fff;
|
|
3006
|
+
--paper-sunk: #f4f4f5;
|
|
3007
|
+
--paper-glass: rgba(255, 255, 255, 0.80);
|
|
3008
|
+
/* Ink — Zinc neutral ramp */
|
|
3009
|
+
--ink: #09090b;
|
|
3010
|
+
--ink-soft: #27272a;
|
|
3011
|
+
--ink-faint: #52525b;
|
|
3012
|
+
--graphite: #18181b;
|
|
3013
|
+
--muted: #71717a;
|
|
3014
|
+
/* Lines */
|
|
3015
|
+
--guide: #d4d4d8;
|
|
3016
|
+
--guide-soft: #e4e4e7;
|
|
3017
|
+
--hair: #e4e4e7;
|
|
3018
|
+
--hair-soft: #f4f4f5;
|
|
3019
|
+
/* Primary accent — refined blue */
|
|
3020
|
+
--ai: #2563eb;
|
|
3021
|
+
--ai-ink: #1d4ed8;
|
|
3022
|
+
--ai-wash: #eff6ff;
|
|
3023
|
+
/* Seal — red (used for error / secondary) */
|
|
3024
|
+
--shu: #dc2626;
|
|
3025
|
+
--shu-wash: #fef2f2;
|
|
3026
|
+
/* Tertiary — amber (used for warning) */
|
|
3027
|
+
--ochre: #ca8a04;
|
|
3028
|
+
--ochre-wash: #fefce8;
|
|
3029
|
+
/* Code — light syntax surface */
|
|
3030
|
+
--code-bg: #fafafa;
|
|
3031
|
+
--code-ink: #18181b;
|
|
3032
|
+
--code-muted: #71717a;
|
|
3033
|
+
--code-accent: #c2410c;
|
|
3034
|
+
--code-green: #117C38;
|
|
3035
|
+
--code-blue: #2563eb;
|
|
3036
|
+
/* Typography */
|
|
3037
|
+
--font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
3038
|
+
--font-script: 'Inter', cursive;
|
|
3039
|
+
--font-serif: Georgia, 'Times New Roman', Times, serif;
|
|
3040
|
+
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
3041
|
+
--font-mono: 'JetBrains Mono', 'SF Mono', 'Roboto Mono', Consolas, Menlo, monospace;
|
|
3042
|
+
/* Radius */
|
|
3043
|
+
--r-sm: 4px;
|
|
3044
|
+
--r-md: 6px;
|
|
3045
|
+
--r-lg: 8px;
|
|
3046
|
+
/* Shadow — extremely subtle */
|
|
3047
|
+
--shadow-sm: 0 1px 1px rgba(9, 9, 11, .03);
|
|
3048
|
+
--shadow-md: 0 1px 2px rgba(9, 9, 11, .05);
|
|
3049
|
+
--shadow-lg: 0 4px 12px -4px rgba(9, 9, 11, .08);
|
|
3050
|
+
--shadow-xl: 0 16px 32px -16px rgba(9, 9, 11, .15);
|
|
3051
|
+
--shadow-2xl: 0 0 0 1px #e4e4e7, 0 8px 24px -8px rgba(9, 9, 11, .12);
|
|
3052
|
+
/* Blur — Prism doesn't use frosted surfaces */
|
|
3053
|
+
--blur-sm: none;
|
|
3054
|
+
--blur-md: none;
|
|
3055
|
+
--blur-lg: none;
|
|
3056
|
+
/* Glow — Prism doesn't use glow effects */
|
|
3057
|
+
--glow-sm: 0 0 0 transparent;
|
|
3058
|
+
--glow-md: 0 0 0 transparent;
|
|
3059
|
+
--glow-lg: 0 0 0 transparent;
|
|
3060
|
+
/* Motion — fast and crisp */
|
|
3061
|
+
--duration-fast: 100ms;
|
|
3062
|
+
--duration-normal: 150ms;
|
|
3063
|
+
--duration-slow: 250ms;
|
|
3064
|
+
--ease: cubic-bezier(.32, .72, 0, 1);
|
|
3065
|
+
/* Backgrounds */
|
|
3066
|
+
--background-default: var(--paper);
|
|
3067
|
+
--background-subtle: var(--paper-sunk);
|
|
3068
|
+
--background-navbar: var(--paper-raised);
|
|
3069
|
+
/* Surfaces (semantic) */
|
|
3070
|
+
--surface-default: var(--paper);
|
|
3071
|
+
--surface-raised: var(--paper-raised);
|
|
3072
|
+
--surface-sunk: var(--paper-sunk);
|
|
3073
|
+
--surface-muted: var(--paper-sunk);
|
|
3074
|
+
--surface-subtle: var(--paper-raised);
|
|
3075
|
+
--surface-emphasis: var(--ink);
|
|
3076
|
+
--surface-glass: var(--paper-glass);
|
|
3077
|
+
/* Text */
|
|
3078
|
+
--text-primary: var(--ink);
|
|
3079
|
+
--text-secondary: var(--ink-soft);
|
|
3080
|
+
--text-muted: var(--ink-faint);
|
|
3081
|
+
--text-tertiary: var(--muted);
|
|
3082
|
+
--text-inverse: var(--paper);
|
|
3083
|
+
--text-link: var(--ai);
|
|
3084
|
+
--text-link-hover: var(--ai-ink);
|
|
3085
|
+
/* Borders */
|
|
3086
|
+
--border-default: var(--hair);
|
|
3087
|
+
--border-subtle: var(--hair-soft);
|
|
3088
|
+
--border-emphasis: var(--guide);
|
|
3089
|
+
--border-focus: var(--ai);
|
|
3090
|
+
/* Interactive overlays */
|
|
3091
|
+
--interactive-hover: rgba(9, 9, 11, 0.05);
|
|
3092
|
+
--interactive-active: rgba(9, 9, 11, 0.10);
|
|
3093
|
+
/* Brand */
|
|
3094
|
+
--brand-primary: var(--ai);
|
|
3095
|
+
--brand-primary-hover: var(--ai-ink);
|
|
3096
|
+
/* Action triplets */
|
|
3097
|
+
--action-primary-default: var(--ai);
|
|
3098
|
+
--action-primary-hover: var(--ai-ink);
|
|
3099
|
+
--action-primary-active: var(--ai-ink);
|
|
3100
|
+
--action-primary-wash: var(--ai-wash);
|
|
3101
|
+
--action-secondary-default: var(--shu);
|
|
3102
|
+
--action-secondary-hover: var(--shu);
|
|
3103
|
+
--action-secondary-active: var(--shu);
|
|
3104
|
+
--action-secondary-wash: var(--shu-wash);
|
|
3105
|
+
--action-tertiary-default: var(--ochre);
|
|
3106
|
+
--action-tertiary-hover: var(--ochre);
|
|
3107
|
+
--action-tertiary-active: var(--ochre);
|
|
3108
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
3109
|
+
/* Feedback */
|
|
3110
|
+
--feedback-info: var(--ai);
|
|
3111
|
+
--feedback-success: #16a34a;
|
|
3112
|
+
--feedback-warning: var(--ochre);
|
|
3113
|
+
--feedback-error: var(--shu);
|
|
3114
|
+
/* Status — info */
|
|
3115
|
+
--info-default: var(--ai);
|
|
3116
|
+
--info-subtle: var(--ai-wash);
|
|
3117
|
+
--info-text: var(--ai-ink);
|
|
3118
|
+
/* Status — success */
|
|
3119
|
+
--success-default: #16a34a;
|
|
3120
|
+
--success-subtle: #f0fdf4;
|
|
3121
|
+
--success-text: #15803d;
|
|
3122
|
+
/* Status — warning */
|
|
3123
|
+
--warning-default: #ca8a04;
|
|
3124
|
+
--warning-subtle: #fefce8;
|
|
3125
|
+
--warning-text: #854d0e;
|
|
3126
|
+
/* Status — error */
|
|
3127
|
+
--error-default: #dc2626;
|
|
3128
|
+
--error-subtle: #fef2f2;
|
|
3129
|
+
--error-text: #b91c1c;
|
|
3130
|
+
/* Space scale */
|
|
3131
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
3132
|
+
The numbered scale is the source of truth: every component reads
|
|
3133
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
3134
|
+
are emitted by the library as references to these, so they follow
|
|
3135
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
3136
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
3137
|
+
--space-0: 0; /* flush */
|
|
3138
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
3139
|
+
--space-2: 0.75rem; /* control padding */
|
|
3140
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
3141
|
+
--space-4: 1rem; /* default rhythm */
|
|
3142
|
+
--space-5: 1.5rem; /* section gap */
|
|
3143
|
+
--space-6: 2rem; /* block gap */
|
|
3144
|
+
--space-7: 3rem; /* major gap */
|
|
3145
|
+
--space-8: 4rem; /* page section */
|
|
3146
|
+
--space-9: 6rem; /* hero rhythm */
|
|
3147
|
+
/* Radius alias */
|
|
3148
|
+
--radius-sm: var(--r-sm);
|
|
3149
|
+
--radius-md: var(--r-md);
|
|
3150
|
+
--radius-lg: var(--r-lg);
|
|
3151
|
+
--radius-xl: 12px;
|
|
3152
|
+
--radius-full: 9999px;
|
|
3153
|
+
/* Typography */
|
|
3154
|
+
--font-primary: var(--font-sans);
|
|
3155
|
+
--font-size-base: 1rem;
|
|
3156
|
+
--line-height-normal: 1.5;
|
|
3157
|
+
--font-weight-medium: 500;
|
|
3158
|
+
/* Z-index layers */
|
|
3159
|
+
--z-sticky: 1020;
|
|
3160
|
+
--z-dropdown: 1030;
|
|
3161
|
+
--z-backdrop: 1040;
|
|
3162
|
+
--z-modal: 1050;
|
|
3163
|
+
--z-popover: 1060;
|
|
3164
|
+
--z-tooltip: 1070;
|
|
3165
|
+
/* Component overrides — Prism is border-driven and tightly rounded */
|
|
3166
|
+
--btn-radius: var(--r-md);
|
|
3167
|
+
--card-radius: var(--r-md);
|
|
3168
|
+
--card-shadow: var(--shadow-sm);
|
|
3169
|
+
--card-border: 1px solid var(--hair);
|
|
3170
|
+
--input-radius: var(--r-md);
|
|
3171
|
+
--modal-radius: var(--r-lg);
|
|
3172
|
+
}
|
|
3173
|
+
:root[data-theme=sketchbook] {
|
|
3174
|
+
color-scheme: light dark;
|
|
3175
|
+
/* Surfaces — warm paper / warm charcoal paper */
|
|
3176
|
+
--paper: light-dark(#F7F3EA, #1A1815);
|
|
3177
|
+
--paper-raised: light-dark(#FDFAF2, #2A2520);
|
|
3178
|
+
--paper-sunk: light-dark(#ECE5D3, #11100E);
|
|
3179
|
+
--paper-glass: light-dark(rgba(253, 250, 242, 0.75), rgba(42, 37, 32, 0.78));
|
|
3180
|
+
/* Ink — warm pencil + sumi / warm cream */
|
|
3181
|
+
--ink: light-dark(#2A241E, #F4EFE2);
|
|
3182
|
+
--ink-soft: light-dark(#4A4037, #D8D0BE);
|
|
3183
|
+
--ink-faint: light-dark(#726858, #A89E89);
|
|
3184
|
+
--graphite: light-dark(#3A332B, #E8E0CE);
|
|
3185
|
+
--muted: light-dark(#948977, #7A715F);
|
|
3186
|
+
/* Construction lines */
|
|
3187
|
+
--guide: light-dark(#C9BDA5, #4A4239);
|
|
3188
|
+
--guide-soft: light-dark(#DDD4C0, #382F27);
|
|
3189
|
+
--hair: light-dark(#D4CCBB, #3F362C);
|
|
3190
|
+
--hair-soft: light-dark(#E8E2D4, #2A241E);
|
|
3191
|
+
/* Primary accent — indigo (lifted for dark paper) */
|
|
3192
|
+
--ai: light-dark(#1F3A5F, #6E8FBF);
|
|
3193
|
+
--ai-ink: light-dark(#14263F, #8DA8D1);
|
|
3194
|
+
--ai-wash: light-dark(#E5EBF1, #1F2B3F);
|
|
3195
|
+
/* Seal — vermilion (warm, brightens slightly on dark) */
|
|
3196
|
+
--shu: light-dark(#C1272D, #E36148);
|
|
3197
|
+
--shu-wash: light-dark(#F6E3E1, #3A1A14);
|
|
3198
|
+
/* Draft / marginalia — warm gold */
|
|
3199
|
+
--ochre: light-dark(#A37B30, #D4A04B);
|
|
3200
|
+
--ochre-wash: light-dark(#F0E5CC, #382B14);
|
|
3201
|
+
/* Code surface — inverts intentionally */
|
|
3202
|
+
--code-bg: light-dark(#2B2420, #F7F3EA);
|
|
3203
|
+
--code-ink: light-dark(#F7F3EA, #2B2420);
|
|
3204
|
+
--code-muted: light-dark(#A39787, #6B5E50);
|
|
3205
|
+
--code-accent: light-dark(#E5B660, #836327);
|
|
3206
|
+
--code-green: light-dark(#A8B86C, #537136);
|
|
3207
|
+
--code-blue: light-dark(#94AFC9, #1F3A5F);
|
|
3208
|
+
/* Typography — identical across modes */
|
|
3209
|
+
--font-display: 'DM Serif Display', 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
|
|
3210
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
3211
|
+
--font-serif: 'Noto Serif JP', 'Cormorant Garamond', Georgia, serif;
|
|
3212
|
+
--font-sans: 'Noto Sans JP', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
3213
|
+
--font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, Menlo, monospace;
|
|
3214
|
+
/* Radius — identical */
|
|
3215
|
+
--r-sm: 2px;
|
|
3216
|
+
--r-md: 3px;
|
|
3217
|
+
--r-lg: 6px;
|
|
3218
|
+
/* Shadows — ink bleeding through paper / deep drop on charcoal */
|
|
3219
|
+
--shadow-sm: 0 1px 2px light-dark(rgba(42, 36, 30, 0.06), rgba(0, 0, 0, 0.35));
|
|
3220
|
+
--shadow-md: 0 4px 18px light-dark(rgba(42, 36, 30, 0.08), rgba(0, 0, 0, 0.45));
|
|
3221
|
+
--shadow-lg: 0 12px 40px light-dark(rgba(42, 36, 30, 0.12), rgba(0, 0, 0, 0.55));
|
|
3222
|
+
--shadow-xl: 0 20px 50px light-dark(rgba(42, 36, 30, 0.16), rgba(0, 0, 0, 0.65));
|
|
3223
|
+
--shadow-2xl: 0 28px 70px light-dark(rgba(42, 36, 30, 0.22), rgba(0, 0, 0, 0.75));
|
|
3224
|
+
/* Blur / glow — paper themes don't use either */
|
|
3225
|
+
--blur-sm: none;
|
|
3226
|
+
--blur-md: none;
|
|
3227
|
+
--blur-lg: none;
|
|
3228
|
+
--glow-sm: 0 0 0 transparent;
|
|
3229
|
+
--glow-md: 0 0 0 transparent;
|
|
3230
|
+
--glow-lg: 0 0 0 transparent;
|
|
3231
|
+
/* Motion — editorial pace, identical */
|
|
3232
|
+
--duration-fast: 180ms;
|
|
3233
|
+
--duration-normal: 240ms;
|
|
3234
|
+
--duration-slow: 380ms;
|
|
3235
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
3236
|
+
/* Semantic aliases */
|
|
3237
|
+
--background-default: var(--paper);
|
|
3238
|
+
--background-subtle: var(--paper-sunk);
|
|
3239
|
+
--background-navbar: var(--paper-raised);
|
|
3240
|
+
--surface-default: var(--paper);
|
|
3241
|
+
--surface-raised: var(--paper-raised);
|
|
3242
|
+
--surface-sunk: var(--paper-sunk);
|
|
3243
|
+
--surface-muted: var(--paper-sunk);
|
|
3244
|
+
--surface-subtle: var(--paper-raised);
|
|
3245
|
+
--surface-emphasis: var(--ink);
|
|
3246
|
+
--surface-glass: var(--paper-glass);
|
|
3247
|
+
--text-primary: var(--ink);
|
|
3248
|
+
--text-secondary: var(--ink-soft);
|
|
3249
|
+
--text-muted: var(--ink-faint);
|
|
3250
|
+
--text-tertiary: var(--muted);
|
|
3251
|
+
--text-inverse: var(--paper);
|
|
3252
|
+
--text-link: var(--ai);
|
|
3253
|
+
--text-link-hover: var(--ai-ink);
|
|
3254
|
+
--border-default: var(--hair);
|
|
3255
|
+
--border-subtle: var(--hair-soft);
|
|
3256
|
+
--border-emphasis: light-dark(var(--ink), var(--guide));
|
|
3257
|
+
--border-focus: var(--ai);
|
|
3258
|
+
--interactive-hover: light-dark(rgba(42, 36, 30, 0.06), rgba(244, 239, 226, 0.06));
|
|
3259
|
+
--interactive-active: light-dark(rgba(42, 36, 30, 0.12), rgba(244, 239, 226, 0.12));
|
|
3260
|
+
--brand-primary: var(--ai);
|
|
3261
|
+
--brand-primary-hover: var(--ai-ink);
|
|
3262
|
+
--action-primary-default: var(--ai);
|
|
3263
|
+
--action-primary-hover: var(--ai-ink);
|
|
3264
|
+
--action-primary-active: var(--ai-ink);
|
|
3265
|
+
--action-primary-wash: var(--ai-wash);
|
|
3266
|
+
--action-secondary-default: var(--shu);
|
|
3267
|
+
--action-secondary-hover: var(--shu);
|
|
3268
|
+
--action-secondary-active: var(--shu);
|
|
3269
|
+
--action-secondary-wash: var(--shu-wash);
|
|
3270
|
+
--action-tertiary-default: var(--ochre);
|
|
3271
|
+
--action-tertiary-hover: var(--ochre);
|
|
3272
|
+
--action-tertiary-active: var(--ochre);
|
|
3273
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
3274
|
+
--feedback-info: var(--ai);
|
|
3275
|
+
--feedback-success: var(--code-green);
|
|
3276
|
+
--feedback-warning: var(--ochre);
|
|
3277
|
+
--feedback-error: var(--shu);
|
|
3278
|
+
--info-default: var(--ai);
|
|
3279
|
+
--info-subtle: var(--ai-wash);
|
|
3280
|
+
--info-text: var(--ai-ink);
|
|
3281
|
+
--success-default: light-dark(#5A7A3A, #8DA86A);
|
|
3282
|
+
--success-subtle: light-dark(#EAEFDC, #1F2B14);
|
|
3283
|
+
--success-text: light-dark(#3F5627, #B8CC8E);
|
|
3284
|
+
--warning-default: var(--ochre);
|
|
3285
|
+
--warning-subtle: var(--ochre-wash);
|
|
3286
|
+
--warning-text: light-dark(#6B4E1E, #E8BF6E);
|
|
3287
|
+
--error-default: var(--shu);
|
|
3288
|
+
--error-subtle: var(--shu-wash);
|
|
3289
|
+
--error-text: light-dark(#7A1A1F, #F08A72);
|
|
3290
|
+
/* Library scales — identical */
|
|
3291
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
3292
|
+
The numbered scale is the source of truth: every component reads
|
|
3293
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
3294
|
+
are emitted by the library as references to these, so they follow
|
|
3295
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
3296
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
3297
|
+
--space-0: 0; /* flush */
|
|
3298
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
3299
|
+
--space-2: 0.75rem; /* control padding */
|
|
3300
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
3301
|
+
--space-4: 1rem; /* default rhythm */
|
|
3302
|
+
--space-5: 1.5rem; /* section gap */
|
|
3303
|
+
--space-6: 2rem; /* block gap */
|
|
3304
|
+
--space-7: 3rem; /* major gap */
|
|
3305
|
+
--space-8: 4rem; /* page section */
|
|
3306
|
+
--space-9: 6rem; /* hero rhythm */
|
|
3307
|
+
--radius-sm: var(--r-sm);
|
|
3308
|
+
--radius-md: var(--r-md);
|
|
3309
|
+
--radius-lg: var(--r-lg);
|
|
3310
|
+
--radius-xl: 0.75rem;
|
|
3311
|
+
--radius-full: 9999px;
|
|
3312
|
+
--font-primary: var(--font-sans);
|
|
3313
|
+
--font-size-base: 1rem;
|
|
3314
|
+
--line-height-normal: 1.5;
|
|
3315
|
+
--font-weight-medium: 500;
|
|
3316
|
+
--z-sticky: 1020;
|
|
3317
|
+
--z-dropdown: 1030;
|
|
3318
|
+
--z-backdrop: 1040;
|
|
3319
|
+
--z-modal: 1050;
|
|
3320
|
+
--z-popover: 1060;
|
|
3321
|
+
--z-tooltip: 1070;
|
|
3322
|
+
}
|
|
3323
|
+
:root[data-theme=sketchbook-dark] {
|
|
3324
|
+
color-scheme: dark;
|
|
3325
|
+
/* Surfaces — warm charcoal paper */
|
|
3326
|
+
--paper: #1A1815;
|
|
3327
|
+
--paper-raised: #2A2520;
|
|
3328
|
+
--paper-sunk: #11100E;
|
|
3329
|
+
--paper-glass: rgba(42, 37, 32, 0.78);
|
|
3330
|
+
/* Ink — warm cream pencil */
|
|
3331
|
+
--ink: #F4EFE2;
|
|
3332
|
+
--ink-soft: #D8D0BE;
|
|
3333
|
+
--ink-faint: #A89E89;
|
|
3334
|
+
--graphite: #E8E0CE;
|
|
3335
|
+
--muted: #7A715F;
|
|
3336
|
+
/* Construction lines — warm dark hairlines */
|
|
3337
|
+
--guide: #4A4239;
|
|
3338
|
+
--guide-soft: #382F27;
|
|
3339
|
+
--hair: #3F362C;
|
|
3340
|
+
--hair-soft: #2A241E;
|
|
3341
|
+
/* Primary accent — lifted indigo for dark paper */
|
|
3342
|
+
--ai: #6E8FBF;
|
|
3343
|
+
--ai-ink: #8DA8D1;
|
|
3344
|
+
--ai-wash: #1F2B3F;
|
|
3345
|
+
/* Seal — vermilion (stays warm, brightened slightly) */
|
|
3346
|
+
--shu: #E36148;
|
|
3347
|
+
--shu-wash: #3A1A14;
|
|
3348
|
+
/* Draft / marginalia — warm gold */
|
|
3349
|
+
--ochre: #D4A04B;
|
|
3350
|
+
--ochre-wash: #382B14;
|
|
3351
|
+
/* Code surface — invert: warm cream slab */
|
|
3352
|
+
--code-bg: #F7F3EA;
|
|
3353
|
+
--code-ink: #2B2420;
|
|
3354
|
+
--code-muted: #6B5E50;
|
|
3355
|
+
--code-accent: #826226;
|
|
3356
|
+
--code-green: #537035;
|
|
3357
|
+
--code-blue: #1F3A5F;
|
|
3358
|
+
/* Typography — match Sketchbook */
|
|
3359
|
+
--font-display: 'DM Serif Display', 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
|
|
3360
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
3361
|
+
--font-serif: 'Noto Serif JP', 'Cormorant Garamond', Georgia, serif;
|
|
3362
|
+
--font-sans: 'Noto Sans JP', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
3363
|
+
--font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, Menlo, monospace;
|
|
3364
|
+
/* Radius — match Sketchbook */
|
|
3365
|
+
--r-sm: 2px;
|
|
3366
|
+
--r-md: 3px;
|
|
3367
|
+
--r-lg: 6px;
|
|
3368
|
+
/* Shadows — heavier on dark, ink bleeding behind paper */
|
|
3369
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);
|
|
3370
|
+
--shadow-md: 0 4px 18px rgba(0, 0, 0, .45);
|
|
3371
|
+
--shadow-lg: 0 12px 40px rgba(0, 0, 0, .55);
|
|
3372
|
+
--shadow-xl: 0 20px 50px rgba(0, 0, 0, .65);
|
|
3373
|
+
--shadow-2xl: 0 28px 70px rgba(0, 0, 0, .75);
|
|
3374
|
+
/* Blur — paper themes don't use it; declared so swap stays lossless */
|
|
3375
|
+
--blur-sm: none;
|
|
3376
|
+
--blur-md: none;
|
|
3377
|
+
--blur-lg: none;
|
|
3378
|
+
/* Glow — faint warm rim (charcoal paper, not phosphor) */
|
|
3379
|
+
--glow-sm: 0 0 0 transparent;
|
|
3380
|
+
--glow-md: 0 0 0 transparent;
|
|
3381
|
+
--glow-lg: 0 0 0 transparent;
|
|
3382
|
+
/* Motion — match Sketchbook (editorial pace) */
|
|
3383
|
+
--duration-fast: 180ms;
|
|
3384
|
+
--duration-normal: 240ms;
|
|
3385
|
+
--duration-slow: 380ms;
|
|
3386
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
3387
|
+
/* ----------------------------------------------------------
|
|
3388
|
+
SEMANTIC ALIASES
|
|
3389
|
+
---------------------------------------------------------- */
|
|
3390
|
+
/* Backgrounds (page-level) */
|
|
3391
|
+
--background-default: var(--paper);
|
|
3392
|
+
--background-subtle: var(--paper-sunk);
|
|
3393
|
+
--background-navbar: var(--paper-raised);
|
|
3394
|
+
/* Surfaces */
|
|
3395
|
+
--surface-default: var(--paper);
|
|
3396
|
+
--surface-raised: var(--paper-raised);
|
|
3397
|
+
--surface-sunk: var(--paper-sunk);
|
|
3398
|
+
--surface-muted: var(--paper-sunk);
|
|
3399
|
+
--surface-subtle: var(--paper-raised);
|
|
3400
|
+
--surface-emphasis: var(--ink);
|
|
3401
|
+
--surface-glass: var(--paper-glass);
|
|
3402
|
+
/* Text */
|
|
3403
|
+
--text-primary: var(--ink);
|
|
3404
|
+
--text-secondary: var(--ink-soft);
|
|
3405
|
+
--text-muted: var(--ink-faint);
|
|
3406
|
+
--text-tertiary: var(--muted);
|
|
3407
|
+
--text-inverse: var(--paper);
|
|
3408
|
+
--text-link: var(--ai);
|
|
3409
|
+
--text-link-hover: var(--ai-ink);
|
|
3410
|
+
/* Borders */
|
|
3411
|
+
--border-default: var(--hair);
|
|
3412
|
+
--border-subtle: var(--hair-soft);
|
|
3413
|
+
--border-emphasis: var(--guide);
|
|
3414
|
+
--border-focus: var(--ai);
|
|
3415
|
+
/* Interactive (hover / active wash layers) — warm cream on charcoal */
|
|
3416
|
+
--interactive-hover: rgba(244, 239, 226, 0.06);
|
|
3417
|
+
--interactive-active: rgba(244, 239, 226, 0.12);
|
|
3418
|
+
/* Brand */
|
|
3419
|
+
--brand-primary: var(--ai);
|
|
3420
|
+
--brand-primary-hover: var(--ai-ink);
|
|
3421
|
+
/* Action triplets */
|
|
3422
|
+
--action-primary-default: var(--ai);
|
|
3423
|
+
--action-primary-hover: var(--ai-ink);
|
|
3424
|
+
--action-primary-active: var(--ai-ink);
|
|
3425
|
+
--action-primary-wash: var(--ai-wash);
|
|
3426
|
+
--action-secondary-default: var(--shu);
|
|
3427
|
+
--action-secondary-hover: var(--shu);
|
|
3428
|
+
--action-secondary-active: var(--shu);
|
|
3429
|
+
--action-secondary-wash: var(--shu-wash);
|
|
3430
|
+
--action-tertiary-default: var(--ochre);
|
|
3431
|
+
--action-tertiary-hover: var(--ochre);
|
|
3432
|
+
--action-tertiary-active: var(--ochre);
|
|
3433
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
3434
|
+
/* Feedback */
|
|
3435
|
+
--feedback-info: var(--ai);
|
|
3436
|
+
--feedback-success: var(--code-green);
|
|
3437
|
+
--feedback-warning: var(--ochre);
|
|
3438
|
+
--feedback-error: var(--shu);
|
|
3439
|
+
/* Status — info */
|
|
3440
|
+
--info-default: var(--ai);
|
|
3441
|
+
--info-subtle: var(--ai-wash);
|
|
3442
|
+
--info-text: var(--ai-ink);
|
|
3443
|
+
/* Status — success (lifted moss-green for dark paper) */
|
|
3444
|
+
--success-default: #8DA86A;
|
|
3445
|
+
--success-subtle: #1F2B14;
|
|
3446
|
+
--success-text: #B8CC8E;
|
|
3447
|
+
/* Status — warning */
|
|
3448
|
+
--warning-default: var(--ochre);
|
|
3449
|
+
--warning-subtle: var(--ochre-wash);
|
|
3450
|
+
--warning-text: #E8BF6E;
|
|
3451
|
+
/* Status — error */
|
|
3452
|
+
--error-default: var(--shu);
|
|
3453
|
+
--error-subtle: var(--shu-wash);
|
|
3454
|
+
--error-text: #F08A72;
|
|
3455
|
+
/* ----------------------------------------------------------
|
|
3456
|
+
LIBRARY SCALES
|
|
3457
|
+
---------------------------------------------------------- */
|
|
3458
|
+
/* Space scale */
|
|
3459
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
3460
|
+
The numbered scale is the source of truth: every component reads
|
|
3461
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
3462
|
+
are emitted by the library as references to these, so they follow
|
|
3463
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
3464
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
3465
|
+
--space-0: 0; /* flush */
|
|
3466
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
3467
|
+
--space-2: 0.75rem; /* control padding */
|
|
3468
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
3469
|
+
--space-4: 1rem; /* default rhythm */
|
|
3470
|
+
--space-5: 1.5rem; /* section gap */
|
|
3471
|
+
--space-6: 2rem; /* block gap */
|
|
3472
|
+
--space-7: 3rem; /* major gap */
|
|
3473
|
+
--space-8: 4rem; /* page section */
|
|
3474
|
+
--space-9: 6rem; /* hero rhythm */
|
|
3475
|
+
/* Radius alias */
|
|
3476
|
+
--radius-sm: var(--r-sm);
|
|
3477
|
+
--radius-md: var(--r-md);
|
|
3478
|
+
--radius-lg: var(--r-lg);
|
|
3479
|
+
--radius-xl: 0.75rem;
|
|
3480
|
+
--radius-full: 9999px;
|
|
3481
|
+
/* Typography */
|
|
3482
|
+
--font-primary: var(--font-sans);
|
|
3483
|
+
--font-size-base: 1rem;
|
|
3484
|
+
--line-height-normal: 1.5;
|
|
3485
|
+
--font-weight-medium: 500;
|
|
3486
|
+
/* Z-index layers */
|
|
3487
|
+
--z-sticky: 1020;
|
|
3488
|
+
--z-dropdown: 1030;
|
|
3489
|
+
--z-backdrop: 1040;
|
|
3490
|
+
--z-modal: 1050;
|
|
3491
|
+
--z-popover: 1060;
|
|
3492
|
+
--z-tooltip: 1070;
|
|
3493
|
+
}
|
|
3494
|
+
:root[data-theme=sketchbook-light] {
|
|
3495
|
+
color-scheme: light;
|
|
3496
|
+
/* Surfaces — warm paper */
|
|
3497
|
+
--paper: #F7F3EA;
|
|
3498
|
+
--paper-raised: #FDFAF2;
|
|
3499
|
+
--paper-sunk: #ECE5D3;
|
|
3500
|
+
--paper-glass: rgba(253, 250, 242, 0.75);
|
|
3501
|
+
/* Ink — warm pencil + sumi */
|
|
3502
|
+
--ink: #2A241E;
|
|
3503
|
+
--ink-soft: #4A4037;
|
|
3504
|
+
--ink-faint: #726858;
|
|
3505
|
+
--graphite: #3A332B;
|
|
3506
|
+
--muted: #948977;
|
|
3507
|
+
/* Construction lines */
|
|
3508
|
+
--guide: #C9BDA5;
|
|
3509
|
+
--guide-soft: #DDD4C0;
|
|
3510
|
+
--hair: #D4CCBB;
|
|
3511
|
+
--hair-soft: #E8E2D4;
|
|
3512
|
+
/* Primary accent — indigo */
|
|
3513
|
+
--ai: #1F3A5F;
|
|
3514
|
+
--ai-ink: #14263F;
|
|
3515
|
+
--ai-wash: #E5EBF1;
|
|
3516
|
+
/* Seal — vermilion (reserve for emphasis) */
|
|
3517
|
+
--shu: #C1272D;
|
|
3518
|
+
--shu-wash: #F6E3E1;
|
|
3519
|
+
/* Draft / marginalia — warm gold */
|
|
3520
|
+
--ochre: #A37B30;
|
|
3521
|
+
--ochre-wash: #F0E5CC;
|
|
3522
|
+
/* Code surface */
|
|
3523
|
+
--code-bg: #2B2420;
|
|
3524
|
+
--code-ink: #F7F3EA;
|
|
3525
|
+
--code-muted: #A39787;
|
|
3526
|
+
--code-accent: #E5B660;
|
|
3527
|
+
--code-green: #A8B86C;
|
|
3528
|
+
--code-blue: #94AFC9;
|
|
3529
|
+
/* Typography */
|
|
3530
|
+
--font-display: 'DM Serif Display', 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
|
|
3531
|
+
--font-script: 'Caveat', 'Shadows Into Light', cursive;
|
|
3532
|
+
--font-serif: 'Noto Serif JP', 'Cormorant Garamond', Georgia, serif;
|
|
3533
|
+
--font-sans: 'Noto Sans JP', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
|
|
3534
|
+
--font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, Menlo, monospace;
|
|
3535
|
+
/* Radius */
|
|
3536
|
+
--r-sm: 2px;
|
|
3537
|
+
--r-md: 3px;
|
|
3538
|
+
--r-lg: 6px;
|
|
3539
|
+
/* Shadows — ink bleeding through paper */
|
|
3540
|
+
--shadow-sm: 0 1px 2px rgba(42, 36, 30, .06);
|
|
3541
|
+
--shadow-md: 0 4px 18px rgba(42, 36, 30, .08);
|
|
3542
|
+
--shadow-lg: 0 12px 40px rgba(42, 36, 30, .12);
|
|
3543
|
+
--shadow-xl: 0 20px 50px rgba(42, 36, 30, .16);
|
|
3544
|
+
--shadow-2xl: 0 28px 70px rgba(42, 36, 30, .22);
|
|
3545
|
+
/* Blur — paper themes don't use it; declared so swap stays lossless */
|
|
3546
|
+
--blur-sm: none;
|
|
3547
|
+
--blur-md: none;
|
|
3548
|
+
--blur-lg: none;
|
|
3549
|
+
/* Glow — faint ink bleed, not phosphor */
|
|
3550
|
+
--glow-sm: 0 0 0 transparent;
|
|
3551
|
+
--glow-md: 0 0 0 transparent;
|
|
3552
|
+
--glow-lg: 0 0 0 transparent;
|
|
3553
|
+
/* Motion */
|
|
3554
|
+
--duration-fast: 180ms;
|
|
3555
|
+
--duration-normal: 240ms;
|
|
3556
|
+
--duration-slow: 380ms;
|
|
3557
|
+
--ease: cubic-bezier(0.33, 0.66, 0.33, 1);
|
|
3558
|
+
/* ----------------------------------------------------------
|
|
3559
|
+
SEMANTIC ALIASES
|
|
3560
|
+
-----------------------------------------------------------
|
|
3561
|
+
Bridge the library's expected names to this theme's native
|
|
3562
|
+
palette. Components can now write m.color(surface-default)
|
|
3563
|
+
or var(--surface-default) and reskin with the theme
|
|
3564
|
+
automatically.
|
|
3565
|
+
---------------------------------------------------------- */
|
|
3566
|
+
/* Backgrounds (page-level) */
|
|
3567
|
+
--background-default: var(--paper);
|
|
3568
|
+
--background-subtle: var(--paper-sunk);
|
|
3569
|
+
--background-navbar: var(--paper-raised);
|
|
3570
|
+
/* Surfaces */
|
|
3571
|
+
--surface-default: var(--paper);
|
|
3572
|
+
--surface-raised: var(--paper-raised);
|
|
3573
|
+
--surface-sunk: var(--paper-sunk);
|
|
3574
|
+
--surface-muted: var(--paper-sunk);
|
|
3575
|
+
--surface-subtle: var(--paper-raised);
|
|
3576
|
+
--surface-emphasis: var(--ink);
|
|
3577
|
+
--surface-glass: var(--paper-glass);
|
|
3578
|
+
/* Text */
|
|
3579
|
+
--text-primary: var(--ink);
|
|
3580
|
+
--text-secondary: var(--ink-soft);
|
|
3581
|
+
--text-muted: var(--ink-faint);
|
|
3582
|
+
--text-tertiary: var(--muted);
|
|
3583
|
+
--text-inverse: var(--paper);
|
|
3584
|
+
--text-link: var(--ai);
|
|
3585
|
+
--text-link-hover: var(--ai-ink);
|
|
3586
|
+
/* Borders */
|
|
3587
|
+
--border-default: var(--hair);
|
|
3588
|
+
--border-subtle: var(--hair-soft);
|
|
3589
|
+
--border-emphasis: var(--ink);
|
|
3590
|
+
--border-focus: var(--ai);
|
|
3591
|
+
/* Interactive (hover / active wash layers) */
|
|
3592
|
+
--interactive-hover: rgba(42, 36, 30, 0.06);
|
|
3593
|
+
--interactive-active: rgba(42, 36, 30, 0.12);
|
|
3594
|
+
/* Brand (identity — action-primary usually references these) */
|
|
3595
|
+
--brand-primary: var(--ai);
|
|
3596
|
+
--brand-primary-hover: var(--ai-ink);
|
|
3597
|
+
/* Action (primary / secondary / tertiary) */
|
|
3598
|
+
--action-primary-default: var(--ai);
|
|
3599
|
+
--action-primary-hover: var(--ai-ink);
|
|
3600
|
+
--action-primary-active: var(--ai-ink);
|
|
3601
|
+
--action-primary-wash: var(--ai-wash);
|
|
3602
|
+
--action-secondary-default: var(--shu);
|
|
3603
|
+
--action-secondary-hover: var(--shu);
|
|
3604
|
+
--action-secondary-active: var(--shu);
|
|
3605
|
+
--action-secondary-wash: var(--shu-wash);
|
|
3606
|
+
--action-tertiary-default: var(--ochre);
|
|
3607
|
+
--action-tertiary-hover: var(--ochre);
|
|
3608
|
+
--action-tertiary-active: var(--ochre);
|
|
3609
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
3610
|
+
/* Feedback / status (high-level semantic) */
|
|
3611
|
+
--feedback-info: var(--ai);
|
|
3612
|
+
--feedback-success: var(--code-green);
|
|
3613
|
+
--feedback-warning: var(--ochre);
|
|
3614
|
+
--feedback-error: var(--shu);
|
|
3615
|
+
/* Status — info (three-part: default / subtle / text) */
|
|
3616
|
+
--info-default: var(--ai);
|
|
3617
|
+
--info-subtle: var(--ai-wash);
|
|
3618
|
+
--info-text: var(--ai-ink);
|
|
3619
|
+
/* Status — success */
|
|
3620
|
+
--success-default: #5A7A3A;
|
|
3621
|
+
--success-subtle: #EAEFDC;
|
|
3622
|
+
--success-text: #3F5627;
|
|
3623
|
+
/* Status — warning */
|
|
3624
|
+
--warning-default: var(--ochre);
|
|
3625
|
+
--warning-subtle: var(--ochre-wash);
|
|
3626
|
+
--warning-text: #6B4E1E;
|
|
3627
|
+
/* Status — error */
|
|
3628
|
+
--error-default: var(--shu);
|
|
3629
|
+
--error-subtle: var(--shu-wash);
|
|
3630
|
+
--error-text: #7A1A1F;
|
|
3631
|
+
/* ----------------------------------------------------------
|
|
3632
|
+
LIBRARY SCALES (space / radius / type / motion / z)
|
|
3633
|
+
-----------------------------------------------------------
|
|
3634
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
3635
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
3636
|
+
Themes declare the slots so those mixins always resolve.
|
|
3637
|
+
Override any of these to change the whole system's rhythm.
|
|
3638
|
+
---------------------------------------------------------- */
|
|
3639
|
+
/* Space scale (rem for accessibility) */
|
|
3640
|
+
--space-2xs: 0.25rem;
|
|
3641
|
+
--space-xs: 0.5rem;
|
|
3642
|
+
--space-sm: 0.75rem;
|
|
3643
|
+
--space-md: 1rem;
|
|
3644
|
+
--space-lg: 1.5rem;
|
|
3645
|
+
--space-xl: 2rem;
|
|
3646
|
+
/* Radius alias — mirrors --r-* with standard names so
|
|
3647
|
+
`m.radius(size)` in the library finds --radius-<size>. */
|
|
3648
|
+
--radius-sm: var(--r-sm);
|
|
3649
|
+
--radius-md: var(--r-md);
|
|
3650
|
+
--radius-lg: var(--r-lg);
|
|
3651
|
+
--radius-xl: 0.75rem;
|
|
3652
|
+
--radius-full: 9999px;
|
|
3653
|
+
/* Typography — base body font + key scale slots */
|
|
3654
|
+
--font-primary: var(--font-sans);
|
|
3655
|
+
--font-size-base: 1rem;
|
|
3656
|
+
--line-height-normal: 1.5;
|
|
3657
|
+
--font-weight-medium: 500;
|
|
3658
|
+
/* Z-index layers */
|
|
3659
|
+
--z-sticky: 1020;
|
|
3660
|
+
--z-dropdown: 1030;
|
|
3661
|
+
--z-backdrop: 1040;
|
|
3662
|
+
--z-modal: 1050;
|
|
3663
|
+
--z-popover: 1060;
|
|
3664
|
+
--z-tooltip: 1070;
|
|
3665
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
3666
|
+
The numbered scale is the source of truth: every component reads
|
|
3667
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
3668
|
+
are emitted by the library as references to these, so they follow
|
|
3669
|
+
automatically. Change a value here and the whole page re-proportions. */
|
|
3670
|
+
--space-0: 0;
|
|
3671
|
+
--space-1: 0.5rem;
|
|
3672
|
+
--space-2: 0.75rem;
|
|
3673
|
+
--space-3: 0.875rem;
|
|
3674
|
+
--space-4: 1rem;
|
|
3675
|
+
--space-5: 1.5rem;
|
|
3676
|
+
--space-6: 2rem;
|
|
3677
|
+
--space-7: 3rem;
|
|
3678
|
+
--space-8: 4rem;
|
|
3679
|
+
--space-9: 6rem;
|
|
3680
|
+
}
|
|
3681
|
+
:root[data-theme=terminal] {
|
|
3682
|
+
color-scheme: dark;
|
|
3683
|
+
/* Surfaces — deep warm black + phosphor haze */
|
|
3684
|
+
--paper: #0A0E0A;
|
|
3685
|
+
--paper-raised: #0F140F;
|
|
3686
|
+
--paper-sunk: #070A07;
|
|
3687
|
+
--paper-glass: rgba(79, 224, 120, 0.06);
|
|
3688
|
+
/* Ink — phosphor green on the tube */
|
|
3689
|
+
--ink: #4FE078;
|
|
3690
|
+
--ink-soft: #2A8B42;
|
|
3691
|
+
--ink-faint: #3DAF4F;
|
|
3692
|
+
--graphite: #1A3D22;
|
|
3693
|
+
--muted: #2A8B42;
|
|
3694
|
+
/* Scanlines / rule lines */
|
|
3695
|
+
--guide: #1E5E2F;
|
|
3696
|
+
--guide-soft: #143618;
|
|
3697
|
+
--hair: #2A8B42;
|
|
3698
|
+
--hair-soft: #1E5E2F;
|
|
3699
|
+
/* Primary accent — cyan (terminal links) */
|
|
3700
|
+
--ai: #7FDBFF;
|
|
3701
|
+
--ai-ink: #5AB3D4;
|
|
3702
|
+
--ai-wash: rgba(127, 219, 255, 0.10);
|
|
3703
|
+
/* Seal — error red */
|
|
3704
|
+
--shu: #FF5A5A;
|
|
3705
|
+
--shu-wash: rgba(255, 90, 90, 0.10);
|
|
3706
|
+
/* Accent — warning amber */
|
|
3707
|
+
--ochre: #F0A030;
|
|
3708
|
+
--ochre-wash: rgba(240, 160, 48, 0.10);
|
|
3709
|
+
/* Code surface */
|
|
3710
|
+
--code-bg: #070A07;
|
|
3711
|
+
--code-ink: #4FE078;
|
|
3712
|
+
--code-muted: #2C9245;
|
|
3713
|
+
--code-accent: #F0A030;
|
|
3714
|
+
--code-green: #8FFCA8;
|
|
3715
|
+
--code-blue: #7FDBFF;
|
|
3716
|
+
/* Typography — mono everywhere */
|
|
3717
|
+
--font-mono: 'JetBrains Mono', 'IBM Plex Mono', 'Fira Code', ui-monospace, Consolas, Menlo, 'Courier New', monospace;
|
|
3718
|
+
--font-sans: var(--font-mono);
|
|
3719
|
+
--font-serif: var(--font-mono);
|
|
3720
|
+
--font-display: var(--font-mono);
|
|
3721
|
+
--font-script: var(--font-mono);
|
|
3722
|
+
/* Radius — CRT pixel corners */
|
|
3723
|
+
--r-sm: 0;
|
|
3724
|
+
--r-md: 0;
|
|
3725
|
+
--r-lg: 0;
|
|
3726
|
+
/* Shadows — phosphor rings */
|
|
3727
|
+
--shadow-sm: 0 0 0 1px rgba(79, 224, 120, 0.20);
|
|
3728
|
+
--shadow-md: 0 0 0 1px rgba(79, 224, 120, 0.30), 0 0 12px rgba(79, 224, 120, 0.15);
|
|
3729
|
+
--shadow-lg: 0 0 0 1px rgba(79, 224, 120, 0.40), 0 0 24px rgba(79, 224, 120, 0.25);
|
|
3730
|
+
--shadow-xl: 0 0 0 1px rgba(79, 224, 120, 0.50), 0 0 36px rgba(79, 224, 120, 0.30);
|
|
3731
|
+
--shadow-2xl: 0 0 0 1px rgba(79, 224, 120, 0.60), 0 0 56px rgba(79, 224, 120, 0.40);
|
|
3732
|
+
/* Blur — terminal has no frosted glass */
|
|
3733
|
+
--blur-sm: none;
|
|
3734
|
+
--blur-md: none;
|
|
3735
|
+
--blur-lg: none;
|
|
3736
|
+
/* Glow — phosphor halo */
|
|
3737
|
+
--glow-sm: 0 0 4px rgba(79, 224, 120, 0.25);
|
|
3738
|
+
--glow-md: 0 0 8px rgba(79, 224, 120, 0.35);
|
|
3739
|
+
--glow-lg: 0 0 16px rgba(79, 224, 120, 0.45);
|
|
3740
|
+
/* Motion — instant */
|
|
3741
|
+
--duration-fast: 100ms;
|
|
3742
|
+
--duration-normal: 140ms;
|
|
3743
|
+
--duration-slow: 220ms;
|
|
3744
|
+
--ease: cubic-bezier(0.2, 0.0, 0.2, 1);
|
|
3745
|
+
/* Semantic aliases */
|
|
3746
|
+
--background-default: var(--paper);
|
|
3747
|
+
--background-subtle: var(--paper-sunk);
|
|
3748
|
+
--background-navbar: var(--paper-raised);
|
|
3749
|
+
--surface-default: var(--paper);
|
|
3750
|
+
--surface-raised: var(--paper-raised);
|
|
3751
|
+
--surface-sunk: var(--paper-sunk);
|
|
3752
|
+
--surface-muted: var(--paper-sunk);
|
|
3753
|
+
--surface-subtle: var(--paper-raised);
|
|
3754
|
+
--surface-emphasis: var(--ink);
|
|
3755
|
+
--surface-glass: var(--paper-glass);
|
|
3756
|
+
--text-primary: var(--ink);
|
|
3757
|
+
--text-secondary: var(--ink-soft);
|
|
3758
|
+
--text-muted: var(--ink-faint);
|
|
3759
|
+
--text-tertiary: var(--muted);
|
|
3760
|
+
--text-inverse: var(--paper);
|
|
3761
|
+
--text-link: var(--ai);
|
|
3762
|
+
--text-link-hover: var(--ai-ink);
|
|
3763
|
+
--border-default: var(--hair);
|
|
3764
|
+
--border-subtle: var(--hair-soft);
|
|
3765
|
+
--border-emphasis: var(--ink);
|
|
3766
|
+
--border-focus: var(--ai);
|
|
3767
|
+
--interactive-hover: rgba(79, 224, 120, 0.08);
|
|
3768
|
+
--interactive-active: rgba(79, 224, 120, 0.15);
|
|
3769
|
+
--brand-primary: var(--ai);
|
|
3770
|
+
--brand-primary-hover: var(--ai-ink);
|
|
3771
|
+
--action-primary-default: var(--ai);
|
|
3772
|
+
--action-primary-hover: var(--ai-ink);
|
|
3773
|
+
--action-primary-active: var(--ai-ink);
|
|
3774
|
+
--action-primary-wash: var(--ai-wash);
|
|
3775
|
+
--action-secondary-default: var(--shu);
|
|
3776
|
+
--action-secondary-hover: var(--shu);
|
|
3777
|
+
--action-secondary-active: var(--shu);
|
|
3778
|
+
--action-secondary-wash: var(--shu-wash);
|
|
3779
|
+
--action-tertiary-default: var(--ochre);
|
|
3780
|
+
--action-tertiary-hover: var(--ochre);
|
|
3781
|
+
--action-tertiary-active: var(--ochre);
|
|
3782
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
3783
|
+
--feedback-info: var(--ai);
|
|
3784
|
+
--feedback-success: var(--code-green);
|
|
3785
|
+
--feedback-warning: var(--ochre);
|
|
3786
|
+
--feedback-error: var(--shu);
|
|
3787
|
+
--info-default: var(--ai);
|
|
3788
|
+
--info-subtle: rgba(127, 219, 255, 0.12);
|
|
3789
|
+
--info-text: #7FDBFF;
|
|
3790
|
+
--success-default: #8FFCA8;
|
|
3791
|
+
--success-subtle: rgba(143, 252, 168, 0.12);
|
|
3792
|
+
--success-text: #8FFCA8;
|
|
3793
|
+
--warning-default: var(--ochre);
|
|
3794
|
+
--warning-subtle: rgba(240, 160, 48, 0.12);
|
|
3795
|
+
--warning-text: var(--ochre);
|
|
3796
|
+
--error-default: var(--shu);
|
|
3797
|
+
--error-subtle: rgba(255, 90, 90, 0.12);
|
|
3798
|
+
--error-text: #FF7A7A;
|
|
3799
|
+
/* Library scales */
|
|
3800
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
3801
|
+
The numbered scale is the source of truth: every component reads
|
|
3802
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
3803
|
+
are emitted by the library as references to these, so they follow
|
|
3804
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
3805
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
3806
|
+
--space-0: 0; /* flush */
|
|
3807
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
3808
|
+
--space-2: 0.75rem; /* control padding */
|
|
3809
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
3810
|
+
--space-4: 1rem; /* default rhythm */
|
|
3811
|
+
--space-5: 1.5rem; /* section gap */
|
|
3812
|
+
--space-6: 2rem; /* block gap */
|
|
3813
|
+
--space-7: 3rem; /* major gap */
|
|
3814
|
+
--space-8: 4rem; /* page section */
|
|
3815
|
+
--space-9: 6rem; /* hero rhythm */
|
|
3816
|
+
--radius-sm: 0;
|
|
3817
|
+
--radius-md: 0;
|
|
3818
|
+
--radius-lg: 0;
|
|
3819
|
+
--radius-xl: 0;
|
|
3820
|
+
--radius-full: 0;
|
|
3821
|
+
--font-primary: var(--font-mono);
|
|
3822
|
+
--font-size-base: 15px;
|
|
3823
|
+
--line-height-normal: 1.5;
|
|
3824
|
+
--font-weight-medium: 500;
|
|
3825
|
+
--z-sticky: 1020;
|
|
3826
|
+
--z-dropdown: 1030;
|
|
3827
|
+
--z-backdrop: 1040;
|
|
3828
|
+
--z-modal: 1050;
|
|
3829
|
+
--z-popover: 1060;
|
|
3830
|
+
--z-tooltip: 1070;
|
|
3831
|
+
/* Component overrides */
|
|
3832
|
+
--btn-radius: 0;
|
|
3833
|
+
--card-radius: 0;
|
|
3834
|
+
--input-radius: 0;
|
|
3835
|
+
--card-shadow: var(--glow-sm);
|
|
3836
|
+
--card-border: 1px solid var(--ink-faint);
|
|
3837
|
+
}
|
|
3838
|
+
:root[data-theme=terminal-dark] {
|
|
3839
|
+
color-scheme: dark;
|
|
3840
|
+
/* Surfaces — deep warm black chassis + phosphor haze */
|
|
3841
|
+
--paper: #0A0E0A;
|
|
3842
|
+
--paper-raised: #0F140F;
|
|
3843
|
+
--paper-sunk: #070A07;
|
|
3844
|
+
--paper-glass: rgba(79, 224, 120, 0.06);
|
|
3845
|
+
/* Ink — phosphor green on the tube */
|
|
3846
|
+
--ink: #4FE078;
|
|
3847
|
+
--ink-soft: #2A8B42;
|
|
3848
|
+
--ink-faint: #3DAF4F;
|
|
3849
|
+
--graphite: #1A3D22;
|
|
3850
|
+
--muted: #2A8B42;
|
|
3851
|
+
/* Scanlines / rule lines */
|
|
3852
|
+
--guide: #1E5E2F;
|
|
3853
|
+
--guide-soft: #143618;
|
|
3854
|
+
--hair: #2A8B42;
|
|
3855
|
+
--hair-soft: #1E5E2F;
|
|
3856
|
+
/* Primary accent — cyan (interactive links in a terminal) */
|
|
3857
|
+
--ai: #7FDBFF;
|
|
3858
|
+
--ai-ink: #5AB3D4;
|
|
3859
|
+
--ai-wash: rgba(127, 219, 255, 0.10);
|
|
3860
|
+
/* Seal — error red */
|
|
3861
|
+
--shu: #FF5A5A;
|
|
3862
|
+
--shu-wash: rgba(255, 90, 90, 0.10);
|
|
3863
|
+
/* Accent — warning amber */
|
|
3864
|
+
--ochre: #F0A030;
|
|
3865
|
+
--ochre-wash: rgba(240, 160, 48, 0.10);
|
|
3866
|
+
/* Code surface */
|
|
3867
|
+
--code-bg: #070A07;
|
|
3868
|
+
--code-ink: #4FE078;
|
|
3869
|
+
--code-muted: #2A8B42;
|
|
3870
|
+
--code-accent: #F0A030;
|
|
3871
|
+
--code-green: #8FFCA8;
|
|
3872
|
+
--code-blue: #7FDBFF;
|
|
3873
|
+
/* Typography — mono everywhere (see FONT NOTE in header) */
|
|
3874
|
+
--font-mono: 'JetBrains Mono', 'IBM Plex Mono', 'Fira Code', ui-monospace, Consolas, Menlo, 'Courier New', monospace;
|
|
3875
|
+
--font-sans: var(--font-mono);
|
|
3876
|
+
--font-serif: var(--font-mono);
|
|
3877
|
+
--font-display: var(--font-mono);
|
|
3878
|
+
--font-script: var(--font-mono);
|
|
3879
|
+
/* Radius — a CRT has hard pixel corners */
|
|
3880
|
+
--r-sm: 0;
|
|
3881
|
+
--r-md: 0;
|
|
3882
|
+
--r-lg: 0;
|
|
3883
|
+
/* Shadows — a CRT doesn't cast, it emits. Keep subtle. */
|
|
3884
|
+
--shadow-sm: 0 0 0 1px rgba(79, 224, 120, 0.20);
|
|
3885
|
+
--shadow-md: 0 0 0 1px rgba(79, 224, 120, 0.30), 0 0 12px rgba(79, 224, 120, 0.15);
|
|
3886
|
+
--shadow-lg: 0 0 0 1px rgba(79, 224, 120, 0.40), 0 0 24px rgba(79, 224, 120, 0.25);
|
|
3887
|
+
--shadow-xl: 0 0 0 1px rgba(79, 224, 120, 0.50), 0 0 36px rgba(79, 224, 120, 0.30);
|
|
3888
|
+
--shadow-2xl: 0 0 0 1px rgba(79, 224, 120, 0.60), 0 0 56px rgba(79, 224, 120, 0.40);
|
|
3889
|
+
/* Blur — terminal has no frosted glass; declared so swap stays lossless */
|
|
3890
|
+
--blur-sm: none;
|
|
3891
|
+
--blur-md: none;
|
|
3892
|
+
--blur-lg: none;
|
|
3893
|
+
/* Glow — phosphor halo (this is where the theme sings) */
|
|
3894
|
+
--glow-sm: 0 0 4px rgba(79, 224, 120, 0.25);
|
|
3895
|
+
--glow-md: 0 0 8px rgba(79, 224, 120, 0.35);
|
|
3896
|
+
--glow-lg: 0 0 16px rgba(79, 224, 120, 0.45);
|
|
3897
|
+
/* Motion — terminals are instant */
|
|
3898
|
+
--duration-fast: 100ms;
|
|
3899
|
+
--duration-normal: 140ms;
|
|
3900
|
+
--duration-slow: 220ms;
|
|
3901
|
+
--ease: cubic-bezier(0.2, 0.0, 0.2, 1);
|
|
3902
|
+
/* ----------------------------------------------------------
|
|
3903
|
+
SEMANTIC ALIASES
|
|
3904
|
+
-----------------------------------------------------------
|
|
3905
|
+
Bridge the library's expected names to this theme's native
|
|
3906
|
+
palette. Components can now write m.color(surface-default)
|
|
3907
|
+
or var(--surface-default) and reskin with the theme
|
|
3908
|
+
automatically.
|
|
3909
|
+
---------------------------------------------------------- */
|
|
3910
|
+
/* Backgrounds (page-level) */
|
|
3911
|
+
--background-default: var(--paper);
|
|
3912
|
+
--background-subtle: var(--paper-sunk);
|
|
3913
|
+
--background-navbar: var(--paper-raised);
|
|
3914
|
+
/* Surfaces */
|
|
3915
|
+
--surface-default: var(--paper);
|
|
3916
|
+
--surface-raised: var(--paper-raised);
|
|
3917
|
+
--surface-sunk: var(--paper-sunk);
|
|
3918
|
+
--surface-muted: var(--paper-sunk);
|
|
3919
|
+
--surface-subtle: var(--paper-raised);
|
|
3920
|
+
--surface-emphasis: var(--ink);
|
|
3921
|
+
--surface-glass: var(--paper-glass);
|
|
3922
|
+
/* Text */
|
|
3923
|
+
--text-primary: var(--ink);
|
|
3924
|
+
--text-secondary: var(--ink-soft);
|
|
3925
|
+
--text-muted: var(--ink-faint);
|
|
3926
|
+
--text-tertiary: var(--muted);
|
|
3927
|
+
--text-inverse: var(--paper);
|
|
3928
|
+
--text-link: var(--ai);
|
|
3929
|
+
--text-link-hover: var(--ai-ink);
|
|
3930
|
+
/* Borders */
|
|
3931
|
+
--border-default: var(--hair);
|
|
3932
|
+
--border-subtle: var(--hair-soft);
|
|
3933
|
+
--border-emphasis: var(--ink);
|
|
3934
|
+
--border-focus: var(--ai);
|
|
3935
|
+
/* Interactive (hover / active wash layers) — phosphor-green translucent overlays */
|
|
3936
|
+
--interactive-hover: rgba(79, 224, 120, 0.08);
|
|
3937
|
+
--interactive-active: rgba(79, 224, 120, 0.15);
|
|
3938
|
+
/* Brand (identity — action-primary usually references these) */
|
|
3939
|
+
--brand-primary: var(--ai);
|
|
3940
|
+
--brand-primary-hover: var(--ai-ink);
|
|
3941
|
+
/* Action (primary / secondary / tertiary) */
|
|
3942
|
+
--action-primary-default: var(--ai);
|
|
3943
|
+
--action-primary-hover: var(--ai-ink);
|
|
3944
|
+
--action-primary-active: var(--ai-ink);
|
|
3945
|
+
--action-primary-wash: var(--ai-wash);
|
|
3946
|
+
--action-secondary-default: var(--shu);
|
|
3947
|
+
--action-secondary-hover: var(--shu);
|
|
3948
|
+
--action-secondary-active: var(--shu);
|
|
3949
|
+
--action-secondary-wash: var(--shu-wash);
|
|
3950
|
+
--action-tertiary-default: var(--ochre);
|
|
3951
|
+
--action-tertiary-hover: var(--ochre);
|
|
3952
|
+
--action-tertiary-active: var(--ochre);
|
|
3953
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
3954
|
+
/* Feedback / status (high-level semantic) */
|
|
3955
|
+
--feedback-info: var(--ai);
|
|
3956
|
+
--feedback-success: var(--code-green);
|
|
3957
|
+
--feedback-warning: var(--ochre);
|
|
3958
|
+
--feedback-error: var(--shu);
|
|
3959
|
+
/* Status — info (three-part: default / subtle / text) — cyan */
|
|
3960
|
+
--info-default: var(--ai);
|
|
3961
|
+
--info-subtle: rgba(127, 219, 255, 0.12);
|
|
3962
|
+
--info-text: #7FDBFF;
|
|
3963
|
+
/* Status — success — bright phosphor */
|
|
3964
|
+
--success-default: #8FFCA8;
|
|
3965
|
+
--success-subtle: rgba(143, 252, 168, 0.12);
|
|
3966
|
+
--success-text: #8FFCA8;
|
|
3967
|
+
/* Status — warning — amber */
|
|
3968
|
+
--warning-default: var(--ochre);
|
|
3969
|
+
--warning-subtle: rgba(240, 160, 48, 0.12);
|
|
3970
|
+
--warning-text: var(--ochre);
|
|
3971
|
+
/* Status — error — red */
|
|
3972
|
+
--error-default: var(--shu);
|
|
3973
|
+
--error-subtle: rgba(255, 90, 90, 0.12);
|
|
3974
|
+
--error-text: #FF7A7A;
|
|
3975
|
+
/* ----------------------------------------------------------
|
|
3976
|
+
LIBRARY SCALES (space / radius / type / motion / z)
|
|
3977
|
+
-----------------------------------------------------------
|
|
3978
|
+
The library mixins emit var(--space-<key>), var(--radius-<key>),
|
|
3979
|
+
var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
|
|
3980
|
+
Themes declare the slots so those mixins always resolve.
|
|
3981
|
+
---------------------------------------------------------- */
|
|
3982
|
+
/* Space scale (rem for accessibility — natural scale, same as Sketchbook) */
|
|
3983
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
3984
|
+
The numbered scale is the source of truth: every component reads
|
|
3985
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
3986
|
+
are emitted by the library as references to these, so they follow
|
|
3987
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
3988
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
3989
|
+
--space-0: 0; /* flush */
|
|
3990
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
3991
|
+
--space-2: 0.75rem; /* control padding */
|
|
3992
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
3993
|
+
--space-4: 1rem; /* default rhythm */
|
|
3994
|
+
--space-5: 1.5rem; /* section gap */
|
|
3995
|
+
--space-6: 2rem; /* block gap */
|
|
3996
|
+
--space-7: 3rem; /* major gap */
|
|
3997
|
+
--space-8: 4rem; /* page section */
|
|
3998
|
+
--space-9: 6rem; /* hero rhythm */
|
|
3999
|
+
/* Radius alias — CRT has hard pixel corners, so every slot is 0 */
|
|
4000
|
+
--radius-sm: 0;
|
|
4001
|
+
--radius-md: 0;
|
|
4002
|
+
--radius-lg: 0;
|
|
4003
|
+
--radius-xl: 0;
|
|
4004
|
+
--radius-full: 0;
|
|
4005
|
+
/* Typography — mono body + key scale slots (15px matches CRT body setting) */
|
|
4006
|
+
--font-primary: var(--font-mono);
|
|
4007
|
+
--font-size-base: 15px;
|
|
4008
|
+
--line-height-normal: 1.5;
|
|
4009
|
+
--font-weight-medium: 500;
|
|
4010
|
+
/* Z-index layers (layering is universal) */
|
|
4011
|
+
--z-sticky: 1020;
|
|
4012
|
+
--z-dropdown: 1030;
|
|
4013
|
+
--z-backdrop: 1040;
|
|
4014
|
+
--z-modal: 1050;
|
|
4015
|
+
--z-popover: 1060;
|
|
4016
|
+
--z-tooltip: 1070;
|
|
4017
|
+
/* ----------------------------------------------------------
|
|
4018
|
+
OPTIONAL COMPONENT OVERRIDES (Feature 1.3)
|
|
4019
|
+
-----------------------------------------------------------
|
|
4020
|
+
Terminal-specific component expressions: zero radii on
|
|
4021
|
+
buttons/cards/inputs and a subtle phosphor glow on cards
|
|
4022
|
+
instead of a drop shadow.
|
|
4023
|
+
---------------------------------------------------------- */
|
|
4024
|
+
--btn-radius: 0;
|
|
4025
|
+
--card-radius: 0;
|
|
4026
|
+
--input-radius: 0;
|
|
4027
|
+
--card-shadow: var(--glow-sm);
|
|
4028
|
+
--card-border: 1px solid var(--ink-faint);
|
|
4029
|
+
}
|
|
4030
|
+
:root[data-theme=terminal-light] {
|
|
4031
|
+
color-scheme: light;
|
|
4032
|
+
/* Surfaces — clear light gray paper */
|
|
4033
|
+
--paper: #E8E8E8;
|
|
4034
|
+
--paper-raised: #F5F5F5;
|
|
4035
|
+
--paper-sunk: #D8D8D8;
|
|
4036
|
+
--paper-glass: rgba(232, 232, 232, 0.85);
|
|
4037
|
+
/* Ink — near-black mono */
|
|
4038
|
+
--ink: #1A1A1A;
|
|
4039
|
+
--ink-soft: #404040;
|
|
4040
|
+
--ink-faint: #666;
|
|
4041
|
+
--graphite: #0A0A0A;
|
|
4042
|
+
--muted: #7C7C7C;
|
|
4043
|
+
/* Hairlines — medium gray */
|
|
4044
|
+
--guide: #B8B8B8;
|
|
4045
|
+
--guide-soft: #C8C8C8;
|
|
4046
|
+
--hair: #C0C0C0;
|
|
4047
|
+
--hair-soft: #D8D8D8;
|
|
4048
|
+
/* Primary accent — VS Code keyword blue */
|
|
4049
|
+
--ai: #0451A5;
|
|
4050
|
+
--ai-ink: #023268;
|
|
4051
|
+
--ai-wash: rgba(4, 81, 165, 0.10);
|
|
4052
|
+
/* Seal — error red */
|
|
4053
|
+
--shu: #B91C1C;
|
|
4054
|
+
--shu-wash: rgba(185, 28, 28, 0.10);
|
|
4055
|
+
/* Accent — warning amber */
|
|
4056
|
+
--ochre: #B45309;
|
|
4057
|
+
--ochre-wash: rgba(180, 83, 9, 0.10);
|
|
4058
|
+
/* Code surface */
|
|
4059
|
+
--code-bg: #DDD;
|
|
4060
|
+
--code-ink: #1A1A1A;
|
|
4061
|
+
--code-muted: #5B5B5B;
|
|
4062
|
+
--code-accent: #934407;
|
|
4063
|
+
--code-green: #006A28;
|
|
4064
|
+
--code-blue: #0451A5;
|
|
4065
|
+
/* Typography — mono everywhere */
|
|
4066
|
+
--font-mono: 'JetBrains Mono', 'IBM Plex Mono', 'Fira Code', ui-monospace, Consolas, Menlo, 'Courier New', monospace;
|
|
4067
|
+
--font-sans: var(--font-mono);
|
|
4068
|
+
--font-serif: var(--font-mono);
|
|
4069
|
+
--font-display: var(--font-mono);
|
|
4070
|
+
--font-script: var(--font-mono);
|
|
4071
|
+
/* Radius — terminals are square */
|
|
4072
|
+
--r-sm: 0;
|
|
4073
|
+
--r-md: 0;
|
|
4074
|
+
--r-lg: 0;
|
|
4075
|
+
/* Shadows — hairline rings */
|
|
4076
|
+
--shadow-sm: 0 0 0 1px rgba(26, 26, 26, 0.08);
|
|
4077
|
+
--shadow-md: 0 0 0 1px rgba(26, 26, 26, 0.10), 0 1px 2px rgba(26, 26, 26, 0.06);
|
|
4078
|
+
--shadow-lg: 0 0 0 1px rgba(26, 26, 26, 0.12), 0 2px 4px rgba(26, 26, 26, 0.08);
|
|
4079
|
+
--shadow-xl: 0 0 0 1px rgba(26, 26, 26, 0.14), 0 4px 8px rgba(26, 26, 26, 0.10);
|
|
4080
|
+
--shadow-2xl: 0 0 0 1px rgba(26, 26, 26, 0.16), 0 8px 16px rgba(26, 26, 26, 0.12);
|
|
4081
|
+
/* Blur / glow — daylight, no emission */
|
|
4082
|
+
--blur-sm: none;
|
|
4083
|
+
--blur-md: none;
|
|
4084
|
+
--blur-lg: none;
|
|
4085
|
+
--glow-sm: 0 0 0 transparent;
|
|
4086
|
+
--glow-md: 0 0 0 transparent;
|
|
4087
|
+
--glow-lg: 0 0 0 transparent;
|
|
4088
|
+
/* Motion — instant */
|
|
4089
|
+
--duration-fast: 100ms;
|
|
4090
|
+
--duration-normal: 140ms;
|
|
4091
|
+
--duration-slow: 220ms;
|
|
4092
|
+
--ease: cubic-bezier(0.2, 0.0, 0.2, 1);
|
|
4093
|
+
/* Semantic aliases */
|
|
4094
|
+
--background-default: var(--paper);
|
|
4095
|
+
--background-subtle: var(--paper-sunk);
|
|
4096
|
+
--background-navbar: var(--paper-raised);
|
|
4097
|
+
--surface-default: var(--paper);
|
|
4098
|
+
--surface-raised: var(--paper-raised);
|
|
4099
|
+
--surface-sunk: var(--paper-sunk);
|
|
4100
|
+
--surface-muted: var(--paper-sunk);
|
|
4101
|
+
--surface-subtle: var(--paper-raised);
|
|
4102
|
+
--surface-emphasis: var(--ink);
|
|
4103
|
+
--surface-glass: var(--paper-glass);
|
|
4104
|
+
--text-primary: var(--ink);
|
|
4105
|
+
--text-secondary: var(--ink-soft);
|
|
4106
|
+
--text-muted: var(--ink-faint);
|
|
4107
|
+
--text-tertiary: var(--muted);
|
|
4108
|
+
--text-inverse: var(--paper);
|
|
4109
|
+
--text-link: var(--ai);
|
|
4110
|
+
--text-link-hover: var(--ai-ink);
|
|
4111
|
+
--border-default: var(--hair);
|
|
4112
|
+
--border-subtle: var(--hair-soft);
|
|
4113
|
+
--border-emphasis: var(--ink);
|
|
4114
|
+
--border-focus: var(--ai);
|
|
4115
|
+
--interactive-hover: rgba(26, 26, 26, 0.05);
|
|
4116
|
+
--interactive-active: rgba(26, 26, 26, 0.10);
|
|
4117
|
+
--brand-primary: var(--ai);
|
|
4118
|
+
--brand-primary-hover: var(--ai-ink);
|
|
4119
|
+
--action-primary-default: var(--ai);
|
|
4120
|
+
--action-primary-hover: var(--ai-ink);
|
|
4121
|
+
--action-primary-active: var(--ai-ink);
|
|
4122
|
+
--action-primary-wash: var(--ai-wash);
|
|
4123
|
+
--action-secondary-default: var(--shu);
|
|
4124
|
+
--action-secondary-hover: var(--shu);
|
|
4125
|
+
--action-secondary-active: var(--shu);
|
|
4126
|
+
--action-secondary-wash: var(--shu-wash);
|
|
4127
|
+
--action-tertiary-default: var(--ochre);
|
|
4128
|
+
--action-tertiary-hover: var(--ochre);
|
|
4129
|
+
--action-tertiary-active: var(--ochre);
|
|
4130
|
+
--action-tertiary-wash: var(--ochre-wash);
|
|
4131
|
+
--feedback-info: var(--ai);
|
|
4132
|
+
--feedback-success: #083;
|
|
4133
|
+
--feedback-warning: var(--ochre);
|
|
4134
|
+
--feedback-error: var(--shu);
|
|
4135
|
+
--info-default: var(--ai);
|
|
4136
|
+
--info-subtle: rgba(4, 81, 165, 0.10);
|
|
4137
|
+
--info-text: var(--ai-ink);
|
|
4138
|
+
--success-default: #083;
|
|
4139
|
+
--success-subtle: rgba(0, 136, 51, 0.10);
|
|
4140
|
+
--success-text: #062;
|
|
4141
|
+
--warning-default: var(--ochre);
|
|
4142
|
+
--warning-subtle: rgba(180, 83, 9, 0.10);
|
|
4143
|
+
--warning-text: #92400E;
|
|
4144
|
+
--error-default: var(--shu);
|
|
4145
|
+
--error-subtle: rgba(185, 28, 28, 0.10);
|
|
4146
|
+
--error-text: #7F1D1D;
|
|
4147
|
+
/* Library scales */
|
|
4148
|
+
/* Spacing rhythm — THE knob for how dense or airy this theme feels.
|
|
4149
|
+
The numbered scale is the source of truth: every component reads
|
|
4150
|
+
var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
|
|
4151
|
+
are emitted by the library as references to these, so they follow
|
|
4152
|
+
automatically. Change a value here and the whole page re-proportions.
|
|
4153
|
+
Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
|
|
4154
|
+
--space-0: 0; /* flush */
|
|
4155
|
+
--space-1: 0.5rem; /* tight inner gap */
|
|
4156
|
+
--space-2: 0.75rem; /* control padding */
|
|
4157
|
+
--space-3: 0.875rem; /* (no t-shirt) */
|
|
4158
|
+
--space-4: 1rem; /* default rhythm */
|
|
4159
|
+
--space-5: 1.5rem; /* section gap */
|
|
4160
|
+
--space-6: 2rem; /* block gap */
|
|
4161
|
+
--space-7: 3rem; /* major gap */
|
|
4162
|
+
--space-8: 4rem; /* page section */
|
|
4163
|
+
--space-9: 6rem; /* hero rhythm */
|
|
4164
|
+
--radius-sm: 0;
|
|
4165
|
+
--radius-md: 0;
|
|
4166
|
+
--radius-lg: 0;
|
|
4167
|
+
--radius-xl: 0;
|
|
4168
|
+
--radius-full: 0;
|
|
4169
|
+
--font-primary: var(--font-mono);
|
|
4170
|
+
--font-size-base: 15px;
|
|
4171
|
+
--line-height-normal: 1.5;
|
|
4172
|
+
--font-weight-medium: 500;
|
|
4173
|
+
--z-sticky: 1020;
|
|
4174
|
+
--z-dropdown: 1030;
|
|
4175
|
+
--z-backdrop: 1040;
|
|
4176
|
+
--z-modal: 1050;
|
|
4177
|
+
--z-popover: 1060;
|
|
4178
|
+
--z-tooltip: 1070;
|
|
4179
|
+
}
|