@hirobius/design-system 0.8.1

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 (111) hide show
  1. package/LICENSE/main.tsx +21 -0
  2. package/README.md +124 -0
  3. package/dist/chunks/TokenDisplayContext-B3gxyQN7.js +95 -0
  4. package/dist/chunks/form-DnGRy27o.js +63 -0
  5. package/dist/cn.js +8 -0
  6. package/dist/contexts.js +133 -0
  7. package/dist/form.js +62 -0
  8. package/dist/hirobius-ui.js +5611 -0
  9. package/dist/manifest.js +28 -0
  10. package/dist/tokens.css +1 -0
  11. package/dist/tokens.js +693 -0
  12. package/dist/types/src/app/components/activity-feed.d.ts +43 -0
  13. package/dist/types/src/app/components/alert.d.ts +18 -0
  14. package/dist/types/src/app/components/asset-img.d.ts +54 -0
  15. package/dist/types/src/app/components/avatar.d.ts +23 -0
  16. package/dist/types/src/app/components/badge.d.ts +20 -0
  17. package/dist/types/src/app/components/breadcrumb.d.ts +26 -0
  18. package/dist/types/src/app/components/button.d.ts +37 -0
  19. package/dist/types/src/app/components/callout.d.ts +23 -0
  20. package/dist/types/src/app/components/card.d.ts +119 -0
  21. package/dist/types/src/app/components/checkbox.d.ts +20 -0
  22. package/dist/types/src/app/components/cinematic-link.d.ts +13 -0
  23. package/dist/types/src/app/components/code-block.d.ts +29 -0
  24. package/dist/types/src/app/components/combobox.d.ts +46 -0
  25. package/dist/types/src/app/components/component-instance-matrix.d.ts +21 -0
  26. package/dist/types/src/app/components/container.d.ts +31 -0
  27. package/dist/types/src/app/components/dialog.d.ts +73 -0
  28. package/dist/types/src/app/components/disclosure.d.ts +32 -0
  29. package/dist/types/src/app/components/divider.d.ts +21 -0
  30. package/dist/types/src/app/components/doc-link-card.d.ts +26 -0
  31. package/dist/types/src/app/components/empty-state.d.ts +24 -0
  32. package/dist/types/src/app/components/error-boundary.d.ts +25 -0
  33. package/dist/types/src/app/components/error-pattern.d.ts +9 -0
  34. package/dist/types/src/app/components/field.d.ts +25 -0
  35. package/dist/types/src/app/components/form.d.ts +106 -0
  36. package/dist/types/src/app/components/foundation-swatch.d.ts +39 -0
  37. package/dist/types/src/app/components/grid.d.ts +65 -0
  38. package/dist/types/src/app/components/heading-stack.d.ts +42 -0
  39. package/dist/types/src/app/components/history-card.d.ts +12 -0
  40. package/dist/types/src/app/components/icon-button.d.ts +23 -0
  41. package/dist/types/src/app/components/icon.d.ts +30 -0
  42. package/dist/types/src/app/components/info-page.d.ts +10 -0
  43. package/dist/types/src/app/components/inline-code.d.ts +12 -0
  44. package/dist/types/src/app/components/inline-link.d.ts +17 -0
  45. package/dist/types/src/app/components/input.d.ts +46 -0
  46. package/dist/types/src/app/components/lab/tokenUtils.d.ts +38 -0
  47. package/dist/types/src/app/components/menu.d.ts +56 -0
  48. package/dist/types/src/app/components/nav-group.d.ts +24 -0
  49. package/dist/types/src/app/components/nav-item.d.ts +21 -0
  50. package/dist/types/src/app/components/not-found-pattern.d.ts +1 -0
  51. package/dist/types/src/app/components/page.d.ts +43 -0
  52. package/dist/types/src/app/components/pagination.d.ts +24 -0
  53. package/dist/types/src/app/components/popover.d.ts +44 -0
  54. package/dist/types/src/app/components/progress.d.ts +25 -0
  55. package/dist/types/src/app/components/radio.d.ts +18 -0
  56. package/dist/types/src/app/components/segmented-control.d.ts +33 -0
  57. package/dist/types/src/app/components/skeleton.d.ts +25 -0
  58. package/dist/types/src/app/components/sketch.d.ts +13 -0
  59. package/dist/types/src/app/components/slider.d.ts +22 -0
  60. package/dist/types/src/app/components/spinner.d.ts +20 -0
  61. package/dist/types/src/app/components/stack.d.ts +39 -0
  62. package/dist/types/src/app/components/stat.d.ts +24 -0
  63. package/dist/types/src/app/components/status-list-item.d.ts +25 -0
  64. package/dist/types/src/app/components/status-tile.d.ts +22 -0
  65. package/dist/types/src/app/components/stepper-field.d.ts +13 -0
  66. package/dist/types/src/app/components/surface-padding.d.ts +18 -0
  67. package/dist/types/src/app/components/surface.d.ts +30 -0
  68. package/dist/types/src/app/components/table.d.ts +40 -0
  69. package/dist/types/src/app/components/tabs.d.ts +27 -0
  70. package/dist/types/src/app/components/tag.d.ts +32 -0
  71. package/dist/types/src/app/components/text-lockup.d.ts +38 -0
  72. package/dist/types/src/app/components/text.d.ts +26 -0
  73. package/dist/types/src/app/components/tile-grid.d.ts +17 -0
  74. package/dist/types/src/app/components/toast.d.ts +56 -0
  75. package/dist/types/src/app/components/toggle.d.ts +18 -0
  76. package/dist/types/src/app/components/token.d.ts +59 -0
  77. package/dist/types/src/app/components/tooltip.d.ts +33 -0
  78. package/dist/types/src/app/context/DemoStateContext.d.ts +21 -0
  79. package/dist/types/src/app/context/FontContext.d.ts +4 -0
  80. package/dist/types/src/app/context/LanguageContext.d.ts +23 -0
  81. package/dist/types/src/app/context/RouterContext.d.ts +61 -0
  82. package/dist/types/src/app/context/TenantContext.d.ts +29 -0
  83. package/dist/types/src/app/context/ThemeContext.d.ts +18 -0
  84. package/dist/types/src/app/context/TokenDisplayContext.d.ts +11 -0
  85. package/dist/types/src/app/context/index.d.ts +19 -0
  86. package/dist/types/src/app/data/manifest-types.d.ts +128 -0
  87. package/dist/types/src/app/design-system/generated-token-refs.d.ts +586 -0
  88. package/dist/types/src/app/design-system/generated-token-values.d.ts +223 -0
  89. package/dist/types/src/app/design-system/theme.d.ts +32 -0
  90. package/dist/types/src/app/design-system/tokens.d.ts +333 -0
  91. package/dist/types/src/app/hooks/useFocusVisible.d.ts +9 -0
  92. package/dist/types/src/app/hooks/useInteractionState.d.ts +27 -0
  93. package/dist/types/src/app/layouts/CaseStudyLayout.d.ts +21 -0
  94. package/dist/types/src/app/layouts/DocLayout.d.ts +16 -0
  95. package/dist/types/src/app/layouts/EmbeddedDocLayoutContext.d.ts +6 -0
  96. package/dist/types/src/app/lib/nav-active.d.ts +16 -0
  97. package/dist/types/src/app/lib/navLevels.d.ts +4 -0
  98. package/dist/types/src/app/pages/hds/HdsSystemDocLayout.d.ts +7 -0
  99. package/dist/types/src/form/hds-form.d.ts +61 -0
  100. package/dist/types/src/form/index.d.ts +30 -0
  101. package/dist/types/src/form/use-hds-form.d.ts +23 -0
  102. package/dist/types/src/index.d.ts +2276 -0
  103. package/dist/types/src/lib/deprecation.d.ts +4 -0
  104. package/dist/types/src/lib/manifest-entry.d.ts +3 -0
  105. package/dist/types/src/lib/utils.d.ts +3 -0
  106. package/dist/variables.css +461 -0
  107. package/hirobius.tokens.json +2220 -0
  108. package/package.json +366 -0
  109. package/protocol/envelope.mjs +201 -0
  110. package/protocol/figma-snapshot.schema.json +190 -0
  111. package/public/hds-manifest.json +11230 -0
