@rtkelly-labs/design-system 0.0.0-bootstrap.0 → 0.16.0-dev.0.37dedac

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 (284) hide show
  1. package/CHANGELOG.md +347 -0
  2. package/LICENSE +21 -0
  3. package/README.md +317 -2
  4. package/dist/components/AlertDialog.js +95 -0
  5. package/dist/components/AlertDialog.js.map +1 -0
  6. package/dist/components/AppShell.js +261 -0
  7. package/dist/components/AppShell.js.map +1 -0
  8. package/dist/components/AsciiDivider.js +8 -0
  9. package/dist/components/AsciiDivider.js.map +1 -0
  10. package/dist/components/AsciiGauge.js +130 -0
  11. package/dist/components/AsciiGauge.js.map +1 -0
  12. package/dist/components/Avatar.js +87 -0
  13. package/dist/components/Avatar.js.map +1 -0
  14. package/dist/components/Badge.js +25 -0
  15. package/dist/components/Badge.js.map +1 -0
  16. package/dist/components/BarChart.js +288 -0
  17. package/dist/components/BarChart.js.map +1 -0
  18. package/dist/components/BracketText.js +23 -0
  19. package/dist/components/BracketText.js.map +1 -0
  20. package/dist/components/BulletChart.js +50 -0
  21. package/dist/components/BulletChart.js.map +1 -0
  22. package/dist/components/Button.js +130 -0
  23. package/dist/components/Button.js.map +1 -0
  24. package/dist/components/Card.js +181 -0
  25. package/dist/components/Card.js.map +1 -0
  26. package/dist/components/ChartTooltip.js +54 -0
  27. package/dist/components/ChartTooltip.js.map +1 -0
  28. package/dist/components/Checkbox.js +55 -0
  29. package/dist/components/Checkbox.js.map +1 -0
  30. package/dist/components/ColophonCard.js +122 -0
  31. package/dist/components/ColophonCard.js.map +1 -0
  32. package/dist/components/DataTable.js +299 -0
  33. package/dist/components/DataTable.js.map +1 -0
  34. package/dist/components/Divider.js +42 -0
  35. package/dist/components/Divider.js.map +1 -0
  36. package/dist/components/Drawer.js +81 -0
  37. package/dist/components/Drawer.js.map +1 -0
  38. package/dist/components/EmptyState.js +39 -0
  39. package/dist/components/EmptyState.js.map +1 -0
  40. package/dist/components/ErrorSummary.js +122 -0
  41. package/dist/components/ErrorSummary.js.map +1 -0
  42. package/dist/components/Fieldset.js +37 -0
  43. package/dist/components/Fieldset.js.map +1 -0
  44. package/dist/components/Glyph.js +60 -0
  45. package/dist/components/Glyph.js.map +1 -0
  46. package/dist/components/Input.js +111 -0
  47. package/dist/components/Input.js.map +1 -0
  48. package/dist/components/LinkProvider.js +76 -0
  49. package/dist/components/LinkProvider.js.map +1 -0
  50. package/dist/components/Menu.js +144 -0
  51. package/dist/components/Menu.js.map +1 -0
  52. package/dist/components/MetadataGrid.js +184 -0
  53. package/dist/components/MetadataGrid.js.map +1 -0
  54. package/dist/components/MobileNav.js +120 -0
  55. package/dist/components/MobileNav.js.map +1 -0
  56. package/dist/components/Modal.js +79 -0
  57. package/dist/components/Modal.js.map +1 -0
  58. package/dist/components/NerdIcon.js +177 -0
  59. package/dist/components/NerdIcon.js.map +1 -0
  60. package/dist/components/NoteBlock.js +84 -0
  61. package/dist/components/NoteBlock.js.map +1 -0
  62. package/dist/components/PageHeader.js +34 -0
  63. package/dist/components/PageHeader.js.map +1 -0
  64. package/dist/components/PageTitle.js +21 -0
  65. package/dist/components/PageTitle.js.map +1 -0
  66. package/dist/components/Pagination.js +96 -0
  67. package/dist/components/Pagination.js.map +1 -0
  68. package/dist/components/Popover.js +87 -0
  69. package/dist/components/Popover.js.map +1 -0
  70. package/dist/components/Progress.js +83 -0
  71. package/dist/components/Progress.js.map +1 -0
  72. package/dist/components/RadioGroup.js +74 -0
  73. package/dist/components/RadioGroup.js.map +1 -0
  74. package/dist/components/ReportDocument.js +75 -0
  75. package/dist/components/ReportDocument.js.map +1 -0
  76. package/dist/components/SectionContainer.js +18 -0
  77. package/dist/components/SectionContainer.js.map +1 -0
  78. package/dist/components/Select.js +199 -0
  79. package/dist/components/Select.js.map +1 -0
  80. package/dist/components/SiteFooter.js +29 -0
  81. package/dist/components/SiteFooter.js.map +1 -0
  82. package/dist/components/SiteHeader.js +59 -0
  83. package/dist/components/SiteHeader.js.map +1 -0
  84. package/dist/components/SiteNav.js +141 -0
  85. package/dist/components/SiteNav.js.map +1 -0
  86. package/dist/components/Skeleton.js +51 -0
  87. package/dist/components/Skeleton.js.map +1 -0
  88. package/dist/components/SocialIcon.js +77 -0
  89. package/dist/components/SocialIcon.js.map +1 -0
  90. package/dist/components/Sparkline.js +104 -0
  91. package/dist/components/Sparkline.js.map +1 -0
  92. package/dist/components/Spinner.js +65 -0
  93. package/dist/components/Spinner.js.map +1 -0
  94. package/dist/components/StatCard.js +53 -0
  95. package/dist/components/StatCard.js.map +1 -0
  96. package/dist/components/StatusPage.js +99 -0
  97. package/dist/components/StatusPage.js.map +1 -0
  98. package/dist/components/Swatch.js +55 -0
  99. package/dist/components/Swatch.js.map +1 -0
  100. package/dist/components/Switch.js +53 -0
  101. package/dist/components/Switch.js.map +1 -0
  102. package/dist/components/TLDR.js +53 -0
  103. package/dist/components/TLDR.js.map +1 -0
  104. package/dist/components/Table.js +155 -0
  105. package/dist/components/Table.js.map +1 -0
  106. package/dist/components/Tabs.js +325 -0
  107. package/dist/components/Tabs.js.map +1 -0
  108. package/dist/components/Tag.js +19 -0
  109. package/dist/components/Tag.js.map +1 -0
  110. package/dist/components/TelemetryGauge.js +112 -0
  111. package/dist/components/TelemetryGauge.js.map +1 -0
  112. package/dist/components/ThemeProvider.js +87 -0
  113. package/dist/components/ThemeProvider.js.map +1 -0
  114. package/dist/components/TickerTape.js +196 -0
  115. package/dist/components/TickerTape.js.map +1 -0
  116. package/dist/components/Toast.js +200 -0
  117. package/dist/components/Toast.js.map +1 -0
  118. package/dist/components/Tooltip.js +69 -0
  119. package/dist/components/Tooltip.js.map +1 -0
  120. package/dist/components/TrackCard.js +206 -0
  121. package/dist/components/TrackCard.js.map +1 -0
  122. package/dist/components/blog/BlogPost.js +116 -0
  123. package/dist/components/blog/BlogPost.js.map +1 -0
  124. package/dist/components/blog/LoremIpsumPost.js +62 -0
  125. package/dist/components/blog/LoremIpsumPost.js.map +1 -0
  126. package/dist/components/blog/author.js +25 -0
  127. package/dist/components/blog/author.js.map +1 -0
  128. package/dist/components/booleanControl.js +50 -0
  129. package/dist/components/booleanControl.js.map +1 -0
  130. package/dist/components/dialogPopupRef.js +28 -0
  131. package/dist/components/dialogPopupRef.js.map +1 -0
  132. package/dist/components/dialogSurface.js +75 -0
  133. package/dist/components/dialogSurface.js.map +1 -0
  134. package/dist/components/docs/AnchorHeading.js +80 -0
  135. package/dist/components/docs/AnchorHeading.js.map +1 -0
  136. package/dist/components/docs/Breadcrumbs.js +26 -0
  137. package/dist/components/docs/Breadcrumbs.js.map +1 -0
  138. package/dist/components/docs/CodeBlock.js +63 -0
  139. package/dist/components/docs/CodeBlock.js.map +1 -0
  140. package/dist/components/docs/CodeTabs.js +71 -0
  141. package/dist/components/docs/CodeTabs.js.map +1 -0
  142. package/dist/components/docs/DocPager.js +28 -0
  143. package/dist/components/docs/DocPager.js.map +1 -0
  144. package/dist/components/docs/DocsHeader.js +124 -0
  145. package/dist/components/docs/DocsHeader.js.map +1 -0
  146. package/dist/components/docs/DocsLayout.js +61 -0
  147. package/dist/components/docs/DocsLayout.js.map +1 -0
  148. package/dist/components/docs/DocsLinkProvider.js +25 -0
  149. package/dist/components/docs/DocsLinkProvider.js.map +1 -0
  150. package/dist/components/docs/DocsSidebar.js +147 -0
  151. package/dist/components/docs/DocsSidebar.js.map +1 -0
  152. package/dist/components/docs/Prose.js +56 -0
  153. package/dist/components/docs/Prose.js.map +1 -0
  154. package/dist/components/docs/TableOfContents.js +71 -0
  155. package/dist/components/docs/TableOfContents.js.map +1 -0
  156. package/dist/components/docs/codeTabsStore.js +75 -0
  157. package/dist/components/docs/codeTabsStore.js.map +1 -0
  158. package/dist/components/docs/figures/ActivityGrid.js +116 -0
  159. package/dist/components/docs/figures/ActivityGrid.js.map +1 -0
  160. package/dist/components/docs/figures/BeforeAfter.js +64 -0
  161. package/dist/components/docs/figures/BeforeAfter.js.map +1 -0
  162. package/dist/components/docs/figures/ChangeSummary.js +74 -0
  163. package/dist/components/docs/figures/ChangeSummary.js.map +1 -0
  164. package/dist/components/docs/figures/Decision.js +34 -0
  165. package/dist/components/docs/figures/Decision.js.map +1 -0
  166. package/dist/components/docs/figures/DrawingSheet.js +37 -0
  167. package/dist/components/docs/figures/DrawingSheet.js.map +1 -0
  168. package/dist/components/docs/figures/FigureFrame.js +226 -0
  169. package/dist/components/docs/figures/FigureFrame.js.map +1 -0
  170. package/dist/components/docs/figures/FileChangeTree.js +134 -0
  171. package/dist/components/docs/figures/FileChangeTree.js.map +1 -0
  172. package/dist/components/docs/figures/FlowDiagram.js +82 -0
  173. package/dist/components/docs/figures/FlowDiagram.js.map +1 -0
  174. package/dist/components/docs/figures/GanttChart.js +79 -0
  175. package/dist/components/docs/figures/GanttChart.js.map +1 -0
  176. package/dist/components/docs/figures/IndexedSection.js +45 -0
  177. package/dist/components/docs/figures/IndexedSection.js.map +1 -0
  178. package/dist/components/docs/figures/MetricStrip.js +23 -0
  179. package/dist/components/docs/figures/MetricStrip.js.map +1 -0
  180. package/dist/components/docs/figures/Steps.js +58 -0
  181. package/dist/components/docs/figures/Steps.js.map +1 -0
  182. package/dist/components/docs/figures/SwatchCompare.js +42 -0
  183. package/dist/components/docs/figures/SwatchCompare.js.map +1 -0
  184. package/dist/components/docs/figures/TermGrid.js +22 -0
  185. package/dist/components/docs/figures/TermGrid.js.map +1 -0
  186. package/dist/components/docs/figures/Terminal.js +37 -0
  187. package/dist/components/docs/figures/Terminal.js.map +1 -0
  188. package/dist/components/docs/figures/Timeline.js +61 -0
  189. package/dist/components/docs/figures/Timeline.js.map +1 -0
  190. package/dist/components/docs/figures/TokenTable.js +42 -0
  191. package/dist/components/docs/figures/TokenTable.js.map +1 -0
  192. package/dist/components/docs/figures/TreeDiagram.js +76 -0
  193. package/dist/components/docs/figures/TreeDiagram.js.map +1 -0
  194. package/dist/components/docs/figures/UptimeStrip.js +68 -0
  195. package/dist/components/docs/figures/UptimeStrip.js.map +1 -0
  196. package/dist/components/docs/figures/index.js +24 -0
  197. package/dist/components/docs/figures/index.js.map +1 -0
  198. package/dist/components/docs/index.js +15 -0
  199. package/dist/components/docs/index.js.map +1 -0
  200. package/dist/components/docs/mdxComponents.js +108 -0
  201. package/dist/components/docs/mdxComponents.js.map +1 -0
  202. package/dist/components/experiments/DesignSandbox.js +206 -0
  203. package/dist/components/experiments/DesignSandbox.js.map +1 -0
  204. package/dist/components/experiments/ExperimentsView.js +138 -0
  205. package/dist/components/experiments/ExperimentsView.js.map +1 -0
  206. package/dist/components/fieldFrame.js +200 -0
  207. package/dist/components/fieldFrame.js.map +1 -0
  208. package/dist/components/floatingSurface.js +35 -0
  209. package/dist/components/floatingSurface.js.map +1 -0
  210. package/dist/components/marketing/CTASection.js +47 -0
  211. package/dist/components/marketing/CTASection.js.map +1 -0
  212. package/dist/components/marketing/FeatureGrid.js +49 -0
  213. package/dist/components/marketing/FeatureGrid.js.map +1 -0
  214. package/dist/components/marketing/Hero.js +44 -0
  215. package/dist/components/marketing/Hero.js.map +1 -0
  216. package/dist/components/marketing/PricingGrid.js +65 -0
  217. package/dist/components/marketing/PricingGrid.js.map +1 -0
  218. package/dist/components/marketing/SectionGrid.js +51 -0
  219. package/dist/components/marketing/SectionGrid.js.map +1 -0
  220. package/dist/components/paginationRange.js +28 -0
  221. package/dist/components/paginationRange.js.map +1 -0
  222. package/dist/components/portalTheme.js +14 -0
  223. package/dist/components/portalTheme.js.map +1 -0
  224. package/dist/components/saas/SaasLandingPage.js +201 -0
  225. package/dist/components/saas/SaasLandingPage.js.map +1 -0
  226. package/dist/components/siteNavContext.js +24 -0
  227. package/dist/components/siteNavContext.js.map +1 -0
  228. package/dist/components/slides/Slide.js +84 -0
  229. package/dist/components/slides/Slide.js.map +1 -0
  230. package/dist/components/slides/SlideDeck.js +228 -0
  231. package/dist/components/slides/SlideDeck.js.map +1 -0
  232. package/dist/components/themeInitScript.js +16 -0
  233. package/dist/components/themeInitScript.js.map +1 -0
  234. package/dist/components/themeScope.js +9 -0
  235. package/dist/components/themeScope.js.map +1 -0
  236. package/dist/components/toastLifetime.js +21 -0
  237. package/dist/components/toastLifetime.js.map +1 -0
  238. package/dist/fonts/DSSymbols-OFL.txt +98 -0
  239. package/dist/fonts/DSSymbols-Regular.woff2 +0 -0
  240. package/dist/fonts/SymbolsNerdFontMono-Regular.woff2 +0 -0
  241. package/dist/hooks/useActiveHeading.js +59 -0
  242. package/dist/hooks/useActiveHeading.js.map +1 -0
  243. package/dist/hooks/useCopyToClipboard.js +58 -0
  244. package/dist/hooks/useCopyToClipboard.js.map +1 -0
  245. package/dist/index.d.ts +6394 -0
  246. package/dist/index.js +117 -0
  247. package/dist/index.js.map +1 -0
  248. package/dist/lib/accentClasses.js +87 -0
  249. package/dist/lib/accentClasses.js.map +1 -0
  250. package/dist/lib/recipe.js +33 -0
  251. package/dist/lib/recipe.js.map +1 -0
  252. package/dist/lib/slug.js +39 -0
  253. package/dist/lib/slug.js.map +1 -0
  254. package/dist/lib/theme.js +76 -0
  255. package/dist/lib/theme.js.map +1 -0
  256. package/dist/lib/tokenRules.js +51 -0
  257. package/dist/lib/tokenRules.js.map +1 -0
  258. package/dist/prose.css +766 -0
  259. package/dist/styles.css +203 -0
  260. package/dist/theme/ansi.js +77 -0
  261. package/dist/theme/ansi.js.map +1 -0
  262. package/dist/theme/contrast.js +342 -0
  263. package/dist/theme/contrast.js.map +1 -0
  264. package/dist/theme/levels.js +234 -0
  265. package/dist/theme/levels.js.map +1 -0
  266. package/dist/theme/media.js +115 -0
  267. package/dist/theme/media.js.map +1 -0
  268. package/dist/theme/recommended.js +105 -0
  269. package/dist/theme/recommended.js.map +1 -0
  270. package/dist/theme.css +538 -0
  271. package/dist/tokens.js +1 -0
  272. package/dist/tokens.js.map +1 -0
  273. package/package.json +209 -6
  274. package/skills/design-system-usage/SKILL.md +75 -0
  275. package/terminal/rtk-midnight.alacritty.toml +33 -0
  276. package/terminal/rtk-midnight.ghostty.conf +24 -0
  277. package/terminal/rtk-midnight.itermcolors +167 -0
  278. package/terminal/rtk-midnight.windows-terminal.json +23 -0
  279. package/terminal/rtk-sketch.alacritty.toml +33 -0
  280. package/terminal/rtk-sketch.ghostty.conf +24 -0
  281. package/terminal/rtk-sketch.itermcolors +167 -0
  282. package/terminal/rtk-sketch.windows-terminal.json +23 -0
  283. package/tokens/palette.midnight.tokens.json +477 -0
  284. package/tokens/palette.sketch.tokens.json +477 -0
