@chitrank2050/monoline-ui 0.2.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 (237) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/chunk-2T2JZW4Z.js +2 -0
  4. package/chunk-2T2JZW4Z.js.map +1 -0
  5. package/chunk-37JB3ZNS.js +2 -0
  6. package/chunk-37JB3ZNS.js.map +1 -0
  7. package/chunk-3F6Z4CFV.js +2 -0
  8. package/chunk-3F6Z4CFV.js.map +1 -0
  9. package/chunk-5TIKYN5B.js +2 -0
  10. package/chunk-5TIKYN5B.js.map +1 -0
  11. package/chunk-6AEWSPAE.js +2 -0
  12. package/chunk-6AEWSPAE.js.map +1 -0
  13. package/chunk-7ANXAXP5.js +2 -0
  14. package/chunk-7ANXAXP5.js.map +1 -0
  15. package/chunk-7SDVYBBO.js +2 -0
  16. package/chunk-7SDVYBBO.js.map +1 -0
  17. package/chunk-7WJF6B6G.js +2 -0
  18. package/chunk-7WJF6B6G.js.map +1 -0
  19. package/chunk-A2LXX23X.js +2 -0
  20. package/chunk-A2LXX23X.js.map +1 -0
  21. package/chunk-AACTIVV7.js +2 -0
  22. package/chunk-AACTIVV7.js.map +1 -0
  23. package/chunk-B5P3RAN2.js +2 -0
  24. package/chunk-B5P3RAN2.js.map +1 -0
  25. package/chunk-COFALEVG.js +2 -0
  26. package/chunk-COFALEVG.js.map +1 -0
  27. package/chunk-D3E4G2RE.js +2 -0
  28. package/chunk-D3E4G2RE.js.map +1 -0
  29. package/chunk-DJT3EVR4.js +2 -0
  30. package/chunk-DJT3EVR4.js.map +1 -0
  31. package/chunk-EWKGYQOX.js +2 -0
  32. package/chunk-EWKGYQOX.js.map +1 -0
  33. package/chunk-FLUGXF5D.js +2 -0
  34. package/chunk-FLUGXF5D.js.map +1 -0
  35. package/chunk-GSWZL5C2.js +2 -0
  36. package/chunk-GSWZL5C2.js.map +1 -0
  37. package/chunk-H2CRII7X.js +2 -0
  38. package/chunk-H2CRII7X.js.map +1 -0
  39. package/chunk-IVTAW6SX.js +3 -0
  40. package/chunk-IVTAW6SX.js.map +1 -0
  41. package/chunk-JBOP2AJB.js +2 -0
  42. package/chunk-JBOP2AJB.js.map +1 -0
  43. package/chunk-JCKPCV2H.js +2 -0
  44. package/chunk-JCKPCV2H.js.map +1 -0
  45. package/chunk-K665XZ3N.js +2 -0
  46. package/chunk-K665XZ3N.js.map +1 -0
  47. package/chunk-K72EORST.js +2 -0
  48. package/chunk-K72EORST.js.map +1 -0
  49. package/chunk-KGLH6WI6.js +2 -0
  50. package/chunk-KGLH6WI6.js.map +1 -0
  51. package/chunk-LVMQ3ZM3.js +2 -0
  52. package/chunk-LVMQ3ZM3.js.map +1 -0
  53. package/chunk-N37GMCSK.js +2 -0
  54. package/chunk-N37GMCSK.js.map +1 -0
  55. package/chunk-NDHOUIOX.js +2 -0
  56. package/chunk-NDHOUIOX.js.map +1 -0
  57. package/chunk-NDTTLW56.js +2 -0
  58. package/chunk-NDTTLW56.js.map +1 -0
  59. package/chunk-O43OQHFN.js +2 -0
  60. package/chunk-O43OQHFN.js.map +1 -0
  61. package/chunk-QGG3J7OW.js +2 -0
  62. package/chunk-QGG3J7OW.js.map +1 -0
  63. package/chunk-QUG36ONS.js +2 -0
  64. package/chunk-QUG36ONS.js.map +1 -0
  65. package/chunk-R2YSVBHS.js +2 -0
  66. package/chunk-R2YSVBHS.js.map +1 -0
  67. package/chunk-TSOHITZ7.js +2 -0
  68. package/chunk-TSOHITZ7.js.map +1 -0
  69. package/chunk-V6PUPMAY.js +3 -0
  70. package/chunk-V6PUPMAY.js.map +1 -0
  71. package/chunk-VSATIFOR.js +2 -0
  72. package/chunk-VSATIFOR.js.map +1 -0
  73. package/chunk-XEB7C557.js +2 -0
  74. package/chunk-XEB7C557.js.map +1 -0
  75. package/chunk-Z7SIB4X6.js +2 -0
  76. package/chunk-Z7SIB4X6.js.map +1 -0
  77. package/chunk-ZOPV3BXO.js +2 -0
  78. package/chunk-ZOPV3BXO.js.map +1 -0
  79. package/chunk-ZU3HIOBU.js +2 -0
  80. package/chunk-ZU3HIOBU.js.map +1 -0
  81. package/components/action-rail/index.d.ts +18 -0
  82. package/components/action-rail/index.js +2 -0
  83. package/components/action-rail/index.js.map +1 -0
  84. package/components/avatar/avatar.css +47 -0
  85. package/components/avatar/index.d.ts +28 -0
  86. package/components/avatar/index.js +2 -0
  87. package/components/avatar/index.js.map +1 -0
  88. package/components/back-link/back-link.css +30 -0
  89. package/components/back-link/index.d.ts +18 -0
  90. package/components/back-link/index.js +2 -0
  91. package/components/back-link/index.js.map +1 -0
  92. package/components/badge/badge.css +27 -0
  93. package/components/badge/index.d.ts +26 -0
  94. package/components/badge/index.js +2 -0
  95. package/components/badge/index.js.map +1 -0
  96. package/components/button/button.css +238 -0
  97. package/components/button/index.d.ts +36 -0
  98. package/components/button/index.js +2 -0
  99. package/components/button/index.js.map +1 -0
  100. package/components/callout/callout.css +20 -0
  101. package/components/callout/index.d.ts +20 -0
  102. package/components/callout/index.js +2 -0
  103. package/components/callout/index.js.map +1 -0
  104. package/components/card/card.css +166 -0
  105. package/components/card/index.d.ts +112 -0
  106. package/components/card/index.js +2 -0
  107. package/components/card/index.js.map +1 -0
  108. package/components/code-block/code-block.css +23 -0
  109. package/components/code-block/index.d.ts +21 -0
  110. package/components/code-block/index.js +2 -0
  111. package/components/code-block/index.js.map +1 -0
  112. package/components/command-search/command-search.css +217 -0
  113. package/components/command-search/index.d.ts +73 -0
  114. package/components/command-search/index.js +2 -0
  115. package/components/command-search/index.js.map +1 -0
  116. package/components/container/container.css +41 -0
  117. package/components/container/index.d.ts +11 -0
  118. package/components/container/index.js +2 -0
  119. package/components/container/index.js.map +1 -0
  120. package/components/data-list/data-list.css +139 -0
  121. package/components/data-list/index.d.ts +45 -0
  122. package/components/data-list/index.js +2 -0
  123. package/components/data-list/index.js.map +1 -0
  124. package/components/editorial-line/index.d.ts +24 -0
  125. package/components/editorial-line/index.js +2 -0
  126. package/components/editorial-line/index.js.map +1 -0
  127. package/components/eyebrow/eyebrow.css +13 -0
  128. package/components/eyebrow/index.d.ts +17 -0
  129. package/components/eyebrow/index.js +2 -0
  130. package/components/eyebrow/index.js.map +1 -0
  131. package/components/footer/footer.css +201 -0
  132. package/components/footer/index.d.ts +66 -0
  133. package/components/footer/index.js +2 -0
  134. package/components/footer/index.js.map +1 -0
  135. package/components/input/index.d.ts +28 -0
  136. package/components/input/index.js +2 -0
  137. package/components/input/index.js.map +1 -0
  138. package/components/input/input.css +37 -0
  139. package/components/link-list/index.d.ts +47 -0
  140. package/components/link-list/index.js +2 -0
  141. package/components/link-list/index.js.map +1 -0
  142. package/components/link-list/link-list.css +208 -0
  143. package/components/media-frame/index.d.ts +31 -0
  144. package/components/media-frame/index.js +2 -0
  145. package/components/media-frame/index.js.map +1 -0
  146. package/components/media-frame/media-frame.css +86 -0
  147. package/components/meta-row/index.d.ts +22 -0
  148. package/components/meta-row/index.js +2 -0
  149. package/components/meta-row/index.js.map +1 -0
  150. package/components/metric/index.d.ts +22 -0
  151. package/components/metric/index.js +2 -0
  152. package/components/metric/index.js.map +1 -0
  153. package/components/navbar/index.d.ts +78 -0
  154. package/components/navbar/index.js +2 -0
  155. package/components/navbar/index.js.map +1 -0
  156. package/components/navbar/navbar.css +245 -0
  157. package/components/progress/index.d.ts +20 -0
  158. package/components/progress/index.js +2 -0
  159. package/components/progress/index.js.map +1 -0
  160. package/components/progress/progress.css +31 -0
  161. package/components/pull-quote/index.d.ts +18 -0
  162. package/components/pull-quote/index.js +2 -0
  163. package/components/pull-quote/index.js.map +1 -0
  164. package/components/rail/index.d.ts +28 -0
  165. package/components/rail/index.js +2 -0
  166. package/components/rail/index.js.map +1 -0
  167. package/components/rail/rail.css +118 -0
  168. package/components/resources-panel/index.d.ts +42 -0
  169. package/components/resources-panel/index.js +2 -0
  170. package/components/resources-panel/index.js.map +1 -0
  171. package/components/resources-panel/resources-panel.css +396 -0
  172. package/components/section-head/index.d.ts +24 -0
  173. package/components/section-head/index.js +2 -0
  174. package/components/section-head/index.js.map +1 -0
  175. package/components/segmented-control/index.d.ts +28 -0
  176. package/components/segmented-control/index.js +2 -0
  177. package/components/segmented-control/index.js.map +1 -0
  178. package/components/segmented-control/segmented-control.css +177 -0
  179. package/components/select/index.d.ts +65 -0
  180. package/components/select/index.js +2 -0
  181. package/components/select/index.js.map +1 -0
  182. package/components/select/select.css +298 -0
  183. package/components/skeleton/index.d.ts +19 -0
  184. package/components/skeleton/index.js +2 -0
  185. package/components/skeleton/index.js.map +1 -0
  186. package/components/skeleton/skeleton.css +13 -0
  187. package/components/status/index.d.ts +20 -0
  188. package/components/status/index.js +2 -0
  189. package/components/status/index.js.map +1 -0
  190. package/components/status/status.css +86 -0
  191. package/components/tag/index.d.ts +35 -0
  192. package/components/tag/index.js +2 -0
  193. package/components/tag/index.js.map +1 -0
  194. package/components/tag/tag.css +10 -0
  195. package/components/testimonial/index.d.ts +30 -0
  196. package/components/testimonial/index.js +2 -0
  197. package/components/testimonial/index.js.map +1 -0
  198. package/components/testimonial/testimonial.css +109 -0
  199. package/components/testimonial-grid/index.d.ts +12 -0
  200. package/components/testimonial-grid/index.js +2 -0
  201. package/components/testimonial-grid/index.js.map +1 -0
  202. package/components/testimonial-grid/testimonial-grid.css +58 -0
  203. package/components/theme-switcher/index.d.ts +24 -0
  204. package/components/theme-switcher/index.js +2 -0
  205. package/components/theme-switcher/index.js.map +1 -0
  206. package/components/theme-switcher/theme-switcher.css +130 -0
  207. package/components/toast/index.d.ts +20 -0
  208. package/components/toast/index.js +2 -0
  209. package/components/toast/index.js.map +1 -0
  210. package/components/toast/toast.css +22 -0
  211. package/components/toc/index.d.ts +27 -0
  212. package/components/toc/index.js +2 -0
  213. package/components/toc/index.js.map +1 -0
  214. package/components/toggle/index.d.ts +20 -0
  215. package/components/toggle/index.js +2 -0
  216. package/components/toggle/index.js.map +1 -0
  217. package/components/toggle/toggle.css +108 -0
  218. package/foundations/breakpoints.d.ts +12 -0
  219. package/foundations/breakpoints.js +2 -0
  220. package/foundations/breakpoints.js.map +1 -0
  221. package/foundations/use-breakpoint.d.ts +5 -0
  222. package/foundations/use-breakpoint.js +3 -0
  223. package/foundations/use-breakpoint.js.map +1 -0
  224. package/index.d.ts +42 -0
  225. package/index.js +2 -0
  226. package/index.js.map +1 -0
  227. package/lib/utils.d.ts +7 -0
  228. package/lib/utils.js +2 -0
  229. package/lib/utils.js.map +1 -0
  230. package/package.json +228 -0
  231. package/styles/theme/animations.css +206 -0
  232. package/styles/theme/base.css +75 -0
  233. package/styles/theme/tailwind.css +371 -0
  234. package/styles/theme/tokens.css +562 -0
  235. package/styles/theme/typography.css +108 -0
  236. package/styles/theme/utilities.css +281 -0
  237. package/styles/theme.css +68 -0