@@ -0,0 +1,4 @@
1
+ /** Emit a deprecation warning once per unique `code` (dev only). */
2
+ export declare function warnOnce(code: string, message: string): void;
3
+ /** Test/Storybook helper to reset the once-per-session guard. */
4
+ export declare function __resetDeprecationWarnings(): void;
@@ -0,0 +1,3 @@
1
+ import type { SystemManifest } from '../app/data/manifest-types';
2
+ declare const manifest: SystemManifest;
3
+ export default manifest;
@@ -0,0 +1,3 @@
1
+ import { type ClassValue } from "clsx";
2
+ /** @public */
3
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,461 @@
1
+ /* @hirobius/design-system/variables.css — design tokens as CSS custom
2
+ * properties ONLY (no reset, no preflight, no utilities). Safe to import
3
+ * alongside another design system; cannot restyle host elements. */
4
+ /**
5
+ * Generated by scripts/build-tokens.mjs — do not edit manually.
6
+ * Source: hirobius.tokens.json (W3C DTCG 2025.10)
7
+ * Regenerate: node scripts/build-tokens.mjs
8
+ *
9
+ * Three-tier architecture: primitive → semantic → component
10
+ * Dark mode via [data-theme="dark"] selector (Figma SDS convention).
11
+ * The var() reference chain is preserved so dark-mode overrides cascade
12
+ * automatically — no JavaScript re-renders needed for theme switching.
13
+ */
14
+
15
+ :root {
16
+
17
+ /* ── Primitives ────────────────────────────────────────────────────────── */
18
+ --primitive-color-neutral-50: #fafafa;
19
+ --primitive-color-neutral-100: #f5f5f5;
20
+ --primitive-color-neutral-200: #e5e5e5;
21
+ --primitive-color-neutral-300: #d4d4d4;
22
+ --primitive-color-neutral-400: #a3a3a3;
23
+ --primitive-color-neutral-500: #737373;
24
+ --primitive-color-neutral-600: #525252;
25
+ --primitive-color-neutral-700: #404040;
26
+ --primitive-color-neutral-800: #262626;
27
+ --primitive-color-neutral-850: #1a1a1a;
28
+ --primitive-color-neutral-900: #111111;
29
+ --primitive-color-neutral-950: #0a0a0a;
30
+ --primitive-color-neutral-white: #ffffff;
31
+ --primitive-color-neutral-black: #000000;
32
+ --primitive-color-blue-50: oklch(0.96 0.03 266.54);
33
+ --primitive-color-blue-100: oklch(0.92 0.04 266.54);
34
+ --primitive-color-blue-200: oklch(0.88 0.07 266.54);
35
+ --primitive-color-blue-300: oklch(0.70 0.2903 266.54);
36
+ --primitive-color-blue-400: oklch(0.65 0.2903 266.54);
37
+ --primitive-color-blue-450: oklch(0.56 0.29 266.60);
38
+ --primitive-color-blue-500: #1E2EFD;
39
+ --primitive-color-blue-600: oklch(0.45 0.2903 266.54);
40
+ --primitive-color-blue-700: oklch(0.44 0.2903 266.54);
41
+ --primitive-color-blue-800: oklch(0.30 0.07 266.54);
42
+ --primitive-color-blue-900: oklch(0.22 0.05 266.54);
43
+ --primitive-color-red-50: #fef2f2;
44
+ --primitive-color-red-400: #f87171;
45
+ --primitive-color-red-700: #b91c1c;
46
+ --primitive-color-red-950: #450a0a;
47
+ --primitive-color-green-50: #ecfdf5;
48
+ --primitive-color-green-400: #34d399;
49
+ --primitive-color-green-700: #047857;
50
+ --primitive-color-green-950: #022c22;
51
+ --primitive-color-amber-50: #fffbeb;
52
+ --primitive-color-amber-400: #fbbf24;
53
+ --primitive-color-amber-800: #92400e;
54
+ --primitive-color-amber-950: #451a03;
55
+ --primitive-color-stone-100: #F5EFE7;
56
+ --primitive-color-stone-400: #D0B492;
57
+ --primitive-color-stone-450: #BC9D7E;
58
+ --primitive-color-stone-500: #A8896A;
59
+ --primitive-color-stone-600: #8B6F47;
60
+ --primitive-color-stone-700: #75593A;
61
+ --primitive-color-stone-800: #5C432A;
62
+ --primitive-color-stone-950: #3A2E1F;
63
+ --primitive-color-projectBrand-microsoftGameDev-100: #E5E5FC;
64
+ --primitive-color-projectBrand-microsoftGameDev-500: #6d31fb;
65
+ --primitive-color-projectBrand-microsoftGameDev-900: oklch(0.22 0.16 304);
66
+ --primitive-space-0: 0px;
67
+ --primitive-space-1: 4px;
68
+ --primitive-space-2: 8px;
69
+ --primitive-space-3: 12px;
70
+ --primitive-space-4: 16px;
71
+ --primitive-space-5: 20px;
72
+ --primitive-space-6: 24px;
73
+ --primitive-space-7: 28px;
74
+ --primitive-space-8: 32px;
75
+ --primitive-space-10: 40px;
76
+ --primitive-space-12: 48px;
77
+ --primitive-space-16: 64px;
78
+ --primitive-space-20: 80px;
79
+ --primitive-space-24: 96px;
80
+ --primitive-space-32: 128px;
81
+ --primitive-space-px1: 1px;
82
+ --primitive-space-px2: 2px;
83
+ --primitive-space-px6: 6px;
84
+ --primitive-space-px10: 10px;
85
+ --primitive-blur-8: 8px;
86
+ --primitive-blur-16: 16px;
87
+ --primitive-radius-0: 0px;
88
+ --primitive-radius-2: 2px;
89
+ --primitive-radius-4: 4px;
90
+ --primitive-radius-8: 8px;
91
+ --primitive-radius-12: 12px;
92
+ --primitive-radius-full: 9999px;
93
+ --primitive-typography-family-primary: Satoshi, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
94
+ --primitive-typography-family-display: "Clash Display", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
95
+ --primitive-typography-family-mono: "Geist Mono", "Courier New", monospace;
96
+ --primitive-typography-size-2xs: 10px;
97
+ --primitive-typography-size-xs: 13px;
98
+ --primitive-typography-size-sm: 15px;
99
+ --primitive-typography-size-base: 17px;
100
+ --primitive-typography-size-lg: 20px;
101
+ --primitive-typography-size-xl: 24px;
102
+ --primitive-typography-size-2xl: 30px;
103
+ --primitive-typography-size-3xl: 36px;
104
+ --primitive-typography-size-4xl: 48px;
105
+ --primitive-typography-size-5xl: 80px;
106
+ --primitive-typography-size-7xl: 72px;
107
+ --primitive-typography-weight-light: 300;
108
+ --primitive-typography-weight-regular: 400;
109
+ --primitive-typography-weight-medium: 500;
110
+ --primitive-typography-weight-semibold: 600;
111
+ --primitive-typography-weight-bold: 700;
112
+ --primitive-typography-lineHeight-compact: 0.95;
113
+ --primitive-typography-lineHeight-none: 1;
114
+ --primitive-typography-lineHeight-tight: 1.25;
115
+ --primitive-typography-lineHeight-snug: 1.375;
116
+ --primitive-typography-lineHeight-normal: 1.5;
117
+ --primitive-typography-lineHeight-relaxed: 1.625;
118
+ --primitive-typography-letterSpacing-tighter: -0.02em;
119
+ --primitive-typography-letterSpacing-tight: -0.01em;
120
+ --primitive-typography-letterSpacing-normal: 0em;
121
+ --primitive-typography-letterSpacing-wide: 0.01em;
122
+ --primitive-typography-letterSpacing-wider: 0.02em;
123
+ --primitive-typography-letterSpacing-caps: 0.06em;
124
+ --primitive-duration-instant: 100ms;
125
+ --primitive-duration-short: 150ms;
126
+ --primitive-duration-medium: 250ms;
127
+ --primitive-duration-long: 400ms;
128
+ --primitive-easing-emphasized: cubic-bezier(0.4, 0, 0.2, 1);
129
+ --primitive-easing-decelerate: cubic-bezier(0, 0, 0.2, 1);
130
+ --primitive-easing-accelerate: cubic-bezier(0.4, 0, 1, 1);
131
+ --primitive-easing-elastic: spring(300, 20, 1);
132
+ --primitive-shadow-color: 220 13% 18%;
133
+ --primitive-breakpoint-xs: 375px;
134
+ --primitive-breakpoint-sm: 640px;
135
+ --primitive-breakpoint-md: 768px;
136
+ --primitive-breakpoint-lg: 1024px;
137
+ --primitive-breakpoint-xl: 1280px;
138
+ --primitive-size-8: 8px;
139
+ --primitive-size-10: 10px;
140
+ --primitive-size-12: 12px;
141
+ --primitive-size-16: 16px;
142
+ --primitive-size-20: 20px;
143
+ --primitive-size-24: 24px;
144
+ --primitive-size-32: 32px;
145
+ --primitive-size-40: 40px;
146
+ --primitive-size-48: 48px;
147
+ --primitive-size-64: 64px;
148
+ --primitive-size-80: 80px;
149
+ --primitive-size-96: 96px;
150
+ --primitive-size-interactive-min: 44px;
151
+ --primitive-size-width-96: 96px;
152
+ --primitive-size-width-760: 760px;
153
+ --primitive-size-width-1200: 1200px;
154
+ --primitive-size-width-50ch: 50ch;
155
+ --primitive-grid-columns-1: 1;
156
+ --primitive-grid-columns-2: 2;
157
+ --primitive-grid-columns-3: 3;
158
+ --primitive-zIndex-0: 0;
159
+ --primitive-zIndex-10: 10;
160
+ --primitive-zIndex-100: 100;
161
+ --primitive-zIndex-1000: 1000;
162
+ --primitive-borderWidth-xs: 1px;
163
+ --primitive-borderWidth-sm: 2px;
164
+ --primitive-borderWidth-md: 4px;
165
+
166
+ /* ── Semantic (light mode defaults) ────────────────────────────────────── */
167
+ /* semantic.motion.productive */
168
+ --hds-motion-productive-duration: var(--primitive-duration-short);
169
+ --hds-motion-productive-easing: var(--primitive-easing-decelerate);
170
+ /* semantic.motion.expressive */
171
+ --hds-motion-expressive-duration: var(--primitive-duration-medium);
172
+ --hds-motion-expressive-easing: var(--primitive-easing-elastic);
173
+ /* semantic.motion.spatial */
174
+ --hds-motion-spatial-duration: var(--primitive-duration-long);
175
+ --hds-motion-spatial-easing: var(--primitive-easing-emphasized);
176
+ /* semantic.motion.exit */
177
+ --hds-motion-exit-duration: var(--primitive-duration-instant);
178
+ --hds-motion-exit-easing: var(--primitive-easing-accelerate);
179
+ --semantic-color-surface-page: var(--primitive-color-neutral-white);
180
+ --semantic-color-surface-raised: var(--primitive-color-neutral-50);
181
+ --semantic-color-surface-overlay: var(--primitive-color-neutral-100);
182
+ --semantic-color-surface-inverse: var(--primitive-color-neutral-black);
183
+ --semantic-color-surface-accent: var(--primitive-color-blue-500);
184
+ --semantic-color-surface-accentSubtle: var(--primitive-color-blue-50);
185
+ --semantic-color-content-primary: var(--primitive-color-neutral-900);
186
+ --semantic-color-content-secondary: var(--primitive-color-neutral-600);
187
+ --semantic-color-content-disabled: var(--primitive-color-neutral-300);
188
+ --semantic-color-content-inverse: var(--primitive-color-neutral-100);
189
+ --semantic-color-content-accent: var(--primitive-color-blue-500);
190
+ --semantic-color-content-onAccent: var(--primitive-color-neutral-white);
191
+ --semantic-color-border-default: var(--primitive-color-neutral-200);
192
+ --semantic-color-border-subdued: var(--primitive-color-neutral-200);
193
+ --semantic-color-border-subtle: var(--primitive-color-neutral-100);
194
+ --semantic-color-border-strong: var(--primitive-color-neutral-300);
195
+ --semantic-color-border-accent: var(--primitive-color-blue-500);
196
+ --semantic-color-feedback-error: var(--primitive-color-red-700);
197
+ --semantic-color-feedback-success: var(--primitive-color-green-700);
198
+ --semantic-color-feedback-warning: var(--primitive-color-amber-800);
199
+ --semantic-color-feedback-info: var(--primitive-color-blue-500);
200
+ --semantic-color-feedback-bg-error: var(--primitive-color-red-50);
201
+ --semantic-color-feedback-bg-success: var(--primitive-color-green-50);
202
+ --semantic-color-feedback-bg-warning: var(--primitive-color-amber-50);
203
+ --semantic-color-feedback-bg-info: var(--primitive-color-blue-50);
204
+ --semantic-space-subgrid-hairline: var(--primitive-space-px1);
205
+ --semantic-space-subgrid-xs: var(--primitive-space-px2);
206
+ --semantic-space-subgrid-gap: var(--primitive-space-1);
207
+ --semantic-space-component-gap: var(--primitive-space-2);
208
+ --semantic-space-component-medium: var(--primitive-space-3);
209
+ --semantic-space-component-padding: var(--primitive-space-6);
210
+ --semantic-space-layout-tight: var(--primitive-space-4);
211
+ --semantic-space-layout-normal: var(--primitive-space-6);
212
+ --semantic-space-layout-gutter: var(--primitive-space-6);
213
+ --semantic-space-layout-inset: var(--primitive-space-8);
214
+ --semantic-space-layout-spacious: var(--primitive-space-12);
215
+ --semantic-space-section-stack: var(--primitive-space-20);
216
+ --semantic-space-section-inset: var(--primitive-space-24);
217
+ --semantic-space-section-heroMax: var(--primitive-space-32);
218
+ --semantic-space-sidebar-indent: var(--primitive-space-3);
219
+ --semantic-space-sidebar-gap: var(--primitive-space-4);
220
+ --semantic-space-sidebar-sectionGap: var(--primitive-space-3);
221
+ --semantic-space-sidebar-railPadding: var(--primitive-space-5);
222
+ --semantic-layout-width-content: var(--primitive-size-width-760);
223
+ --semantic-layout-width-max: var(--primitive-size-width-1200);
224
+ --semantic-layout-container-maxWidth: var(--primitive-size-width-1200);
225
+ --semantic-layout-content-maxWidth: var(--primitive-size-width-760);
226
+ --semantic-layout-prose-maxWidth: var(--primitive-size-width-50ch);
227
+ --semantic-layout-section-paddingY: var(--primitive-space-20);
228
+ --semantic-layout-grid-gap: var(--primitive-space-8);
229
+ --semantic-layout-grid-columns-mobile: var(--primitive-grid-columns-1);
230
+ --semantic-layout-grid-columns-tablet: var(--primitive-grid-columns-2);
231
+ --semantic-layout-grid-columns-desktop: var(--primitive-grid-columns-3);
232
+ /* semantic.typography.display */
233
+ --semantic-typography-display-font-family: var(--primitive-typography-family-display);
234
+ --semantic-typography-display-font-size: var(--primitive-typography-size-7xl);
235
+ --semantic-typography-display-font-weight: var(--primitive-typography-weight-medium);
236
+ --semantic-typography-display-letter-spacing: var(--primitive-typography-letterSpacing-tight);
237
+ --semantic-typography-display-line-height: var(--primitive-typography-lineHeight-none);
238
+ /* semantic.typography.h1 */
239
+ --semantic-typography-h1-font-family: var(--primitive-typography-family-display);
240
+ --semantic-typography-h1-font-size: var(--primitive-typography-size-4xl);
241
+ --semantic-typography-h1-font-weight: var(--primitive-typography-weight-medium);
242
+ --semantic-typography-h1-letter-spacing: var(--primitive-typography-letterSpacing-tight);
243
+ --semantic-typography-h1-line-height: var(--primitive-typography-lineHeight-tight);
244
+ /* semantic.typography.h2 */
245
+ --semantic-typography-h2-font-family: var(--primitive-typography-family-display);
246
+ --semantic-typography-h2-font-size: var(--primitive-typography-size-2xl);
247
+ --semantic-typography-h2-font-weight: var(--primitive-typography-weight-medium);
248
+ --semantic-typography-h2-letter-spacing: var(--primitive-typography-letterSpacing-tight);
249
+ --semantic-typography-h2-line-height: 42px;
250
+ /* semantic.typography.h3 */
251
+ --semantic-typography-h3-font-family: var(--primitive-typography-family-display);
252
+ --semantic-typography-h3-font-size: var(--primitive-typography-size-lg);
253
+ --semantic-typography-h3-font-weight: var(--primitive-typography-weight-medium);
254
+ --semantic-typography-h3-letter-spacing: var(--primitive-typography-letterSpacing-normal);
255
+ --semantic-typography-h3-line-height: 28px;
256
+ /* semantic.typography.body */
257
+ --semantic-typography-body-font-family: var(--primitive-typography-family-primary);
258
+ --semantic-typography-body-font-size: var(--primitive-typography-size-base);
259
+ --semantic-typography-body-font-weight: var(--primitive-typography-weight-medium);
260
+ --semantic-typography-body-letter-spacing: var(--primitive-typography-letterSpacing-normal);
261
+ --semantic-typography-body-line-height: 28px;
262
+ --semantic-typography-body-max-width: 60ch;
263
+ /* semantic.typography.ui */
264
+ --semantic-typography-ui-font-family: var(--primitive-typography-family-primary);
265
+ --semantic-typography-ui-font-size: var(--primitive-typography-size-sm);
266
+ --semantic-typography-ui-font-weight: var(--primitive-typography-weight-medium);
267
+ --semantic-typography-ui-letter-spacing: var(--primitive-typography-letterSpacing-normal);
268
+ --semantic-typography-ui-line-height: 24px;
269
+ --semantic-typography-ui-max-width: 60ch;
270
+ /* semantic.typography.eyebrow */
271
+ --semantic-typography-eyebrow-font-family: var(--primitive-typography-family-primary);
272
+ --semantic-typography-eyebrow-font-size: var(--primitive-typography-size-xs);
273
+ --semantic-typography-eyebrow-font-weight: var(--primitive-typography-weight-medium);
274
+ --semantic-typography-eyebrow-letter-spacing: var(--primitive-typography-letterSpacing-caps);
275
+ --semantic-typography-eyebrow-line-height: 20px;
276
+ --semantic-typography-eyebrow-text-transform: uppercase;
277
+ /* semantic.typography.mono */
278
+ --semantic-typography-mono-font-family: var(--primitive-typography-family-mono);
279
+ --semantic-typography-mono-font-size: var(--primitive-typography-size-xs);
280
+ --semantic-typography-mono-font-weight: var(--primitive-typography-weight-regular);
281
+ --semantic-typography-mono-letter-spacing: var(--primitive-typography-letterSpacing-normal);
282
+ --semantic-typography-mono-line-height: 20px;
283
+ --semantic-typography-mono-max-width: 60ch;
284
+ --semantic-typography-lineHeight-none: var(--primitive-typography-lineHeight-none);
285
+ --semantic-docs-space-section: var(--primitive-space-12);
286
+ --semantic-docs-space-paragraph: var(--primitive-space-6);
287
+ --semantic-docs-space-inline: var(--primitive-space-2);
288
+ --semantic-accent-rest: var(--primitive-color-blue-500);
289
+ --semantic-accent-hover: var(--primitive-color-blue-600);
290
+ --semantic-accent-pressed: var(--primitive-color-blue-700);
291
+ --semantic-accent-inactive: var(--primitive-color-blue-200);
292
+ --semantic-accent-disabled: var(--primitive-color-blue-100);
293
+ --semantic-accent-content: var(--primitive-color-blue-500);
294
+ --semantic-accent-contentHover: var(--primitive-color-blue-600);
295
+ --semantic-accent-subtle: var(--primitive-color-blue-50);
296
+ --semantic-radius-action: var(--primitive-radius-12);
297
+ --semantic-borderWidth-default: var(--primitive-borderWidth-xs);
298
+ --semantic-borderWidth-emphasis: var(--primitive-borderWidth-sm);
299
+ --semantic-shadow-subtle: 0 1px 2px hsl(var(--primitive-shadow-color) / 0.04), 0 1px 1px hsl(var(--primitive-shadow-color) / 0.06);
300
+ --semantic-shadow-floating: 0 4px 6px hsl(var(--primitive-shadow-color) / 0.05), 0 10px 15px hsl(var(--primitive-shadow-color) / 0.08);
301
+ --semantic-shadow-overlay: 0 10px 15px hsl(var(--primitive-shadow-color) / 0.08), 0 25px 50px hsl(var(--primitive-shadow-color) / 0.12);
302
+ /* semantic.elevation.flat */
303
+ --semantic-elevation-flat-surface: var(--semantic-color-surface-page);
304
+ --semantic-elevation-flat-shadow: none;
305
+ --semantic-elevation-flat-border: var(--semantic-color-border-subtle);
306
+ /* semantic.elevation.raised */
307
+ --semantic-elevation-raised-surface: var(--semantic-color-surface-raised);
308
+ --semantic-elevation-raised-shadow: var(--semantic-shadow-subtle);
309
+ --semantic-elevation-raised-border: transparent;
310
+ /* semantic.elevation.floating */
311
+ --semantic-elevation-floating-surface: var(--semantic-color-surface-raised);
312
+ --semantic-elevation-floating-shadow: var(--semantic-shadow-floating);
313
+ --semantic-elevation-floating-border: transparent;
314
+ /* semantic.elevation.overlay */
315
+ --semantic-elevation-overlay-surface: var(--semantic-color-surface-overlay);
316
+ --semantic-elevation-overlay-shadow: var(--semantic-shadow-overlay);
317
+ --semantic-elevation-overlay-border: transparent;
318
+
319
+ /* ── Component ─────────────────────────────────────────────────────────── */
320
+ --component-nav-bg: var(--semantic-color-surface-page);
321
+ --component-nav-bgActive: var(--semantic-accent-subtle);
322
+ --component-nav-borderActive: var(--semantic-color-surface-accent);
323
+ --component-nav-text: var(--semantic-color-content-secondary);
324
+ --component-nav-textActive: var(--semantic-color-content-primary);
325
+ --component-nav-height: var(--primitive-space-16);
326
+ --component-nav-paddingX: var(--primitive-space-6);
327
+ --component-nav-paddingY: var(--primitive-space-2);
328
+ --component-tag-background: var(--semantic-accent-subtle);
329
+ --component-tag-text: var(--semantic-color-content-primary);
330
+ --component-tag-border: var(--semantic-color-border-default);
331
+ --component-tag-radius: var(--primitive-radius-full);
332
+ --component-tag-fontSize: var(--primitive-typography-size-xs);
333
+ --component-tag-fontWeight: var(--primitive-typography-weight-medium);
334
+ --component-tag-lineHeight: var(--primitive-typography-lineHeight-normal);
335
+ --component-tag-minWidth: var(--primitive-size-48);
336
+ --component-tag-minHeight: var(--primitive-space-6);
337
+ --component-tag-paddingX: var(--primitive-space-3);
338
+ --component-tag-paddingY: var(--primitive-space-2);
339
+ --component-tag-activeText: var(--semantic-color-content-onAccent);
340
+ --component-tag-activeBackground: var(--semantic-accent-rest);
341
+ --component-tag-activeBorder: var(--semantic-accent-rest);
342
+ --component-tag-activeHover: var(--semantic-accent-hover);
343
+ --component-badge-fontSize: var(--primitive-typography-size-xs);
344
+ --component-badge-fontWeight: var(--primitive-typography-weight-medium);
345
+ --component-badge-text: var(--semantic-color-content-primary);
346
+ --component-badge-bg: var(--semantic-color-feedback-bg-info);
347
+ --component-badge-radius: var(--primitive-radius-4);
348
+ --component-badge-height: var(--primitive-size-20);
349
+ --component-badge-minWidth: var(--primitive-size-20);
350
+ --component-badge-paddingY: var(--primitive-space-px2);
351
+ --component-badge-paddingX: var(--primitive-space-px6);
352
+ --component-button-bg: var(--semantic-color-surface-accent);
353
+ --component-button-bgHover: var(--semantic-accent-hover);
354
+ --component-button-text: var(--semantic-color-content-onAccent);
355
+ --component-button-radius: var(--semantic-radius-action);
356
+ --component-button-paddingX: var(--primitive-space-4);
357
+ --component-button-paddingY: var(--primitive-space-3);
358
+ --component-button-size-sm-paddingX: var(--primitive-space-2);
359
+ --component-button-size-sm-paddingY: var(--primitive-space-1);
360
+ --component-button-size-sm-fontSize: var(--primitive-typography-size-xs);
361
+ --component-button-size-sm-iconSize: var(--primitive-size-12);
362
+ --component-button-size-sm-height: var(--primitive-space-7);
363
+ --component-button-size-sm-itemSpacing: var(--primitive-space-1);
364
+ --component-button-size-md-paddingX: var(--primitive-space-4);
365
+ --component-button-size-md-paddingY: var(--primitive-space-3);
366
+ --component-button-size-md-fontSize: var(--primitive-typography-size-sm);
367
+ --component-button-size-md-iconSize: var(--primitive-size-16);
368
+ --component-button-size-md-height: var(--primitive-size-40);
369
+ --component-button-size-md-itemSpacing: var(--primitive-space-2);
370
+ --component-button-size-lg-paddingX: var(--primitive-space-6);
371
+ --component-button-size-lg-paddingY: var(--primitive-space-4);
372
+ --component-button-size-lg-fontSize: var(--primitive-typography-size-base);
373
+ --component-button-size-lg-iconSize: var(--primitive-size-20);
374
+ --component-button-size-lg-height: var(--primitive-size-48);
375
+ --component-button-size-lg-itemSpacing: var(--primitive-space-2);
376
+ --component-button-primary-textDisabled: var(--semantic-color-content-onAccent);
377
+ --component-button-primary-bgDisabled: var(--semantic-color-surface-accentSubtle);
378
+ --component-button-secondary-bg-rest: var(--semantic-color-surface-page);
379
+ --component-button-secondary-bg-hover: var(--semantic-color-surface-raised);
380
+ --component-button-secondary-bg-pressed: var(--semantic-color-surface-overlay);
381
+ --component-button-secondary-border-rest: var(--semantic-color-border-default);
382
+ --component-button-secondary-border-hover: var(--semantic-color-border-default);
383
+ --component-button-secondary-border-pressed: var(--semantic-color-border-default);
384
+ --component-button-secondary-border-disabled: var(--semantic-color-border-subdued);
385
+ --component-button-secondary-text: var(--semantic-color-content-primary);
386
+ --component-input-bg: var(--semantic-color-surface-raised);
387
+ --component-input-text: var(--semantic-color-content-primary);
388
+ --component-input-border: var(--semantic-color-border-default);
389
+ --component-input-borderError: var(--semantic-color-feedback-error);
390
+ --component-input-radius: var(--semantic-radius-action);
391
+ --component-input-paddingX: var(--primitive-space-4);
392
+ --component-input-paddingY: var(--primitive-space-3);
393
+ --component-card-bg: var(--semantic-color-surface-raised);
394
+ --component-card-border: var(--semantic-color-border-default);
395
+ --component-card-radius: var(--primitive-radius-8);
396
+ --component-card-padding: var(--primitive-space-6);
397
+ --component-card-gap: var(--primitive-space-2);
398
+ --component-lightbox-backdrop-blur: var(--primitive-blur-16);
399
+
400
+ /* ── Role aliases (shadcn vocabulary) ──────────────────────────────────── */
401
+ --role-background: var(--semantic-color-surface-page);
402
+ --role-foreground: var(--semantic-color-content-primary);
403
+ --role-card: var(--semantic-color-surface-raised);
404
+ --role-card-foreground: var(--semantic-color-content-primary);
405
+ --role-popover: var(--semantic-color-surface-overlay);
406
+ --role-popover-foreground: var(--semantic-color-content-primary);
407
+ --role-primary: var(--semantic-color-surface-accent);
408
+ --role-primary-foreground: var(--semantic-color-content-onAccent);
409
+ --role-secondary: var(--semantic-color-surface-raised);
410
+ --role-secondary-foreground: var(--semantic-color-content-primary);
411
+ --role-muted: var(--semantic-color-surface-overlay);
412
+ --role-muted-foreground: var(--semantic-color-content-secondary);
413
+ --role-accent: var(--semantic-color-surface-accentSubtle);
414
+ --role-accent-foreground: var(--semantic-color-content-accent);
415
+ --role-destructive: var(--semantic-color-feedback-error);
416
+ --role-destructive-foreground: var(--semantic-color-content-inverse);
417
+ --role-border: var(--semantic-color-border-default);
418
+ --role-input: var(--semantic-color-border-default);
419
+ --role-ring: var(--semantic-color-border-accent);
420
+ --role-radius: var(--semantic-radius-action);
421
+ }
422
+
423
+ /* ── Dark mode overrides ────────────────────────────────────────────────────── */
424
+ [data-theme="dark"] {
425
+ --primitive-shadow-color: 0 0% 0%;
426
+ --semantic-color-surface-page: var(--primitive-color-neutral-black);
427
+ --semantic-color-surface-raised: var(--primitive-color-neutral-950);
428
+ --semantic-color-surface-overlay: var(--primitive-color-neutral-850);
429
+ --semantic-color-surface-inverse: var(--primitive-color-neutral-white);
430
+ --semantic-color-surface-accent: var(--primitive-color-blue-500);
431
+ --semantic-color-surface-accentSubtle: var(--primitive-color-blue-900);
432
+ --semantic-color-content-primary: var(--primitive-color-neutral-100);
433
+ --semantic-color-content-secondary: var(--primitive-color-neutral-400);
434
+ --semantic-color-content-disabled: var(--primitive-color-neutral-600);
435
+ --semantic-color-content-inverse: var(--primitive-color-neutral-900);
436
+ --semantic-color-content-accent: var(--primitive-color-blue-300);
437
+ --semantic-color-content-onAccent: var(--primitive-color-neutral-white);
438
+ --semantic-color-border-default: var(--primitive-color-neutral-700);
439
+ --semantic-color-border-subdued: var(--primitive-color-neutral-800);
440
+ --semantic-color-border-subtle: var(--primitive-color-neutral-850);
441
+ --semantic-color-border-strong: var(--primitive-color-neutral-600);
442
+ --semantic-color-border-accent: var(--primitive-color-blue-500);
443
+ --semantic-color-feedback-error: var(--primitive-color-red-400);
444
+ --semantic-color-feedback-success: var(--primitive-color-green-400);
445
+ --semantic-color-feedback-warning: var(--primitive-color-amber-400);
446
+ --semantic-color-feedback-info: var(--primitive-color-blue-300);
447
+ --semantic-color-feedback-bg-error: var(--primitive-color-red-950);
448
+ --semantic-color-feedback-bg-success: var(--primitive-color-green-950);
449
+ --semantic-color-feedback-bg-warning: var(--primitive-color-amber-950);
450
+ --semantic-color-feedback-bg-info: var(--primitive-color-blue-900);
451
+ --semantic-accent-rest: var(--primitive-color-blue-500);
452
+ --semantic-accent-hover: var(--primitive-color-blue-450);
453
+ --semantic-accent-pressed: var(--primitive-color-blue-400);
454
+ --semantic-accent-inactive: var(--primitive-color-blue-200);
455
+ --semantic-accent-disabled: var(--primitive-color-blue-100);
456
+ --semantic-accent-content: var(--primitive-color-blue-300);
457
+ --semantic-accent-contentHover: var(--primitive-color-blue-200);
458
+ --semantic-accent-subtle: var(--primitive-color-blue-900);
459
+ --component-badge-bg: var(--semantic-color-feedback-bg-info);
460
+ --component-button-primary-textDisabled: var(--semantic-color-content-disabled);
461
+ }