@xmesh/system-design 0.0.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 (175) hide show
  1. package/README.md +472 -0
  2. package/assets/brand-lockup-dark.svg +9 -0
  3. package/assets/brand-lockup-light.svg +9 -0
  4. package/assets/brand-mark.svg +9 -0
  5. package/colors_and_type.css +11 -0
  6. package/dist/lit/components/alert/index.css +201 -0
  7. package/dist/lit/components/alert/index.d.ts +25 -0
  8. package/dist/lit/components/alert/index.js +191 -0
  9. package/dist/lit/components/app-bar/index.css +80 -0
  10. package/dist/lit/components/app-bar/index.d.ts +19 -0
  11. package/dist/lit/components/app-bar/index.js +120 -0
  12. package/dist/lit/components/artifact/index.css +166 -0
  13. package/dist/lit/components/artifact/index.d.ts +37 -0
  14. package/dist/lit/components/artifact/index.js +294 -0
  15. package/dist/lit/components/autocomplete/index.css +171 -0
  16. package/dist/lit/components/autocomplete/index.d.ts +47 -0
  17. package/dist/lit/components/autocomplete/index.js +404 -0
  18. package/dist/lit/components/avatar/index.css +62 -0
  19. package/dist/lit/components/avatar/index.d.ts +19 -0
  20. package/dist/lit/components/avatar/index.js +112 -0
  21. package/dist/lit/components/avatar-group/index.css +60 -0
  22. package/dist/lit/components/avatar-group/index.d.ts +19 -0
  23. package/dist/lit/components/avatar-group/index.js +97 -0
  24. package/dist/lit/components/badge/index.css +72 -0
  25. package/dist/lit/components/badge/index.d.ts +18 -0
  26. package/dist/lit/components/badge/index.js +115 -0
  27. package/dist/lit/components/brand-mark/index.css +109 -0
  28. package/dist/lit/components/brand-mark/index.d.ts +24 -0
  29. package/dist/lit/components/brand-mark/index.js +116 -0
  30. package/dist/lit/components/breadcrumbs/index.css +91 -0
  31. package/dist/lit/components/breadcrumbs/index.d.ts +19 -0
  32. package/dist/lit/components/breadcrumbs/index.js +104 -0
  33. package/dist/lit/components/bubble/index.css +182 -0
  34. package/dist/lit/components/bubble/index.d.ts +72 -0
  35. package/dist/lit/components/bubble/index.js +617 -0
  36. package/dist/lit/components/button/index.css +342 -0
  37. package/dist/lit/components/button/index.d.ts +32 -0
  38. package/dist/lit/components/button/index.js +202 -0
  39. package/dist/lit/components/card/index.css +99 -0
  40. package/dist/lit/components/card/index.d.ts +20 -0
  41. package/dist/lit/components/card/index.js +133 -0
  42. package/dist/lit/components/chat/index.css +292 -0
  43. package/dist/lit/components/chat/index.d.ts +74 -0
  44. package/dist/lit/components/chat/index.js +589 -0
  45. package/dist/lit/components/checkbox/index.css +126 -0
  46. package/dist/lit/components/checkbox/index.d.ts +21 -0
  47. package/dist/lit/components/checkbox/index.js +138 -0
  48. package/dist/lit/components/chip/index.css +145 -0
  49. package/dist/lit/components/chip/index.d.ts +30 -0
  50. package/dist/lit/components/chip/index.js +230 -0
  51. package/dist/lit/components/chip-group/index.css +19 -0
  52. package/dist/lit/components/chip-group/index.d.ts +24 -0
  53. package/dist/lit/components/chip-group/index.js +171 -0
  54. package/dist/lit/components/code/index.css +42 -0
  55. package/dist/lit/components/code/index.d.ts +12 -0
  56. package/dist/lit/components/code/index.js +68 -0
  57. package/dist/lit/components/composer/index.css +548 -0
  58. package/dist/lit/components/composer/index.d.ts +67 -0
  59. package/dist/lit/components/composer/index.js +713 -0
  60. package/dist/lit/components/data-table/index.css +166 -0
  61. package/dist/lit/components/data-table/index.d.ts +55 -0
  62. package/dist/lit/components/data-table/index.js +390 -0
  63. package/dist/lit/components/dialog/index.css +124 -0
  64. package/dist/lit/components/dialog/index.d.ts +24 -0
  65. package/dist/lit/components/dialog/index.js +199 -0
  66. package/dist/lit/components/divider/index.css +27 -0
  67. package/dist/lit/components/divider/index.d.ts +13 -0
  68. package/dist/lit/components/divider/index.js +67 -0
  69. package/dist/lit/components/empty-state/index.css +69 -0
  70. package/dist/lit/components/empty-state/index.d.ts +21 -0
  71. package/dist/lit/components/empty-state/index.js +123 -0
  72. package/dist/lit/components/expansion-panel/index.css +120 -0
  73. package/dist/lit/components/expansion-panel/index.d.ts +22 -0
  74. package/dist/lit/components/expansion-panel/index.js +174 -0
  75. package/dist/lit/components/field/index.css +223 -0
  76. package/dist/lit/components/field/index.d.ts +106 -0
  77. package/dist/lit/components/field/index.js +388 -0
  78. package/dist/lit/components/file-input/index.css +257 -0
  79. package/dist/lit/components/file-input/index.d.ts +30 -0
  80. package/dist/lit/components/file-input/index.js +298 -0
  81. package/dist/lit/components/form/index.css +29 -0
  82. package/dist/lit/components/form/index.d.ts +38 -0
  83. package/dist/lit/components/form/index.js +192 -0
  84. package/dist/lit/components/grid/index.css +53 -0
  85. package/dist/lit/components/grid/index.d.ts +14 -0
  86. package/dist/lit/components/grid/index.js +82 -0
  87. package/dist/lit/components/kbd/index.css +35 -0
  88. package/dist/lit/components/kbd/index.d.ts +11 -0
  89. package/dist/lit/components/kbd/index.js +43 -0
  90. package/dist/lit/components/list/index.css +15 -0
  91. package/dist/lit/components/list/index.d.ts +28 -0
  92. package/dist/lit/components/list/index.js +188 -0
  93. package/dist/lit/components/list-item/index.css +119 -0
  94. package/dist/lit/components/list-item/index.d.ts +20 -0
  95. package/dist/lit/components/list-item/index.js +127 -0
  96. package/dist/lit/components/menu/index.css +94 -0
  97. package/dist/lit/components/menu/index.d.ts +47 -0
  98. package/dist/lit/components/menu/index.js +386 -0
  99. package/dist/lit/components/navigation-drawer/index.css +114 -0
  100. package/dist/lit/components/navigation-drawer/index.d.ts +29 -0
  101. package/dist/lit/components/navigation-drawer/index.js +218 -0
  102. package/dist/lit/components/overlay/index.css +171 -0
  103. package/dist/lit/components/overlay/index.d.ts +65 -0
  104. package/dist/lit/components/overlay/index.js +566 -0
  105. package/dist/lit/components/pagination/index.css +102 -0
  106. package/dist/lit/components/pagination/index.d.ts +22 -0
  107. package/dist/lit/components/pagination/index.js +184 -0
  108. package/dist/lit/components/primitives/index.css +504 -0
  109. package/dist/lit/components/primitives/index.d.ts +25 -0
  110. package/dist/lit/components/primitives/index.js +283 -0
  111. package/dist/lit/components/progress/index.css +143 -0
  112. package/dist/lit/components/progress/index.d.ts +23 -0
  113. package/dist/lit/components/progress/index.js +180 -0
  114. package/dist/lit/components/radio-group/index.css +178 -0
  115. package/dist/lit/components/radio-group/index.d.ts +35 -0
  116. package/dist/lit/components/radio-group/index.js +292 -0
  117. package/dist/lit/components/select/index.css +151 -0
  118. package/dist/lit/components/select/index.d.ts +50 -0
  119. package/dist/lit/components/select/index.js +390 -0
  120. package/dist/lit/components/sidebar-item/index.css +133 -0
  121. package/dist/lit/components/sidebar-item/index.d.ts +20 -0
  122. package/dist/lit/components/sidebar-item/index.js +105 -0
  123. package/dist/lit/components/skeleton/index.css +81 -0
  124. package/dist/lit/components/skeleton/index.d.ts +19 -0
  125. package/dist/lit/components/skeleton/index.js +119 -0
  126. package/dist/lit/components/slider/index.css +171 -0
  127. package/dist/lit/components/slider/index.d.ts +36 -0
  128. package/dist/lit/components/slider/index.js +302 -0
  129. package/dist/lit/components/snackbar/index.css +279 -0
  130. package/dist/lit/components/snackbar/index.d.ts +33 -0
  131. package/dist/lit/components/snackbar/index.js +195 -0
  132. package/dist/lit/components/stack/index.css +41 -0
  133. package/dist/lit/components/stack/index.d.ts +20 -0
  134. package/dist/lit/components/stack/index.js +103 -0
  135. package/dist/lit/components/switch/index.css +126 -0
  136. package/dist/lit/components/switch/index.d.ts +17 -0
  137. package/dist/lit/components/switch/index.js +116 -0
  138. package/dist/lit/components/table/index.css +85 -0
  139. package/dist/lit/components/table/index.d.ts +25 -0
  140. package/dist/lit/components/table/index.js +139 -0
  141. package/dist/lit/components/tabs/index.css +116 -0
  142. package/dist/lit/components/tabs/index.d.ts +49 -0
  143. package/dist/lit/components/tabs/index.js +320 -0
  144. package/dist/lit/components/text-field/index.css +90 -0
  145. package/dist/lit/components/text-field/index.d.ts +17 -0
  146. package/dist/lit/components/text-field/index.js +101 -0
  147. package/dist/lit/components/textarea/index.css +55 -0
  148. package/dist/lit/components/textarea/index.d.ts +26 -0
  149. package/dist/lit/components/textarea/index.js +124 -0
  150. package/dist/lit/components/tooltip/index.css +37 -0
  151. package/dist/lit/components/tooltip/index.d.ts +31 -0
  152. package/dist/lit/components/tooltip/index.js +196 -0
  153. package/dist/lit/components/validation/index.css +386 -0
  154. package/dist/lit/components/validation/index.d.ts +45 -0
  155. package/dist/lit/components/validation/index.js +318 -0
  156. package/dist/lit/index.d.ts +50 -0
  157. package/dist/lit/index.js +59 -0
  158. package/package.json +81 -0
  159. package/styles/README.md +346 -0
  160. package/styles/_elevation.css +24 -0
  161. package/styles/_fonts.css +6 -0
  162. package/styles/_layout.css +37 -0
  163. package/styles/_primitives.css +154 -0
  164. package/styles/_scroll.css +75 -0
  165. package/styles/_semantic.css +146 -0
  166. package/styles/_space.css +61 -0
  167. package/styles/_type.css +139 -0
  168. package/styles/_xmesh-extensions.css +232 -0
  169. package/styles/index.css +44 -0
  170. package/styles/md3/_color.css +102 -0
  171. package/styles/md3/_elevation.css +26 -0
  172. package/styles/md3/_motion.css +35 -0
  173. package/styles/md3/_shape.css +22 -0
  174. package/styles/md3/_state.css +22 -0
  175. package/styles/md3/_type.css +111 -0
