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.
Files changed (198) hide show
  1. package/AGENTS.md +343 -0
  2. package/CHANGELOG.md +1036 -0
  3. package/CLAUDE.md +9 -0
  4. package/CONTRACT.md +580 -0
  5. package/GEMINI.md +9 -0
  6. package/LICENSE +21 -0
  7. package/LICENSE-third-party +88 -0
  8. package/MIGRATION.md +312 -0
  9. package/README.md +380 -0
  10. package/ROADMAP.md +714 -0
  11. package/THEMING.md +290 -0
  12. package/THREE-TIERS.md +158 -0
  13. package/VERSIONING.md +200 -0
  14. package/_index.scss +34 -0
  15. package/api.scss +16 -0
  16. package/bin/README.md +57 -0
  17. package/bin/cia.cjs +114 -0
  18. package/bin/migrate-bootstrap.cjs +427 -0
  19. package/bin/migrate-tailwind.cjs +832 -0
  20. package/css-is-awesome.instructions.md +533 -0
  21. package/dist/css-is-awesome.core.css +598 -0
  22. package/dist/css-is-awesome.core.min.css +1 -0
  23. package/dist/css-is-awesome.css +3733 -0
  24. package/dist/css-is-awesome.min.css +1 -0
  25. package/dist/css-is-awesome.utilities.css +2445 -0
  26. package/dist/css-is-awesome.utilities.min.css +1 -0
  27. package/dist/tokens.css +508 -0
  28. package/dist/tokens.d.ts +266 -0
  29. package/dist/tokens.min.css +1 -0
  30. package/figma-tokens/README.md +57 -0
  31. package/figma-tokens/primitives-brand.scss +121 -0
  32. package/figma-tokens/semantic-dark.scss +61 -0
  33. package/figma-tokens/semantic-light.scss +61 -0
  34. package/figma-tokens/tokens.json +144 -0
  35. package/llm.txt +183 -0
  36. package/mcp/server.cjs +1495 -0
  37. package/package.json +199 -0
  38. package/public/icons/README.md +278 -0
  39. package/public/icons/arrow-right.svg +4 -0
  40. package/public/icons/check.svg +4 -0
  41. package/public/icons/chevron-down.svg +4 -0
  42. package/public/icons/close.svg +4 -0
  43. package/public/icons/core/arrow-down.svg +13 -0
  44. package/public/icons/core/arrow-left.svg +13 -0
  45. package/public/icons/core/arrow-right.svg +13 -0
  46. package/public/icons/core/arrow-up.svg +13 -0
  47. package/public/icons/core/bell.svg +13 -0
  48. package/public/icons/core/calendar.svg +15 -0
  49. package/public/icons/core/check.svg +12 -0
  50. package/public/icons/core/chevron-down.svg +12 -0
  51. package/public/icons/core/chevron-left.svg +12 -0
  52. package/public/icons/core/chevron-right.svg +12 -0
  53. package/public/icons/core/chevron-up.svg +12 -0
  54. package/public/icons/core/clock.svg +13 -0
  55. package/public/icons/core/close.svg +13 -0
  56. package/public/icons/core/copy.svg +13 -0
  57. package/public/icons/core/download.svg +14 -0
  58. package/public/icons/core/edit.svg +13 -0
  59. package/public/icons/core/error.svg +14 -0
  60. package/public/icons/core/external-link.svg +14 -0
  61. package/public/icons/core/eye-off.svg +15 -0
  62. package/public/icons/core/eye.svg +13 -0
  63. package/public/icons/core/filter.svg +12 -0
  64. package/public/icons/core/heart.svg +12 -0
  65. package/public/icons/core/help.svg +14 -0
  66. package/public/icons/core/home.svg +13 -0
  67. package/public/icons/core/info.svg +14 -0
  68. package/public/icons/core/loading.svg +12 -0
  69. package/public/icons/core/lock.svg +13 -0
  70. package/public/icons/core/mail.svg +13 -0
  71. package/public/icons/core/menu.svg +14 -0
  72. package/public/icons/core/message.svg +12 -0
  73. package/public/icons/core/minus.svg +12 -0
  74. package/public/icons/core/more-horizontal.svg +14 -0
  75. package/public/icons/core/pause.svg +13 -0
  76. package/public/icons/core/play.svg +12 -0
  77. package/public/icons/core/plus.svg +13 -0
  78. package/public/icons/core/refresh.svg +15 -0
  79. package/public/icons/core/save.svg +14 -0
  80. package/public/icons/core/search.svg +13 -0
  81. package/public/icons/core/settings.svg +13 -0
  82. package/public/icons/core/share.svg +14 -0
  83. package/public/icons/core/sort.svg +15 -0
  84. package/public/icons/core/star.svg +12 -0
  85. package/public/icons/core/success.svg +13 -0
  86. package/public/icons/core/trash.svg +16 -0
  87. package/public/icons/core/unlock.svg +13 -0
  88. package/public/icons/core/upload.svg +14 -0
  89. package/public/icons/core/user.svg +13 -0
  90. package/public/icons/core/users.svg +15 -0
  91. package/public/icons/core/warning.svg +14 -0
  92. package/public/icons/download.svg +4 -0
  93. package/public/icons/edit.svg +4 -0
  94. package/public/icons/menu.svg +4 -0
  95. package/public/icons/search.svg +4 -0
  96. package/public/theme.css +4179 -0
  97. package/public/themes/README.md +102 -0
  98. package/public/themes/boilerplate/theme.css +154 -0
  99. package/public/themes/boilerplate-dark/theme.css +171 -0
  100. package/public/themes/boilerplate-light/theme.css +171 -0
  101. package/public/themes/cupertino/theme.css +165 -0
  102. package/public/themes/cupertino-dark/theme.css +200 -0
  103. package/public/themes/cupertino-light/theme.css +227 -0
  104. package/public/themes/glass/theme.css +190 -0
  105. package/public/themes/glass-dark/theme.css +201 -0
  106. package/public/themes/glass-light/theme.css +229 -0
  107. package/public/themes/graphite/theme.css +155 -0
  108. package/public/themes/graphite-dark/theme.css +223 -0
  109. package/public/themes/graphite-light/theme.css +191 -0
  110. package/public/themes/press/theme.css +189 -0
  111. package/public/themes/press-dark/theme.css +199 -0
  112. package/public/themes/press-light/theme.css +235 -0
  113. package/public/themes/prism/theme.css +159 -0
  114. package/public/themes/prism-dark/theme.css +185 -0
  115. package/public/themes/prism-light/theme.css +188 -0
  116. package/public/themes/sketchbook/theme.css +152 -0
  117. package/public/themes/sketchbook-dark/theme.css +194 -0
  118. package/public/themes/sketchbook-light/theme.css +188 -0
  119. package/public/themes/terminal/theme.css +159 -0
  120. package/public/themes/terminal-dark/theme.css +229 -0
  121. package/public/themes/terminal-light/theme.css +152 -0
  122. package/scripts/README.md +70 -0
  123. package/scripts/icon-contract.json +67 -0
  124. package/scripts/icon-validator.js +205 -0
  125. package/scripts/prepare-dist.mjs +65 -0
  126. package/scripts/theme-a11y.js +415 -0
  127. package/scripts/theme-contract.json +171 -0
  128. package/scripts/theme-validator.js +674 -0
  129. package/scss/README.md +55 -0
  130. package/scss/_animations-utilities.scss +107 -0
  131. package/scss/_animations.scss +248 -0
  132. package/scss/_app-styles.scss +15 -0
  133. package/scss/_generator.scss +174 -0
  134. package/scss/_icons.scss +475 -0
  135. package/scss/_index.scss +17 -0
  136. package/scss/_layout.scss +597 -0
  137. package/scss/_mixins.scss +1036 -0
  138. package/scss/_system.scss +291 -0
  139. package/scss/_utilities.scss +377 -0
  140. package/scss/api.scss +61 -0
  141. package/scss/components/_accordion.scss +72 -0
  142. package/scss/components/_buttons.scss +171 -0
  143. package/scss/components/_copy-button.scss +69 -0
  144. package/scss/components/_data.scss +190 -0
  145. package/scss/components/_feedback.scss +197 -0
  146. package/scss/components/_forms.scss +272 -0
  147. package/scss/components/_index.scss +17 -0
  148. package/scss/components/_navigation.scss +186 -0
  149. package/scss/components/_overlay.scss +259 -0
  150. package/scss/components/_stepper.scss +159 -0
  151. package/scss/components/_tabs.scss +72 -0
  152. package/scss/core.scss +54 -0
  153. package/scss/examples/_theming.scss +107 -0
  154. package/scss/examples/_usage.scss +317 -0
  155. package/scss/main.scss +64 -0
  156. package/scss/recipes/README.md +110 -0
  157. package/scss/recipes/_bare-tags.scss +232 -0
  158. package/scss/recipes/_recipe-template.md +119 -0
  159. package/scss/recipes/combobox.md +509 -0
  160. package/scss/recipes/dialog.md +265 -0
  161. package/scss/recipes/print-to-pdf.md +263 -0
  162. package/scss/theme/README.md +67 -0
  163. package/scss/theme/_brand.scss +18 -0
  164. package/scss/theme/_colors-dark.scss +68 -0
  165. package/scss/theme/_colors-light.scss +70 -0
  166. package/scss/theme/_components.scss +94 -0
  167. package/scss/theme/_icons.scss +104 -0
  168. package/scss/theme/_index.scss +62 -0
  169. package/scss/theme/_shadows.scss +65 -0
  170. package/scss/theme/_shape.scss +13 -0
  171. package/scss/theme/_typography.scss +9 -0
  172. package/scss/theme/registry.json +447 -0
  173. package/scss/themes/boilerplate-dark.scss +212 -0
  174. package/scss/themes/boilerplate-light.scss +209 -0
  175. package/scss/themes/boilerplate.scss +181 -0
  176. package/scss/themes/cupertino-dark.scss +238 -0
  177. package/scss/themes/cupertino-light.scss +266 -0
  178. package/scss/themes/cupertino.scss +194 -0
  179. package/scss/themes/glass-dark.scss +238 -0
  180. package/scss/themes/glass-light.scss +266 -0
  181. package/scss/themes/glass.scss +220 -0
  182. package/scss/themes/graphite-dark.scss +260 -0
  183. package/scss/themes/graphite-light.scss +228 -0
  184. package/scss/themes/graphite.scss +182 -0
  185. package/scss/themes/press-dark.scss +237 -0
  186. package/scss/themes/press-light.scss +273 -0
  187. package/scss/themes/press.scss +241 -0
  188. package/scss/themes/prism-dark.scss +217 -0
  189. package/scss/themes/prism-light.scss +220 -0
  190. package/scss/themes/prism.scss +190 -0
  191. package/scss/themes/sketchbook-dark.scss +231 -0
  192. package/scss/themes/sketchbook-light.scss +231 -0
  193. package/scss/themes/sketchbook.scss +178 -0
  194. package/scss/themes/terminal-dark.scss +267 -0
  195. package/scss/themes/terminal-light.scss +175 -0
  196. package/scss/themes/terminal.scss +185 -0
  197. package/scss/tokens.scss +23 -0
  198. package/scss/utilities-only.scss +4 -0
@@ -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
+ }