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,209 @@
1
+ // ============================================================================
2
+ // THEME — boilerplate-light
3
+ // ============================================================================
4
+ // Daylight half of Boilerplate.
5
+ //
6
+ // Promoted from a bundle-only block to a real source 2026-08-29.
7
+ //
8
+ // Selector: :root, :root[data-theme="boilerplate-light"]
9
+ // ============================================================================
10
+ @use '../mixins' as m;
11
+
12
+ @include m.theme('boilerplate-light', light) {
13
+ /* Surfaces — off-white paper, light gray sunk */
14
+ --paper: #fff;
15
+ --paper-raised: #f2f2f2;
16
+ --paper-sunk: #f8fafc;
17
+ --paper-glass: rgba(255, 255, 255, 0.85);
18
+
19
+ /* Ink — slate neutral ramp */
20
+ --ink: #0f172a;
21
+ --ink-soft: #1e293b;
22
+ --ink-faint: #475569;
23
+ --graphite: #0f172a;
24
+ --muted: #64748b;
25
+
26
+ /* Lines — light slate borders */
27
+ --guide: #cbd5e1;
28
+ --guide-soft: #e2e8f0;
29
+ --hair: #e2e8f0;
30
+ --hair-soft: #f1f5f9;
31
+
32
+ /* Primary accent — clean, recognizable blue */
33
+ --ai: #2563eb;
34
+ --ai-ink: #1d4ed8;
35
+ --ai-wash: #eff6ff;
36
+
37
+ /* Seal — red (used for error / secondary action) */
38
+ --shu: #dc2626;
39
+ --shu-wash: #fef2f2;
40
+
41
+ /* Tertiary — amber (used for warning) */
42
+ --ochre: #d97706;
43
+ --ochre-wash: #fffbeb;
44
+
45
+ /* Code — neutral light syntax surface */
46
+ --code-bg: #f8fafc;
47
+ --code-ink: #0f172a;
48
+ --code-muted: #64748b;
49
+ --code-accent: #c2410c;
50
+ --code-green: #15803d;
51
+ --code-blue: #2563eb;
52
+
53
+ /* Typography — system stacks only (no @import) */
54
+ --font-display: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
55
+ --font-script: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
56
+ --font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;
57
+ --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
58
+ --font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
59
+
60
+ /* Radius — standard, unsurprising */
61
+ --r-sm: 4px;
62
+ --r-md: 6px;
63
+ --r-lg: 8px;
64
+
65
+ /* Shadow — subtle, neutral slate */
66
+ --shadow-sm: 0 1px 2px rgba(15, 23, 42, .04);
67
+ --shadow-md: 0 1px 3px rgba(15, 23, 42, .06), 0 1px 2px rgba(15, 23, 42, .04);
68
+ --shadow-lg: 0 4px 12px -2px rgba(15, 23, 42, .08), 0 2px 4px -2px rgba(15, 23, 42, .05);
69
+ --shadow-xl: 0 12px 24px -8px rgba(15, 23, 42, .10), 0 4px 8px -4px rgba(15, 23, 42, .06);
70
+ --shadow-2xl: 0 24px 48px -12px rgba(15, 23, 42, .15);
71
+
72
+ /* Blur — Boilerplate doesn't use frosted surfaces */
73
+ --blur-sm: none;
74
+ --blur-md: none;
75
+ --blur-lg: none;
76
+
77
+ /* Glow — Boilerplate doesn't use glow effects */
78
+ --glow-sm: 0 0 0 transparent;
79
+ --glow-md: 0 0 0 transparent;
80
+ --glow-lg: 0 0 0 transparent;
81
+
82
+ /* Motion — moderate, not flashy */
83
+ --duration-fast: 120ms;
84
+ --duration-normal: 180ms;
85
+ --duration-slow: 280ms;
86
+ --ease: cubic-bezier(.4, 0, .2, 1);
87
+
88
+ /* Backgrounds */
89
+ --background-default: var(--paper);
90
+ --background-subtle: var(--paper-sunk);
91
+ --background-navbar: var(--paper);
92
+
93
+ /* Surfaces (semantic) */
94
+ --surface-default: var(--paper);
95
+ --surface-raised: var(--paper-raised);
96
+ --surface-sunk: var(--paper-sunk);
97
+ --surface-muted: var(--paper-sunk);
98
+ --surface-subtle: var(--paper-sunk);
99
+ --surface-emphasis: var(--ink);
100
+ --surface-glass: var(--paper-glass);
101
+
102
+ /* Text */
103
+ --text-primary: var(--ink);
104
+ --text-secondary: var(--ink-soft);
105
+ --text-muted: var(--ink-faint);
106
+ --text-tertiary: var(--muted);
107
+ --text-inverse: var(--paper);
108
+ --text-link: var(--ai);
109
+ --text-link-hover: var(--ai-ink);
110
+
111
+ /* Borders */
112
+ --border-default: var(--hair);
113
+ --border-subtle: var(--hair-soft);
114
+ --border-emphasis: var(--guide);
115
+ --border-focus: var(--ai);
116
+
117
+ /* Interactive overlays */
118
+ --interactive-hover: rgba(15, 23, 42, 0.04);
119
+ --interactive-active: rgba(15, 23, 42, 0.08);
120
+
121
+ /* Brand */
122
+ --brand-primary: var(--ai);
123
+ --brand-primary-hover: var(--ai-ink);
124
+
125
+ /* Action triplets */
126
+ --action-primary-default: var(--ai);
127
+ --action-primary-hover: var(--ai-ink);
128
+ --action-primary-active: var(--ai-ink);
129
+ --action-primary-wash: var(--ai-wash);
130
+ --action-secondary-default: var(--shu);
131
+ --action-secondary-hover: var(--shu);
132
+ --action-secondary-active: var(--shu);
133
+ --action-secondary-wash: var(--shu-wash);
134
+ --action-tertiary-default: var(--ochre);
135
+ --action-tertiary-hover: var(--ochre);
136
+ --action-tertiary-active: var(--ochre);
137
+ --action-tertiary-wash: var(--ochre-wash);
138
+
139
+ /* Feedback */
140
+ --feedback-info: var(--ai);
141
+ --feedback-success: #16a34a;
142
+ --feedback-warning: var(--ochre);
143
+ --feedback-error: var(--shu);
144
+
145
+ /* Status — info */
146
+ --info-default: var(--ai);
147
+ --info-subtle: var(--ai-wash);
148
+ --info-text: var(--ai-ink);
149
+
150
+ /* Status — success */
151
+ --success-default: #16a34a;
152
+ --success-subtle: #f0fdf4;
153
+ --success-text: #15803d;
154
+
155
+ /* Status — warning */
156
+ --warning-default: var(--ochre);
157
+ --warning-subtle: var(--ochre-wash);
158
+ --warning-text: #b45309;
159
+
160
+ /* Status — error */
161
+ --error-default: var(--shu);
162
+ --error-subtle: var(--shu-wash);
163
+ --error-text: #b91c1c;
164
+
165
+ /* Space scale */
166
+ --space-2xs: 0.25rem;
167
+ --space-xs: 0.5rem;
168
+ --space-sm: 0.75rem;
169
+ --space-md: 1rem;
170
+ --space-lg: 1.5rem;
171
+ --space-xl: 2rem;
172
+
173
+ /* Radius alias */
174
+ --radius-sm: var(--r-sm);
175
+ --radius-md: var(--r-md);
176
+ --radius-lg: var(--r-lg);
177
+ --radius-xl: 12px;
178
+ --radius-full: 9999px;
179
+
180
+ /* Typography */
181
+ --font-primary: var(--font-sans);
182
+ --font-size-base: 1rem;
183
+ --line-height-normal: 1.5;
184
+ --font-weight-medium: 500;
185
+
186
+ /* Z-index layers */
187
+ --z-sticky: 1020;
188
+ --z-dropdown: 1030;
189
+ --z-backdrop: 1040;
190
+ --z-modal: 1050;
191
+ --z-popover: 1060;
192
+ --z-tooltip: 1070;
193
+
194
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
195
+ The numbered scale is the source of truth: every component reads
196
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
197
+ are emitted by the library as references to these, so they follow
198
+ automatically. Change a value here and the whole page re-proportions. */
199
+ --space-0: 0;
200
+ --space-1: 0.5rem;
201
+ --space-2: 0.75rem;
202
+ --space-3: 0.875rem;
203
+ --space-4: 1rem;
204
+ --space-5: 1.5rem;
205
+ --space-6: 2rem;
206
+ --space-7: 3rem;
207
+ --space-8: 4rem;
208
+ --space-9: 6rem;
209
+ }
@@ -0,0 +1,181 @@
1
+ // ============================================================================
2
+ // THEME — Boilerplate
3
+ // ============================================================================
4
+ // The recommended starter theme. Neutral, low-flourish, easy to override —
5
+ // intentionally a "blank canvas" rather than an opinion.
6
+ //
7
+ // Design intent:
8
+ // - Slate neutral grays + one restrained blue accent
9
+ // - System UI fonts (no @import — fastest first paint)
10
+ // - Subtle shadows. Standard radii (4 / 6 / 8 px).
11
+ // - No glass, no glow, no decorative texture.
12
+ //
13
+ // Selector: :root, :root[data-theme="boilerplate"]
14
+ // Replaces: [data-theme="boilerplate-light"] + [data-theme="boilerplate-dark"]
15
+ // ============================================================================
16
+ @use '../mixins' as m;
17
+
18
+ @include m.theme('boilerplate') {
19
+ /* Surfaces */
20
+ --paper: light-dark(#fff, #0f172a);
21
+ --paper-raised: light-dark(#f2f2f2, #1e293b);
22
+ --paper-sunk: light-dark(#f8fafc, #020617);
23
+ --paper-glass: light-dark(rgba(255, 255, 255, 0.85), rgba(15, 23, 42, 0.85));
24
+
25
+ /* Ink — slate neutral ramp */
26
+ --ink: light-dark(#0f172a, #f8fafc);
27
+ --ink-soft: light-dark(#1e293b, #e2e8f0);
28
+ --ink-faint: light-dark(#475569, #94a3b8);
29
+ --graphite: light-dark(#0f172a, #f1f5f9);
30
+ --muted: light-dark(#64748b, #64748b);
31
+
32
+ /* Lines */
33
+ --guide: light-dark(#cbd5e1, #334155);
34
+ --guide-soft: light-dark(#e2e8f0, #1e293b);
35
+ --hair: light-dark(#e2e8f0, #1e293b);
36
+ --hair-soft: light-dark(#f1f5f9, #0f172a);
37
+
38
+ /* Primary accent */
39
+ --ai: light-dark(#2563eb, #3b82f6);
40
+ --ai-ink: light-dark(#1d4ed8, #60a5fa);
41
+ --ai-wash: light-dark(#eff6ff, #1e3a8a);
42
+
43
+ /* Seal — red */
44
+ --shu: light-dark(#dc2626, #ef4444);
45
+ --shu-wash: light-dark(#fef2f2, #450a0a);
46
+
47
+ /* Tertiary — amber */
48
+ --ochre: light-dark(#d97706, #f59e0b);
49
+ --ochre-wash: light-dark(#fffbeb, #422006);
50
+
51
+ /* Code surface */
52
+ --code-bg: light-dark(#f8fafc, #020617);
53
+ --code-ink: light-dark(#0f172a, #e2e8f0);
54
+ --code-muted: light-dark(#5E6D83, #6F8098);
55
+ --code-accent: light-dark(#C1410C, #fb923c);
56
+ --code-green: light-dark(#147C3B, #4ade80);
57
+ --code-blue: light-dark(#2362EB, #60a5fa);
58
+
59
+ /* Typography — system stacks, no @import, identical */
60
+ --font-display: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
61
+ --font-script: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
62
+ --font-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif;
63
+ --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
64
+ --font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
65
+
66
+ /* Radius — identical */
67
+ --r-sm: 4px;
68
+ --r-md: 6px;
69
+ --r-lg: 8px;
70
+
71
+ /* Shadow — subtle, neutral slate / heavier on dark */
72
+ --shadow-sm: 0 1px 2px light-dark(rgba(15, 23, 42, 0.04), rgba(0, 0, 0, 0.30));
73
+ --shadow-md: 0 1px 3px light-dark(rgba(15, 23, 42, 0.06), rgba(0, 0, 0, 0.40)),
74
+ 0 1px 2px light-dark(rgba(15, 23, 42, 0.04), rgba(0, 0, 0, 0.30));
75
+ --shadow-lg: 0 4px 12px -2px light-dark(rgba(15, 23, 42, 0.08), rgba(0, 0, 0, 0.55)),
76
+ 0 2px 4px -2px light-dark(rgba(15, 23, 42, 0.05), rgba(0, 0, 0, 0.30));
77
+ --shadow-xl: 0 12px 24px -8px light-dark(rgba(15, 23, 42, 0.10), rgba(0, 0, 0, 0.65)),
78
+ 0 4px 8px -4px light-dark(rgba(15, 23, 42, 0.06), rgba(0, 0, 0, 0.40));
79
+ --shadow-2xl: 0 24px 48px -12px light-dark(rgba(15, 23, 42, 0.15), rgba(0, 0, 0, 0.75));
80
+
81
+ /* Blur / glow — none */
82
+ --blur-sm: none; --blur-md: none; --blur-lg: none;
83
+ --glow-sm: 0 0 0 transparent; --glow-md: 0 0 0 transparent; --glow-lg: 0 0 0 transparent;
84
+
85
+ /* Motion — identical */
86
+ --duration-fast: 120ms;
87
+ --duration-normal: 180ms;
88
+ --duration-slow: 280ms;
89
+ --ease: cubic-bezier(.4, 0, .2, 1);
90
+
91
+ /* Semantic aliases */
92
+ --background-default: var(--paper);
93
+ --background-subtle: var(--paper-sunk);
94
+ --background-navbar: light-dark(var(--paper), var(--paper-raised));
95
+ --surface-default: var(--paper);
96
+ --surface-raised: var(--paper-raised);
97
+ --surface-sunk: var(--paper-sunk);
98
+ --surface-muted: var(--paper-sunk);
99
+ --surface-subtle: light-dark(var(--paper-sunk), var(--paper-raised));
100
+ --surface-emphasis: var(--ink);
101
+ --surface-glass: var(--paper-glass);
102
+
103
+ --text-primary: var(--ink);
104
+ --text-secondary: var(--ink-soft);
105
+ --text-muted: var(--ink-faint);
106
+ --text-tertiary: var(--muted);
107
+ --text-inverse: var(--paper);
108
+ --text-link: var(--ai);
109
+ --text-link-hover: var(--ai-ink);
110
+
111
+ --border-default: var(--hair);
112
+ --border-subtle: var(--hair-soft);
113
+ --border-emphasis: var(--guide);
114
+ --border-focus: var(--ai);
115
+
116
+ --interactive-hover: light-dark(rgba(15, 23, 42, 0.04), rgba(248, 250, 252, 0.05));
117
+ --interactive-active: light-dark(rgba(15, 23, 42, 0.08), rgba(248, 250, 252, 0.10));
118
+
119
+ --brand-primary: var(--ai);
120
+ --brand-primary-hover: var(--ai-ink);
121
+
122
+ --action-primary-default: var(--ai);
123
+ --action-primary-hover: var(--ai-ink);
124
+ --action-primary-active: var(--ai-ink);
125
+ --action-primary-wash: var(--ai-wash);
126
+ --action-secondary-default: var(--shu);
127
+ --action-secondary-hover: var(--shu);
128
+ --action-secondary-active: var(--shu);
129
+ --action-secondary-wash: var(--shu-wash);
130
+ --action-tertiary-default: var(--ochre);
131
+ --action-tertiary-hover: var(--ochre);
132
+ --action-tertiary-active: var(--ochre);
133
+ --action-tertiary-wash: var(--ochre-wash);
134
+
135
+ --feedback-info: var(--ai);
136
+ --feedback-success: light-dark(#16a34a, #22c55e);
137
+ --feedback-warning: var(--ochre);
138
+ --feedback-error: var(--shu);
139
+
140
+ --info-default: var(--ai);
141
+ --info-subtle: var(--ai-wash);
142
+ --info-text: light-dark(var(--ai-ink), #85BFFF);
143
+
144
+ --success-default: light-dark(#16a34a, #22c55e);
145
+ --success-subtle: light-dark(#f0fdf4, #14532d);
146
+ --success-text: light-dark(#15803d, #4ade80);
147
+
148
+ --warning-default: var(--ochre);
149
+ --warning-subtle: var(--ochre-wash);
150
+ --warning-text: light-dark(#b45309, #fbbf24);
151
+
152
+ --error-default: var(--shu);
153
+ --error-subtle: var(--shu-wash);
154
+ --error-text: light-dark(#b91c1c, #fca5a5);
155
+
156
+ /* Library scales — identical */
157
+
158
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
159
+ The numbered scale is the source of truth: every component reads
160
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
161
+ are emitted by the library as references to these, so they follow
162
+ automatically. Change a value here and the whole page re-proportions.
163
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
164
+ --space-0: 0; /* flush */
165
+ --space-1: 0.5rem; /* tight inner gap */
166
+ --space-2: 0.75rem; /* control padding */
167
+ --space-3: 0.875rem; /* (no t-shirt) */
168
+ --space-4: 1rem; /* default rhythm */
169
+ --space-5: 1.5rem; /* section gap */
170
+ --space-6: 2rem; /* block gap */
171
+ --space-7: 3rem; /* major gap */
172
+ --space-8: 4rem; /* page section */
173
+ --space-9: 6rem; /* hero rhythm */
174
+
175
+ --radius-sm: var(--r-sm); --radius-md: var(--r-md); --radius-lg: var(--r-lg);
176
+ --radius-xl: 12px; --radius-full: 9999px;
177
+ --font-primary: var(--font-sans);
178
+ --font-size-base: 1rem; --line-height-normal: 1.5; --font-weight-medium: 500;
179
+ --z-sticky: 1020; --z-dropdown: 1030; --z-backdrop: 1040;
180
+ --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070;
181
+ }
@@ -0,0 +1,238 @@
1
+ /* ============================================================
2
+ THEME — Cupertino Dark
3
+ -----------------------------------------------------------
4
+ Dark companion to Cupertino (macOS native light). Same
5
+ AppKit design language: SF system stack, soft AppKit radii
6
+ (8/10/14), vibrancy blurs, lifted (not glowing) shadows.
7
+ Only the COLOR palette inverts.
8
+
9
+ Mood: macOS Dark Mode. SF-symbol-adjacent, system-blue
10
+ accent brightened for dark surfaces (Apple's #0A84FF dark
11
+ variant), warm ink-black panels (never purple, never pure
12
+ black). Trivial inversion — most macOS Dark conventions
13
+ are well-established.
14
+
15
+ Opt-in via `<html data-theme="cupertino-dark">`. Pair with
16
+ cupertino/theme.css to ship a project with a default light
17
+ AppKit mode and an opt-in dark AppKit mode.
18
+ ============================================================ */
19
+
20
+ @use '../mixins' as m;
21
+
22
+ @import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&display=swap';
23
+
24
+ @include m.theme('cupertino-dark', dark) {
25
+ /* Surfaces — AppKit dark panels */
26
+ --paper: #1E1E1E;
27
+ --paper-raised: #2A2A2A;
28
+ --paper-sunk: #141414;
29
+ --paper-glass: rgba(42, 42, 42, 0.72);
30
+
31
+ /* Ink — warm white, never pure */
32
+ --ink: #F5F5F7;
33
+ --ink-soft: #C7C7CC;
34
+ --ink-faint: #98989D;
35
+ --graphite: #AEAEB2;
36
+ --muted: #6E6E73;
37
+
38
+ /* Hairlines / guides — translucent white */
39
+ --guide: rgba(255, 255, 255, 0.16);
40
+ --guide-soft: rgba(255, 255, 255, 0.08);
41
+ --hair: rgba(255, 255, 255, 0.12);
42
+ --hair-soft: rgba(255, 255, 255, 0.06);
43
+
44
+ /* Primary accent — Apple system blue (dark variant) */
45
+ --ai: #0A84FF;
46
+ --ai-ink: #409CFF;
47
+ --ai-wash: rgba(10, 132, 255, 0.16);
48
+
49
+ /* Seal — Apple system red (dark variant) */
50
+ --shu: #FF453A;
51
+ --shu-wash: rgba(255, 69, 58, 0.16);
52
+
53
+ /* Accent — Apple system orange (dark variant) */
54
+ --ochre: #FF9F0A;
55
+ --ochre-wash: rgba(255, 159, 10, 0.16);
56
+
57
+ /* Code surface — AppKit dark code panel */
58
+ --code-bg: #0F0F0F;
59
+ --code-ink: #F2F2F7;
60
+ --code-muted: #8E8E93;
61
+ --code-accent: #FF9F0A;
62
+ --code-green: #30D158;
63
+ --code-blue: #64D2FF;
64
+
65
+ /* Typography — match Cupertino (SF system stack) */
66
+ --font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
67
+ --font-script: 'Caveat', 'Shadows Into Light', cursive;
68
+ --font-serif: ui-serif, 'New York', 'Iowan Old Style', 'Palatino', Georgia, serif;
69
+ --font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
70
+ --font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', 'Menlo', Consolas, monospace;
71
+
72
+ /* Radius — match Cupertino (AppKit corners) */
73
+ --r-sm: 8px;
74
+ --r-md: 10px;
75
+ --r-lg: 14px;
76
+
77
+ /* Shadows — small, diffuse, lifted (deeper for dark) */
78
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.30), 0 0 0 0.5px rgba(0, 0, 0, 0.30);
79
+ --shadow-md: 0 4px 14px rgba(0, 0, 0, 0.40), 0 1px 3px rgba(0, 0, 0, 0.30);
80
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.50), 0 2px 6px rgba(0, 0, 0, 0.30);
81
+ --shadow-xl: 0 20px 50px rgba(0, 0, 0, 0.60), 0 4px 10px rgba(0, 0, 0, 0.32);
82
+ --shadow-2xl: 0 28px 70px rgba(0, 0, 0, 0.72), 0 6px 14px rgba(0, 0, 0, 0.36);
83
+
84
+ /* Blur — vibrancy (Cupertino's signature, match light) */
85
+ --blur-sm: blur(20px) saturate(180%);
86
+ --blur-md: blur(30px) saturate(180%);
87
+ --blur-lg: blur(40px) saturate(180%);
88
+
89
+ /* Glow — Cupertino doesn't glow, it lifts */
90
+ --glow-sm: 0 0 0 transparent;
91
+ --glow-md: 0 0 0 transparent;
92
+ --glow-lg: 0 0 0 transparent;
93
+
94
+ /* Motion — Apple-snappy, match Cupertino */
95
+ --duration-fast: 160ms;
96
+ --duration-normal: 220ms;
97
+ --duration-slow: 320ms;
98
+ --ease: cubic-bezier(0.25, 0.1, 0.25, 1);
99
+
100
+ /* ----------------------------------------------------------
101
+ SEMANTIC ALIASES
102
+ ---------------------------------------------------------- */
103
+
104
+ /* Backgrounds */
105
+ --background-default: var(--paper);
106
+ --background-subtle: var(--paper-sunk);
107
+ --background-navbar: var(--paper-raised);
108
+
109
+ /* Surfaces */
110
+ --surface-default: var(--paper);
111
+ --surface-raised: var(--paper-raised);
112
+ --surface-sunk: var(--paper-sunk);
113
+ --surface-muted: var(--paper-sunk);
114
+ --surface-subtle: var(--paper-raised);
115
+ --surface-emphasis: var(--ink);
116
+ --surface-glass: var(--paper-glass);
117
+
118
+ /* Text */
119
+ --text-primary: var(--ink);
120
+ --text-secondary: var(--ink-soft);
121
+ --text-muted: var(--ink-faint);
122
+ --text-tertiary: var(--muted);
123
+ --text-inverse: var(--paper);
124
+ --text-link: var(--ai);
125
+ --text-link-hover: var(--ai-ink);
126
+
127
+ /* Borders */
128
+ --border-default: var(--hair);
129
+ --border-subtle: var(--hair-soft);
130
+ --border-emphasis: var(--ink);
131
+ --border-focus: var(--ai);
132
+
133
+ /* Interactive — translucent white on dark (macOS Dark convention) */
134
+ --interactive-hover: rgba(255, 255, 255, 0.06);
135
+ --interactive-active: rgba(255, 255, 255, 0.10);
136
+
137
+ /* Brand */
138
+ --brand-primary: var(--ai);
139
+ --brand-primary-hover: var(--ai-ink);
140
+
141
+ /* Action triplets */
142
+ --action-primary-default: var(--ai);
143
+ --action-primary-hover: var(--ai-ink);
144
+ --action-primary-active: var(--ai-ink);
145
+ --action-primary-wash: var(--ai-wash);
146
+ --action-secondary-default: var(--shu);
147
+ --action-secondary-hover: var(--shu);
148
+ --action-secondary-active: var(--shu);
149
+ --action-secondary-wash: var(--shu-wash);
150
+ --action-tertiary-default: var(--ochre);
151
+ --action-tertiary-hover: var(--ochre);
152
+ --action-tertiary-active: var(--ochre);
153
+ --action-tertiary-wash: var(--ochre-wash);
154
+
155
+ /* Feedback */
156
+ --feedback-info: var(--ai);
157
+ --feedback-success: var(--code-green);
158
+ --feedback-warning: var(--ochre);
159
+ --feedback-error: var(--shu);
160
+
161
+ /* Status — info */
162
+ --info-default: var(--ai);
163
+ --info-subtle: var(--ai-wash);
164
+ --info-text: var(--ai-ink);
165
+
166
+ /* Status — success (macOS dark green) */
167
+ --success-default: #30D158;
168
+ --success-subtle: rgba(48, 209, 88, 0.16);
169
+ --success-text: #5FE37F;
170
+
171
+ /* Status — warning (macOS dark orange) */
172
+ --warning-default: var(--ochre);
173
+ --warning-subtle: var(--ochre-wash);
174
+ --warning-text: #FFB340;
175
+
176
+ /* Status — error (macOS dark red) */
177
+ --error-default: var(--shu);
178
+ --error-subtle: var(--shu-wash);
179
+ --error-text: #FF6961;
180
+
181
+ /* ----------------------------------------------------------
182
+ LIBRARY SCALES
183
+ ---------------------------------------------------------- */
184
+
185
+ /* Space scale */
186
+
187
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
188
+ The numbered scale is the source of truth: every component reads
189
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
190
+ are emitted by the library as references to these, so they follow
191
+ automatically. Change a value here and the whole page re-proportions.
192
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
193
+ --space-0: 0; /* flush */
194
+ --space-1: 0.5rem; /* tight inner gap */
195
+ --space-2: 0.75rem; /* control padding */
196
+ --space-3: 0.875rem; /* (no t-shirt) */
197
+ --space-4: 1rem; /* default rhythm */
198
+ --space-5: 1.5rem; /* section gap */
199
+ --space-6: 2rem; /* block gap */
200
+ --space-7: 3rem; /* major gap */
201
+ --space-8: 4rem; /* page section */
202
+ --space-9: 6rem; /* hero rhythm */
203
+
204
+
205
+
206
+
207
+
208
+ /* Radius alias */
209
+ --radius-sm: var(--r-sm);
210
+ --radius-md: var(--r-md);
211
+ --radius-lg: var(--r-lg);
212
+ --radius-xl: 0.75rem;
213
+ --radius-full: 9999px;
214
+
215
+ /* Typography */
216
+ --font-primary: var(--font-sans);
217
+ --font-size-base: 1rem;
218
+ --line-height-normal: 1.5;
219
+ --font-weight-medium: 500;
220
+
221
+ /* Z-index */
222
+ --z-sticky: 1020;
223
+ --z-dropdown: 1030;
224
+ --z-backdrop: 1040;
225
+ --z-modal: 1050;
226
+ --z-popover: 1060;
227
+ --z-tooltip: 1070;
228
+
229
+ /* ----------------------------------------------------------
230
+ OPTIONAL COMPONENT OVERRIDES — match Cupertino
231
+ ---------------------------------------------------------- */
232
+ --btn-radius: var(--r-md); /* 10px — AppKit control */
233
+ --card-radius: var(--r-lg); /* 14px — panel corner */
234
+ --card-shadow: var(--shadow-sm); /* diffuse, lifted */
235
+ --input-radius: var(--r-sm); /* 8px — text field */
236
+ --modal-radius: var(--r-lg); /* matches panel */
237
+ --tooltip-radius: var(--r-sm); /* bezel tooltip */
238
+ }