@@ -0,0 +1,102 @@
1
+ /* ============================================================
2
+ xmesh DS · md3/_color.css — Material Design 3 color roles.
3
+
4
+ Canonical MD3 system tokens (`--md-sys-color-*`) sourced from
5
+ `--x-*` primitives in `_primitives.css`. Components reference
6
+ ONLY these `--md-sys-*` tokens (or `--xm-*` extensions) — never
7
+ raw `--x-*`. Theme switching happens at the primitive layer; the
8
+ role names below stay constant.
9
+
10
+ Surface ramp mapping (theme-following card stack — see ADR 0006):
11
+ dark: surface = canvas-0 (the dark "desk")
12
+ inverse-surface = canvas-2 (a lifted DARK card, one step up)
13
+ light: surface = canvas-0 (the cream "desk")
14
+ inverse-surface = surface-0 (the white card stack)
15
+ The card stack follows the theme (dark card on dark, white card on
16
+ cream) rather than staying white in both — superseding AD-13.
17
+
18
+ The `error*` family is defined for canonical compliance; POLICIES.md
19
+ forbids components from referencing it (severity is icon + copy).
20
+ ============================================================ */
21
+
22
+ /* ---------- DARK (default) ---------- */
23
+ :root {
24
+ /* Primary — coral accent */
25
+ --md-sys-color-primary: var(--x-accent);
26
+ --md-sys-color-on-primary: var(--x-accent-ink);
27
+ --md-sys-color-primary-container: var(--x-accent-soft);
28
+ --md-sys-color-on-primary-container: var(--x-ink-0);
29
+
30
+ /* Secondary — deep olive (defined; components do not reference) */
31
+ --md-sys-color-secondary: var(--x-secondary);
32
+ --md-sys-color-on-secondary: var(--x-secondary-ink);
33
+ --md-sys-color-secondary-container: var(--x-secondary-soft);
34
+ --md-sys-color-on-secondary-container: var(--x-ink-0);
35
+
36
+ /* Tertiary — alias of secondary; reserved for future categorical accent */
37
+ --md-sys-color-tertiary: var(--x-secondary);
38
+ --md-sys-color-on-tertiary: var(--x-secondary-ink);
39
+ --md-sys-color-tertiary-container: var(--x-secondary-soft);
40
+ --md-sys-color-on-tertiary-container: var(--x-ink-0);
41
+
42
+ /* Error — defined for canonicality; FORBIDDEN in components.
43
+ Severity is communicated by icon and copy (POLICIES.md rule 3a). */
44
+ --md-sys-color-error: oklch(0.62 0.18 25);
45
+ --md-sys-color-on-error: #ffffff;
46
+ --md-sys-color-error-container: oklch(0.30 0.10 25);
47
+ --md-sys-color-on-error-container: oklch(0.92 0.05 25);
48
+
49
+ /* Background + surface ramp. The 7-tier MD3 surface family lives on
50
+ the canvas (the dark "desk"). Cards are the inverse tier. */
51
+ --md-sys-color-background: var(--x-canvas-deep);
52
+ --md-sys-color-on-background: var(--x-ink-canvas-1);
53
+ --md-sys-color-surface: var(--x-canvas-0);
54
+ --md-sys-color-on-surface: var(--x-ink-canvas-1);
55
+ --md-sys-color-surface-variant: var(--x-canvas-2);
56
+ --md-sys-color-on-surface-variant: var(--x-ink-canvas-2);
57
+ --md-sys-color-surface-dim: var(--x-canvas-deep);
58
+ --md-sys-color-surface-bright: var(--x-canvas-4);
59
+ --md-sys-color-surface-container-lowest: var(--x-canvas-deep);
60
+ --md-sys-color-surface-container-low: var(--x-canvas-0);
61
+ --md-sys-color-surface-container: var(--x-canvas-1);
62
+ --md-sys-color-surface-container-high: var(--x-canvas-2);
63
+ --md-sys-color-surface-container-highest: var(--x-canvas-3);
64
+
65
+ /* Outline */
66
+ --md-sys-color-outline: var(--x-canvas-5);
67
+ --md-sys-color-outline-variant: var(--x-canvas-4);
68
+
69
+ /* Inverse — the card stack. Theme-following (ADR 0006): a lifted DARK
70
+ surface in dark theme (canvas-2, one step above the desk), white in
71
+ light theme. Ink follows: light ink on the dark card. */
72
+ --md-sys-color-inverse-surface: var(--x-canvas-2);
73
+ --md-sys-color-inverse-on-surface: var(--x-ink-canvas-1);
74
+ --md-sys-color-inverse-primary: var(--x-accent-strong);
75
+
76
+ /* Scrim + shadow */
77
+ --md-sys-color-scrim: oklch(0 0 0);
78
+ --md-sys-color-shadow: oklch(0 0 0);
79
+ }
80
+
81
+ /* ---------- LIGHT theme ----------
82
+ The `--x-*` primitives flip to the cream/white palette in
83
+ _primitives.css; the role names below stay identical. We only
84
+ re-declare a small set where the asymmetric mapping requires it
85
+ (surface-container-lowest collapses with inverse-surface in dark
86
+ theme; light theme needs the inverse tier to remain near-white). */
87
+ :root[data-theme="light"] {
88
+ /* Background sits below cream canvas (near-white inverse).
89
+ surface-dim deepens cream slightly; surface-bright is near-white. */
90
+ --md-sys-color-background: var(--x-surface-0);
91
+ --md-sys-color-surface-dim: var(--x-canvas-3);
92
+ --md-sys-color-surface-bright: var(--x-canvas-deep);
93
+ --md-sys-color-surface-container-lowest: var(--x-canvas-deep);
94
+
95
+ /* Card stack stays white in light theme (the dark-card flip is dark-only) */
96
+ --md-sys-color-inverse-surface: var(--x-surface-0);
97
+ --md-sys-color-inverse-on-surface: var(--x-ink-0);
98
+
99
+ /* Outline shifts onto cream tones */
100
+ --md-sys-color-outline: oklch(0.82 0.014 85);
101
+ --md-sys-color-outline-variant: oklch(0.90 0.012 85);
102
+ }
@@ -0,0 +1,26 @@
1
+ /* ============================================================
2
+ xmesh DS · md3/_elevation.css — Material Design 3 elevation.
3
+
4
+ Six levels (0 / 1 / 3 / 6 / 8 / 12 dp) translated to box-shadows
5
+ for the web. xmesh-specific shadows that have no MD3 home (drawer
6
+ directional, snackbar rim, focus ring) live as `--xm-*` extensions
7
+ in _xmesh-extensions.css.
8
+ ============================================================ */
9
+
10
+ :root {
11
+ --md-sys-elevation-level0: none;
12
+ --md-sys-elevation-level1: 0 1px 2px oklch(0 0 0 / 0.10);
13
+ --md-sys-elevation-level2:
14
+ 0 1px 0 oklch(0.30 0.006 60),
15
+ 0 8px 24px oklch(0.10 0 0 / 0.35);
16
+ --md-sys-elevation-level3: 0 10px 30px oklch(0 0 0 / 0.35);
17
+ --md-sys-elevation-level4: -16px 0 40px oklch(0 0 0 / 0.35);
18
+ --md-sys-elevation-level5: 0 30px 80px oklch(0 0 0 / 0.50);
19
+ }
20
+
21
+ :root[data-theme="light"] {
22
+ --md-sys-elevation-level2:
23
+ 0 1px 0 oklch(0.92 0.005 70),
24
+ 0 8px 24px oklch(0.40 0 0 / 0.10);
25
+ --md-sys-elevation-level3: 0 10px 30px oklch(0.30 0 0 / 0.18);
26
+ }
@@ -0,0 +1,35 @@
1
+ /* ============================================================
2
+ xmesh DS · md3/_motion.css — Material Design 3 motion tokens.
3
+
4
+ Durations + easing curves per spec. xmesh's previous timings
5
+ (120 / 160 / 220 ms) snap into the canonical scale.
6
+ ============================================================ */
7
+
8
+ :root {
9
+ /* Durations */
10
+ --md-sys-motion-duration-short1: 50ms;
11
+ --md-sys-motion-duration-short2: 100ms;
12
+ --md-sys-motion-duration-short3: 150ms; /* old --m-fast (120) */
13
+ --md-sys-motion-duration-short4: 200ms; /* old --m-base (160) */
14
+ --md-sys-motion-duration-medium1: 250ms; /* old --m-slow (220) */
15
+ --md-sys-motion-duration-medium2: 300ms;
16
+ --md-sys-motion-duration-medium3: 350ms;
17
+ --md-sys-motion-duration-medium4: 400ms;
18
+ --md-sys-motion-duration-long1: 450ms;
19
+ --md-sys-motion-duration-long2: 500ms;
20
+ --md-sys-motion-duration-long3: 550ms;
21
+ --md-sys-motion-duration-long4: 600ms;
22
+ --md-sys-motion-duration-extra-long1: 700ms;
23
+ --md-sys-motion-duration-extra-long2: 800ms;
24
+ --md-sys-motion-duration-extra-long3: 900ms;
25
+ --md-sys-motion-duration-extra-long4: 1000ms;
26
+
27
+ /* Easing curves */
28
+ --md-sys-motion-easing-linear: cubic-bezier(0, 0, 1, 1);
29
+ --md-sys-motion-easing-standard: cubic-bezier(0.2, 0, 0, 1);
30
+ --md-sys-motion-easing-standard-accelerate: cubic-bezier(0.3, 0, 1, 1);
31
+ --md-sys-motion-easing-standard-decelerate: cubic-bezier(0, 0, 0, 1);
32
+ --md-sys-motion-easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
33
+ --md-sys-motion-easing-emphasized-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15);
34
+ --md-sys-motion-easing-emphasized-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
35
+ }
@@ -0,0 +1,22 @@
1
+ /* ============================================================
2
+ xmesh DS · md3/_shape.css — Material Design 3 corner radii.
3
+
4
+ Several values diverge from the MD3 spec where xmesh's chat
5
+ silhouette requires a specific curvature (bubble 18, composer 20,
6
+ card 14, button/field 10, icon 6). The role names stay canonical;
7
+ the values are the xmesh dialect.
8
+ ============================================================ */
9
+
10
+ :root {
11
+ --md-sys-shape-corner-none: 0;
12
+ --md-sys-shape-corner-extra-small: 6px; /* xmesh override of spec 4 — icon chips */
13
+ --md-sys-shape-corner-small: 8px; /* spec match — chips */
14
+ --md-sys-shape-corner-medium: 14px; /* xmesh override of spec 12 — card chrome */
15
+ --md-sys-shape-corner-large: 18px; /* xmesh override of spec 16 — bubble */
16
+ --md-sys-shape-corner-extra-large: 20px; /* xmesh override of spec 28 — composer */
17
+ --md-sys-shape-corner-full: 9999px;
18
+
19
+ /* xmesh-specific intermediate (button/field) — spec only ships
20
+ small/medium, but the chat needs a value between them. */
21
+ --md-sys-shape-corner-button: 10px;
22
+ }
@@ -0,0 +1,22 @@
1
+ /* ============================================================
2
+ xmesh DS · md3/_state.css — Material Design 3 state-layer tokens.
3
+
4
+ MD3 state layers: a hover/focus/pressed/dragged overlay applied
5
+ to a component using the appropriate `on-*` color at a specified
6
+ opacity. Components compose these via `color-mix(in oklab, …)`
7
+ over the resting background, e.g.:
8
+
9
+ background-color: color-mix(
10
+ in oklab,
11
+ var(--md-sys-color-on-surface) var(--md-sys-state-hover-state-layer-opacity),
12
+ var(--md-sys-color-surface)
13
+ );
14
+
15
+ ============================================================ */
16
+
17
+ :root {
18
+ --md-sys-state-hover-state-layer-opacity: 8%;
19
+ --md-sys-state-focus-state-layer-opacity: 10%;
20
+ --md-sys-state-pressed-state-layer-opacity: 10%;
21
+ --md-sys-state-dragged-state-layer-opacity: 16%;
22
+ }
@@ -0,0 +1,111 @@
1
+ /* ============================================================
2
+ xmesh DS · md3/_type.css — Material Design 3 typescale.
3
+
4
+ 15 roles × 5 sub-tokens (font/size/line-height/tracking/weight).
5
+ Family overrides per the plan:
6
+ display-*, headline-* → Source Serif 4 (xmesh display family)
7
+ body-*, label-*, title-* → Inter (xmesh UI family)
8
+ mono is NOT an MD3 concept — see _xmesh-extensions.css.
9
+
10
+ Sizes diverge from the MD3 spec where xmesh chat density requires
11
+ a tighter scale (body 15 instead of 16, button/label-large 15
12
+ instead of 14, headline-medium 22 instead of 28). Document any
13
+ future change against this comment block.
14
+ ============================================================ */
15
+
16
+ :root {
17
+ /* Display (serif) */
18
+ --md-sys-typescale-display-large-font: var(--t-family-display);
19
+ --md-sys-typescale-display-large-size: 57px;
20
+ --md-sys-typescale-display-large-line-height: 64px;
21
+ --md-sys-typescale-display-large-tracking: -0.02em;
22
+ --md-sys-typescale-display-large-weight: 400;
23
+
24
+ --md-sys-typescale-display-medium-font: var(--t-family-display);
25
+ --md-sys-typescale-display-medium-size: 45px;
26
+ --md-sys-typescale-display-medium-line-height: 52px;
27
+ --md-sys-typescale-display-medium-tracking: -0.02em;
28
+ --md-sys-typescale-display-medium-weight: 400;
29
+
30
+ --md-sys-typescale-display-small-font: var(--t-family-display);
31
+ --md-sys-typescale-display-small-size: 36px; /* xmesh display H1 — was 34, snapped to spec */
32
+ --md-sys-typescale-display-small-line-height: 44px;
33
+ --md-sys-typescale-display-small-tracking: -0.02em;
34
+ --md-sys-typescale-display-small-weight: 400;
35
+
36
+ /* Headline (serif in xmesh; MD3 default is sans) */
37
+ --md-sys-typescale-headline-large-font: var(--t-family-display);
38
+ --md-sys-typescale-headline-large-size: 32px;
39
+ --md-sys-typescale-headline-large-line-height: 40px;
40
+ --md-sys-typescale-headline-large-tracking: -0.02em;
41
+ --md-sys-typescale-headline-large-weight: 400;
42
+
43
+ --md-sys-typescale-headline-medium-font: var(--t-family-display);
44
+ --md-sys-typescale-headline-medium-size: 22px; /* xmesh override of MD3 28 — preserves chat density */
45
+ --md-sys-typescale-headline-medium-line-height: 32px;
46
+ --md-sys-typescale-headline-medium-tracking: -0.01em;
47
+ --md-sys-typescale-headline-medium-weight: 400;
48
+
49
+ --md-sys-typescale-headline-small-font: var(--t-family-display);
50
+ --md-sys-typescale-headline-small-size: 18px; /* xmesh override of MD3 24 */
51
+ --md-sys-typescale-headline-small-line-height: 26px;
52
+ --md-sys-typescale-headline-small-tracking: -0.01em;
53
+ --md-sys-typescale-headline-small-weight: 400;
54
+
55
+ /* Title (sans, Inter) */
56
+ --md-sys-typescale-title-large-font: var(--t-family-display); /* serif — xmesh H4 */
57
+ --md-sys-typescale-title-large-size: 18px;
58
+ --md-sys-typescale-title-large-line-height: 24px;
59
+ --md-sys-typescale-title-large-tracking: -0.01em;
60
+ --md-sys-typescale-title-large-weight: 400;
61
+
62
+ --md-sys-typescale-title-medium-font: var(--t-family-ui);
63
+ --md-sys-typescale-title-medium-size: 15px;
64
+ --md-sys-typescale-title-medium-line-height: 22px;
65
+ --md-sys-typescale-title-medium-tracking: 0;
66
+ --md-sys-typescale-title-medium-weight: 500;
67
+
68
+ --md-sys-typescale-title-small-font: var(--t-family-ui);
69
+ --md-sys-typescale-title-small-size: 14px;
70
+ --md-sys-typescale-title-small-line-height: 20px;
71
+ --md-sys-typescale-title-small-tracking: 0;
72
+ --md-sys-typescale-title-small-weight: 500;
73
+
74
+ /* Body (sans) — xmesh body baseline is 15px (MD3 spec is 16) */
75
+ --md-sys-typescale-body-large-font: var(--t-family-ui);
76
+ --md-sys-typescale-body-large-size: 15px; /* xmesh override of MD3 16 */
77
+ --md-sys-typescale-body-large-line-height: 22px;
78
+ --md-sys-typescale-body-large-tracking: 0;
79
+ --md-sys-typescale-body-large-weight: 400;
80
+
81
+ --md-sys-typescale-body-medium-font: var(--t-family-ui);
82
+ --md-sys-typescale-body-medium-size: 13px; /* xmesh row size */
83
+ --md-sys-typescale-body-medium-line-height: 20px;
84
+ --md-sys-typescale-body-medium-tracking: 0;
85
+ --md-sys-typescale-body-medium-weight: 400;
86
+
87
+ --md-sys-typescale-body-small-font: var(--t-family-ui);
88
+ --md-sys-typescale-body-small-size: 12px;
89
+ --md-sys-typescale-body-small-line-height: 16px;
90
+ --md-sys-typescale-body-small-tracking: 0;
91
+ --md-sys-typescale-body-small-weight: 400;
92
+
93
+ /* Label (sans) */
94
+ --md-sys-typescale-label-large-font: var(--t-family-ui);
95
+ --md-sys-typescale-label-large-size: 15px; /* xmesh button text — override of MD3 14 */
96
+ --md-sys-typescale-label-large-line-height: 1;
97
+ --md-sys-typescale-label-large-tracking: 0;
98
+ --md-sys-typescale-label-large-weight: 600;
99
+
100
+ --md-sys-typescale-label-medium-font: var(--t-family-ui);
101
+ --md-sys-typescale-label-medium-size: 12px;
102
+ --md-sys-typescale-label-medium-line-height: 16px;
103
+ --md-sys-typescale-label-medium-tracking: 0;
104
+ --md-sys-typescale-label-medium-weight: 500;
105
+
106
+ --md-sys-typescale-label-small-font: var(--t-family-ui);
107
+ --md-sys-typescale-label-small-size: 11px; /* xmesh eyebrow */
108
+ --md-sys-typescale-label-small-line-height: 16px;
109
+ --md-sys-typescale-label-small-tracking: 0;
110
+ --md-sys-typescale-label-small-weight: 500;
111
+ }