@@ -0,0 +1,562 @@
1
+ /* =============================================================================
2
+ * tokens.css · single source of truth for design tokens (variables)
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * This file owns:
5
+ * 1. Colour tokens - dark (default) + light, shadcn-compatible
6
+ * 2. System-driven theme preference fallback
7
+ * 3. Typography - font families, size scale, line-heights, tracking
8
+ * 4. Spacing scale (4px base)
9
+ * 5. Radius scale
10
+ * 6. Border widths
11
+ * 7. Semantic focus rings
12
+ * 8. Z-index layers
13
+ * 9. Breakpoints (mirrored in foundations/breakpoints.ts)
14
+ * 10. Container widths
15
+ * 11. Motion - durations & easings
16
+ * 12. Component spacing aliases (--ml-*)
17
+ * ========================================================================== */
18
+
19
+ @custom-variant dark (&:is(.dark, [data-theme="dark"], .dark *, [data-theme="dark"] *));
20
+
21
+ /* =============================================================================
22
+ * 1. COLOUR · DARK (default)
23
+ * ========================================================================== */
24
+ :root,
25
+ .dark,
26
+ [data-theme="dark"] {
27
+ /* ─── macOS window chrome ─── */
28
+ --mac-red: #ff5f57;
29
+ --mac-amber: #ffbd2e;
30
+ --mac-green: #28c840;
31
+
32
+ /* ─── shadcn-paired surfaces (keep your DropdownMenu et al. working) ─── */
33
+ --background: oklch(0.145 0 0);
34
+ --foreground: oklch(0.985 0 0);
35
+
36
+ --card: oklch(0.205 0 0);
37
+ --card-foreground: oklch(0.985 0 0);
38
+
39
+ --popover: oklch(0.205 0 0);
40
+ --popover-foreground: oklch(0.985 0 0);
41
+
42
+ --primary: oklch(0.985 0 0);
43
+ --primary-foreground: oklch(0.1 0 0);
44
+
45
+ --secondary: oklch(0.22 0 0);
46
+ --secondary-foreground: oklch(0.985 0 0);
47
+
48
+ --muted: oklch(0.22 0 0);
49
+ --muted-foreground: oklch(0.62 0 0);
50
+
51
+ --accent: oklch(0.78 0.09 60);
52
+ --accent-foreground: oklch(0.1 0 0);
53
+
54
+ --destructive: oklch(0.704 0.191 22);
55
+ --destructive-foreground: oklch(0.985 0 0);
56
+
57
+ --border: rgba(255, 255, 255, 0.1);
58
+ --input: rgba(255, 255, 255, 0.15);
59
+ --ring: oklch(0.556 0 0);
60
+
61
+ --radius: 0.625rem;
62
+
63
+ /* ─── extended palette ─── */
64
+ --accent-soft: oklch(0.78 0.09 60 / 0.14);
65
+ --border-strong: rgba(255, 255, 255, 0.18);
66
+
67
+ /* ─── semantic: live / stable state ─── */
68
+ --color-live: oklch(0.68 0.15 162);
69
+ --color-live-soft: oklch(0.68 0.15 162 / 0.1);
70
+ --color-live-border: oklch(0.68 0.15 162 / 0.18);
71
+
72
+ /* Surface ladder (deeper than --card for nesting) */
73
+ --surface: oklch(0.18 0 0);
74
+ --surface-2: oklch(0.17 0 0);
75
+ --surface-3: oklch(0.16 0 0);
76
+ --surface-primary: var(--primary);
77
+ --button: oklch(0.22 0 0);
78
+ --button-hover: oklch(0.27 0 0);
79
+ --code: oklch(0.12 0 0);
80
+
81
+ /* Text ladder */
82
+ --text: oklch(0.985 0 0);
83
+ --text-primary: var(--text);
84
+ --text-primary-foreground: var(--primary-foreground);
85
+ --text-secondary: oklch(0.87 0 0);
86
+ --text-muted: oklch(0.62 0 0);
87
+ --text-body: oklch(0.91 0 0);
88
+ --code-text: oklch(0.86 0 0);
89
+
90
+ --btn-primary-hover: oklch(0.92 0 0);
91
+ --navbar-bg: rgba(20, 20, 20, 0.85);
92
+ --pill-bg: rgba(10, 10, 10, 0.7);
93
+
94
+ /* Image placeholders */
95
+ --placeholder-bg: oklch(0.27 0 0);
96
+ --placeholder-stripe: oklch(0.3 0 0);
97
+ --placeholder-text: oklch(0.65 0 0);
98
+ --placeholder-fade: oklch(0.16 0 0);
99
+
100
+ /* Avatar + portrait gradients */
101
+ --avatar-from: oklch(0.4 0 0);
102
+ --avatar-to: oklch(0.62 0 0);
103
+ --portrait-from: oklch(0.32 0 0);
104
+ --portrait-to: oklch(0.18 0 0);
105
+ --portrait-stripe: oklch(0.36 0 0);
106
+
107
+ /* Syntax highlighting */
108
+ --code-comment: oklch(0.62 0 0);
109
+ --code-keyword: oklch(0.72 0.16 305);
110
+ --code-ident: oklch(0.85 0.11 215);
111
+ --code-string: oklch(0.82 0.12 70);
112
+ --code-number: oklch(0.78 0.14 30);
113
+
114
+ /* Semantic - tip / warn / info */
115
+ --callout-tip-text: oklch(0.85 0.13 150);
116
+ --callout-tip-accent: oklch(0.72 0.15 150);
117
+ --callout-warn-text: oklch(0.85 0.13 80);
118
+ --callout-warn-accent: oklch(0.7 0.16 80);
119
+ --callout-info-text: oklch(0.82 0.12 230);
120
+ --callout-info-accent: oklch(0.65 0.16 230);
121
+
122
+ /* Shadow scale (depth) */
123
+ --shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.2);
124
+ --shadow-sm: 0 2px 6px rgba(0, 0, 0, 0.25);
125
+ --shadow-md: 0 8px 20px rgba(0, 0, 0, 0.3);
126
+ --shadow-lg: 0 16px 40px rgba(0, 0, 0, 0.35);
127
+ --shadow-xl: 0 28px 64px rgba(0, 0, 0, 0.42);
128
+
129
+ /* Charts */
130
+ --chart-1: oklch(0.488 0.243 264.376);
131
+ --chart-2: oklch(0.696 0.17 162.48);
132
+ --chart-3: oklch(0.769 0.188 70.08);
133
+ --chart-4: oklch(0.627 0.265 303.9);
134
+ --chart-5: oklch(0.645 0.246 16.439);
135
+
136
+ /* Sidebar (shadcn) */
137
+ --sidebar: oklch(0.205 0 0);
138
+ --sidebar-foreground: oklch(0.985 0 0);
139
+ --sidebar-primary: oklch(0.488 0.243 264.376);
140
+ --sidebar-primary-foreground: oklch(0.985 0 0);
141
+ --sidebar-accent: oklch(0.269 0 0);
142
+ --sidebar-accent-foreground: oklch(0.985 0 0);
143
+ --sidebar-border: rgba(255, 255, 255, 0.1);
144
+ --sidebar-ring: oklch(0.556 0 0);
145
+
146
+ color-scheme: dark;
147
+ }
148
+
149
+ /* =============================================================================
150
+ * 2. COLOUR · LIGHT
151
+ * ========================================================================== */
152
+ .light,
153
+ [data-theme="light"] {
154
+ --background: oklch(0.98 0.005 80);
155
+ --foreground: oklch(0.18 0 0);
156
+
157
+ --card: oklch(1 0 0);
158
+ --card-foreground: oklch(0.18 0 0);
159
+
160
+ --popover: oklch(1 0 0);
161
+ --popover-foreground: oklch(0.18 0 0);
162
+
163
+ --primary: oklch(0.18 0 0);
164
+ --primary-foreground: oklch(1 0 0);
165
+
166
+ --secondary: oklch(0.96 0 0);
167
+ --secondary-foreground: oklch(0.18 0 0);
168
+
169
+ --muted: oklch(0.96 0 0);
170
+ --muted-foreground: oklch(0.5 0 0);
171
+
172
+ --accent: oklch(0.55 0.13 40);
173
+ --accent-foreground: oklch(1 0 0);
174
+
175
+ --destructive: oklch(0.55 0.19 22);
176
+ --destructive-foreground: oklch(1 0 0);
177
+
178
+ --border: rgba(10, 10, 10, 0.08);
179
+ --input: rgba(10, 10, 10, 0.15);
180
+ --ring: oklch(0.65 0 0);
181
+
182
+ --accent-soft: oklch(0.55 0.13 40 / 0.1);
183
+ --border-strong: rgba(10, 10, 10, 0.18);
184
+
185
+ /* ─── semantic: live / stable state ─── */
186
+ --color-live: oklch(0.5 0.14 162);
187
+ --color-live-soft: oklch(0.5 0.14 162 / 0.08);
188
+ --color-live-border: oklch(0.5 0.14 162 / 0.15);
189
+
190
+ --surface: oklch(1 0 0);
191
+ --surface-2: oklch(0.975 0.003 80);
192
+ --surface-3: oklch(0.955 0.004 80);
193
+ --button: oklch(0.96 0 0);
194
+ --button-hover: oklch(0.92 0 0);
195
+ --code: oklch(0.96 0 0);
196
+
197
+ --text: oklch(0.18 0 0);
198
+ --text-secondary: oklch(0.32 0 0);
199
+ --text-muted: oklch(0.5 0 0);
200
+ --text-body: oklch(0.22 0 0);
201
+ --code-text: oklch(0.28 0 0);
202
+
203
+ --btn-primary-hover: oklch(0.28 0 0);
204
+ --navbar-bg: rgba(255, 255, 255, 0.85);
205
+ --pill-bg: rgba(255, 255, 255, 0.85);
206
+
207
+ --placeholder-bg: oklch(0.92 0 0);
208
+ --placeholder-stripe: oklch(0.88 0 0);
209
+ --placeholder-text: oklch(0.38 0 0);
210
+ --placeholder-fade: oklch(0.94 0 0);
211
+
212
+ --avatar-from: oklch(0.78 0 0);
213
+ --avatar-to: oklch(0.88 0 0);
214
+ --portrait-from: oklch(0.88 0 0);
215
+ --portrait-to: oklch(0.96 0 0);
216
+ --portrait-stripe: oklch(0.82 0 0);
217
+
218
+ --code-comment: oklch(0.5 0 0);
219
+ --code-keyword: oklch(0.45 0.18 305);
220
+ --code-ident: oklch(0.45 0.15 215);
221
+ --code-string: oklch(0.5 0.14 70);
222
+ --code-number: oklch(0.5 0.16 30);
223
+
224
+ --callout-tip-text: oklch(0.4 0.13 150);
225
+ --callout-tip-accent: oklch(0.55 0.14 150);
226
+ --callout-warn-text: oklch(0.4 0.13 80);
227
+ --callout-warn-accent: oklch(0.55 0.14 80);
228
+ --callout-info-text: oklch(0.4 0.13 230);
229
+ --callout-info-accent: oklch(0.5 0.16 230);
230
+
231
+ --shadow-xs: 0 1px 2px rgba(20, 15, 10, 0.05);
232
+ --shadow-sm: 0 2px 6px rgba(20, 15, 10, 0.07);
233
+ --shadow-md: 0 8px 20px rgba(20, 15, 10, 0.08);
234
+ --shadow-lg: 0 16px 40px rgba(20, 15, 10, 0.1);
235
+ --shadow-xl: 0 28px 64px rgba(20, 15, 10, 0.12);
236
+
237
+ --sidebar: oklch(0.98 0.005 80);
238
+ --sidebar-foreground: oklch(0.18 0 0);
239
+ --sidebar-primary: oklch(0.205 0 0);
240
+ --sidebar-primary-foreground: oklch(1 0 0);
241
+ --sidebar-accent: oklch(0.95 0 0);
242
+ --sidebar-accent-foreground: oklch(0.18 0 0);
243
+ --sidebar-border: rgba(10, 10, 10, 0.1);
244
+ --sidebar-ring: oklch(0.65 0 0);
245
+
246
+ color-scheme: light;
247
+ }
248
+
249
+ /* =============================================================================
250
+ * 3. SYSTEM-DRIVEN THEME (only when no explicit data-theme/class is set)
251
+ * ========================================================================== */
252
+ @media (prefers-color-scheme: light) {
253
+ :root:not([data-theme]):not(.dark):not(.light) {
254
+ /* Light tokens inline - copy the value set from [data-theme="light"] */
255
+ --background: oklch(0.98 0.005 80);
256
+ --foreground: oklch(0.18 0 0);
257
+ --card: oklch(1 0 0);
258
+ --card-foreground: oklch(0.18 0 0);
259
+ --popover: oklch(1 0 0);
260
+ --popover-foreground: oklch(0.18 0 0);
261
+ --primary: oklch(0.18 0 0);
262
+ --primary-foreground: oklch(1 0 0);
263
+ --secondary: oklch(0.96 0 0);
264
+ --secondary-foreground: oklch(0.18 0 0);
265
+ --muted: oklch(0.96 0 0);
266
+ --muted-foreground: oklch(0.5 0 0);
267
+ --accent: oklch(0.55 0.13 40);
268
+ --accent-foreground: oklch(1 0 0);
269
+ --border: rgba(10, 10, 10, 0.08);
270
+ --input: rgba(10, 10, 10, 0.15);
271
+ --ring: oklch(0.65 0 0);
272
+
273
+ --accent-soft: oklch(0.55 0.13 40 / 0.1);
274
+ --border-strong: rgba(10, 10, 10, 0.18);
275
+ --surface: oklch(1 0 0);
276
+ --surface-2: oklch(0.975 0.003 80);
277
+ --surface-3: oklch(0.955 0.004 80);
278
+ --button: oklch(0.96 0 0);
279
+ --button-hover: oklch(0.92 0 0);
280
+ --code: oklch(0.96 0 0);
281
+ --text: oklch(0.18 0 0);
282
+ --text-secondary: oklch(0.32 0 0);
283
+ --text-muted: oklch(0.5 0 0);
284
+ --text-body: oklch(0.22 0 0);
285
+ --code-text: oklch(0.28 0 0);
286
+ --btn-primary-hover: oklch(0.28 0 0);
287
+ --navbar-bg: rgba(255, 255, 255, 0.85);
288
+ --pill-bg: rgba(255, 255, 255, 0.85);
289
+ --placeholder-bg: oklch(0.92 0 0);
290
+ --placeholder-stripe: oklch(0.88 0 0);
291
+ --placeholder-text: oklch(0.38 0 0);
292
+ --placeholder-fade: oklch(0.94 0 0);
293
+
294
+ color-scheme: light;
295
+ }
296
+ }
297
+
298
+ /* =============================================================================
299
+ * 4. NON-COLOUR TOKENS - applied everywhere, regardless of theme
300
+ * ========================================================================== */
301
+ :root {
302
+ /* ─── Typography families (wire to next/font CSS vars) ─── */
303
+ --font-sans:
304
+ var(--font-monoline-sans, var(--font-inter-sans, "Inter")), ui-sans-serif,
305
+ system-ui, sans-serif;
306
+ --font-mono:
307
+ var(--font-monoline-mono, var(--font-plex-mono, "IBM Plex Mono")),
308
+ ui-monospace, monospace;
309
+ --font-script:
310
+ var(--font-monoline-script, var(--font-caveat-script, "Caveat")), cursive;
311
+ --font-headline:
312
+ var(--font-monoline-headline, var(--font-manrope-headline, "Manrope")),
313
+ var(--font-monoline-sans, var(--font-inter-sans, "Inter")), ui-sans-serif,
314
+ system-ui, sans-serif;
315
+
316
+ /* ─── Type scale (px-pinned for predictability -> rem) ─── */
317
+ --text-3xs: 0.625rem; /* eyebrow xs, badge xs */
318
+ --text-2xs: 0.6875rem; /* eyebrow sm, meta */
319
+ --text-xs: 0.75rem; /* badge md, mono small */
320
+ --text-sm: 0.875rem; /* Tailwind-compatible small text */
321
+ --text-base: 1rem; /* Tailwind-compatible body text */
322
+ --text-md: 1rem; /* role alias for lede and mobile body */
323
+ --text-lg: 1.125rem; /* Tailwind-compatible large text */
324
+ --text-xl: 1.25rem; /* card h3 */
325
+ --text-2xl: 1.5rem; /* pullquote */
326
+ --text-3xl: 1.875rem; /* H2 desktop */
327
+ --text-4xl: 2.25rem; /* H1 mobile / featured */
328
+ --text-5xl: 2.75rem; /* H1 desktop */
329
+ --text-6xl: 4rem; /* display */
330
+ --text-7xl: 5.5rem; /* page masthead */
331
+
332
+ /* ─── Line heights ─── */
333
+ --leading-none: 1;
334
+ --leading-tight: 1.1;
335
+ --leading-snug: 1.25;
336
+ --leading-normal: 1.5;
337
+ --leading-relaxed: 1.65;
338
+ --leading-loose: 1.75;
339
+
340
+ /* ─── Letter spacing ─── */
341
+ --tracking-display: -0.04em;
342
+ --tracking-heading: -0.025em;
343
+ --tracking-body: -0.005em;
344
+ --tracking-normal: 0;
345
+ --tracking-mono: 0.04em;
346
+ --tracking-wide: 0.08em;
347
+ --tracking-meta: 0.14em;
348
+ --tracking-eyebrow: 0.16em;
349
+
350
+ /* ─── Typography roles ─── */
351
+ --type-docs-title-size: 2.625rem;
352
+ --type-docs-title-leading: 1.02;
353
+ --type-docs-title-tracking: -0.03em;
354
+ --type-hero-title-size: 3.625rem;
355
+ --type-hero-title-leading: 1.02;
356
+ --type-hero-title-tracking: -0.03em;
357
+ --type-page-title-mobile-size: 2.4375rem;
358
+ --type-docs-title-mobile-size: 2rem;
359
+ --type-lede-size: var(--text-md);
360
+ --type-lede-leading: 1.6;
361
+ --type-subtitle-size: 1.125rem;
362
+ --type-subtitle-tracking: -0.01em;
363
+ --type-ui-label-size: 0.84375rem;
364
+ --type-ui-label-leading: 1.2;
365
+
366
+ /* ─── Spacing scale (4px base -> rem) ─── */
367
+ --space-0: 0rem;
368
+ --space-px: 1px;
369
+ --space-0-5: 0.125rem;
370
+ --space-1: 0.25rem;
371
+ --space-1-5: 0.375rem;
372
+ --space-2: 0.5rem;
373
+ --space-2-5: 0.625rem;
374
+ --space-3: 0.75rem;
375
+ --space-3-5: 0.875rem;
376
+ --space-4: 1rem;
377
+ --space-5: 1.25rem;
378
+ --space-6: 1.5rem;
379
+ --space-7: 1.75rem;
380
+ --space-8: 2rem;
381
+ --space-9: 2.25rem;
382
+ --space-10: 2.5rem;
383
+ --space-11: 2.75rem;
384
+ --space-12: 3rem;
385
+ --space-14: 3.5rem;
386
+ --space-16: 4rem;
387
+ --space-20: 5rem;
388
+ --space-24: 6rem;
389
+ --space-28: 7rem;
390
+ --space-32: 8rem;
391
+
392
+ /* ─── Radius scale ─── */
393
+ --radius-xs: 4px;
394
+ --radius-sm: calc(var(--radius) - 4px);
395
+ --radius-md: calc(var(--radius) - 2px);
396
+ --radius-lg: var(--radius);
397
+ --radius-xl: calc(var(--radius) + 4px);
398
+ --radius-2xl: calc(var(--radius) + 8px);
399
+ --radius-3xl: calc(var(--radius) + 12px);
400
+ --radius-pill: 999px;
401
+
402
+ /* ─── Border widths ─── */
403
+ --border-thin: 1px;
404
+ --border-medium: 2px;
405
+ --border-thick: 4px;
406
+
407
+ /* ─── Focus rings ─── */
408
+ --focus-ring: 0 0 0 3px var(--accent-soft);
409
+ --focus-ring-offset: 0 0 0 2px var(--surface);
410
+ --focus-ring-layered: var(--focus-ring-offset), 0 0 0 4px var(--accent-soft);
411
+
412
+ /* ─── Z-index layers ─── */
413
+ --z-base: 0;
414
+ --z-elevated: 10;
415
+ --z-sticky: 20;
416
+ --z-dropdown: 30;
417
+ --z-overlay: 40;
418
+ --z-modal: 50;
419
+ --z-toast: 60;
420
+ --z-tooltip: 70;
421
+ --z-max: 999;
422
+
423
+ /* ─── Breakpoints (mirror foundations/breakpoints.ts) ─── */
424
+ --bp-mobile: 24.375rem;
425
+ --bp-mobile-max: 47.9375rem;
426
+ --bp-tablet: 52.125rem;
427
+ --bp-tablet-min: 48rem;
428
+ --bp-tablet-max: 63.9375rem;
429
+ --bp-desktop: 80rem;
430
+ --bp-wide: 96rem;
431
+
432
+ /* ─── Container widths ─── */
433
+ --container-sm: 40rem;
434
+ --container-md: 48rem;
435
+ --container-lg: 64rem;
436
+ --container-xl: 76rem;
437
+ --container-2xl: 90rem;
438
+ --container-prose: 68ch; /* article body */
439
+
440
+ /* ─── Motion: durations ─── */
441
+ --duration-instant: 0ms;
442
+ --duration-micro: 120ms; /* immediate control feedback */
443
+ --duration-fast: 140ms; /* menus and compact fades */
444
+ --duration-short: 250ms; /* state changes and indicators */
445
+ --duration-medium: 450ms; /* sheets and larger surfaces */
446
+ --duration-long: 700ms; /* deliberate entry motion */
447
+ --duration-xlong: 1200ms; /* rare large-surface transitions */
448
+
449
+ /* ─── Motion: easings ─── */
450
+ --ease-linear: linear;
451
+ --ease-in: cubic-bezier(0.4, 0, 1, 1);
452
+ --ease-out: cubic-bezier(0, 0, 0.2, 1);
453
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
454
+ --ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
455
+ --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); /* overshoot */
456
+ --ease-spring-soft: cubic-bezier(0.16, 1, 0.3, 1);
457
+ --ease-out-back: cubic-bezier(0.18, 0.89, 0.32, 1.27); /* subtle back-ease */
458
+
459
+ /* ─── Blurs (for backdrop) ─── */
460
+ --blur-sm: 4px;
461
+ --blur-md: 8px;
462
+ --blur-lg: 16px;
463
+ --blur-xl: 24px;
464
+
465
+ /* ─── Component spacing aliases ─── */
466
+ --ml-space-0: var(--space-0);
467
+ --ml-space-px: var(--space-px);
468
+ --ml-space-0-5: var(--space-0-5);
469
+ --ml-space-1: var(--space-1);
470
+ --ml-space-1-5: var(--space-1-5);
471
+ --ml-space-2: var(--space-2);
472
+ --ml-space-2-5: var(--space-2-5);
473
+ --ml-space-3: var(--space-3);
474
+ --ml-space-3-5: var(--space-3-5);
475
+ --ml-space-4: var(--space-4);
476
+ --ml-space-5: var(--space-5);
477
+ --ml-space-6: var(--space-6);
478
+ --ml-space-7: var(--space-7);
479
+ --ml-space-8: var(--space-8);
480
+ --ml-space-9: var(--space-9);
481
+ --ml-space-10: var(--space-10);
482
+ --ml-space-11: var(--space-11);
483
+ --ml-space-12: var(--space-12);
484
+ --ml-space-14: var(--space-14);
485
+ --ml-space-16: var(--space-16);
486
+ --ml-space-20: var(--space-20);
487
+ --ml-space-24: var(--space-24);
488
+ --ml-space-28: var(--space-28);
489
+ --ml-space-32: var(--space-32);
490
+
491
+ --ml-footer-y-sm: var(--space-16);
492
+ --ml-footer-y-sm-tablet: var(--space-20);
493
+ --ml-footer-y-sm-desktop: var(--space-16);
494
+ --ml-footer-y-md: var(--space-20);
495
+ --ml-footer-y-md-tablet: var(--space-24);
496
+ --ml-footer-y-md-desktop: var(--space-20);
497
+ --ml-footer-y-lg: var(--space-24);
498
+ --ml-footer-y-lg-tablet: var(--space-32);
499
+ --ml-footer-y-lg-desktop: var(--space-24);
500
+ --ml-footer-container-max-lg: 90rem;
501
+ --ml-footer-x-sm: var(--space-5);
502
+ --ml-footer-x-sm-tablet: var(--space-8);
503
+ --ml-footer-x-sm-desktop: var(--space-8);
504
+ --ml-footer-x-md: var(--space-6);
505
+ --ml-footer-x-md-tablet: var(--space-10);
506
+ --ml-footer-x-md-desktop: var(--space-12);
507
+ --ml-footer-x-lg: var(--space-8);
508
+ --ml-footer-x-lg-tablet: var(--space-12);
509
+ --ml-footer-x-lg-desktop: var(--space-16);
510
+ --ml-footer-layout-gap-sm: var(--space-12);
511
+ --ml-footer-layout-gap-sm-desktop: var(--space-16);
512
+ --ml-footer-layout-gap-md: var(--space-16);
513
+ --ml-footer-layout-gap-md-desktop: var(--space-20);
514
+ --ml-footer-layout-gap-lg: var(--space-20);
515
+ --ml-footer-layout-gap-lg-desktop: var(--space-24);
516
+ --ml-footer-layout-cols-sm-desktop: minmax(0, 1fr) minmax(0, 1.65fr);
517
+ --ml-footer-layout-cols-md-desktop: minmax(0, 1.1fr) minmax(0, 1.9fr);
518
+ --ml-footer-layout-cols-lg-desktop: minmax(0, 1.15fr) minmax(0, 2fr);
519
+ --ml-footer-intro-gap-sm: var(--space-5);
520
+ --ml-footer-intro-gap-md: var(--space-6);
521
+ --ml-footer-intro-gap-lg: var(--space-8);
522
+ --ml-footer-column-gap-x-sm: var(--space-8);
523
+ --ml-footer-column-gap-y-sm: var(--space-8);
524
+ --ml-footer-column-gap-x-md: var(--space-12);
525
+ --ml-footer-column-gap-y-md: var(--space-10);
526
+ --ml-footer-column-gap-x-lg: var(--space-16);
527
+ --ml-footer-column-gap-y-lg: var(--space-12);
528
+ --ml-footer-meta-mt-sm: var(--space-12);
529
+ --ml-footer-meta-pt-sm: var(--space-8);
530
+ --ml-footer-meta-mt-md: var(--space-16);
531
+ --ml-footer-meta-pt-md: var(--space-10);
532
+ --ml-footer-meta-mt-lg: var(--space-20);
533
+ --ml-footer-meta-pt-lg: var(--space-12);
534
+ --ml-footer-status-text: var(--text-3xs);
535
+ --ml-footer-status-text-tablet: var(--text-2xs);
536
+ --ml-footer-status-tracking: 0.18em;
537
+ --ml-footer-meta-text-sm: var(--text-2xs);
538
+ --ml-footer-meta-text-md: var(--text-xs);
539
+ --ml-footer-meta-text-lg: var(--text-sm);
540
+ --ml-footer-local-time-tracking: var(--tracking-wide);
541
+ --ml-footer-description-leading-sm: 1.7;
542
+ --ml-footer-description-leading-md: var(--leading-loose);
543
+ --ml-footer-description-leading-lg: 1.8;
544
+ --ml-footer-intro-max-sm: 34rem;
545
+ --ml-footer-intro-max-md: 42rem;
546
+ --ml-footer-intro-max-lg: 48rem;
547
+ --ml-footer-description-max-sm: 34rem;
548
+ --ml-footer-description-max-md: 40rem;
549
+ --ml-footer-description-max-lg: 46rem;
550
+ --ml-footer-subscribe-copy-max: 18rem;
551
+ --ml-footer-subscribe-control-max: 20rem;
552
+ --ml-footer-subscribe-control-height: 2.75rem;
553
+ --ml-footer-submit-hover-scale: 0.98;
554
+ --ml-footer-submit-press-scale: 0.96;
555
+ --ml-footer-submit-arrow-hover-x: 2px;
556
+ --ml-footer-meta-copy-max: 38rem;
557
+ --ml-footer-link-min-height-sm: 1.75rem;
558
+ --ml-footer-link-min-height-md: 2rem;
559
+ --ml-footer-link-min-height-lg: 2.25rem;
560
+ --ml-footer-link-hover-x: 1px;
561
+ --ml-footer-link-arrow-hover-x: 2px;
562
+ }
@@ -0,0 +1,108 @@
1
+ /* =============================================================================
2
+ * typography.css · Typographic styles for articles and rich text
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * Defines the .prose component styles (headings, links, lists, code blocks).
5
+ * ========================================================================== */
6
+ .prose {
7
+ font-family: var(--font-sans);
8
+ color: var(--text-body);
9
+ font-size: var(--text-base);
10
+ line-height: var(--leading-relaxed);
11
+ font-weight: 400;
12
+ max-width: var(--container-prose, 68ch);
13
+ text-wrap: pretty;
14
+ }
15
+ .prose h1 {
16
+ font-family: var(--font-mono);
17
+ font-size: var(--text-5xl);
18
+ line-height: var(--leading-tight);
19
+ letter-spacing: var(--tracking-heading);
20
+ font-weight: 700;
21
+ color: var(--text);
22
+ margin: var(--space-12) 0 var(--space-4);
23
+ scroll-margin-top: var(--space-20);
24
+ }
25
+ .prose h2 {
26
+ font-family: var(--font-headline);
27
+ font-size: var(--text-3xl);
28
+ line-height: var(--leading-snug);
29
+ letter-spacing: var(--tracking-heading);
30
+ font-weight: 700;
31
+ color: var(--text);
32
+ margin: var(--space-12) 0 var(--space-4);
33
+ scroll-margin-top: var(--space-20);
34
+ }
35
+ .prose h3 {
36
+ font-family: var(--font-headline);
37
+ font-size: var(--text-xl);
38
+ line-height: var(--leading-snug);
39
+ font-weight: 600;
40
+ color: var(--text);
41
+ margin: var(--space-8) 0 var(--space-3);
42
+ }
43
+ .prose p {
44
+ margin: 0 0 var(--space-5) 0;
45
+ }
46
+ .prose strong {
47
+ color: var(--text);
48
+ font-weight: 600;
49
+ }
50
+ .prose em {
51
+ color: var(--text-secondary);
52
+ font-style: italic;
53
+ }
54
+ .prose a {
55
+ color: var(--text);
56
+ text-decoration: underline;
57
+ text-decoration-color: var(--accent);
58
+ text-decoration-thickness: 1px;
59
+ text-underline-offset: 3px;
60
+ transition: text-decoration-color var(--duration-micro);
61
+ }
62
+ .prose a:hover {
63
+ text-decoration-color: var(--text);
64
+ }
65
+ .prose ul {
66
+ list-style-type: disc;
67
+ margin: 0 0 var(--space-5) 0;
68
+ padding-left: var(--space-6);
69
+ }
70
+ .prose ol {
71
+ list-style-type: decimal;
72
+ margin: 0 0 var(--space-5) 0;
73
+ padding-left: var(--space-6);
74
+ }
75
+ .prose li {
76
+ margin-bottom: var(--space-2);
77
+ }
78
+ .prose blockquote {
79
+ color: var(--text-secondary);
80
+ font-style: italic;
81
+ border-left: var(--border-medium) solid var(--border-strong);
82
+ padding-left: var(--space-5);
83
+ margin: var(--space-6) 0;
84
+ }
85
+ .prose code:not(pre code) {
86
+ font-family: var(--font-mono);
87
+ font-size: 0.9em;
88
+ background: var(--surface-2);
89
+ padding: 2px var(--space-2);
90
+ border-radius: var(--radius-xs);
91
+ border: 1px solid var(--border);
92
+ }
93
+ .prose pre {
94
+ font-family: var(--font-mono);
95
+ font-size: var(--text-xs);
96
+ line-height: var(--leading-loose);
97
+ color: var(--code-text);
98
+ background: var(--code);
99
+ padding: var(--space-4);
100
+ border-radius: var(--radius-md);
101
+ overflow-x: auto;
102
+ margin: var(--space-6) 0;
103
+ }
104
+ .prose hr {
105
+ border: none;
106
+ border-top: 1px solid var(--border);
107
+ margin: var(--space-12) 0;
108
+ }