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,190 @@
1
+ // ============================================================================
2
+ // THEME — Prism
3
+ // ============================================================================
4
+ // Clean component-library aesthetic inspired by Vercel/Linear/Radix/shadcn.
5
+ // Neutral grays do heavy lifting; one restrained refined-blue accent;
6
+ // border-driven (not shadow-driven); generous whitespace.
7
+ //
8
+ // Fonts, radii, motion identical across modes. Only colors and shadow alphas
9
+ // differ — handled with light-dark().
10
+ //
11
+ // Selector: :root, :root[data-theme="prism"]
12
+ // Replaces: [data-theme="prism-light"] + [data-theme="prism-dark"]
13
+ // ============================================================================
14
+ @use '../mixins' as m;
15
+
16
+ @import 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap';
17
+
18
+ @include m.theme('prism') {
19
+ /* Surfaces */
20
+ --paper: light-dark(#fff, #09090b);
21
+ --paper-raised: light-dark(#fff, #18181b);
22
+ --paper-sunk: light-dark(#f4f4f5, #27272a);
23
+ --paper-glass: light-dark(rgba(255, 255, 255, 0.80), rgba(24, 24, 27, 0.80));
24
+
25
+ /* Ink — zinc neutral ramp */
26
+ --ink: light-dark(#09090b, #fafafa);
27
+ --ink-soft: light-dark(#27272a, #e4e4e7);
28
+ --ink-faint: light-dark(#52525b, #a1a1aa);
29
+ --graphite: light-dark(#18181b, #f4f4f5);
30
+ --muted: light-dark(#71717a, #71717a);
31
+
32
+ /* Lines */
33
+ --guide: light-dark(#d4d4d8, #3f3f46);
34
+ --guide-soft: light-dark(#e4e4e7, #27272a);
35
+ --hair: light-dark(#e4e4e7, #27272a);
36
+ --hair-soft: light-dark(#f4f4f5, #18181b);
37
+
38
+ /* Primary accent — refined blue (brighter for dark) */
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(#ca8a04, #eab308);
49
+ --ochre-wash: light-dark(#fefce8, #422006);
50
+
51
+ /* Code surface */
52
+ --code-bg: light-dark(#fafafa, #0a0a0a);
53
+ --code-ink: light-dark(#18181b, #e4e4e7);
54
+ // Must be light-dark(): --code-bg is light-dark(#fafafa, #0a0a0a), and no
55
+ // single grey clears 4.5:1 on both a near-white and a near-black surface —
56
+ // the two constraints are arithmetically disjoint (needs L <= 0.174 AND
57
+ // L >= 0.189). A single value here was a latent a11y failure on one scheme.
58
+ --code-muted: light-dark(#6B6B73, #808089);
59
+ --code-accent: light-dark(#C1410C, #fb923c);
60
+ --code-green: light-dark(#117D39, #4ade80);
61
+ --code-blue: light-dark(#2462EB, #60a5fa);
62
+
63
+ /* Typography — identical across modes */
64
+ --font-display: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
65
+ --font-script: 'Inter', cursive;
66
+ --font-serif: Georgia, 'Times New Roman', Times, serif;
67
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
68
+ --font-mono: 'JetBrains Mono', 'SF Mono', 'Roboto Mono', Consolas, Menlo, monospace;
69
+
70
+ /* Radius — identical */
71
+ --r-sm: 4px;
72
+ --r-md: 6px;
73
+ --r-lg: 8px;
74
+
75
+ /* Shadow — extremely subtle, heavier on dark */
76
+ --shadow-sm: 0 1px 1px light-dark(rgba(9, 9, 11, 0.03), rgba(0, 0, 0, 0.30));
77
+ --shadow-md: 0 1px 2px light-dark(rgba(9, 9, 11, 0.05), rgba(0, 0, 0, 0.40));
78
+ --shadow-lg: 0 4px 12px -4px light-dark(rgba(9, 9, 11, 0.08), rgba(0, 0, 0, 0.60));
79
+ --shadow-xl: 0 16px 32px -16px light-dark(rgba(9, 9, 11, 0.15), rgba(0, 0, 0, 0.70));
80
+ --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));
81
+
82
+ /* Blur / glow — Prism uses neither */
83
+ --blur-sm: none; --blur-md: none; --blur-lg: none;
84
+ --glow-sm: 0 0 0 transparent; --glow-md: 0 0 0 transparent; --glow-lg: 0 0 0 transparent;
85
+
86
+ /* Motion — fast + crisp, identical */
87
+ --duration-fast: 100ms;
88
+ --duration-normal: 150ms;
89
+ --duration-slow: 250ms;
90
+ --ease: cubic-bezier(.32, .72, 0, 1);
91
+
92
+ /* Semantic aliases */
93
+ --background-default: var(--paper);
94
+ --background-subtle: var(--paper-sunk);
95
+ --background-navbar: var(--paper-raised);
96
+ --surface-default: var(--paper);
97
+ --surface-raised: var(--paper-raised);
98
+ --surface-sunk: var(--paper-sunk);
99
+ --surface-muted: var(--paper-sunk);
100
+ --surface-subtle: var(--paper-raised);
101
+ --surface-emphasis: var(--ink);
102
+ --surface-glass: var(--paper-glass);
103
+
104
+ --text-primary: var(--ink);
105
+ --text-secondary: var(--ink-soft);
106
+ --text-muted: var(--ink-faint);
107
+ --text-tertiary: var(--muted);
108
+ --text-inverse: var(--paper);
109
+ --text-link: var(--ai);
110
+ --text-link-hover: var(--ai-ink);
111
+
112
+ --border-default: var(--hair);
113
+ --border-subtle: var(--hair-soft);
114
+ --border-emphasis: var(--guide);
115
+ --border-focus: var(--ai);
116
+
117
+ --interactive-hover: light-dark(rgba(9, 9, 11, 0.05), rgba(255, 255, 255, 0.05));
118
+ --interactive-active: light-dark(rgba(9, 9, 11, 0.10), rgba(255, 255, 255, 0.10));
119
+
120
+ --brand-primary: var(--ai);
121
+ --brand-primary-hover: var(--ai-ink);
122
+
123
+ --action-primary-default: var(--ai);
124
+ --action-primary-hover: var(--ai-ink);
125
+ --action-primary-active: var(--ai-ink);
126
+ --action-primary-wash: var(--ai-wash);
127
+ --action-secondary-default: var(--shu);
128
+ --action-secondary-hover: var(--shu);
129
+ --action-secondary-active: var(--shu);
130
+ --action-secondary-wash: var(--shu-wash);
131
+ --action-tertiary-default: var(--ochre);
132
+ --action-tertiary-hover: var(--ochre);
133
+ --action-tertiary-active: var(--ochre);
134
+ --action-tertiary-wash: var(--ochre-wash);
135
+
136
+ --feedback-info: var(--ai);
137
+ --feedback-success: light-dark(#16a34a, #22c55e);
138
+ --feedback-warning: var(--ochre);
139
+ --feedback-error: var(--shu);
140
+
141
+ --info-default: var(--ai);
142
+ --info-subtle: var(--ai-wash);
143
+ --info-text: light-dark(var(--ai-ink), #85BFFF);
144
+
145
+ --success-default: light-dark(#16a34a, #22c55e);
146
+ --success-subtle: light-dark(#f0fdf4, #14532d);
147
+ --success-text: light-dark(#15803d, #4ade80);
148
+
149
+ --warning-default: light-dark(#ca8a04, #eab308);
150
+ --warning-subtle: light-dark(#fefce8, #422006);
151
+ --warning-text: light-dark(#854d0e, #fde047);
152
+
153
+ --error-default: light-dark(#dc2626, #ef4444);
154
+ --error-subtle: light-dark(#fef2f2, #450a0a);
155
+ --error-text: light-dark(#b91c1c, #fca5a5);
156
+
157
+ /* Library scales — identical */
158
+
159
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
160
+ The numbered scale is the source of truth: every component reads
161
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
162
+ are emitted by the library as references to these, so they follow
163
+ automatically. Change a value here and the whole page re-proportions.
164
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
165
+ --space-0: 0; /* flush */
166
+ --space-1: 0.5rem; /* tight inner gap */
167
+ --space-2: 0.75rem; /* control padding */
168
+ --space-3: 0.875rem; /* (no t-shirt) */
169
+ --space-4: 1rem; /* default rhythm */
170
+ --space-5: 1.5rem; /* section gap */
171
+ --space-6: 2rem; /* block gap */
172
+ --space-7: 3rem; /* major gap */
173
+ --space-8: 4rem; /* page section */
174
+ --space-9: 6rem; /* hero rhythm */
175
+
176
+ --radius-sm: var(--r-sm); --radius-md: var(--r-md); --radius-lg: var(--r-lg);
177
+ --radius-xl: 12px; --radius-full: 9999px;
178
+ --font-primary: var(--font-sans);
179
+ --font-size-base: 1rem; --line-height-normal: 1.5; --font-weight-medium: 500;
180
+ --z-sticky: 1020; --z-dropdown: 1030; --z-backdrop: 1040;
181
+ --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070;
182
+
183
+ /* Component overrides — border-driven, tight radii */
184
+ --btn-radius: var(--r-md);
185
+ --card-radius: var(--r-md);
186
+ --card-shadow: var(--shadow-sm);
187
+ --card-border: 1px solid var(--hair);
188
+ --input-radius: var(--r-md);
189
+ --modal-radius: var(--r-lg);
190
+ }
@@ -0,0 +1,231 @@
1
+ /* ============================================================
2
+ THEME — Sketchbook Dark
3
+ -----------------------------------------------------------
4
+ Dark companion to Sketchbook (the css-is-awesome default,
5
+ warm-paper editorial light). Same hand-sketched personality:
6
+ serif display, Caveat script accents, soft warm hairlines,
7
+ slow ink-bleed motion. Only the COLOR palette inverts —
8
+ radius / fonts / shadows / motion all match the partner.
9
+
10
+ Mood: charcoal-paper editorial dark — late-night studio,
11
+ pencil-on-toned-paper, warm grays instead of cold blacks.
12
+ --paper is a warm charcoal; --ink is a warm cream. The
13
+ indigo accent (--ai) brightens for dark surfaces; the
14
+ vermilion seal (--shu) stays warm; ochre (--ochre) stays
15
+ gold; the code panel inverts to a warm cream slab.
16
+
17
+ Opt-in via `<html data-theme="sketchbook-dark">`. Pair with
18
+ the default Sketchbook (which lives in the consolidated
19
+ bundle / public/theme.css) to ship a project with a default
20
+ light mode and an opt-in dark mode.
21
+ ============================================================ */
22
+
23
+ @use '../mixins' as m;
24
+
25
+ @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';
26
+
27
+ @include m.theme('sketchbook-dark', dark) {
28
+ /* Surfaces — warm charcoal paper */
29
+ --paper: #1A1815;
30
+ --paper-raised: #2A2520;
31
+ --paper-sunk: #11100E;
32
+ --paper-glass: rgba(42, 37, 32, 0.78);
33
+
34
+ /* Ink — warm cream pencil */
35
+ --ink: #F4EFE2;
36
+ --ink-soft: #D8D0BE;
37
+ --ink-faint: #A89E89;
38
+ --graphite: #E8E0CE;
39
+ --muted: #7A715F;
40
+
41
+ /* Construction lines — warm dark hairlines */
42
+ --guide: #4A4239;
43
+ --guide-soft: #382F27;
44
+ --hair: #3F362C;
45
+ --hair-soft: #2A241E;
46
+
47
+ /* Primary accent — lifted indigo for dark paper */
48
+ --ai: #6E8FBF;
49
+ --ai-ink: #8DA8D1;
50
+ --ai-wash: #1F2B3F;
51
+
52
+ /* Seal — vermilion (stays warm, brightened slightly) */
53
+ --shu: #E36148;
54
+ --shu-wash: #3A1A14;
55
+
56
+ /* Draft / marginalia — warm gold */
57
+ --ochre: #D4A04B;
58
+ --ochre-wash: #382B14;
59
+
60
+ /* Code surface — invert: warm cream slab */
61
+ --code-bg: #F7F3EA;
62
+ --code-ink: #2B2420;
63
+ --code-muted: #6B5E50;
64
+ --code-accent: #826226;
65
+ --code-green: #537035;
66
+ --code-blue: #1F3A5F;
67
+
68
+ /* Typography — match Sketchbook */
69
+ --font-display: 'DM Serif Display', 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
70
+ --font-script: 'Caveat', 'Shadows Into Light', cursive;
71
+ --font-serif: 'Noto Serif JP', 'Cormorant Garamond', Georgia, serif;
72
+ --font-sans: 'Noto Sans JP', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
73
+ --font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, Menlo, monospace;
74
+
75
+ /* Radius — match Sketchbook */
76
+ --r-sm: 2px;
77
+ --r-md: 3px;
78
+ --r-lg: 6px;
79
+
80
+ /* Shadows — heavier on dark, ink bleeding behind paper */
81
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, .35);
82
+ --shadow-md: 0 4px 18px rgba(0, 0, 0, .45);
83
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, .55);
84
+ --shadow-xl: 0 20px 50px rgba(0, 0, 0, .65);
85
+ --shadow-2xl: 0 28px 70px rgba(0, 0, 0, .75);
86
+
87
+ /* Blur — paper themes don't use it; declared so swap stays lossless */
88
+ --blur-sm: none;
89
+ --blur-md: none;
90
+ --blur-lg: none;
91
+
92
+ /* Glow — faint warm rim (charcoal paper, not phosphor) */
93
+ --glow-sm: 0 0 0 transparent;
94
+ --glow-md: 0 0 0 transparent;
95
+ --glow-lg: 0 0 0 transparent;
96
+
97
+ /* Motion — match Sketchbook (editorial pace) */
98
+ --duration-fast: 180ms;
99
+ --duration-normal: 240ms;
100
+ --duration-slow: 380ms;
101
+ --ease: cubic-bezier(0.33, 0.66, 0.33, 1);
102
+
103
+ /* ----------------------------------------------------------
104
+ SEMANTIC ALIASES
105
+ ---------------------------------------------------------- */
106
+
107
+ /* Backgrounds (page-level) */
108
+ --background-default: var(--paper);
109
+ --background-subtle: var(--paper-sunk);
110
+ --background-navbar: var(--paper-raised);
111
+
112
+ /* Surfaces */
113
+ --surface-default: var(--paper);
114
+ --surface-raised: var(--paper-raised);
115
+ --surface-sunk: var(--paper-sunk);
116
+ --surface-muted: var(--paper-sunk);
117
+ --surface-subtle: var(--paper-raised);
118
+ --surface-emphasis: var(--ink);
119
+ --surface-glass: var(--paper-glass);
120
+
121
+ /* Text */
122
+ --text-primary: var(--ink);
123
+ --text-secondary: var(--ink-soft);
124
+ --text-muted: var(--ink-faint);
125
+ --text-tertiary: var(--muted);
126
+ --text-inverse: var(--paper);
127
+ --text-link: var(--ai);
128
+ --text-link-hover: var(--ai-ink);
129
+
130
+ /* Borders */
131
+ --border-default: var(--hair);
132
+ --border-subtle: var(--hair-soft);
133
+ --border-emphasis: var(--guide);
134
+ --border-focus: var(--ai);
135
+
136
+ /* Interactive (hover / active wash layers) — warm cream on charcoal */
137
+ --interactive-hover: rgba(244, 239, 226, 0.06);
138
+ --interactive-active: rgba(244, 239, 226, 0.12);
139
+
140
+ /* Brand */
141
+ --brand-primary: var(--ai);
142
+ --brand-primary-hover: var(--ai-ink);
143
+
144
+ /* Action triplets */
145
+ --action-primary-default: var(--ai);
146
+ --action-primary-hover: var(--ai-ink);
147
+ --action-primary-active: var(--ai-ink);
148
+ --action-primary-wash: var(--ai-wash);
149
+ --action-secondary-default: var(--shu);
150
+ --action-secondary-hover: var(--shu);
151
+ --action-secondary-active: var(--shu);
152
+ --action-secondary-wash: var(--shu-wash);
153
+ --action-tertiary-default: var(--ochre);
154
+ --action-tertiary-hover: var(--ochre);
155
+ --action-tertiary-active: var(--ochre);
156
+ --action-tertiary-wash: var(--ochre-wash);
157
+
158
+ /* Feedback */
159
+ --feedback-info: var(--ai);
160
+ --feedback-success: var(--code-green);
161
+ --feedback-warning: var(--ochre);
162
+ --feedback-error: var(--shu);
163
+
164
+ /* Status — info */
165
+ --info-default: var(--ai);
166
+ --info-subtle: var(--ai-wash);
167
+ --info-text: var(--ai-ink);
168
+
169
+ /* Status — success (lifted moss-green for dark paper) */
170
+ --success-default: #8DA86A;
171
+ --success-subtle: #1F2B14;
172
+ --success-text: #B8CC8E;
173
+
174
+ /* Status — warning */
175
+ --warning-default: var(--ochre);
176
+ --warning-subtle: var(--ochre-wash);
177
+ --warning-text: #E8BF6E;
178
+
179
+ /* Status — error */
180
+ --error-default: var(--shu);
181
+ --error-subtle: var(--shu-wash);
182
+ --error-text: #F08A72;
183
+
184
+ /* ----------------------------------------------------------
185
+ LIBRARY SCALES
186
+ ---------------------------------------------------------- */
187
+
188
+ /* Space scale */
189
+
190
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
191
+ The numbered scale is the source of truth: every component reads
192
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
193
+ are emitted by the library as references to these, so they follow
194
+ automatically. Change a value here and the whole page re-proportions.
195
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
196
+ --space-0: 0; /* flush */
197
+ --space-1: 0.5rem; /* tight inner gap */
198
+ --space-2: 0.75rem; /* control padding */
199
+ --space-3: 0.875rem; /* (no t-shirt) */
200
+ --space-4: 1rem; /* default rhythm */
201
+ --space-5: 1.5rem; /* section gap */
202
+ --space-6: 2rem; /* block gap */
203
+ --space-7: 3rem; /* major gap */
204
+ --space-8: 4rem; /* page section */
205
+ --space-9: 6rem; /* hero rhythm */
206
+
207
+
208
+
209
+
210
+
211
+ /* Radius alias */
212
+ --radius-sm: var(--r-sm);
213
+ --radius-md: var(--r-md);
214
+ --radius-lg: var(--r-lg);
215
+ --radius-xl: 0.75rem;
216
+ --radius-full: 9999px;
217
+
218
+ /* Typography */
219
+ --font-primary: var(--font-sans);
220
+ --font-size-base: 1rem;
221
+ --line-height-normal: 1.5;
222
+ --font-weight-medium: 500;
223
+
224
+ /* Z-index layers */
225
+ --z-sticky: 1020;
226
+ --z-dropdown: 1030;
227
+ --z-backdrop: 1040;
228
+ --z-modal: 1050;
229
+ --z-popover: 1060;
230
+ --z-tooltip: 1070;
231
+ }
@@ -0,0 +1,231 @@
1
+ // ============================================================================
2
+ // THEME — sketchbook-light
3
+ // ============================================================================
4
+ // Daylight half of Sketchbook, and the docs site's DEFAULT theme
5
+ // (src/app/layout.tsx boots with data-theme="sketchbook-light").
6
+ //
7
+ // Promoted from a bundle-only block to a real source 2026-08-29. It had no
8
+ // scss/ file and no public/themes/ directory, so nothing rebuilt it and the
9
+ // contract gate could not see it.
10
+ //
11
+ // Selector: :root, :root[data-theme="sketchbook-light"]
12
+ // ============================================================================
13
+ @use '../mixins' as m;
14
+
15
+ @include m.theme('sketchbook-light', light) {
16
+ /* Surfaces — warm paper */
17
+ --paper: #F7F3EA;
18
+ --paper-raised: #FDFAF2;
19
+ --paper-sunk: #ECE5D3;
20
+ --paper-glass: rgba(253, 250, 242, 0.75);
21
+
22
+ /* Ink — warm pencil + sumi */
23
+ --ink: #2A241E;
24
+ --ink-soft: #4A4037;
25
+ --ink-faint: #726858;
26
+ --graphite: #3A332B;
27
+ --muted: #948977;
28
+
29
+ /* Construction lines */
30
+ --guide: #C9BDA5;
31
+ --guide-soft: #DDD4C0;
32
+ --hair: #D4CCBB;
33
+ --hair-soft: #E8E2D4;
34
+
35
+ /* Primary accent — indigo */
36
+ --ai: #1F3A5F;
37
+ --ai-ink: #14263F;
38
+ --ai-wash: #E5EBF1;
39
+
40
+ /* Seal — vermilion (reserve for emphasis) */
41
+ --shu: #C1272D;
42
+ --shu-wash: #F6E3E1;
43
+
44
+ /* Draft / marginalia — warm gold */
45
+ --ochre: #A37B30;
46
+ --ochre-wash: #F0E5CC;
47
+
48
+ /* Code surface */
49
+ --code-bg: #2B2420;
50
+ --code-ink: #F7F3EA;
51
+ --code-muted: #A39787;
52
+ --code-accent: #E5B660;
53
+ --code-green: #A8B86C;
54
+ --code-blue: #94AFC9;
55
+
56
+ /* Typography */
57
+ --font-display: 'DM Serif Display', 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
58
+ --font-script: 'Caveat', 'Shadows Into Light', cursive;
59
+ --font-serif: 'Noto Serif JP', 'Cormorant Garamond', Georgia, serif;
60
+ --font-sans: 'Noto Sans JP', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
61
+ --font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, Menlo, monospace;
62
+
63
+ /* Radius */
64
+ --r-sm: 2px;
65
+ --r-md: 3px;
66
+ --r-lg: 6px;
67
+
68
+ /* Shadows — ink bleeding through paper */
69
+ --shadow-sm: 0 1px 2px rgba(42, 36, 30, .06);
70
+ --shadow-md: 0 4px 18px rgba(42, 36, 30, .08);
71
+ --shadow-lg: 0 12px 40px rgba(42, 36, 30, .12);
72
+ --shadow-xl: 0 20px 50px rgba(42, 36, 30, .16);
73
+ --shadow-2xl: 0 28px 70px rgba(42, 36, 30, .22);
74
+
75
+ /* Blur — paper themes don't use it; declared so swap stays lossless */
76
+ --blur-sm: none;
77
+ --blur-md: none;
78
+ --blur-lg: none;
79
+
80
+ /* Glow — faint ink bleed, not phosphor */
81
+ --glow-sm: 0 0 0 transparent;
82
+ --glow-md: 0 0 0 transparent;
83
+ --glow-lg: 0 0 0 transparent;
84
+
85
+ /* Motion */
86
+ --duration-fast: 180ms;
87
+ --duration-normal: 240ms;
88
+ --duration-slow: 380ms;
89
+ --ease: cubic-bezier(0.33, 0.66, 0.33, 1);
90
+
91
+ /* ----------------------------------------------------------
92
+ SEMANTIC ALIASES
93
+ -----------------------------------------------------------
94
+ Bridge the library's expected names to this theme's native
95
+ palette. Components can now write m.color(surface-default)
96
+ or var(--surface-default) and reskin with the theme
97
+ automatically.
98
+ ---------------------------------------------------------- */
99
+
100
+ /* Backgrounds (page-level) */
101
+ --background-default: var(--paper);
102
+ --background-subtle: var(--paper-sunk);
103
+ --background-navbar: var(--paper-raised);
104
+
105
+ /* Surfaces */
106
+ --surface-default: var(--paper);
107
+ --surface-raised: var(--paper-raised);
108
+ --surface-sunk: var(--paper-sunk);
109
+ --surface-muted: var(--paper-sunk);
110
+ --surface-subtle: var(--paper-raised);
111
+ --surface-emphasis: var(--ink);
112
+ --surface-glass: var(--paper-glass);
113
+
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
+
123
+ /* Borders */
124
+ --border-default: var(--hair);
125
+ --border-subtle: var(--hair-soft);
126
+ --border-emphasis: var(--ink);
127
+ --border-focus: var(--ai);
128
+
129
+ /* Interactive (hover / active wash layers) */
130
+ --interactive-hover: rgba(42, 36, 30, 0.06);
131
+ --interactive-active: rgba(42, 36, 30, 0.12);
132
+
133
+ /* Brand (identity — action-primary usually references these) */
134
+ --brand-primary: var(--ai);
135
+ --brand-primary-hover: var(--ai-ink);
136
+
137
+ /* Action (primary / secondary / tertiary) */
138
+ --action-primary-default: var(--ai);
139
+ --action-primary-hover: var(--ai-ink);
140
+ --action-primary-active: var(--ai-ink);
141
+ --action-primary-wash: var(--ai-wash);
142
+ --action-secondary-default: var(--shu);
143
+ --action-secondary-hover: var(--shu);
144
+ --action-secondary-active: var(--shu);
145
+ --action-secondary-wash: var(--shu-wash);
146
+ --action-tertiary-default: var(--ochre);
147
+ --action-tertiary-hover: var(--ochre);
148
+ --action-tertiary-active: var(--ochre);
149
+ --action-tertiary-wash: var(--ochre-wash);
150
+
151
+ /* Feedback / status (high-level semantic) */
152
+ --feedback-info: var(--ai);
153
+ --feedback-success: var(--code-green);
154
+ --feedback-warning: var(--ochre);
155
+ --feedback-error: var(--shu);
156
+
157
+ /* Status — info (three-part: default / subtle / text) */
158
+ --info-default: var(--ai);
159
+ --info-subtle: var(--ai-wash);
160
+ --info-text: var(--ai-ink);
161
+
162
+ /* Status — success */
163
+ --success-default: #5A7A3A;
164
+ --success-subtle: #EAEFDC;
165
+ --success-text: #3F5627;
166
+
167
+ /* Status — warning */
168
+ --warning-default: var(--ochre);
169
+ --warning-subtle: var(--ochre-wash);
170
+ --warning-text: #6B4E1E;
171
+
172
+ /* Status — error */
173
+ --error-default: var(--shu);
174
+ --error-subtle: var(--shu-wash);
175
+ --error-text: #7A1A1F;
176
+
177
+ /* ----------------------------------------------------------
178
+ LIBRARY SCALES (space / radius / type / motion / z)
179
+ -----------------------------------------------------------
180
+ The library mixins emit var(--space-<key>), var(--radius-<key>),
181
+ var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
182
+ Themes declare the slots so those mixins always resolve.
183
+ Override any of these to change the whole system's rhythm.
184
+ ---------------------------------------------------------- */
185
+
186
+ /* Space scale (rem for accessibility) */
187
+ --space-2xs: 0.25rem;
188
+ --space-xs: 0.5rem;
189
+ --space-sm: 0.75rem;
190
+ --space-md: 1rem;
191
+ --space-lg: 1.5rem;
192
+ --space-xl: 2rem;
193
+
194
+ /* Radius alias — mirrors --r-* with standard names so
195
+ `m.radius(size)` in the library finds --radius-<size>. */
196
+ --radius-sm: var(--r-sm);
197
+ --radius-md: var(--r-md);
198
+ --radius-lg: var(--r-lg);
199
+ --radius-xl: 0.75rem;
200
+ --radius-full: 9999px;
201
+
202
+ /* Typography — base body font + key scale slots */
203
+ --font-primary: var(--font-sans);
204
+ --font-size-base: 1rem;
205
+ --line-height-normal: 1.5;
206
+ --font-weight-medium: 500;
207
+
208
+ /* Z-index layers */
209
+ --z-sticky: 1020;
210
+ --z-dropdown: 1030;
211
+ --z-backdrop: 1040;
212
+ --z-modal: 1050;
213
+ --z-popover: 1060;
214
+ --z-tooltip: 1070;
215
+
216
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
217
+ The numbered scale is the source of truth: every component reads
218
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
219
+ are emitted by the library as references to these, so they follow
220
+ automatically. Change a value here and the whole page re-proportions. */
221
+ --space-0: 0;
222
+ --space-1: 0.5rem;
223
+ --space-2: 0.75rem;
224
+ --space-3: 0.875rem;
225
+ --space-4: 1rem;
226
+ --space-5: 1.5rem;
227
+ --space-6: 2rem;
228
+ --space-7: 3rem;
229
+ --space-8: 4rem;
230
+ --space-9: 6rem;
231
+ }