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,165 @@
1
+ @charset "UTF-8";
2
+ @import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&display=swap';
3
+ :root, :root[data-theme=cupertino] {
4
+ color-scheme: light dark;
5
+ /* Surfaces — AppKit panels */
6
+ --paper: light-dark(#F5F5F7, #1E1E1E);
7
+ --paper-raised: light-dark(#FFF, #2A2A2A);
8
+ --paper-sunk: light-dark(#E9E9EC, #141414);
9
+ --paper-glass: light-dark(rgba(255, 255, 255, 0.72), rgba(42, 42, 42, 0.72));
10
+ /* Ink — warm black / warm white, never pure */
11
+ --ink: light-dark(#1D1D1F, #F5F5F7);
12
+ --ink-soft: light-dark(#3A3A3C, #C7C7CC);
13
+ --ink-faint: light-dark(#66666B, #98989D);
14
+ --graphite: light-dark(#2C2C2E, #AEAEB2);
15
+ --muted: light-dark(#6E6E73, #6E6E73);
16
+ /* Hairlines — solid in light, translucent white in dark */
17
+ --guide: light-dark(#D2D2D7, rgba(255, 255, 255, 0.16));
18
+ --guide-soft: light-dark(#E5E5EA, rgba(255, 255, 255, 0.08));
19
+ --hair: light-dark(#D2D2D7, rgba(255, 255, 255, 0.12));
20
+ --hair-soft: light-dark(#E5E5EA, rgba(255, 255, 255, 0.06));
21
+ /* Primary accent — Apple system blue (dark variant brighter) */
22
+ --ai: light-dark(#005EBB, #0A84FF);
23
+ --ai-ink: light-dark(#0058B0, #409CFF);
24
+ --ai-wash: light-dark(#E5F0FB, rgba(10, 132, 255, 0.16));
25
+ /* Seal — Apple system red */
26
+ --shu: light-dark(#FF3B30, #FF453A);
27
+ --shu-wash: light-dark(#FFEAE8, rgba(255, 69, 58, 0.16));
28
+ /* Accent — Apple system orange */
29
+ --ochre: light-dark(#FF9F0A, #FF9F0A);
30
+ --ochre-wash: light-dark(#FFF4E0, rgba(255, 159, 10, 0.16));
31
+ /* Code surface — Xcode dark in both modes (intentional editorial) */
32
+ --code-bg: light-dark(#1C1C1E, #0F0F0F);
33
+ --code-ink: light-dark(#F2F2F7, #F2F2F7);
34
+ --code-muted: #8E8E93;
35
+ --code-accent: #FF9F0A;
36
+ --code-green: #30D158;
37
+ --code-blue: #64D2FF;
38
+ /* Typography — SF system stack, identical */
39
+ --font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
40
+ --font-script: 'Caveat', 'Shadows Into Light', cursive;
41
+ --font-serif: ui-serif, 'New York', 'Iowan Old Style', 'Palatino', Georgia, serif;
42
+ --font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
43
+ --font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', 'Menlo', Consolas, monospace;
44
+ /* Radius — AppKit corners, identical */
45
+ --r-sm: 8px;
46
+ --r-md: 10px;
47
+ --r-lg: 14px;
48
+ /* Shadows — small, diffuse, lifted, deeper on dark */
49
+ --shadow-sm: 0 1px 2px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30)),
50
+ 0 0 0 0.5px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30));
51
+ --shadow-md: 0 4px 14px light-dark(rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.40)),
52
+ 0 1px 3px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30));
53
+ --shadow-lg: 0 12px 40px light-dark(rgba(0, 0, 0, 0.10), rgba(0, 0, 0, 0.50)),
54
+ 0 2px 6px light-dark(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.30));
55
+ --shadow-xl: 0 20px 50px light-dark(rgba(0, 0, 0, 0.14), rgba(0, 0, 0, 0.60)),
56
+ 0 4px 10px light-dark(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.32));
57
+ --shadow-2xl: 0 28px 70px light-dark(rgba(0, 0, 0, 0.20), rgba(0, 0, 0, 0.72)),
58
+ 0 6px 14px light-dark(rgba(0, 0, 0, 0.06), rgba(0, 0, 0, 0.36));
59
+ /* Blur — vibrancy signature, identical */
60
+ --blur-sm: blur(20px) saturate(180%);
61
+ --blur-md: blur(30px) saturate(180%);
62
+ --blur-lg: blur(40px) saturate(180%);
63
+ /* Glow — Cupertino doesn't glow, it lifts */
64
+ --glow-sm: 0 0 0 transparent;
65
+ --glow-md: 0 0 0 transparent;
66
+ --glow-lg: 0 0 0 transparent;
67
+ /* Motion — Apple-snappy, identical */
68
+ --duration-fast: 160ms;
69
+ --duration-normal: 220ms;
70
+ --duration-slow: 320ms;
71
+ --ease: cubic-bezier(0.25, 0.1, 0.25, 1);
72
+ /* Semantic aliases */
73
+ --background-default: var(--paper);
74
+ --background-subtle: var(--paper-sunk);
75
+ --background-navbar: var(--paper-raised);
76
+ --surface-default: var(--paper);
77
+ --surface-raised: var(--paper-raised);
78
+ --surface-sunk: var(--paper-sunk);
79
+ --surface-muted: var(--paper-sunk);
80
+ --surface-subtle: var(--paper-raised);
81
+ --surface-emphasis: var(--ink);
82
+ --surface-glass: var(--paper-glass);
83
+ --text-primary: var(--ink);
84
+ --text-secondary: var(--ink-soft);
85
+ --text-muted: var(--ink-faint);
86
+ --text-tertiary: var(--muted);
87
+ --text-inverse: var(--paper);
88
+ --text-link: var(--ai);
89
+ --text-link-hover: var(--ai-ink);
90
+ --border-default: var(--hair);
91
+ --border-subtle: var(--hair-soft);
92
+ --border-emphasis: var(--ink);
93
+ --border-focus: var(--ai);
94
+ --interactive-hover: light-dark(rgba(0, 0, 0, 0.04), rgba(255, 255, 255, 0.06));
95
+ --interactive-active: light-dark(rgba(0, 0, 0, 0.08), rgba(255, 255, 255, 0.10));
96
+ --brand-primary: var(--ai);
97
+ --brand-primary-hover: var(--ai-ink);
98
+ --action-primary-default: var(--ai);
99
+ --action-primary-hover: var(--ai-ink);
100
+ --action-primary-active: var(--ai-ink);
101
+ --action-primary-wash: var(--ai-wash);
102
+ --action-secondary-default: var(--shu);
103
+ --action-secondary-hover: var(--shu);
104
+ --action-secondary-active: var(--shu);
105
+ --action-secondary-wash: var(--shu-wash);
106
+ --action-tertiary-default: var(--ochre);
107
+ --action-tertiary-hover: var(--ochre);
108
+ --action-tertiary-active: var(--ochre);
109
+ --action-tertiary-wash: var(--ochre-wash);
110
+ --feedback-info: var(--ai);
111
+ --feedback-success: var(--code-green);
112
+ --feedback-warning: var(--ochre);
113
+ --feedback-error: var(--shu);
114
+ --info-default: var(--ai);
115
+ --info-subtle: var(--ai-wash);
116
+ --info-text: var(--ai-ink);
117
+ --success-default: light-dark(var(--code-green), #30D158);
118
+ --success-subtle: light-dark(rgba(48, 209, 88, 0.12), rgba(48, 209, 88, 0.16));
119
+ --success-text: light-dark(#0F6E22, #5FE37F);
120
+ --warning-default: var(--ochre);
121
+ --warning-subtle: var(--ochre-wash);
122
+ --warning-text: light-dark(#985000, #FFB340);
123
+ --error-default: var(--shu);
124
+ --error-subtle: light-dark(rgba(255, 59, 48, 0.12), rgba(255, 69, 58, 0.16));
125
+ --error-text: light-dark(#A8281F, #FF6961);
126
+ /* Library scales — identical */
127
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
128
+ The numbered scale is the source of truth: every component reads
129
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
130
+ are emitted by the library as references to these, so they follow
131
+ automatically. Change a value here and the whole page re-proportions.
132
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
133
+ --space-0: 0; /* flush */
134
+ --space-1: 0.5rem; /* tight inner gap */
135
+ --space-2: 0.75rem; /* control padding */
136
+ --space-3: 0.875rem; /* (no t-shirt) */
137
+ --space-4: 1rem; /* default rhythm */
138
+ --space-5: 1.5rem; /* section gap */
139
+ --space-6: 2rem; /* block gap */
140
+ --space-7: 3rem; /* major gap */
141
+ --space-8: 4rem; /* page section */
142
+ --space-9: 6rem; /* hero rhythm */
143
+ --radius-sm: var(--r-sm);
144
+ --radius-md: var(--r-md);
145
+ --radius-lg: var(--r-lg);
146
+ --radius-xl: 0.75rem;
147
+ --radius-full: 9999px;
148
+ --font-primary: var(--font-sans);
149
+ --font-size-base: 1rem;
150
+ --line-height-normal: 1.5;
151
+ --font-weight-medium: 500;
152
+ --z-sticky: 1020;
153
+ --z-dropdown: 1030;
154
+ --z-backdrop: 1040;
155
+ --z-modal: 1050;
156
+ --z-popover: 1060;
157
+ --z-tooltip: 1070;
158
+ /* Component overrides — AppKit identity */
159
+ --btn-radius: var(--r-md);
160
+ --card-radius: var(--r-lg);
161
+ --card-shadow: var(--shadow-sm);
162
+ --input-radius: var(--r-sm);
163
+ --modal-radius: var(--r-lg);
164
+ --tooltip-radius: var(--r-sm);
165
+ }
@@ -0,0 +1,200 @@
1
+ @charset "UTF-8";
2
+ /* ============================================================
3
+ THEME — Cupertino Dark
4
+ -----------------------------------------------------------
5
+ Dark companion to Cupertino (macOS native light). Same
6
+ AppKit design language: SF system stack, soft AppKit radii
7
+ (8/10/14), vibrancy blurs, lifted (not glowing) shadows.
8
+ Only the COLOR palette inverts.
9
+
10
+ Mood: macOS Dark Mode. SF-symbol-adjacent, system-blue
11
+ accent brightened for dark surfaces (Apple's #0A84FF dark
12
+ variant), warm ink-black panels (never purple, never pure
13
+ black). Trivial inversion — most macOS Dark conventions
14
+ are well-established.
15
+
16
+ Opt-in via `<html data-theme="cupertino-dark">`. Pair with
17
+ cupertino/theme.css to ship a project with a default light
18
+ AppKit mode and an opt-in dark AppKit mode.
19
+ ============================================================ */
20
+ @import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&display=swap';
21
+ :root, :root[data-theme=cupertino-dark] {
22
+ color-scheme: dark;
23
+ /* Surfaces — AppKit dark panels */
24
+ --paper: #1E1E1E;
25
+ --paper-raised: #2A2A2A;
26
+ --paper-sunk: #141414;
27
+ --paper-glass: rgba(42, 42, 42, 0.72);
28
+ /* Ink — warm white, never pure */
29
+ --ink: #F5F5F7;
30
+ --ink-soft: #C7C7CC;
31
+ --ink-faint: #98989D;
32
+ --graphite: #AEAEB2;
33
+ --muted: #6E6E73;
34
+ /* Hairlines / guides — translucent white */
35
+ --guide: rgba(255, 255, 255, 0.16);
36
+ --guide-soft: rgba(255, 255, 255, 0.08);
37
+ --hair: rgba(255, 255, 255, 0.12);
38
+ --hair-soft: rgba(255, 255, 255, 0.06);
39
+ /* Primary accent — Apple system blue (dark variant) */
40
+ --ai: #0A84FF;
41
+ --ai-ink: #409CFF;
42
+ --ai-wash: rgba(10, 132, 255, 0.16);
43
+ /* Seal — Apple system red (dark variant) */
44
+ --shu: #FF453A;
45
+ --shu-wash: rgba(255, 69, 58, 0.16);
46
+ /* Accent — Apple system orange (dark variant) */
47
+ --ochre: #FF9F0A;
48
+ --ochre-wash: rgba(255, 159, 10, 0.16);
49
+ /* Code surface — AppKit dark code panel */
50
+ --code-bg: #0F0F0F;
51
+ --code-ink: #F2F2F7;
52
+ --code-muted: #8E8E93;
53
+ --code-accent: #FF9F0A;
54
+ --code-green: #30D158;
55
+ --code-blue: #64D2FF;
56
+ /* Typography — match Cupertino (SF system stack) */
57
+ --font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
58
+ --font-script: 'Caveat', 'Shadows Into Light', cursive;
59
+ --font-serif: ui-serif, 'New York', 'Iowan Old Style', 'Palatino', Georgia, serif;
60
+ --font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
61
+ --font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', 'Menlo', Consolas, monospace;
62
+ /* Radius — match Cupertino (AppKit corners) */
63
+ --r-sm: 8px;
64
+ --r-md: 10px;
65
+ --r-lg: 14px;
66
+ /* Shadows — small, diffuse, lifted (deeper for dark) */
67
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.30), 0 0 0 0.5px rgba(0, 0, 0, 0.30);
68
+ --shadow-md: 0 4px 14px rgba(0, 0, 0, 0.40), 0 1px 3px rgba(0, 0, 0, 0.30);
69
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.50), 0 2px 6px rgba(0, 0, 0, 0.30);
70
+ --shadow-xl: 0 20px 50px rgba(0, 0, 0, 0.60), 0 4px 10px rgba(0, 0, 0, 0.32);
71
+ --shadow-2xl: 0 28px 70px rgba(0, 0, 0, 0.72), 0 6px 14px rgba(0, 0, 0, 0.36);
72
+ /* Blur — vibrancy (Cupertino's signature, match light) */
73
+ --blur-sm: blur(20px) saturate(180%);
74
+ --blur-md: blur(30px) saturate(180%);
75
+ --blur-lg: blur(40px) saturate(180%);
76
+ /* Glow — Cupertino doesn't glow, it lifts */
77
+ --glow-sm: 0 0 0 transparent;
78
+ --glow-md: 0 0 0 transparent;
79
+ --glow-lg: 0 0 0 transparent;
80
+ /* Motion — Apple-snappy, match Cupertino */
81
+ --duration-fast: 160ms;
82
+ --duration-normal: 220ms;
83
+ --duration-slow: 320ms;
84
+ --ease: cubic-bezier(0.25, 0.1, 0.25, 1);
85
+ /* ----------------------------------------------------------
86
+ SEMANTIC ALIASES
87
+ ---------------------------------------------------------- */
88
+ /* Backgrounds */
89
+ --background-default: var(--paper);
90
+ --background-subtle: var(--paper-sunk);
91
+ --background-navbar: var(--paper-raised);
92
+ /* Surfaces */
93
+ --surface-default: var(--paper);
94
+ --surface-raised: var(--paper-raised);
95
+ --surface-sunk: var(--paper-sunk);
96
+ --surface-muted: var(--paper-sunk);
97
+ --surface-subtle: var(--paper-raised);
98
+ --surface-emphasis: var(--ink);
99
+ --surface-glass: var(--paper-glass);
100
+ /* Text */
101
+ --text-primary: var(--ink);
102
+ --text-secondary: var(--ink-soft);
103
+ --text-muted: var(--ink-faint);
104
+ --text-tertiary: var(--muted);
105
+ --text-inverse: var(--paper);
106
+ --text-link: var(--ai);
107
+ --text-link-hover: var(--ai-ink);
108
+ /* Borders */
109
+ --border-default: var(--hair);
110
+ --border-subtle: var(--hair-soft);
111
+ --border-emphasis: var(--ink);
112
+ --border-focus: var(--ai);
113
+ /* Interactive — translucent white on dark (macOS Dark convention) */
114
+ --interactive-hover: rgba(255, 255, 255, 0.06);
115
+ --interactive-active: rgba(255, 255, 255, 0.10);
116
+ /* Brand */
117
+ --brand-primary: var(--ai);
118
+ --brand-primary-hover: var(--ai-ink);
119
+ /* Action triplets */
120
+ --action-primary-default: var(--ai);
121
+ --action-primary-hover: var(--ai-ink);
122
+ --action-primary-active: var(--ai-ink);
123
+ --action-primary-wash: var(--ai-wash);
124
+ --action-secondary-default: var(--shu);
125
+ --action-secondary-hover: var(--shu);
126
+ --action-secondary-active: var(--shu);
127
+ --action-secondary-wash: var(--shu-wash);
128
+ --action-tertiary-default: var(--ochre);
129
+ --action-tertiary-hover: var(--ochre);
130
+ --action-tertiary-active: var(--ochre);
131
+ --action-tertiary-wash: var(--ochre-wash);
132
+ /* Feedback */
133
+ --feedback-info: var(--ai);
134
+ --feedback-success: var(--code-green);
135
+ --feedback-warning: var(--ochre);
136
+ --feedback-error: var(--shu);
137
+ /* Status — info */
138
+ --info-default: var(--ai);
139
+ --info-subtle: var(--ai-wash);
140
+ --info-text: var(--ai-ink);
141
+ /* Status — success (macOS dark green) */
142
+ --success-default: #30D158;
143
+ --success-subtle: rgba(48, 209, 88, 0.16);
144
+ --success-text: #5FE37F;
145
+ /* Status — warning (macOS dark orange) */
146
+ --warning-default: var(--ochre);
147
+ --warning-subtle: var(--ochre-wash);
148
+ --warning-text: #FFB340;
149
+ /* Status — error (macOS dark red) */
150
+ --error-default: var(--shu);
151
+ --error-subtle: var(--shu-wash);
152
+ --error-text: #FF6961;
153
+ /* ----------------------------------------------------------
154
+ LIBRARY SCALES
155
+ ---------------------------------------------------------- */
156
+ /* Space scale */
157
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
158
+ The numbered scale is the source of truth: every component reads
159
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
160
+ are emitted by the library as references to these, so they follow
161
+ automatically. Change a value here and the whole page re-proportions.
162
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
163
+ --space-0: 0; /* flush */
164
+ --space-1: 0.5rem; /* tight inner gap */
165
+ --space-2: 0.75rem; /* control padding */
166
+ --space-3: 0.875rem; /* (no t-shirt) */
167
+ --space-4: 1rem; /* default rhythm */
168
+ --space-5: 1.5rem; /* section gap */
169
+ --space-6: 2rem; /* block gap */
170
+ --space-7: 3rem; /* major gap */
171
+ --space-8: 4rem; /* page section */
172
+ --space-9: 6rem; /* hero rhythm */
173
+ /* Radius alias */
174
+ --radius-sm: var(--r-sm);
175
+ --radius-md: var(--r-md);
176
+ --radius-lg: var(--r-lg);
177
+ --radius-xl: 0.75rem;
178
+ --radius-full: 9999px;
179
+ /* Typography */
180
+ --font-primary: var(--font-sans);
181
+ --font-size-base: 1rem;
182
+ --line-height-normal: 1.5;
183
+ --font-weight-medium: 500;
184
+ /* Z-index */
185
+ --z-sticky: 1020;
186
+ --z-dropdown: 1030;
187
+ --z-backdrop: 1040;
188
+ --z-modal: 1050;
189
+ --z-popover: 1060;
190
+ --z-tooltip: 1070;
191
+ /* ----------------------------------------------------------
192
+ OPTIONAL COMPONENT OVERRIDES — match Cupertino
193
+ ---------------------------------------------------------- */
194
+ --btn-radius: var(--r-md); /* 10px — AppKit control */
195
+ --card-radius: var(--r-lg); /* 14px — panel corner */
196
+ --card-shadow: var(--shadow-sm); /* diffuse, lifted */
197
+ --input-radius: var(--r-sm); /* 8px — text field */
198
+ --modal-radius: var(--r-lg); /* matches panel */
199
+ --tooltip-radius: var(--r-sm); /* bezel tooltip */
200
+ }
@@ -0,0 +1,227 @@
1
+ @charset "UTF-8";
2
+ /* ============================================================
3
+ THEME — Cupertino (light)
4
+ -----------------------------------------------------------
5
+ Standalone file for `[data-theme="cupertino-light"]` consumers.
6
+ This is the ONE FILE users swap to reskin their site.
7
+ Replace this file with any other theme.css to change the
8
+ entire look & feel. Tokens only — no component CSS lives here.
9
+
10
+ TOKEN CONTRACT
11
+ -----------------------------------------------------------
12
+ Every theme MUST declare every variable in this file, even
13
+ if it sets it to a neutral value (e.g. --glow-md: 0 0 0 transparent;).
14
+ That's what guarantees a clean one-file swap.
15
+
16
+ Slots:
17
+ Surfaces : --paper, --paper-raised, --paper-sunk, --paper-glass
18
+ Ink : --ink, --ink-soft, --ink-faint, --graphite, --muted
19
+ Lines : --guide, --guide-soft, --hair, --hair-soft
20
+ Primary : --ai, --ai-ink, --ai-wash (system blue in cupertino)
21
+ Seal : --shu, --shu-wash (system red)
22
+ Accent : --ochre, --ochre-wash (system orange / amber)
23
+ Code : --code-bg/ink/muted/accent/green/blue
24
+ Type : --font-display/script/serif/sans/mono
25
+ Radius : --r-sm, --r-md, --r-lg
26
+ Shadow : --shadow-sm, --shadow-md, --shadow-lg
27
+ Blur : --blur-sm, --blur-md, --blur-lg (vibrancy)
28
+ Glow : --glow-sm, --glow-md, --glow-lg (cupertino lifts, doesn't glow)
29
+ Motion : --duration-fast, --duration-normal, --duration-slow, --ease
30
+ ============================================================ */
31
+ @import 'https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&display=swap';
32
+ :root, :root[data-theme=cupertino-light] {
33
+ color-scheme: light;
34
+ /* Surfaces — AppKit panels */
35
+ --paper: #F5F5F7;
36
+ --paper-raised: #FFF;
37
+ --paper-sunk: #E9E9EC;
38
+ --paper-glass: rgba(255, 255, 255, 0.72);
39
+ /* Ink — warm black, never pure */
40
+ --ink: #1D1D1F;
41
+ --ink-soft: #3A3A3C;
42
+ --ink-faint: #66666B;
43
+ --graphite: #2C2C2E;
44
+ --muted: #6E6E73;
45
+ /* Hairlines / guides */
46
+ --guide: #D2D2D7;
47
+ --guide-soft: #E5E5EA;
48
+ --hair: #D2D2D7;
49
+ --hair-soft: #E5E5EA;
50
+ /* Primary accent — system blue */
51
+ --ai: #005EBB;
52
+ --ai-ink: #0058B0;
53
+ --ai-wash: #E5F0FB;
54
+ /* Seal — system red */
55
+ --shu: #FF3B30;
56
+ --shu-wash: #FFEAE8;
57
+ /* Accent — system orange / amber */
58
+ --ochre: #FF9F0A;
59
+ --ochre-wash: #FFF4E0;
60
+ /* Code surface — native Xcode dark */
61
+ --code-bg: #1C1C1E;
62
+ --code-ink: #F2F2F7;
63
+ --code-muted: #8E8E93;
64
+ --code-accent: #FF9F0A;
65
+ --code-green: #30D158;
66
+ --code-blue: #64D2FF;
67
+ /* Typography — SF system stack */
68
+ --font-display: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
69
+ --font-script: 'Caveat', 'Shadows Into Light', cursive;
70
+ --font-serif: ui-serif, 'New York', 'Iowan Old Style', 'Palatino', Georgia, serif;
71
+ --font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Helvetica, Arial, sans-serif;
72
+ --font-mono: 'SF Mono', ui-monospace, 'JetBrains Mono', 'Menlo', Consolas, monospace;
73
+ /* Radius — AppKit corners */
74
+ --r-sm: 8px;
75
+ --r-md: 10px;
76
+ --r-lg: 14px;
77
+ /* Shadows — small, diffuse, lifted */
78
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04), 0 0 0 0.5px rgba(0, 0, 0, 0.04);
79
+ --shadow-md: 0 4px 14px rgba(0, 0, 0, 0.06), 0 1px 3px rgba(0, 0, 0, 0.04);
80
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.10), 0 2px 6px rgba(0, 0, 0, 0.04);
81
+ /* Blur — vibrancy (Cupertino's signature) */
82
+ --blur-sm: blur(20px) saturate(180%);
83
+ --blur-md: blur(30px) saturate(180%);
84
+ --blur-lg: blur(40px) saturate(180%);
85
+ /* Glow — Cupertino doesn't glow, it lifts */
86
+ --glow-sm: 0 0 0 transparent;
87
+ --glow-md: 0 0 0 transparent;
88
+ --glow-lg: 0 0 0 transparent;
89
+ /* Motion — Apple-snappy */
90
+ --duration-fast: 160ms;
91
+ --duration-normal: 220ms;
92
+ --duration-slow: 320ms;
93
+ --ease: cubic-bezier(0.25, 0.1, 0.25, 1);
94
+ /* ----------------------------------------------------------
95
+ SEMANTIC ALIASES
96
+ -----------------------------------------------------------
97
+ Bridge the library's expected names to this theme's native
98
+ palette. Components can now write m.color(surface-default)
99
+ or var(--surface-default) and reskin with the theme
100
+ automatically.
101
+ ---------------------------------------------------------- */
102
+ /* Backgrounds (page-level) */
103
+ --background-default: var(--paper);
104
+ --background-subtle: var(--paper-sunk);
105
+ --background-navbar: var(--paper-raised);
106
+ /* Surfaces */
107
+ --surface-default: var(--paper);
108
+ --surface-raised: var(--paper-raised);
109
+ --surface-sunk: var(--paper-sunk);
110
+ --surface-muted: var(--paper-sunk);
111
+ --surface-subtle: var(--paper-raised);
112
+ --surface-emphasis: var(--ink);
113
+ --surface-glass: var(--paper-glass);
114
+ /* Text */
115
+ --text-primary: var(--ink);
116
+ --text-secondary: var(--ink-soft);
117
+ --text-muted: var(--ink-faint);
118
+ --text-tertiary: var(--muted);
119
+ --text-inverse: var(--paper);
120
+ --text-link: var(--ai);
121
+ --text-link-hover: var(--ai-ink);
122
+ /* Borders */
123
+ --border-default: var(--hair);
124
+ --border-subtle: var(--hair-soft);
125
+ --border-emphasis: var(--ink);
126
+ --border-focus: var(--ai);
127
+ /* Interactive (hover / active wash layers) — macOS faint ink overlay */
128
+ --interactive-hover: rgba(0, 0, 0, 0.04);
129
+ --interactive-active: rgba(0, 0, 0, 0.08);
130
+ /* Brand (identity — action-primary usually references these) */
131
+ --brand-primary: var(--ai);
132
+ --brand-primary-hover: var(--ai-ink);
133
+ /* Action (primary / secondary / tertiary) */
134
+ --action-primary-default: var(--ai);
135
+ --action-primary-hover: var(--ai-ink);
136
+ --action-primary-active: var(--ai-ink);
137
+ --action-primary-wash: var(--ai-wash);
138
+ --action-secondary-default: var(--shu);
139
+ --action-secondary-hover: var(--shu);
140
+ --action-secondary-active: var(--shu);
141
+ --action-secondary-wash: var(--shu-wash);
142
+ --action-tertiary-default: var(--ochre);
143
+ --action-tertiary-hover: var(--ochre);
144
+ --action-tertiary-active: var(--ochre);
145
+ --action-tertiary-wash: var(--ochre-wash);
146
+ /* Feedback / status (high-level semantic) */
147
+ --feedback-info: var(--ai);
148
+ --feedback-success: var(--code-green);
149
+ --feedback-warning: var(--ochre);
150
+ --feedback-error: var(--shu);
151
+ /* Status — info (three-part: default / subtle / text) */
152
+ --info-default: var(--ai);
153
+ --info-subtle: var(--ai-wash);
154
+ --info-text: var(--ai-ink);
155
+ /* Status — success (macOS system green) */
156
+ --success-default: var(--code-green);
157
+ --success-subtle: rgba(48, 209, 88, 0.12);
158
+ --success-text: #0F6E22;
159
+ /* Status — warning (macOS system orange) */
160
+ --warning-default: var(--ochre);
161
+ --warning-subtle: var(--ochre-wash);
162
+ --warning-text: #985000;
163
+ /* Status — error (macOS system red) */
164
+ --error-default: var(--shu);
165
+ --error-subtle: rgba(255, 59, 48, 0.12);
166
+ --error-text: #A8281F;
167
+ /* ----------------------------------------------------------
168
+ LIBRARY SCALES (space / radius / type / motion / z)
169
+ -----------------------------------------------------------
170
+ The library mixins emit var(--space-<key>), var(--radius-<key>),
171
+ var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
172
+ Themes declare the slots so those mixins always resolve.
173
+ ---------------------------------------------------------- */
174
+ /* Space scale (rem for accessibility) */
175
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
176
+ The numbered scale is the source of truth: every component reads
177
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
178
+ are emitted by the library as references to these, so they follow
179
+ automatically. Change a value here and the whole page re-proportions.
180
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
181
+ --space-0: 0; /* flush */
182
+ --space-1: 0.5rem; /* tight inner gap */
183
+ --space-2: 0.75rem; /* control padding */
184
+ --space-3: 0.875rem; /* (no t-shirt) */
185
+ --space-4: 1rem; /* default rhythm */
186
+ --space-5: 1.5rem; /* section gap */
187
+ --space-6: 2rem; /* block gap */
188
+ --space-7: 3rem; /* major gap */
189
+ --space-8: 4rem; /* page section */
190
+ --space-9: 6rem; /* hero rhythm */
191
+ /* Radius alias — mirrors --r-* with standard names so
192
+ `m.radius(size)` in the library finds --radius-<size>. */
193
+ --radius-sm: var(--r-sm);
194
+ --radius-md: var(--r-md);
195
+ --radius-lg: var(--r-lg);
196
+ --radius-xl: 0.75rem;
197
+ --radius-full: 9999px;
198
+ /* Shadow — higher-elevation slots (AppKit floating surfaces) */
199
+ --shadow-xl: 0 20px 50px rgba(0, 0, 0, 0.14), 0 4px 10px rgba(0, 0, 0, 0.05);
200
+ --shadow-2xl: 0 28px 70px rgba(0, 0, 0, 0.20), 0 6px 14px rgba(0, 0, 0, 0.06);
201
+ /* Typography — base body font + key scale slots (SF Pro stack) */
202
+ --font-primary: var(--font-sans);
203
+ --font-size-base: 1rem;
204
+ --line-height-normal: 1.5;
205
+ --font-weight-medium: 500;
206
+ /* Z-index layers */
207
+ --z-sticky: 1020;
208
+ --z-dropdown: 1030;
209
+ --z-backdrop: 1040;
210
+ --z-modal: 1050;
211
+ --z-popover: 1060;
212
+ --z-tooltip: 1070;
213
+ /* ----------------------------------------------------------
214
+ OPTIONAL COMPONENT OVERRIDES (Feature 1.3)
215
+ -----------------------------------------------------------
216
+ Cupertino expresses AppKit UI: softly rounded controls,
217
+ diffuse card lift, larger panel radii. Overrides are
218
+ intentionally sparse — pick the ones that carry the
219
+ identity of the OS, leave the rest on library defaults.
220
+ ---------------------------------------------------------- */
221
+ --btn-radius: var(--r-md); /* 10px — AppKit control */
222
+ --card-radius: var(--r-lg); /* 14px — panel corner */
223
+ --card-shadow: var(--shadow-sm); /* diffuse, lifted */
224
+ --input-radius: var(--r-sm); /* 8px — text field */
225
+ --modal-radius: var(--r-lg); /* matches panel */
226
+ --tooltip-radius: var(--r-sm); /* bezel tooltip */
227
+ }