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,178 @@
1
+ // ============================================================================
2
+ // THEME — Sketchbook
3
+ // ============================================================================
4
+ // css-is-awesome's brand identity. Warm paper, sumi ink, indigo accent,
5
+ // vermilion seal. Hand-sketched personality with serif display + Caveat script.
6
+ //
7
+ // Light: warm off-paper newsprint. Dark: charcoal-paper studio at night.
8
+ // Fonts, radii, motion are identical across modes — only colors and shadow
9
+ // alphas differ. Pattern B.
10
+ //
11
+ // Selector: :root, :root[data-theme="sketchbook"]
12
+ // Replaces: [data-theme="sketchbook-light"] + [data-theme="sketchbook-dark"]
13
+ // ============================================================================
14
+ @use '../mixins' as m;
15
+
16
+ @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';
17
+
18
+ @include m.theme('sketchbook') {
19
+ /* Surfaces — warm paper / warm charcoal paper */
20
+ --paper: light-dark(#F7F3EA, #1A1815);
21
+ --paper-raised: light-dark(#FDFAF2, #2A2520);
22
+ --paper-sunk: light-dark(#ECE5D3, #11100E);
23
+ --paper-glass: light-dark(rgba(253, 250, 242, 0.75), rgba(42, 37, 32, 0.78));
24
+
25
+ /* Ink — warm pencil + sumi / warm cream */
26
+ --ink: light-dark(#2A241E, #F4EFE2);
27
+ --ink-soft: light-dark(#4A4037, #D8D0BE);
28
+ --ink-faint: light-dark(#726858, #A89E89);
29
+ --graphite: light-dark(#3A332B, #E8E0CE);
30
+ --muted: light-dark(#948977, #7A715F);
31
+
32
+ /* Construction lines */
33
+ --guide: light-dark(#C9BDA5, #4A4239);
34
+ --guide-soft: light-dark(#DDD4C0, #382F27);
35
+ --hair: light-dark(#D4CCBB, #3F362C);
36
+ --hair-soft: light-dark(#E8E2D4, #2A241E);
37
+
38
+ /* Primary accent — indigo (lifted for dark paper) */
39
+ --ai: light-dark(#1F3A5F, #6E8FBF);
40
+ --ai-ink: light-dark(#14263F, #8DA8D1);
41
+ --ai-wash: light-dark(#E5EBF1, #1F2B3F);
42
+
43
+ /* Seal — vermilion (warm, brightens slightly on dark) */
44
+ --shu: light-dark(#C1272D, #E36148);
45
+ --shu-wash: light-dark(#F6E3E1, #3A1A14);
46
+
47
+ /* Draft / marginalia — warm gold */
48
+ --ochre: light-dark(#A37B30, #D4A04B);
49
+ --ochre-wash: light-dark(#F0E5CC, #382B14);
50
+
51
+ /* Code surface — inverts intentionally */
52
+ --code-bg: light-dark(#2B2420, #F7F3EA);
53
+ --code-ink: light-dark(#F7F3EA, #2B2420);
54
+ --code-muted: light-dark(#A39787, #6B5E50);
55
+ --code-accent: light-dark(#E5B660, #836327);
56
+ --code-green: light-dark(#A8B86C, #537136);
57
+ --code-blue: light-dark(#94AFC9, #1F3A5F);
58
+
59
+ /* Typography — identical across modes */
60
+ --font-display: 'DM Serif Display', 'Playfair Display', 'Cormorant Garamond', Georgia, serif;
61
+ --font-script: 'Caveat', 'Shadows Into Light', cursive;
62
+ --font-serif: 'Noto Serif JP', 'Cormorant Garamond', Georgia, serif;
63
+ --font-sans: 'Noto Sans JP', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
64
+ --font-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, Menlo, monospace;
65
+
66
+ /* Radius — identical */
67
+ --r-sm: 2px;
68
+ --r-md: 3px;
69
+ --r-lg: 6px;
70
+
71
+ /* Shadows — ink bleeding through paper / deep drop on charcoal */
72
+ --shadow-sm: 0 1px 2px light-dark(rgba(42, 36, 30, 0.06), rgba(0, 0, 0, 0.35));
73
+ --shadow-md: 0 4px 18px light-dark(rgba(42, 36, 30, 0.08), rgba(0, 0, 0, 0.45));
74
+ --shadow-lg: 0 12px 40px light-dark(rgba(42, 36, 30, 0.12), rgba(0, 0, 0, 0.55));
75
+ --shadow-xl: 0 20px 50px light-dark(rgba(42, 36, 30, 0.16), rgba(0, 0, 0, 0.65));
76
+ --shadow-2xl: 0 28px 70px light-dark(rgba(42, 36, 30, 0.22), rgba(0, 0, 0, 0.75));
77
+
78
+ /* Blur / glow — paper themes don't use either */
79
+ --blur-sm: none; --blur-md: none; --blur-lg: none;
80
+ --glow-sm: 0 0 0 transparent; --glow-md: 0 0 0 transparent; --glow-lg: 0 0 0 transparent;
81
+
82
+ /* Motion — editorial pace, identical */
83
+ --duration-fast: 180ms;
84
+ --duration-normal: 240ms;
85
+ --duration-slow: 380ms;
86
+ --ease: cubic-bezier(0.33, 0.66, 0.33, 1);
87
+
88
+ /* Semantic aliases */
89
+ --background-default: var(--paper);
90
+ --background-subtle: var(--paper-sunk);
91
+ --background-navbar: var(--paper-raised);
92
+ --surface-default: var(--paper);
93
+ --surface-raised: var(--paper-raised);
94
+ --surface-sunk: var(--paper-sunk);
95
+ --surface-muted: var(--paper-sunk);
96
+ --surface-subtle: var(--paper-raised);
97
+ --surface-emphasis: var(--ink);
98
+ --surface-glass: var(--paper-glass);
99
+
100
+ --text-primary: var(--ink);
101
+ --text-secondary: var(--ink-soft);
102
+ --text-muted: var(--ink-faint);
103
+ --text-tertiary: var(--muted);
104
+ --text-inverse: var(--paper);
105
+ --text-link: var(--ai);
106
+ --text-link-hover: var(--ai-ink);
107
+
108
+ --border-default: var(--hair);
109
+ --border-subtle: var(--hair-soft);
110
+ --border-emphasis: light-dark(var(--ink), var(--guide));
111
+ --border-focus: var(--ai);
112
+
113
+ --interactive-hover: light-dark(rgba(42, 36, 30, 0.06), rgba(244, 239, 226, 0.06));
114
+ --interactive-active: light-dark(rgba(42, 36, 30, 0.12), rgba(244, 239, 226, 0.12));
115
+
116
+ --brand-primary: var(--ai);
117
+ --brand-primary-hover: var(--ai-ink);
118
+
119
+ --action-primary-default: var(--ai);
120
+ --action-primary-hover: var(--ai-ink);
121
+ --action-primary-active: var(--ai-ink);
122
+ --action-primary-wash: var(--ai-wash);
123
+ --action-secondary-default: var(--shu);
124
+ --action-secondary-hover: var(--shu);
125
+ --action-secondary-active: var(--shu);
126
+ --action-secondary-wash: var(--shu-wash);
127
+ --action-tertiary-default: var(--ochre);
128
+ --action-tertiary-hover: var(--ochre);
129
+ --action-tertiary-active: var(--ochre);
130
+ --action-tertiary-wash: var(--ochre-wash);
131
+
132
+ --feedback-info: var(--ai);
133
+ --feedback-success: var(--code-green);
134
+ --feedback-warning: var(--ochre);
135
+ --feedback-error: var(--shu);
136
+
137
+ --info-default: var(--ai);
138
+ --info-subtle: var(--ai-wash);
139
+ --info-text: var(--ai-ink);
140
+
141
+ --success-default: light-dark(#5A7A3A, #8DA86A);
142
+ --success-subtle: light-dark(#EAEFDC, #1F2B14);
143
+ --success-text: light-dark(#3F5627, #B8CC8E);
144
+
145
+ --warning-default: var(--ochre);
146
+ --warning-subtle: var(--ochre-wash);
147
+ --warning-text: light-dark(#6B4E1E, #E8BF6E);
148
+
149
+ --error-default: var(--shu);
150
+ --error-subtle: var(--shu-wash);
151
+ --error-text: light-dark(#7A1A1F, #F08A72);
152
+
153
+ /* Library scales — identical */
154
+
155
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
156
+ The numbered scale is the source of truth: every component reads
157
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
158
+ are emitted by the library as references to these, so they follow
159
+ automatically. Change a value here and the whole page re-proportions.
160
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
161
+ --space-0: 0; /* flush */
162
+ --space-1: 0.5rem; /* tight inner gap */
163
+ --space-2: 0.75rem; /* control padding */
164
+ --space-3: 0.875rem; /* (no t-shirt) */
165
+ --space-4: 1rem; /* default rhythm */
166
+ --space-5: 1.5rem; /* section gap */
167
+ --space-6: 2rem; /* block gap */
168
+ --space-7: 3rem; /* major gap */
169
+ --space-8: 4rem; /* page section */
170
+ --space-9: 6rem; /* hero rhythm */
171
+
172
+ --radius-sm: var(--r-sm); --radius-md: var(--r-md); --radius-lg: var(--r-lg);
173
+ --radius-xl: 0.75rem; --radius-full: 9999px;
174
+ --font-primary: var(--font-sans);
175
+ --font-size-base: 1rem; --line-height-normal: 1.5; --font-weight-medium: 500;
176
+ --z-sticky: 1020; --z-dropdown: 1030; --z-backdrop: 1040;
177
+ --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070;
178
+ }
@@ -0,0 +1,267 @@
1
+ /* ============================================================
2
+ THEME — Terminal (VT100 CRT Phosphor)
3
+ -----------------------------------------------------------
4
+ This is the ONE FILE users swap to reskin their site.
5
+ Replace this file with any other theme.css to change the
6
+ entire look & feel. Tokens only — no component CSS lives here.
7
+
8
+ TOKEN CONTRACT
9
+ -----------------------------------------------------------
10
+ Every theme MUST declare every variable in this file, even
11
+ if it sets it to a neutral value (e.g. --blur-md: none;).
12
+ That's what guarantees a clean one-file swap.
13
+
14
+ Slots:
15
+ Surfaces : --paper, --paper-raised, --paper-sunk, --paper-glass
16
+ Ink : --ink, --ink-soft, --ink-faint, --graphite, --muted
17
+ Lines : --guide, --guide-soft, --hair, --hair-soft
18
+ Primary : --ai, --ai-ink, --ai-wash (cyan — terminal links)
19
+ Seal : --shu, --shu-wash (error red)
20
+ Accent : --ochre, --ochre-wash (warning amber)
21
+ Code : --code-bg/ink/muted/accent/green/blue
22
+ Type : --font-display/script/serif/sans/mono
23
+ Radius : --r-sm, --r-md, --r-lg
24
+ Shadow : --shadow-sm, --shadow-md, --shadow-lg
25
+ Blur : --blur-sm, --blur-md, --blur-lg (glass only; else 'none')
26
+ Glow : --glow-sm, --glow-md, --glow-lg (emphasis / rim / phosphor)
27
+ Motion : --duration-fast, --duration-normal, --duration-slow, --ease
28
+
29
+ FONT NOTE
30
+ -----------------------------------------------------------
31
+ A terminal has no serif and no handwritten script. To keep
32
+ the contract intact without breaking the mood, every font
33
+ slot — display, script, serif, sans, mono — points at
34
+ --font-mono. The contract survives; the CRT stays pure.
35
+ ============================================================ */
36
+
37
+ @use '../mixins' as m;
38
+
39
+ @import 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=IBM+Plex+Mono:wght@400;500;700&display=swap';
40
+
41
+ @include m.theme('terminal-dark', dark) {
42
+ /* Surfaces — deep warm black chassis + phosphor haze */
43
+ --paper: #0A0E0A;
44
+ --paper-raised: #0F140F;
45
+ --paper-sunk: #070A07;
46
+ --paper-glass: rgba(79, 224, 120, 0.06);
47
+
48
+ /* Ink — phosphor green on the tube */
49
+ --ink: #4FE078;
50
+ --ink-soft: #2A8B42;
51
+ --ink-faint: #3DAF4F;
52
+ --graphite: #1A3D22;
53
+ --muted: #2A8B42;
54
+
55
+ /* Scanlines / rule lines */
56
+ --guide: #1E5E2F;
57
+ --guide-soft: #143618;
58
+ --hair: #2A8B42;
59
+ --hair-soft: #1E5E2F;
60
+
61
+ /* Primary accent — cyan (interactive links in a terminal) */
62
+ --ai: #7FDBFF;
63
+ --ai-ink: #5AB3D4;
64
+ --ai-wash: rgba(127, 219, 255, 0.10);
65
+
66
+ /* Seal — error red */
67
+ --shu: #FF5A5A;
68
+ --shu-wash: rgba(255, 90, 90, 0.10);
69
+
70
+ /* Accent — warning amber */
71
+ --ochre: #F0A030;
72
+ --ochre-wash: rgba(240, 160, 48, 0.10);
73
+
74
+ /* Code surface */
75
+ --code-bg: #070A07;
76
+ --code-ink: #4FE078;
77
+ --code-muted: #2A8B42;
78
+ --code-accent: #F0A030;
79
+ --code-green: #8FFCA8;
80
+ --code-blue: #7FDBFF;
81
+
82
+ /* Typography — mono everywhere (see FONT NOTE in header) */
83
+ --font-mono: 'JetBrains Mono', 'IBM Plex Mono', 'Fira Code', ui-monospace, Consolas, Menlo, 'Courier New', monospace;
84
+ --font-sans: var(--font-mono);
85
+ --font-serif: var(--font-mono);
86
+ --font-display: var(--font-mono);
87
+ --font-script: var(--font-mono);
88
+
89
+ /* Radius — a CRT has hard pixel corners */
90
+ --r-sm: 0;
91
+ --r-md: 0;
92
+ --r-lg: 0;
93
+
94
+ /* Shadows — a CRT doesn't cast, it emits. Keep subtle. */
95
+ --shadow-sm: 0 0 0 1px rgba(79, 224, 120, 0.20);
96
+ --shadow-md: 0 0 0 1px rgba(79, 224, 120, 0.30), 0 0 12px rgba(79, 224, 120, 0.15);
97
+ --shadow-lg: 0 0 0 1px rgba(79, 224, 120, 0.40), 0 0 24px rgba(79, 224, 120, 0.25);
98
+ --shadow-xl: 0 0 0 1px rgba(79, 224, 120, 0.50), 0 0 36px rgba(79, 224, 120, 0.30);
99
+ --shadow-2xl: 0 0 0 1px rgba(79, 224, 120, 0.60), 0 0 56px rgba(79, 224, 120, 0.40);
100
+
101
+ /* Blur — terminal has no frosted glass; declared so swap stays lossless */
102
+ --blur-sm: none;
103
+ --blur-md: none;
104
+ --blur-lg: none;
105
+
106
+ /* Glow — phosphor halo (this is where the theme sings) */
107
+ --glow-sm: 0 0 4px rgba(79, 224, 120, 0.25);
108
+ --glow-md: 0 0 8px rgba(79, 224, 120, 0.35);
109
+ --glow-lg: 0 0 16px rgba(79, 224, 120, 0.45);
110
+
111
+ /* Motion — terminals are instant */
112
+ --duration-fast: 100ms;
113
+ --duration-normal: 140ms;
114
+ --duration-slow: 220ms;
115
+ --ease: cubic-bezier(0.2, 0.0, 0.2, 1);
116
+
117
+ /* ----------------------------------------------------------
118
+ SEMANTIC ALIASES
119
+ -----------------------------------------------------------
120
+ Bridge the library's expected names to this theme's native
121
+ palette. Components can now write m.color(surface-default)
122
+ or var(--surface-default) and reskin with the theme
123
+ automatically.
124
+ ---------------------------------------------------------- */
125
+
126
+ /* Backgrounds (page-level) */
127
+ --background-default: var(--paper);
128
+ --background-subtle: var(--paper-sunk);
129
+ --background-navbar: var(--paper-raised);
130
+
131
+ /* Surfaces */
132
+ --surface-default: var(--paper);
133
+ --surface-raised: var(--paper-raised);
134
+ --surface-sunk: var(--paper-sunk);
135
+ --surface-muted: var(--paper-sunk);
136
+ --surface-subtle: var(--paper-raised);
137
+ --surface-emphasis: var(--ink);
138
+ --surface-glass: var(--paper-glass);
139
+
140
+ /* Text */
141
+ --text-primary: var(--ink);
142
+ --text-secondary: var(--ink-soft);
143
+ --text-muted: var(--ink-faint);
144
+ --text-tertiary: var(--muted);
145
+ --text-inverse: var(--paper);
146
+ --text-link: var(--ai);
147
+ --text-link-hover: var(--ai-ink);
148
+
149
+ /* Borders */
150
+ --border-default: var(--hair);
151
+ --border-subtle: var(--hair-soft);
152
+ --border-emphasis: var(--ink);
153
+ --border-focus: var(--ai);
154
+
155
+ /* Interactive (hover / active wash layers) — phosphor-green translucent overlays */
156
+ --interactive-hover: rgba(79, 224, 120, 0.08);
157
+ --interactive-active: rgba(79, 224, 120, 0.15);
158
+
159
+ /* Brand (identity — action-primary usually references these) */
160
+ --brand-primary: var(--ai);
161
+ --brand-primary-hover: var(--ai-ink);
162
+
163
+ /* Action (primary / secondary / tertiary) */
164
+ --action-primary-default: var(--ai);
165
+ --action-primary-hover: var(--ai-ink);
166
+ --action-primary-active: var(--ai-ink);
167
+ --action-primary-wash: var(--ai-wash);
168
+ --action-secondary-default: var(--shu);
169
+ --action-secondary-hover: var(--shu);
170
+ --action-secondary-active: var(--shu);
171
+ --action-secondary-wash: var(--shu-wash);
172
+ --action-tertiary-default: var(--ochre);
173
+ --action-tertiary-hover: var(--ochre);
174
+ --action-tertiary-active: var(--ochre);
175
+ --action-tertiary-wash: var(--ochre-wash);
176
+
177
+ /* Feedback / status (high-level semantic) */
178
+ --feedback-info: var(--ai);
179
+ --feedback-success: var(--code-green);
180
+ --feedback-warning: var(--ochre);
181
+ --feedback-error: var(--shu);
182
+
183
+ /* Status — info (three-part: default / subtle / text) — cyan */
184
+ --info-default: var(--ai);
185
+ --info-subtle: rgba(127, 219, 255, 0.12);
186
+ --info-text: #7FDBFF;
187
+
188
+ /* Status — success — bright phosphor */
189
+ --success-default: #8FFCA8;
190
+ --success-subtle: rgba(143, 252, 168, 0.12);
191
+ --success-text: #8FFCA8;
192
+
193
+ /* Status — warning — amber */
194
+ --warning-default: var(--ochre);
195
+ --warning-subtle: rgba(240, 160, 48, 0.12);
196
+ --warning-text: var(--ochre);
197
+
198
+ /* Status — error — red */
199
+ --error-default: var(--shu);
200
+ --error-subtle: rgba(255, 90, 90, 0.12);
201
+ --error-text: #FF7A7A;
202
+
203
+ /* ----------------------------------------------------------
204
+ LIBRARY SCALES (space / radius / type / motion / z)
205
+ -----------------------------------------------------------
206
+ The library mixins emit var(--space-<key>), var(--radius-<key>),
207
+ var(--font-primary), var(--font-size-<key>), var(--z-<key>), …
208
+ Themes declare the slots so those mixins always resolve.
209
+ ---------------------------------------------------------- */
210
+
211
+ /* Space scale (rem for accessibility — natural scale, same as Sketchbook) */
212
+
213
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
214
+ The numbered scale is the source of truth: every component reads
215
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
216
+ are emitted by the library as references to these, so they follow
217
+ automatically. Change a value here and the whole page re-proportions.
218
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
219
+ --space-0: 0; /* flush */
220
+ --space-1: 0.5rem; /* tight inner gap */
221
+ --space-2: 0.75rem; /* control padding */
222
+ --space-3: 0.875rem; /* (no t-shirt) */
223
+ --space-4: 1rem; /* default rhythm */
224
+ --space-5: 1.5rem; /* section gap */
225
+ --space-6: 2rem; /* block gap */
226
+ --space-7: 3rem; /* major gap */
227
+ --space-8: 4rem; /* page section */
228
+ --space-9: 6rem; /* hero rhythm */
229
+
230
+
231
+
232
+
233
+
234
+ /* Radius alias — CRT has hard pixel corners, so every slot is 0 */
235
+ --radius-sm: 0;
236
+ --radius-md: 0;
237
+ --radius-lg: 0;
238
+ --radius-xl: 0;
239
+ --radius-full: 0;
240
+
241
+ /* Typography — mono body + key scale slots (15px matches CRT body setting) */
242
+ --font-primary: var(--font-mono);
243
+ --font-size-base: 15px;
244
+ --line-height-normal: 1.5;
245
+ --font-weight-medium: 500;
246
+
247
+ /* Z-index layers (layering is universal) */
248
+ --z-sticky: 1020;
249
+ --z-dropdown: 1030;
250
+ --z-backdrop: 1040;
251
+ --z-modal: 1050;
252
+ --z-popover: 1060;
253
+ --z-tooltip: 1070;
254
+
255
+ /* ----------------------------------------------------------
256
+ OPTIONAL COMPONENT OVERRIDES (Feature 1.3)
257
+ -----------------------------------------------------------
258
+ Terminal-specific component expressions: zero radii on
259
+ buttons/cards/inputs and a subtle phosphor glow on cards
260
+ instead of a drop shadow.
261
+ ---------------------------------------------------------- */
262
+ --btn-radius: 0;
263
+ --card-radius: 0;
264
+ --input-radius: 0;
265
+ --card-shadow: var(--glow-sm);
266
+ --card-border: 1px solid var(--ink-faint);
267
+ }
@@ -0,0 +1,175 @@
1
+ // ============================================================================
2
+ // THEME — Terminal Light (Daylight Editor)
3
+ // ============================================================================
4
+ // Daylight companion to Terminal Dark. Light gray paper, near-black mono ink,
5
+ // classic light-syntax accents (blue keywords, green strings, orange numbers).
6
+ // Mono everywhere, zero radii, no glow.
7
+ //
8
+ // Pattern A: explicit color-scheme: light. A separate identity from Terminal,
9
+ // not a "light variant" of it — different selector, different consumer choice.
10
+ //
11
+ // Selector: :root, :root[data-theme="terminal-light"]
12
+ // ============================================================================
13
+ @use '../mixins' as m;
14
+
15
+ @import 'https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700&family=IBM+Plex+Mono:wght@400;500;700&display=swap';
16
+
17
+ @include m.theme('terminal-light', light) {
18
+ /* Surfaces — clear light gray paper */
19
+ --paper: #E8E8E8;
20
+ --paper-raised: #F5F5F5;
21
+ --paper-sunk: #D8D8D8;
22
+ --paper-glass: rgba(232, 232, 232, 0.85);
23
+
24
+ /* Ink — near-black mono */
25
+ --ink: #1A1A1A;
26
+ --ink-soft: #404040;
27
+ --ink-faint: #666;
28
+ --graphite: #0A0A0A;
29
+ --muted: #7C7C7C;
30
+
31
+ /* Hairlines — medium gray */
32
+ --guide: #B8B8B8;
33
+ --guide-soft: #C8C8C8;
34
+ --hair: #C0C0C0;
35
+ --hair-soft: #D8D8D8;
36
+
37
+ /* Primary accent — VS Code keyword blue */
38
+ --ai: #0451A5;
39
+ --ai-ink: #023268;
40
+ --ai-wash: rgba(4, 81, 165, 0.10);
41
+
42
+ /* Seal — error red */
43
+ --shu: #B91C1C;
44
+ --shu-wash: rgba(185, 28, 28, 0.10);
45
+
46
+ /* Accent — warning amber */
47
+ --ochre: #B45309;
48
+ --ochre-wash: rgba(180, 83, 9, 0.10);
49
+
50
+ /* Code surface */
51
+ --code-bg: #DDD;
52
+ --code-ink: #1A1A1A;
53
+ --code-muted: #5B5B5B;
54
+ --code-accent: #934407;
55
+ --code-green: #006A28;
56
+ --code-blue: #0451A5;
57
+
58
+ /* Typography — mono everywhere */
59
+ --font-mono: 'JetBrains Mono', 'IBM Plex Mono', 'Fira Code', ui-monospace, Consolas, Menlo, 'Courier New', monospace;
60
+ --font-sans: var(--font-mono);
61
+ --font-serif: var(--font-mono);
62
+ --font-display: var(--font-mono);
63
+ --font-script: var(--font-mono);
64
+
65
+ /* Radius — terminals are square */
66
+ --r-sm: 0; --r-md: 0; --r-lg: 0;
67
+
68
+ /* Shadows — hairline rings */
69
+ --shadow-sm: 0 0 0 1px rgba(26, 26, 26, 0.08);
70
+ --shadow-md: 0 0 0 1px rgba(26, 26, 26, 0.10), 0 1px 2px rgba(26, 26, 26, 0.06);
71
+ --shadow-lg: 0 0 0 1px rgba(26, 26, 26, 0.12), 0 2px 4px rgba(26, 26, 26, 0.08);
72
+ --shadow-xl: 0 0 0 1px rgba(26, 26, 26, 0.14), 0 4px 8px rgba(26, 26, 26, 0.10);
73
+ --shadow-2xl: 0 0 0 1px rgba(26, 26, 26, 0.16), 0 8px 16px rgba(26, 26, 26, 0.12);
74
+
75
+ /* Blur / glow — daylight, no emission */
76
+ --blur-sm: none; --blur-md: none; --blur-lg: none;
77
+ --glow-sm: 0 0 0 transparent; --glow-md: 0 0 0 transparent; --glow-lg: 0 0 0 transparent;
78
+
79
+ /* Motion — instant */
80
+ --duration-fast: 100ms;
81
+ --duration-normal: 140ms;
82
+ --duration-slow: 220ms;
83
+ --ease: cubic-bezier(0.2, 0.0, 0.2, 1);
84
+
85
+ /* Semantic aliases */
86
+ --background-default: var(--paper);
87
+ --background-subtle: var(--paper-sunk);
88
+ --background-navbar: var(--paper-raised);
89
+ --surface-default: var(--paper);
90
+ --surface-raised: var(--paper-raised);
91
+ --surface-sunk: var(--paper-sunk);
92
+ --surface-muted: var(--paper-sunk);
93
+ --surface-subtle: var(--paper-raised);
94
+ --surface-emphasis: var(--ink);
95
+ --surface-glass: var(--paper-glass);
96
+
97
+ --text-primary: var(--ink);
98
+ --text-secondary: var(--ink-soft);
99
+ --text-muted: var(--ink-faint);
100
+ --text-tertiary: var(--muted);
101
+ --text-inverse: var(--paper);
102
+ --text-link: var(--ai);
103
+ --text-link-hover: var(--ai-ink);
104
+
105
+ --border-default: var(--hair);
106
+ --border-subtle: var(--hair-soft);
107
+ --border-emphasis: var(--ink);
108
+ --border-focus: var(--ai);
109
+
110
+ --interactive-hover: rgba(26, 26, 26, 0.05);
111
+ --interactive-active: rgba(26, 26, 26, 0.10);
112
+
113
+ --brand-primary: var(--ai);
114
+ --brand-primary-hover: var(--ai-ink);
115
+
116
+ --action-primary-default: var(--ai);
117
+ --action-primary-hover: var(--ai-ink);
118
+ --action-primary-active: var(--ai-ink);
119
+ --action-primary-wash: var(--ai-wash);
120
+ --action-secondary-default: var(--shu);
121
+ --action-secondary-hover: var(--shu);
122
+ --action-secondary-active: var(--shu);
123
+ --action-secondary-wash: var(--shu-wash);
124
+ --action-tertiary-default: var(--ochre);
125
+ --action-tertiary-hover: var(--ochre);
126
+ --action-tertiary-active: var(--ochre);
127
+ --action-tertiary-wash: var(--ochre-wash);
128
+
129
+ --feedback-info: var(--ai);
130
+ --feedback-success: #083;
131
+ --feedback-warning: var(--ochre);
132
+ --feedback-error: var(--shu);
133
+
134
+ --info-default: var(--ai);
135
+ --info-subtle: rgba(4, 81, 165, 0.10);
136
+ --info-text: var(--ai-ink);
137
+
138
+ --success-default: #083;
139
+ --success-subtle: rgba(0, 136, 51, 0.10);
140
+ --success-text: #062;
141
+
142
+ --warning-default: var(--ochre);
143
+ --warning-subtle: rgba(180, 83, 9, 0.10);
144
+ --warning-text: #92400E;
145
+
146
+ --error-default: var(--shu);
147
+ --error-subtle: rgba(185, 28, 28, 0.10);
148
+ --error-text: #7F1D1D;
149
+
150
+ /* Library scales */
151
+
152
+ /* Spacing rhythm — THE knob for how dense or airy this theme feels.
153
+ The numbered scale is the source of truth: every component reads
154
+ var(--space-N), and the t-shirt aliases (--space-md, --space-lg …)
155
+ are emitted by the library as references to these, so they follow
156
+ automatically. Change a value here and the whole page re-proportions.
157
+ Halve them for a compact UI; raise 4/5/6 for an airy editorial feel. */
158
+ --space-0: 0; /* flush */
159
+ --space-1: 0.5rem; /* tight inner gap */
160
+ --space-2: 0.75rem; /* control padding */
161
+ --space-3: 0.875rem; /* (no t-shirt) */
162
+ --space-4: 1rem; /* default rhythm */
163
+ --space-5: 1.5rem; /* section gap */
164
+ --space-6: 2rem; /* block gap */
165
+ --space-7: 3rem; /* major gap */
166
+ --space-8: 4rem; /* page section */
167
+ --space-9: 6rem; /* hero rhythm */
168
+
169
+ --radius-sm: 0; --radius-md: 0; --radius-lg: 0;
170
+ --radius-xl: 0; --radius-full: 0;
171
+ --font-primary: var(--font-mono);
172
+ --font-size-base: 15px; --line-height-normal: 1.5; --font-weight-medium: 500;
173
+ --z-sticky: 1020; --z-dropdown: 1030; --z-backdrop: 1040;
174
+ --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070;
175
+ }