package/dist/theme.css ADDED
@@ -0,0 +1,538 @@
1
+ /* GENERATED FILE — DO NOT EDIT.
2
+ *
3
+ * Source: src/theme/levels.ts (edit that, not this)
4
+ * Regenerate: pnpm tokens:build · Verify: pnpm tokens:check
5
+ *
6
+ * Import order in a consumer's entrypoint:
7
+ *
8
+ * @import "tailwindcss";
9
+ * @import "@rtkelly-labs/design-system/theme.css";
10
+ *
11
+ * ============================================================================
12
+ * How the cascade works here, because it is not obvious
13
+ * ============================================================================
14
+ *
15
+ * Every level block below declares LITERAL colours. That matters: a custom
16
+ * property containing a var() reference is substituted where it is DECLARED,
17
+ * not where it is used, so a token defined once on :root as var(--something)
18
+ * inherits into descendants already resolved to the root theme's value — and a
19
+ * nested theme panel keeps the outer theme's colours. The previous hand-written
20
+ * token layer worked around that by re-declaring the indirected tokens on every
21
+ * mode class. With literals the problem does not arise at all, and nesting to
22
+ * any depth resolves by ordinary CSS inheritance.
23
+ *
24
+ * The Tailwind --color-* aliases DO indirect through --ds-*, so that a consumer
25
+ * can override a role and have the utilities follow. Those are therefore
26
+ * re-declared inside each level block, which is free in a generated file.
27
+ */
28
+
29
+ /* Tailwind v4 skips node_modules during automatic content detection, so the
30
+ * utilities used inside the compiled components would never be generated in a
31
+ * consumer's build without this. */
32
+ @source "./";
33
+
34
+ /* ==========================================================================
35
+ Variants — one per level, plus the two polarity groups
36
+ ==========================================================================
37
+
38
+ Prefer a role token over a variant: a component written against
39
+ --ds-surface-raised needs no variant at all and picks up a fifth level for
40
+ free. Reach for these only for what tokens genuinely cannot express, such as
41
+ a different border weight on one level. */
42
+
43
+ @custom-variant midnight (&:where([data-theme="midnight"], [data-theme="midnight"] *):not(:where([data-theme]:not([data-theme="midnight"]), [data-theme]:not([data-theme="midnight"]) *)));
44
+ @custom-variant sketch (&:where([data-theme="sketch"], [data-theme="sketch"] *):not(:where([data-theme]:not([data-theme="sketch"]), [data-theme]:not([data-theme="sketch"]) *)));
45
+
46
+ /* Polarity is a declared property of a level, so these are derived rather than
47
+ * being the axis the system hangs off. Use them for non-colour utilities that
48
+ * genuinely depend on light-vs-dark — a shadow spread, an image filter — never
49
+ * for colour, which the tokens already handle. */
50
+ @custom-variant dark (&:where([data-theme="midnight"], [data-theme="midnight"] *):not(:where([data-theme]:not([data-theme="midnight"]), [data-theme]:not([data-theme="midnight"]) *)));
51
+ @custom-variant light (&:where([data-theme="sketch"], [data-theme="sketch"] *):not(:where([data-theme]:not([data-theme="sketch"]), [data-theme]:not([data-theme="sketch"]) *)));
52
+
53
+ /* `light:` is not declared here: a level named `light` already declares it
54
+ * above, and the two would be the same rule. `dark:` still spans polarity
55
+ * rather than naming a level, which is why it survives the collapse. */
56
+
57
+ /* ==========================================================================
58
+ Utility surface
59
+ ==========================================================================
60
+
61
+ Declaring the token here is what makes Tailwind emit `bg-surface-raised`,
62
+ `text-accent-primary`, `border-edge-subtle` and friends. The values are
63
+ references; the literals live in the level blocks below. */
64
+
65
+ @theme {
66
+ --color-surface-base: var(--ds-surface-base);
67
+ --color-surface-raised: var(--ds-surface-raised);
68
+ --color-surface-sunken: var(--ds-surface-sunken);
69
+ --color-surface-overlay: var(--ds-surface-overlay);
70
+ --color-content-primary: var(--ds-text-primary);
71
+ --color-content-secondary: var(--ds-text-secondary);
72
+ --color-content-muted: var(--ds-text-muted);
73
+ --color-content-inverse: var(--ds-text-inverse);
74
+ --color-edge-strong: var(--ds-border-strong);
75
+ --color-edge-default: var(--ds-border-default);
76
+ --color-edge-subtle: var(--ds-border-subtle);
77
+ --color-accent-primary: var(--ds-accent-primary);
78
+ --color-accent-secondary: var(--ds-accent-secondary);
79
+ --color-accent-tertiary: var(--ds-accent-tertiary);
80
+ --color-accent-quiet: var(--ds-accent-quiet);
81
+ --color-intent-info: var(--ds-intent-info);
82
+ --color-intent-success: var(--ds-intent-success);
83
+ --color-intent-warning: var(--ds-intent-warning);
84
+ --color-intent-danger: var(--ds-intent-danger);
85
+ --color-palette-red: var(--ds-palette-red);
86
+ --color-palette-orange: var(--ds-palette-orange);
87
+ --color-palette-yellow: var(--ds-palette-yellow);
88
+ --color-palette-green: var(--ds-palette-green);
89
+ --color-palette-teal: var(--ds-palette-teal);
90
+ --color-palette-cyan: var(--ds-palette-cyan);
91
+ --color-palette-blue: var(--ds-palette-blue);
92
+ --color-palette-violet: var(--ds-palette-violet);
93
+ --color-palette-magenta: var(--ds-palette-magenta);
94
+ --color-palette-pink: var(--ds-palette-pink);
95
+ --color-palette-bright-red: var(--ds-palette-bright-red);
96
+ --color-palette-bright-orange: var(--ds-palette-bright-orange);
97
+ --color-palette-bright-yellow: var(--ds-palette-bright-yellow);
98
+ --color-palette-bright-green: var(--ds-palette-bright-green);
99
+ --color-palette-bright-teal: var(--ds-palette-bright-teal);
100
+ --color-palette-bright-cyan: var(--ds-palette-bright-cyan);
101
+ --color-palette-bright-blue: var(--ds-palette-bright-blue);
102
+ --color-palette-bright-violet: var(--ds-palette-bright-violet);
103
+ --color-palette-bright-magenta: var(--ds-palette-bright-magenta);
104
+ --color-palette-bright-pink: var(--ds-palette-bright-pink);
105
+ --shadow-hard-sm: var(--ds-elev-sm) var(--ds-shadow-color);
106
+ --shadow-hard-md: var(--ds-elev-md) var(--ds-shadow-color);
107
+ --shadow-hard-lg: var(--ds-elev-lg) var(--ds-shadow-color);
108
+ --shadow-hard-accent-primary: 4px 4px 0px 0px var(--ds-accent-primary);
109
+ --shadow-hard-accent-secondary: 4px 4px 0px 0px var(--ds-accent-secondary);
110
+ --shadow-hard-accent-tertiary: 4px 4px 0px 0px var(--ds-accent-tertiary);
111
+ --shadow-hard-accent-quiet: 4px 4px 0px 0px var(--ds-accent-quiet);
112
+ --shadow-hard-intent-info: 4px 4px 0px 0px var(--ds-intent-info);
113
+ --shadow-hard-intent-success: 4px 4px 0px 0px var(--ds-intent-success);
114
+ --shadow-hard-intent-warning: 4px 4px 0px 0px var(--ds-intent-warning);
115
+ --shadow-hard-intent-danger: 4px 4px 0px 0px var(--ds-intent-danger);
116
+ --shadow-glow-accent-primary: 0 0 10px color-mix(in oklab, var(--ds-accent-primary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-primary) 30%, transparent);
117
+ --shadow-glow-accent-secondary: 0 0 10px color-mix(in oklab, var(--ds-accent-secondary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-secondary) 30%, transparent);
118
+ --shadow-glow-accent-tertiary: 0 0 10px color-mix(in oklab, var(--ds-accent-tertiary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-tertiary) 30%, transparent);
119
+ --shadow-glow-accent-quiet: 0 0 10px color-mix(in oklab, var(--ds-accent-quiet) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-quiet) 30%, transparent);
120
+ --shadow-glow-intent-info: 0 0 10px color-mix(in oklab, var(--ds-intent-info) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-info) 30%, transparent);
121
+ --shadow-glow-intent-success: 0 0 10px color-mix(in oklab, var(--ds-intent-success) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-success) 30%, transparent);
122
+ --shadow-glow-intent-warning: 0 0 10px color-mix(in oklab, var(--ds-intent-warning) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-warning) 30%, transparent);
123
+ --shadow-glow-intent-danger: 0 0 10px color-mix(in oklab, var(--ds-intent-danger) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-danger) 30%, transparent);
124
+ --shadow-glow-accent: 0 0 10px color-mix(in oklab, var(--ds-accent-primary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-primary) 30%, transparent);
125
+
126
+ --font-sans: var(--ds-font-body);
127
+ --font-display: var(--ds-font-display);
128
+ --font-mono: var(--ds-font-mono);
129
+ --font-pixel: var(--ds-font-pixel);
130
+ }
131
+
132
+ /* ==========================================================================
133
+ Fixed colours — level-independent, and that is the point
134
+ ==========================================================================
135
+
136
+ These three do not swap with the level. `--color-black` and
137
+ `--color-white` below DO — they are compat aliases tracking
138
+ `surface.base` and `text.primary`, which is why `--color-black`
139
+ resolves to #ffffff on the `white` level. Use these when true black or
140
+ true white is meant; use `surface.base` for a page ground. */
141
+
142
+ :root {
143
+ --ds-fixed-black: #000000;
144
+ --ds-fixed-white: #ffffff;
145
+ --ds-fixed-transparent: transparent;
146
+ }
147
+
148
+ @theme {
149
+ --color-fixed-black: var(--ds-fixed-black);
150
+ --color-fixed-white: var(--ds-fixed-white);
151
+ --color-fixed-transparent: var(--ds-fixed-transparent);
152
+ }
153
+
154
+ /* ==========================================================================
155
+ The web Medium — geometry and time, level-independent
156
+ ==========================================================================
157
+
158
+ The second axis. A Level varies colour and is selected at runtime; a Medium
159
+ varies geometry and time and is selected at build time by which artifact is
160
+ being emitted. Neither varies on the other's axis, so none of this appears
161
+ inside a level block. See `docs/adr/0004-two-axes-level-and-medium.md`.
162
+
163
+ `video` and `graphic` are real Media with their own numbers — a 1080p
164
+ frame's type scale is not this one scaled — and they are emitted to their own
165
+ artifacts rather than to a selector here. */
166
+
167
+ :root {
168
+ --ds-space-0: 0;
169
+ --ds-space-1: 0.25rem;
170
+ --ds-space-2: 0.5rem;
171
+ --ds-space-3: 0.75rem;
172
+ --ds-space-4: 1rem;
173
+ --ds-space-5: 1.5rem;
174
+ --ds-space-6: 2rem;
175
+ --ds-space-7: 3rem;
176
+ --ds-space-8: 4rem;
177
+ --ds-space-9: 6rem;
178
+ --ds-space-10: 8rem;
179
+ --ds-type-caption: 0.75rem;
180
+ --ds-leading-caption: 1.4;
181
+ --ds-type-body: 1rem;
182
+ --ds-leading-body: 1.6;
183
+ --ds-type-lead: 1.125rem;
184
+ --ds-leading-lead: 1.55;
185
+ --ds-type-title: 1.5rem;
186
+ --ds-leading-title: 1.2;
187
+ --ds-type-display: 2.25rem;
188
+ --ds-leading-display: 1.05;
189
+ --ds-type-hero: 3rem;
190
+ --ds-leading-hero: 0.95;
191
+ --ds-weight-regular: 400;
192
+ --ds-weight-bold: 700;
193
+ --ds-weight-black: 900;
194
+ --ds-stroke-hairline: 1px;
195
+ --ds-stroke-edge: 2px;
196
+ --ds-stroke-heavy: 4px;
197
+ --ds-elev-sm: 2px 2px 0px 0px;
198
+ --ds-elev-md: 4px 4px 0px 0px;
199
+ --ds-elev-lg: 6px 6px 0px 0px;
200
+ --ds-radius-none: 0px;
201
+ --ds-radius-soft: 0px;
202
+ --ds-duration-instant: 0ms;
203
+ --ds-duration-quick: 150ms;
204
+ --ds-duration-considered: 300ms;
205
+ --ds-ease: cubic-bezier(0.4, 0, 0.2, 1);
206
+ --ds-layer-base: 0;
207
+ --ds-layer-raised: 10;
208
+ --ds-layer-overlay: 100;
209
+ --ds-layer-top: 1000;
210
+ --ds-focus-width: 2px;
211
+ --ds-focus-offset: 2px;
212
+ }
213
+
214
+ @theme {
215
+ --text-caption: var(--ds-type-caption);
216
+ --text-caption--line-height: var(--ds-leading-caption);
217
+ --text-body: var(--ds-type-body);
218
+ --text-body--line-height: var(--ds-leading-body);
219
+ --text-lead: var(--ds-type-lead);
220
+ --text-lead--line-height: var(--ds-leading-lead);
221
+ --text-title: var(--ds-type-title);
222
+ --text-title--line-height: var(--ds-leading-title);
223
+ --text-display: var(--ds-type-display);
224
+ --text-display--line-height: var(--ds-leading-display);
225
+ --text-hero: var(--ds-type-hero);
226
+ --text-hero--line-height: var(--ds-leading-hero);
227
+ --font-weight-regular: var(--ds-weight-regular);
228
+ --font-weight-bold: var(--ds-weight-bold);
229
+ --font-weight-black: var(--ds-weight-black);
230
+ --radius-none: var(--ds-radius-none);
231
+ --radius-soft: var(--ds-radius-soft);
232
+ --radius-xs: var(--ds-radius-none);
233
+ --radius-sm: var(--ds-radius-none);
234
+ --radius-md: var(--ds-radius-none);
235
+ --radius-lg: var(--ds-radius-none);
236
+ --radius-xl: var(--ds-radius-none);
237
+ --radius-2xl: var(--ds-radius-none);
238
+ --radius-3xl: var(--ds-radius-none);
239
+ --radius-4xl: var(--ds-radius-none);
240
+ --duration-instant: var(--ds-duration-instant);
241
+ --duration-quick: var(--ds-duration-quick);
242
+ --duration-considered: var(--ds-duration-considered);
243
+ --z-index-base: var(--ds-layer-base);
244
+ --z-index-raised: var(--ds-layer-raised);
245
+ --z-index-overlay: var(--ds-layer-overlay);
246
+ --z-index-top: var(--ds-layer-top);
247
+ --ease-brutalist: var(--ds-ease);
248
+ }
249
+
250
+ /* Looping animations — `animate-ds-spin`, `-spin-slow`, `-pulse`, `-track`.
251
+ * Declared in `src/theme/media.ts` (`LOOPS`); the period is a multiple of
252
+ * the Medium's `considered` duration and the keyframes are invariant.
253
+ * `prefers-reduced-motion` is answered at the call site with `motion-reduce:`. */
254
+ @theme {
255
+ --animate-ds-spin: ds-spin calc(var(--ds-duration-considered) * 3) linear infinite;
256
+ --animate-ds-spin-slow: ds-spin calc(var(--ds-duration-considered) * 9) linear infinite;
257
+ --animate-ds-pulse: ds-pulse calc(var(--ds-duration-considered) * 4) var(--ds-ease) infinite;
258
+ --animate-ds-track: ds-track calc(var(--ds-duration-considered) * 5) var(--ds-ease) infinite;
259
+
260
+ @keyframes ds-spin {
261
+ to {
262
+ transform: rotate(360deg);
263
+ }
264
+ }
265
+
266
+ @keyframes ds-pulse {
267
+ 0%, 100% {
268
+ opacity: 1;
269
+ }
270
+ 50% {
271
+ opacity: 0.45;
272
+ }
273
+ }
274
+
275
+ @keyframes ds-track {
276
+ 0% {
277
+ transform: translateX(-100%);
278
+ }
279
+ 100% {
280
+ transform: translateX(400%);
281
+ }
282
+ }
283
+ }
284
+
285
+ /* ==========================================================================
286
+ Typography roles — level-independent
287
+ ========================================================================== */
288
+
289
+ :root {
290
+ /* Fallback chains matter as much as the first choice: when the web font has
291
+ * not loaded — a blocked CDN, a slow connection, the first paint — the next
292
+ * entry decides the metrics, and a different fallback reflows the page. These
293
+ * chains are the ones the global rules in styles.css have always used, so the
294
+ * tokens and the globals now agree instead of quietly disagreeing.
295
+ *
296
+ * Every stack ends its shipped part with the two symbol faces, before any
297
+ * system font: both are unicode-range bounded, so they draw only what the text
298
+ * face lacks, and a symbol never falls to whatever the machine has installed.
299
+ * check:fonts holds every rendered character to that. */
300
+ --ds-font-display: var(--font-space-grotesk, "Space Grotesk Variable", "Space Grotesk"), var(--font-inter, "Inter Variable", "Inter"), "Symbols Nerd Font Mono", "DS Symbols", sans-serif;
301
+ --ds-font-body: var(--font-inter, "Inter Variable", "Inter"), "Symbols Nerd Font Mono", "DS Symbols", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
302
+ --ds-font-mono: var(--font-ibm-plex-mono, "IBM Plex Mono"), "Symbols Nerd Font Mono", "DS Symbols", "Courier New", monospace;
303
+ --ds-font-pixel: var(--font-vt323, "VT323"), "Symbols Nerd Font Mono", "DS Symbols", monospace;
304
+ }
305
+
306
+ /* ==========================================================================
307
+ The ladder
308
+ ========================================================================== */
309
+
310
+ /* Midnight — Neon on blue-black. The maximal end of the ladder. */
311
+ :root, [data-theme="midnight"] {
312
+ color-scheme: dark;
313
+ --ds-ink-weight: 400;
314
+
315
+ --ds-surface-base: #0a0a1a;
316
+ --ds-surface-raised: #14142a;
317
+ --ds-surface-sunken: #050510;
318
+ --ds-surface-overlay: rgba(5, 5, 16, 0.82);
319
+ --ds-text-primary: #ffffff;
320
+ --ds-text-secondary: #c3c3d4;
321
+ --ds-text-muted: #9d9db4;
322
+ --ds-text-inverse: #0a0a1a;
323
+ --ds-border-strong: #ffffff;
324
+ --ds-border-default: #9d9db4;
325
+ --ds-border-subtle: #33334d;
326
+ --ds-accent-primary: #22d3ee;
327
+ --ds-accent-secondary: #facc15;
328
+ --ds-accent-tertiary: #f955a4;
329
+ --ds-accent-quiet: #8b8ba3;
330
+ --ds-intent-info: #22d3ee;
331
+ --ds-intent-success: #39ff14;
332
+ --ds-intent-warning: #facc15;
333
+ --ds-intent-danger: #f955a4;
334
+ --ds-palette-red: #ff586e;
335
+ --ds-palette-orange: #ff8c00;
336
+ --ds-palette-yellow: #facc15;
337
+ --ds-palette-green: #39ff14;
338
+ --ds-palette-teal: #34d399;
339
+ --ds-palette-cyan: #22d3ee;
340
+ --ds-palette-blue: #38bdf8;
341
+ --ds-palette-violet: #c3afff;
342
+ --ds-palette-magenta: #ff1cff;
343
+ --ds-palette-pink: #f955a4;
344
+ --ds-palette-bright-red: #ff939b;
345
+ --ds-palette-bright-orange: #ffba85;
346
+ --ds-palette-bright-yellow: #ffeaab;
347
+ --ds-palette-bright-green: #c0ffb8;
348
+ --ds-palette-bright-teal: #00f7ae;
349
+ --ds-palette-bright-cyan: #88ebff;
350
+ --ds-palette-bright-blue: #8cd7ff;
351
+ --ds-palette-bright-violet: #ddd4ff;
352
+ --ds-palette-bright-magenta: #ff88fd;
353
+ --ds-palette-bright-pink: #ff8ebe;
354
+ --ds-shadow-color: #ffffff;
355
+ --ds-polarity: dark;
356
+
357
+ --color-surface-base: var(--ds-surface-base);
358
+ --color-surface-raised: var(--ds-surface-raised);
359
+ --color-surface-sunken: var(--ds-surface-sunken);
360
+ --color-surface-overlay: var(--ds-surface-overlay);
361
+ --color-content-primary: var(--ds-text-primary);
362
+ --color-content-secondary: var(--ds-text-secondary);
363
+ --color-content-muted: var(--ds-text-muted);
364
+ --color-content-inverse: var(--ds-text-inverse);
365
+ --color-edge-strong: var(--ds-border-strong);
366
+ --color-edge-default: var(--ds-border-default);
367
+ --color-edge-subtle: var(--ds-border-subtle);
368
+ --color-accent-primary: var(--ds-accent-primary);
369
+ --color-accent-secondary: var(--ds-accent-secondary);
370
+ --color-accent-tertiary: var(--ds-accent-tertiary);
371
+ --color-accent-quiet: var(--ds-accent-quiet);
372
+ --color-intent-info: var(--ds-intent-info);
373
+ --color-intent-success: var(--ds-intent-success);
374
+ --color-intent-warning: var(--ds-intent-warning);
375
+ --color-intent-danger: var(--ds-intent-danger);
376
+ --color-palette-red: var(--ds-palette-red);
377
+ --color-palette-orange: var(--ds-palette-orange);
378
+ --color-palette-yellow: var(--ds-palette-yellow);
379
+ --color-palette-green: var(--ds-palette-green);
380
+ --color-palette-teal: var(--ds-palette-teal);
381
+ --color-palette-cyan: var(--ds-palette-cyan);
382
+ --color-palette-blue: var(--ds-palette-blue);
383
+ --color-palette-violet: var(--ds-palette-violet);
384
+ --color-palette-magenta: var(--ds-palette-magenta);
385
+ --color-palette-pink: var(--ds-palette-pink);
386
+ --color-palette-bright-red: var(--ds-palette-bright-red);
387
+ --color-palette-bright-orange: var(--ds-palette-bright-orange);
388
+ --color-palette-bright-yellow: var(--ds-palette-bright-yellow);
389
+ --color-palette-bright-green: var(--ds-palette-bright-green);
390
+ --color-palette-bright-teal: var(--ds-palette-bright-teal);
391
+ --color-palette-bright-cyan: var(--ds-palette-bright-cyan);
392
+ --color-palette-bright-blue: var(--ds-palette-bright-blue);
393
+ --color-palette-bright-violet: var(--ds-palette-bright-violet);
394
+ --color-palette-bright-magenta: var(--ds-palette-bright-magenta);
395
+ --color-palette-bright-pink: var(--ds-palette-bright-pink);
396
+ --shadow-hard-sm: var(--ds-elev-sm) var(--ds-shadow-color);
397
+ --shadow-hard-md: var(--ds-elev-md) var(--ds-shadow-color);
398
+ --shadow-hard-lg: var(--ds-elev-lg) var(--ds-shadow-color);
399
+ --shadow-hard-accent-primary: 4px 4px 0px 0px var(--ds-accent-primary);
400
+ --shadow-hard-accent-secondary: 4px 4px 0px 0px var(--ds-accent-secondary);
401
+ --shadow-hard-accent-tertiary: 4px 4px 0px 0px var(--ds-accent-tertiary);
402
+ --shadow-hard-accent-quiet: 4px 4px 0px 0px var(--ds-accent-quiet);
403
+ --shadow-hard-intent-info: 4px 4px 0px 0px var(--ds-intent-info);
404
+ --shadow-hard-intent-success: 4px 4px 0px 0px var(--ds-intent-success);
405
+ --shadow-hard-intent-warning: 4px 4px 0px 0px var(--ds-intent-warning);
406
+ --shadow-hard-intent-danger: 4px 4px 0px 0px var(--ds-intent-danger);
407
+ --shadow-glow-accent-primary: 0 0 10px color-mix(in oklab, var(--ds-accent-primary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-primary) 30%, transparent);
408
+ --shadow-glow-accent-secondary: 0 0 10px color-mix(in oklab, var(--ds-accent-secondary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-secondary) 30%, transparent);
409
+ --shadow-glow-accent-tertiary: 0 0 10px color-mix(in oklab, var(--ds-accent-tertiary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-tertiary) 30%, transparent);
410
+ --shadow-glow-accent-quiet: 0 0 10px color-mix(in oklab, var(--ds-accent-quiet) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-quiet) 30%, transparent);
411
+ --shadow-glow-intent-info: 0 0 10px color-mix(in oklab, var(--ds-intent-info) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-info) 30%, transparent);
412
+ --shadow-glow-intent-success: 0 0 10px color-mix(in oklab, var(--ds-intent-success) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-success) 30%, transparent);
413
+ --shadow-glow-intent-warning: 0 0 10px color-mix(in oklab, var(--ds-intent-warning) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-warning) 30%, transparent);
414
+ --shadow-glow-intent-danger: 0 0 10px color-mix(in oklab, var(--ds-intent-danger) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-danger) 30%, transparent);
415
+ --shadow-glow-accent: 0 0 10px color-mix(in oklab, var(--ds-accent-primary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-primary) 30%, transparent);
416
+
417
+ }
418
+
419
+ /* Sketch — Warm paper and pen ink. The light half of the pair. */
420
+ [data-theme="sketch"] {
421
+ color-scheme: light;
422
+ --ds-ink-weight: 450;
423
+
424
+ --ds-surface-base: #f5f3ec;
425
+ --ds-surface-raised: #ffffff;
426
+ --ds-surface-sunken: #efeadf;
427
+ --ds-surface-overlay: rgba(35, 38, 46, 0.72);
428
+ --ds-text-primary: #23262e;
429
+ --ds-text-secondary: #33373f;
430
+ --ds-text-muted: #5c5546;
431
+ --ds-text-inverse: #f5f3ec;
432
+ --ds-border-strong: #23262e;
433
+ --ds-border-default: #8f8672;
434
+ --ds-border-subtle: #c8c3b4;
435
+ --ds-accent-primary: #1450d7;
436
+ --ds-accent-secondary: #006b2e;
437
+ --ds-accent-tertiary: #bd0010;
438
+ --ds-accent-quiet: #6a6252;
439
+ --ds-intent-info: #1450d7;
440
+ --ds-intent-success: #006b2e;
441
+ --ds-intent-warning: #974503;
442
+ --ds-intent-danger: #bd0010;
443
+ --ds-palette-red: #bd0010;
444
+ --ds-palette-orange: #974503;
445
+ --ds-palette-yellow: #705a00;
446
+ --ds-palette-green: #006b2e;
447
+ --ds-palette-teal: #006859;
448
+ --ds-palette-cyan: #006675;
449
+ --ds-palette-blue: #1450d7;
450
+ --ds-palette-violet: #7d00f4;
451
+ --ds-palette-magenta: #a300ad;
452
+ --ds-palette-pink: #b4006c;
453
+ --ds-palette-bright-red: #8f002a;
454
+ --ds-palette-bright-orange: #6c3700;
455
+ --ds-palette-bright-yellow: #534200;
456
+ --ds-palette-bright-green: #024f00;
457
+ --ds-palette-bright-teal: #004d34;
458
+ --ds-palette-bright-cyan: #004b56;
459
+ --ds-palette-bright-blue: #004e6d;
460
+ --ds-palette-bright-violet: #6000bd;
461
+ --ds-palette-bright-magenta: #7f0080;
462
+ --ds-palette-bright-pink: #8a0052;
463
+ --ds-shadow-color: #23262e;
464
+ --ds-polarity: light;
465
+
466
+ --color-surface-base: var(--ds-surface-base);
467
+ --color-surface-raised: var(--ds-surface-raised);
468
+ --color-surface-sunken: var(--ds-surface-sunken);
469
+ --color-surface-overlay: var(--ds-surface-overlay);
470
+ --color-content-primary: var(--ds-text-primary);
471
+ --color-content-secondary: var(--ds-text-secondary);
472
+ --color-content-muted: var(--ds-text-muted);
473
+ --color-content-inverse: var(--ds-text-inverse);
474
+ --color-edge-strong: var(--ds-border-strong);
475
+ --color-edge-default: var(--ds-border-default);
476
+ --color-edge-subtle: var(--ds-border-subtle);
477
+ --color-accent-primary: var(--ds-accent-primary);
478
+ --color-accent-secondary: var(--ds-accent-secondary);
479
+ --color-accent-tertiary: var(--ds-accent-tertiary);
480
+ --color-accent-quiet: var(--ds-accent-quiet);
481
+ --color-intent-info: var(--ds-intent-info);
482
+ --color-intent-success: var(--ds-intent-success);
483
+ --color-intent-warning: var(--ds-intent-warning);
484
+ --color-intent-danger: var(--ds-intent-danger);
485
+ --color-palette-red: var(--ds-palette-red);
486
+ --color-palette-orange: var(--ds-palette-orange);
487
+ --color-palette-yellow: var(--ds-palette-yellow);
488
+ --color-palette-green: var(--ds-palette-green);
489
+ --color-palette-teal: var(--ds-palette-teal);
490
+ --color-palette-cyan: var(--ds-palette-cyan);
491
+ --color-palette-blue: var(--ds-palette-blue);
492
+ --color-palette-violet: var(--ds-palette-violet);
493
+ --color-palette-magenta: var(--ds-palette-magenta);
494
+ --color-palette-pink: var(--ds-palette-pink);
495
+ --color-palette-bright-red: var(--ds-palette-bright-red);
496
+ --color-palette-bright-orange: var(--ds-palette-bright-orange);
497
+ --color-palette-bright-yellow: var(--ds-palette-bright-yellow);
498
+ --color-palette-bright-green: var(--ds-palette-bright-green);
499
+ --color-palette-bright-teal: var(--ds-palette-bright-teal);
500
+ --color-palette-bright-cyan: var(--ds-palette-bright-cyan);
501
+ --color-palette-bright-blue: var(--ds-palette-bright-blue);
502
+ --color-palette-bright-violet: var(--ds-palette-bright-violet);
503
+ --color-palette-bright-magenta: var(--ds-palette-bright-magenta);
504
+ --color-palette-bright-pink: var(--ds-palette-bright-pink);
505
+ --shadow-hard-sm: var(--ds-elev-sm) var(--ds-shadow-color);
506
+ --shadow-hard-md: var(--ds-elev-md) var(--ds-shadow-color);
507
+ --shadow-hard-lg: var(--ds-elev-lg) var(--ds-shadow-color);
508
+ --shadow-hard-accent-primary: 4px 4px 0px 0px var(--ds-accent-primary);
509
+ --shadow-hard-accent-secondary: 4px 4px 0px 0px var(--ds-accent-secondary);
510
+ --shadow-hard-accent-tertiary: 4px 4px 0px 0px var(--ds-accent-tertiary);
511
+ --shadow-hard-accent-quiet: 4px 4px 0px 0px var(--ds-accent-quiet);
512
+ --shadow-hard-intent-info: 4px 4px 0px 0px var(--ds-intent-info);
513
+ --shadow-hard-intent-success: 4px 4px 0px 0px var(--ds-intent-success);
514
+ --shadow-hard-intent-warning: 4px 4px 0px 0px var(--ds-intent-warning);
515
+ --shadow-hard-intent-danger: 4px 4px 0px 0px var(--ds-intent-danger);
516
+ --shadow-glow-accent-primary: 0 0 10px color-mix(in oklab, var(--ds-accent-primary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-primary) 30%, transparent);
517
+ --shadow-glow-accent-secondary: 0 0 10px color-mix(in oklab, var(--ds-accent-secondary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-secondary) 30%, transparent);
518
+ --shadow-glow-accent-tertiary: 0 0 10px color-mix(in oklab, var(--ds-accent-tertiary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-tertiary) 30%, transparent);
519
+ --shadow-glow-accent-quiet: 0 0 10px color-mix(in oklab, var(--ds-accent-quiet) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-quiet) 30%, transparent);
520
+ --shadow-glow-intent-info: 0 0 10px color-mix(in oklab, var(--ds-intent-info) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-info) 30%, transparent);
521
+ --shadow-glow-intent-success: 0 0 10px color-mix(in oklab, var(--ds-intent-success) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-success) 30%, transparent);
522
+ --shadow-glow-intent-warning: 0 0 10px color-mix(in oklab, var(--ds-intent-warning) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-warning) 30%, transparent);
523
+ --shadow-glow-intent-danger: 0 0 10px color-mix(in oklab, var(--ds-intent-danger) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-intent-danger) 30%, transparent);
524
+ --shadow-glow-accent: 0 0 10px color-mix(in oklab, var(--ds-accent-primary) 50%, transparent), 0 0 20px color-mix(in oklab, var(--ds-accent-primary) 30%, transparent);
525
+
526
+ }
527
+
528
+ /* Native form controls, scrollbars and the caret follow `color-scheme`, which
529
+ * each level declares above. Without it a light level renders dark scrollbars
530
+ * and an unreadable date picker while every styled element looks correct. */
531
+
532
+ /* Running-text weight by polarity — INK_WEIGHT in src/theme/levels.ts. */
533
+ @layer base {
534
+ :root, [data-theme] {
535
+ font-weight: var(--ds-ink-weight);
536
+ }
537
+ }
538
+
package/dist/tokens.js ADDED
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}