astryx-dracula 0.5.0 → 0.6.2

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 (129) hide show
  1. package/BRAND.md +3 -3
  2. package/README.md +7 -4
  3. package/USAGE.md +49 -49
  4. package/astryx-dracula.d.ts +2 -2
  5. package/astryx-dracula.js +25 -9
  6. package/astryx-dracula.variants.d.ts +2 -2
  7. package/astryx.integration.mjs +1 -1
  8. package/icons.mjs +21 -17
  9. package/icons.tsx +69 -62
  10. package/package.json +125 -120
  11. package/shared/auth-chrome-config.ts +6 -6
  12. package/shared/auth-chrome.tsx +143 -144
  13. package/shared/auth-copy.ts +14 -14
  14. package/shared/chaptered-doc-config.ts +48 -51
  15. package/shared/chaptered-doc.tsx +267 -289
  16. package/shared/chart-hues.ts +25 -10
  17. package/shared/chart-labels.tsx +31 -30
  18. package/shared/chart-legend.tsx +55 -56
  19. package/shared/chart-panel-style.ts +3 -3
  20. package/shared/data-bar.tsx +97 -102
  21. package/shared/format-money.ts +1 -1
  22. package/shared/gallery-image.ts +6 -6
  23. package/shared/login-demo.ts +1 -1
  24. package/shared/metric-card.tsx +101 -105
  25. package/shared/metric-delta.tsx +28 -27
  26. package/shared/order-desk.tsx +205 -216
  27. package/shared/revenue-chart.tsx +145 -165
  28. package/shared/scene-castle.tsx +206 -291
  29. package/shared/scene-frame.tsx +33 -32
  30. package/shared/scene-hues.ts +17 -17
  31. package/shared/scene-tile.tsx +88 -92
  32. package/shared/settings-data.ts +119 -125
  33. package/shared/settings-rows.tsx +122 -159
  34. package/shared/sparkline.tsx +75 -88
  35. package/shared/sso-icons.tsx +10 -22
  36. package/shared/stars.tsx +16 -25
  37. package/templates/ai-chat-landing.template.mjs +5 -4
  38. package/templates/ai-chat-landing.tsx +473 -460
  39. package/templates/ai-chat.template.mjs +5 -4
  40. package/templates/ai-chat.tsx +543 -612
  41. package/templates/blank.template.mjs +5 -4
  42. package/templates/blank.tsx +18 -14
  43. package/templates/centered-hero.template.mjs +5 -4
  44. package/templates/centered-hero.tsx +55 -68
  45. package/templates/classic-gallery.template.mjs +5 -4
  46. package/templates/classic-gallery.tsx +97 -104
  47. package/templates/contact-form.template.mjs +5 -4
  48. package/templates/contact-form.tsx +247 -282
  49. package/templates/dashboard-portfolio.template.mjs +5 -4
  50. package/templates/dashboard-portfolio.tsx +717 -548
  51. package/templates/dashboard.template.mjs +5 -4
  52. package/templates/dashboard.tsx +596 -567
  53. package/templates/detail-page.template.mjs +5 -4
  54. package/templates/detail-page.tsx +546 -603
  55. package/templates/documentation-design.template.mjs +5 -4
  56. package/templates/documentation-design.tsx +231 -243
  57. package/templates/documentation-technical.template.mjs +5 -4
  58. package/templates/documentation-technical.tsx +236 -239
  59. package/templates/documentation.template.mjs +5 -4
  60. package/templates/documentation.tsx +267 -279
  61. package/templates/editor.template.mjs +5 -4
  62. package/templates/editor.tsx +844 -877
  63. package/templates/file-explorer.template.mjs +5 -4
  64. package/templates/file-explorer.tsx +566 -590
  65. package/templates/form-two-column.template.mjs +5 -4
  66. package/templates/form-two-column.tsx +195 -210
  67. package/templates/gallery-hero.template.mjs +5 -4
  68. package/templates/gallery-hero.tsx +93 -114
  69. package/templates/ide.template.mjs +5 -4
  70. package/templates/ide.tsx +407 -453
  71. package/templates/incident-console.template.mjs +5 -4
  72. package/templates/incident-console.tsx +593 -575
  73. package/templates/kanban-board.template.mjs +5 -4
  74. package/templates/kanban-board.tsx +665 -683
  75. package/templates/library.template.mjs +5 -4
  76. package/templates/library.tsx +409 -430
  77. package/templates/login-card.template.mjs +5 -4
  78. package/templates/login-card.tsx +63 -72
  79. package/templates/login-split.template.mjs +5 -4
  80. package/templates/login-split.tsx +192 -193
  81. package/templates/login-sso.template.mjs +5 -4
  82. package/templates/login-sso.tsx +257 -258
  83. package/templates/login.template.mjs +5 -4
  84. package/templates/login.tsx +53 -49
  85. package/templates/messaging-shell.template.mjs +5 -4
  86. package/templates/messaging-shell.tsx +556 -574
  87. package/templates/mixed-gallery.template.mjs +5 -4
  88. package/templates/mixed-gallery.tsx +60 -58
  89. package/templates/payment-form.template.mjs +5 -4
  90. package/templates/payment-form.tsx +882 -991
  91. package/templates/product-detail.template.mjs +5 -4
  92. package/templates/product-detail.tsx +261 -272
  93. package/templates/product-gallery.template.mjs +5 -4
  94. package/templates/product-gallery.tsx +126 -137
  95. package/templates/product-tour.template.mjs +5 -4
  96. package/templates/product-tour.tsx +741 -773
  97. package/templates/settings-dialog.template.mjs +5 -4
  98. package/templates/settings-dialog.tsx +688 -717
  99. package/templates/settings-sidebar.template.mjs +5 -4
  100. package/templates/settings-sidebar.tsx +762 -807
  101. package/templates/settings.template.mjs +5 -4
  102. package/templates/settings.tsx +289 -304
  103. package/templates/shell-nav.template.mjs +5 -4
  104. package/templates/shell-nav.tsx +212 -219
  105. package/templates/shell-side-nav.template.mjs +5 -4
  106. package/templates/shell-side-nav.tsx +135 -157
  107. package/templates/shell-top-nav.template.mjs +5 -4
  108. package/templates/shell-top-nav.tsx +182 -203
  109. package/templates/side-gallery.template.mjs +5 -4
  110. package/templates/side-gallery.tsx +85 -90
  111. package/templates/table-grouped.template.mjs +5 -4
  112. package/templates/table-grouped.tsx +1000 -1053
  113. package/templates/table-page-chart.template.mjs +5 -4
  114. package/templates/table-page-chart.tsx +400 -398
  115. package/templates/table-page-heatmap-status.template.mjs +5 -4
  116. package/templates/table-page-heatmap-status.tsx +483 -512
  117. package/templates/table-page-shoe-store-heatmap.template.mjs +5 -4
  118. package/templates/table-page-shoe-store-heatmap.tsx +748 -746
  119. package/templates/table-page.template.mjs +5 -4
  120. package/templates/table-page.tsx +396 -405
  121. package/templates/table.template.mjs +5 -4
  122. package/templates/table.tsx +92 -93
  123. package/templates/tech-report.template.mjs +5 -4
  124. package/templates/tech-report.tsx +1316 -1304
  125. package/templates/theme-showcase.template.mjs +5 -4
  126. package/templates/theme-showcase.tsx +871 -951
  127. package/theme.css +35 -77
  128. package/theme.css.d.ts +9 -0
  129. package/tokens.css +373 -380
package/tokens.css CHANGED
@@ -8,13 +8,16 @@
8
8
  * paragraph #B0B3C4 and base-muted #8288A6 are same-hue lifts, #4C5067
9
9
  * (subdue) is chrome only and never text, and theme.css adds #FFD5CC as the
10
10
  * pale inverted error surface. Do not revert any of them to spec hexes.
11
- * Two categorical data hues are deliberately ABSENT from the list below, do not
12
- * re-add them: `brown` (was byte-identical to orange, and a categorical series
13
- * set is a palette where distinctness IS the contract) and `purple` (purple
14
- * means tappable, never data). The purple ban is a MODULE rule —
15
- * `shared/chart-hues.ts` is purple-free by construction — so the SEQUENTIAL
16
- * `--color-data-purple-1..5` ramp below SURVIVES and is sanctioned; only the
17
- * categorical half is revoked. Rationale lives in astryx-theme.ts.
11
+ * Two categorical data hues are excluded from the CHART palette: `brown` (was
12
+ * byte-identical to orange, and a categorical series set is a palette where
13
+ * distinctness IS the contract) and `purple` (purple means tappable, never
14
+ * data). That exclusion is a MODULE rule — `shared/chart-hues.ts` is
15
+ * purple-free by construction — so the SEQUENTIAL `--color-data-purple-1..5`
16
+ * ramp below SURVIVES and is sanctioned. The two TOKENS are still defined
17
+ * below, on-brand, because core 0.7.x moved the canonical data-colour defaults
18
+ * out of CSS entirely: a theme that wants a name to exist must author it, and
19
+ * this one authors it on-palette so nothing off-brand can ship. Rationale
20
+ * lives in astryx-theme.ts.
18
21
  * `--color-data-teal-1..5` derives off `--color-data-categorical-teal` (#A4FFFF,
19
22
  * an ANSI bright, not a spec token) rather than spec Cyan #8BE9FD; provenance
20
23
  * fix only, nothing renders the ramp today (HeatScale is shamrock).
@@ -24,19 +27,19 @@
24
27
  * Fonts: copy `fonts/` to your app's served static dir (Vite: `public/fonts/`). */
25
28
 
26
29
  @font-face {
27
- font-family: 'JetBrains Mono';
28
- font-style: normal;
29
- font-weight: 400;
30
- font-display: swap;
31
- src: url('/astryx-dracula/fonts/JetBrainsMono-Regular.woff2') format('woff2');
30
+ font-family: "JetBrains Mono";
31
+ font-style: normal;
32
+ font-weight: 400;
33
+ font-display: swap;
34
+ src: url("/astryx-dracula/fonts/JetBrainsMono-Regular.woff2") format("woff2");
32
35
  }
33
36
 
34
37
  @font-face {
35
- font-family: 'JetBrains Mono';
36
- font-style: normal;
37
- font-weight: 600;
38
- font-display: swap;
39
- src: url('/astryx-dracula/fonts/JetBrainsMono-SemiBold.woff2') format('woff2');
38
+ font-family: "JetBrains Mono";
39
+ font-style: normal;
40
+ font-weight: 600;
41
+ font-display: swap;
42
+ src: url("/astryx-dracula/fonts/JetBrainsMono-SemiBold.woff2") format("woff2");
40
43
  }
41
44
 
42
45
  /* Canvas: the document scroller's track is transparent, so the unpainted
@@ -45,306 +48,334 @@
45
48
  * page read as one surface. */
46
49
  html,
47
50
  body {
48
- background-color: #282A36;
51
+ background-color: #282a36;
49
52
  }
50
53
 
51
54
  /* Full plain-CSS mirror of astryx-theme.ts (frozen dark slots). Edit the theme,
52
55
  * not this file, then re-mirror. Unlayered by design so it beats core layers;
53
56
  * zero !important anywhere. */
54
57
  :root {
55
- color-scheme: dark;
56
- background-color: #282A36;
58
+ color-scheme: dark;
59
+ background-color: #282a36;
57
60
 
58
- --dracula-bg: #282A36;
59
- --dracula-current-line: #6272A4;
60
- --dracula-selection: #44475A;
61
- --dracula-fg: #F8F8F2;
62
- --dracula-comment: #6272A4;
63
- --dracula-cyan: #8BE9FD;
64
- --dracula-green: #50FA7B;
65
- --dracula-orange: #FFB86C;
66
- --dracula-pink: #FF79C6;
67
- --dracula-purple: #BD93F9;
68
- --dracula-red: #FF5555;
69
- --dracula-yellow: #F1FA8C;
70
- --dracula-bg-light: #343746;
71
- --dracula-bg-lighter: #424450;
72
- --dracula-bg-dark: #21222C;
73
- --dracula-functional-red: #DE5735;
74
- --dracula-functional-orange: #A39514;
75
- --dracula-functional-green: #089108;
76
- --dracula-functional-cyan: #0081D6;
77
- --dracula-functional-purple: #815CD6;
61
+ --dracula-bg: #282a36;
62
+ --dracula-current-line: #6272a4;
63
+ --dracula-selection: #44475a;
64
+ --dracula-fg: #f8f8f2;
65
+ --dracula-comment: #6272a4;
66
+ --dracula-cyan: #8be9fd;
67
+ --dracula-green: #50fa7b;
68
+ --dracula-orange: #ffb86c;
69
+ --dracula-pink: #ff79c6;
70
+ --dracula-purple: #bd93f9;
71
+ --dracula-red: #ff5555;
72
+ --dracula-yellow: #f1fa8c;
73
+ --dracula-bg-light: #343746;
74
+ --dracula-bg-lighter: #424450;
75
+ --dracula-bg-dark: #21222c;
76
+ --dracula-functional-red: #de5735;
77
+ --dracula-functional-orange: #a39514;
78
+ --dracula-functional-green: #089108;
79
+ --dracula-functional-cyan: #0081d6;
80
+ --dracula-functional-purple: #815cd6;
78
81
 
79
- --space-gap: 24px;
80
- --space-viewport: 16px;
81
- --widget-content-vertical: 15px;
82
- --widget-content-horizontal: 16px;
83
- --widget-gap: 24px;
84
- --tile-row: 96px;
85
- --border-radius: 5px;
86
- --radius-element: 5px;
87
- --radius-inner: 4px;
88
- --radius-container: 5px;
89
- --radius-page: 5px;
90
- --radius-chat: 5px;
91
- --font-family-mono: 'JetBrains Mono', ui-monospace, monospace;
92
- --font-family-body: 'JetBrains Mono', monospace;
93
- --font-family-heading: 'JetBrains Mono', monospace;
94
- --font-family-code: 'JetBrains Mono', monospace;
95
- --font-weight-normal: 400;
96
- --font-weight-medium: 500;
97
- --font-weight-semibold: 600;
98
- --font-weight-bold: 700;
99
- --font-size-4xs: 0.375rem;
100
- --font-size-3xs: 0.4375rem;
101
- --font-size-2xs: 0.5rem;
102
- --font-size-xs: 0.625rem;
103
- --font-size-sm: 0.75rem;
104
- --font-size-base: 14px;
105
- --font-size-lg: 1.0625rem;
106
- --font-size-xl: 1.25rem;
107
- --font-size-2xl: 1.5rem;
108
- --font-size-3xl: 1.8125rem;
109
- --font-size-4xl: 2.1875rem;
110
- --font-size-5xl: 2.625rem;
111
- --font-size-h1: 24px;
112
- --font-size-h2: 20px;
113
- --font-size-h3: 16px;
114
- --font-size-h4: 14px;
115
- --font-size-h5: 13px;
116
- --font-size-h6: 12px;
117
- --text-heading-1-size: var(--font-size-2xl);
118
- --text-heading-1-weight: var(--font-weight-normal);
119
- --text-heading-1-leading: 1.3333;
120
- --text-heading-2-size: var(--font-size-xl);
121
- --text-heading-2-weight: var(--font-weight-normal);
122
- --text-heading-2-leading: 1.4;
123
- --text-heading-3-size: var(--font-size-lg);
124
- --text-heading-3-weight: var(--font-weight-normal);
125
- --text-heading-3-leading: 1.4118;
126
- --text-heading-4-size: var(--font-size-base);
127
- --text-heading-4-weight: var(--font-weight-normal);
128
- --text-heading-4-leading: 1.4286;
129
- --text-heading-5-size: var(--font-size-sm);
130
- --text-heading-5-weight: var(--font-weight-normal);
131
- --text-heading-5-leading: 1.6667;
132
- --text-heading-6-size: var(--font-size-xs);
133
- --text-heading-6-weight: var(--font-weight-normal);
134
- --text-heading-6-leading: 1.6;
135
- --text-body-size: var(--font-size-base);
136
- --text-body-weight: var(--font-weight-normal);
137
- --text-body-leading: 1.4286;
138
- --text-large-size: var(--font-size-lg);
139
- --text-large-weight: var(--font-weight-semibold);
140
- --text-large-leading: 1.4118;
141
- --text-label-size: var(--font-size-base);
142
- --text-label-weight: var(--font-weight-semibold);
143
- --text-label-leading: 1.4286;
144
- --text-code-size: var(--font-size-base);
145
- --text-code-weight: var(--font-weight-normal);
146
- --text-code-leading: 1.4286;
147
- --text-supporting-size: var(--font-size-sm);
148
- --text-supporting-weight: var(--font-weight-normal);
149
- --text-supporting-leading: 1.6667;
150
- --text-display-1-size: var(--font-size-5xl);
151
- --text-display-1-weight: var(--font-weight-normal);
152
- --text-display-1-leading: 1.2381;
153
- --text-display-2-size: var(--font-size-4xl);
154
- --text-display-2-weight: var(--font-weight-normal);
155
- --text-display-2-leading: 1.2571;
156
- --text-display-3-size: var(--font-size-3xl);
157
- --text-display-3-weight: var(--font-weight-normal);
158
- --text-display-3-leading: 1.3793;
159
- --duration-fast-min: 130ms;
160
- --duration-fast: 175ms;
161
- --duration-fast-max: 235ms;
162
- --duration-medium-min: 310ms;
163
- --duration-medium: 410ms;
164
- --duration-medium-max: 545ms;
165
- --duration-slow-min: 730ms;
166
- --duration-slow: 975ms;
167
- --duration-slow-max: 1300ms;
168
- --ease-standard: cubic-bezier(0.24, 1, 0.4, 1);
169
- --shadow-low: 0 2px 4px #191A210D, 0 4px 8px #191A211A;
170
- --shadow-med: 0 2px 4px #191A210D, 0 4px 12px #191A211A;
171
- --shadow-high: 0 4px 6px #191A211A, 0 12px 24px #191A2126;
172
- --shadow-inset-hover: inset 0px 0px 0px 2px #6272A430;
173
- --shadow-inset-selected: inset 0px 0px 0px 2px #BD93F930;
174
- --shadow-inset-success: inset 0px 0px 0px 2px #50FA7B30;
175
- --shadow-inset-warning: inset 0px 0px 0px 2px #F1FA8C30;
176
- --shadow-inset-error: inset 0px 0px 0px 2px #FF555530;
82
+ --space-gap: 24px;
83
+ --space-viewport: 16px;
84
+ --widget-content-vertical: 15px;
85
+ --widget-content-horizontal: 16px;
86
+ --widget-gap: 24px;
87
+ --tile-row: 96px;
88
+ --border-radius: 5px;
89
+ --radius-element: 5px;
90
+ --radius-inner: 4px;
91
+ --radius-container: 5px;
92
+ --radius-page: 5px;
93
+ --radius-chat: 5px;
94
+ --font-family-mono: "JetBrains Mono", ui-monospace, monospace;
95
+ --font-family-body: "JetBrains Mono", monospace;
96
+ --font-family-heading: "JetBrains Mono", monospace;
97
+ --font-family-code: "JetBrains Mono", monospace;
98
+ --font-weight-normal: 400;
99
+ --font-weight-medium: 500;
100
+ --font-weight-semibold: 600;
101
+ --font-weight-bold: 700;
102
+ --font-size-4xs: 0.375rem;
103
+ --font-size-3xs: 0.4375rem;
104
+ --font-size-2xs: 0.5rem;
105
+ --font-size-xs: 0.625rem;
106
+ --font-size-sm: 0.75rem;
107
+ --font-size-base: 14px;
108
+ --font-size-lg: 1.0625rem;
109
+ --font-size-xl: 1.25rem;
110
+ --font-size-2xl: 1.5rem;
111
+ --font-size-3xl: 1.8125rem;
112
+ --font-size-4xl: 2.1875rem;
113
+ --font-size-5xl: 2.625rem;
114
+ --font-size-h1: 24px;
115
+ --font-size-h2: 20px;
116
+ --font-size-h3: 16px;
117
+ --font-size-h4: 14px;
118
+ --font-size-h5: 13px;
119
+ --font-size-h6: 12px;
120
+ --text-heading-1-size: var(--font-size-2xl);
121
+ --text-heading-1-weight: var(--font-weight-normal);
122
+ --text-heading-1-leading: 1.3333;
123
+ --text-heading-2-size: var(--font-size-xl);
124
+ --text-heading-2-weight: var(--font-weight-normal);
125
+ --text-heading-2-leading: 1.4;
126
+ --text-heading-3-size: var(--font-size-lg);
127
+ --text-heading-3-weight: var(--font-weight-normal);
128
+ --text-heading-3-leading: 1.4118;
129
+ --text-heading-4-size: var(--font-size-base);
130
+ --text-heading-4-weight: var(--font-weight-normal);
131
+ --text-heading-4-leading: 1.4286;
132
+ --text-heading-5-size: var(--font-size-sm);
133
+ --text-heading-5-weight: var(--font-weight-normal);
134
+ --text-heading-5-leading: 1.6667;
135
+ --text-heading-6-size: var(--font-size-xs);
136
+ --text-heading-6-weight: var(--font-weight-normal);
137
+ --text-heading-6-leading: 1.6;
138
+ --text-body-size: var(--font-size-base);
139
+ --text-body-weight: var(--font-weight-normal);
140
+ --text-body-leading: 1.4286;
141
+ --text-large-size: var(--font-size-lg);
142
+ --text-large-weight: var(--font-weight-semibold);
143
+ --text-large-leading: 1.4118;
144
+ --text-label-size: var(--font-size-base);
145
+ --text-label-weight: var(--font-weight-semibold);
146
+ --text-label-leading: 1.4286;
147
+ --text-code-size: var(--font-size-base);
148
+ --text-code-weight: var(--font-weight-normal);
149
+ --text-code-leading: 1.4286;
150
+ --text-supporting-size: var(--font-size-sm);
151
+ --text-supporting-weight: var(--font-weight-normal);
152
+ --text-supporting-leading: 1.6667;
153
+ --text-display-1-size: var(--font-size-5xl);
154
+ --text-display-1-weight: var(--font-weight-normal);
155
+ --text-display-1-leading: 1.2381;
156
+ --text-display-2-size: var(--font-size-4xl);
157
+ --text-display-2-weight: var(--font-weight-normal);
158
+ --text-display-2-leading: 1.2571;
159
+ --text-display-3-size: var(--font-size-3xl);
160
+ --text-display-3-weight: var(--font-weight-normal);
161
+ --text-display-3-leading: 1.3793;
162
+ --duration-fast-min: 130ms;
163
+ --duration-fast: 175ms;
164
+ --duration-fast-max: 235ms;
165
+ --duration-medium-min: 310ms;
166
+ --duration-medium: 410ms;
167
+ --duration-medium-max: 545ms;
168
+ --duration-slow-min: 730ms;
169
+ --duration-slow: 975ms;
170
+ --duration-slow-max: 1300ms;
171
+ --ease-standard: cubic-bezier(0.24, 1, 0.4, 1);
172
+ --shadow-low: 0 2px 4px #191a210d, 0 4px 8px #191a211a;
173
+ --shadow-med: 0 2px 4px #191a210d, 0 4px 12px #191a211a;
174
+ --shadow-high: 0 4px 6px #191a211a, 0 12px 24px #191a2126;
175
+ --shadow-inset-hover: inset 0px 0px 0px 2px #6272a430;
176
+ --shadow-inset-selected: inset 0px 0px 0px 2px #bd93f930;
177
+ --shadow-inset-success: inset 0px 0px 0px 2px #50fa7b30;
178
+ --shadow-inset-warning: inset 0px 0px 0px 2px #f1fa8c30;
179
+ --shadow-inset-error: inset 0px 0px 0px 2px #ff555530;
177
180
 
178
- --color-background-body: #282A36;
179
- --color-background: var(--color-background-body);
180
- --color-background-surface: #343746;
181
- --color-background-card: #343746;
182
- --color-background-popover: #424450;
183
- --color-background-muted: #44475A;
184
- --color-background-inverted: #F8F8F2;
185
- --color-background-error-inverted: #FFD5CC;
186
- --color-overlay: #191A21CC;
187
- --color-overlay-hover: #0000001F;
188
- --color-overlay-pressed: #00000033;
189
- --color-border: #6272A4;
190
- --color-border-emphasized: #9AA1BC;
191
- --color-neutral: #F8F8F21A;
192
- --color-tint-hover: #FFFFFF;
193
- --color-on-dark: #F8F8F2;
194
- --color-on-light: #000000;
195
- --color-shadow: #21222C;
196
- --color-track: #6272A4;
197
- --color-skeleton: #6272A4;
198
- --color-accent: #BD93F9;
199
- --color-success: #50FA7B;
200
- --color-error: #FF5555;
201
- --color-warning: #F1FA8C;
202
- --color-info: #8BE9FD;
203
- --color-accent-muted: var(--color-background-purple);
204
- --color-success-muted: var(--color-background-green);
205
- --color-warning-muted: var(--color-background-yellow);
206
- --color-error-muted: var(--color-background-red);
207
- --color-info-muted: var(--color-background-cyan);
208
- --color-text-primary: #F8F8F2;
209
- --color-text-secondary: #9AA1BC;
210
- --color-text-disabled: #6272A4;
211
- --color-text-accent: #BD93F9;
212
- --color-text-highlight: #F8F8F2;
213
- --color-text-paragraph: #B0B3C4;
214
- --color-text-base: #9AA1BC;
215
- --color-text-base-muted: #8288A6;
216
- --color-text-subdue: #4C5067;
217
- --color-icon-primary: #F8F8F2;
218
- --color-icon-secondary: #9AA1BC;
219
- --color-icon-disabled: #6272A4;
220
- --color-icon-accent: #BD93F9;
221
- --color-on-accent: #21222C;
222
- --color-on-success: #21222C;
223
- --color-on-warning: #21222C;
224
- --color-on-error: #21222C;
225
- --color-on-info: #21222C;
226
- --color-functional-red: #DE5735;
227
- --color-functional-orange: #A39514;
228
- --color-functional-green: #089108;
229
- --color-functional-cyan: #0081D6;
230
- --color-functional-purple: #815CD6;
231
- --color-background-blue: #6272A41A;
232
- --color-border-blue: #6272A44D;
233
- --color-icon-blue: #6272A4;
234
- --color-text-blue: #6272A4;
235
- --color-background-cyan: #8BE9FD1A;
236
- --color-border-cyan: #8BE9FD4D;
237
- --color-icon-cyan: #8BE9FD;
238
- --color-text-cyan: #8BE9FD;
239
- --color-background-gray: #9AA1BC1A;
240
- --color-border-gray: #9AA1BC4D;
241
- --color-icon-gray: #9AA1BC;
242
- --color-text-gray: #9AA1BC;
243
- --color-background-green: #50FA7B1A;
244
- --color-border-green: #50FA7B4D;
245
- --color-icon-green: #50FA7B;
246
- --color-text-green: #50FA7B;
247
- --color-background-orange: #FFB86C1A;
248
- --color-border-orange: #FFB86C4D;
249
- --color-icon-orange: #FFB86C;
250
- --color-text-orange: #FFB86C;
251
- --color-background-pink: #FF79C61A;
252
- --color-border-pink: #FF79C64D;
253
- --color-icon-pink: #FF79C6;
254
- --color-text-pink: #FF79C6;
255
- --color-background-purple: #BD93F91A;
256
- --color-border-purple: #BD93F94D;
257
- --color-icon-purple: #BD93F9;
258
- --color-text-purple: #BD93F9;
259
- --color-background-red: #FF55551A;
260
- --color-border-red: #FF55554D;
261
- --color-icon-red: #FF5555;
262
- --color-text-red: #FF5555;
263
- --color-background-teal: #A4FFFF1A;
264
- --color-border-teal: #A4FFFF4D;
265
- --color-icon-teal: #A4FFFF;
266
- --color-text-teal: #A4FFFF;
267
- --color-background-yellow: #F1FA8C1A;
268
- --color-border-yellow: #F1FA8C4D;
269
- --color-icon-yellow: #F1FA8C;
270
- --color-text-yellow: #F1FA8C;
271
- --color-data-categorical-blue: #6272A4;
272
- --color-data-categorical-orange: #FFB86C;
273
- --color-data-categorical-green: #50FA7B;
274
- --color-data-categorical-pink: #FF79C6;
275
- --color-data-categorical-cyan: #8BE9FD;
276
- --color-data-categorical-red: #FF5555;
277
- --color-data-categorical-teal: #A4FFFF;
278
- --color-data-categorical-indigo: #D6ACFF;
279
- --color-data-neutral: #8C939B;
280
- --color-data-purple-5: hsl(264.71 89.47% 28%);
281
- --color-data-purple-4: hsl(264.71 89.47% 44%);
282
- --color-data-purple-3: hsl(264.71 89.47% 60%);
283
- --color-data-purple-2: hsl(264.71 89.47% 74%);
284
- --color-data-purple-1: hsl(264.71 89.47% 88%);
285
- --color-data-pink-5: hsl(325.52 100% 28%);
286
- --color-data-pink-4: hsl(325.52 100% 44%);
287
- --color-data-pink-3: hsl(325.52 100% 60%);
288
- --color-data-pink-2: hsl(325.52 100% 74%);
289
- --color-data-pink-1: hsl(325.52 100% 88%);
290
- --color-data-red-5: hsl(0 100% 28%);
291
- --color-data-red-4: hsl(0 100% 44%);
292
- --color-data-red-3: hsl(0 100% 60%);
293
- --color-data-red-2: hsl(0 100% 74%);
294
- --color-data-red-1: hsl(0 100% 88%);
295
- --color-data-orange-5: hsl(31.02 100% 28%);
296
- --color-data-orange-4: hsl(31.02 100% 44%);
297
- --color-data-orange-3: hsl(31.02 100% 60%);
298
- --color-data-orange-2: hsl(31.02 100% 74%);
299
- --color-data-orange-1: hsl(31.02 100% 88%);
300
- --color-data-yellow-5: hsl(64.91 91.67% 28%);
301
- --color-data-yellow-4: hsl(64.91 91.67% 44%);
302
- --color-data-yellow-3: hsl(64.91 91.67% 60%);
303
- --color-data-yellow-2: hsl(64.91 91.67% 74%);
304
- --color-data-yellow-1: hsl(64.91 91.67% 88%);
305
- --color-data-teal-5: hsl(180 100% 28%);
306
- --color-data-teal-4: hsl(180 100% 44%);
307
- --color-data-teal-3: hsl(180 100% 60%);
308
- --color-data-teal-2: hsl(180 100% 74%);
309
- --color-data-teal-1: hsl(180 100% 88%);
310
- --color-data-blue-5: hsl(225.45 26.61% 28%);
311
- --color-data-blue-4: hsl(225.45 26.61% 44%);
312
- --color-data-blue-3: hsl(225.45 26.61% 60%);
313
- --color-data-blue-2: hsl(225.45 26.61% 74%);
314
- --color-data-blue-1: hsl(225.45 26.61% 88%);
315
- --color-data-shamrock-5: hsl(135.18 94.44% 28%);
316
- --color-data-shamrock-4: hsl(135.18 94.44% 44%);
317
- --color-data-shamrock-3: hsl(135.18 94.44% 60%);
318
- --color-data-shamrock-2: hsl(135.18 94.44% 74%);
319
- --color-data-shamrock-1: hsl(135.18 94.44% 88%);
320
- --color-data-gray-5: hsl(231.43 14.89% 28%);
321
- --color-data-gray-4: hsl(231.43 14.89% 44%);
322
- --color-data-gray-3: hsl(231.43 14.89% 60%);
323
- --color-data-gray-2: hsl(231.43 14.89% 74%);
324
- --color-data-gray-1: hsl(231.43 14.89% 88%);
325
- --color-widget-background: #343746;
326
- --color-widget-content-border: #6272A4;
327
- --color-widget-background-highlight: #44475A;
328
- --color-separator: #44475A;
329
- --color-popover-background: #424450;
330
- --color-popover-border: #6272A4;
331
- --color-progress-border: #44475A;
332
- --color-progress-value: #6272A4;
333
- --color-vertical-progress-value: #6272A4;
334
- --color-graph-gridlines: #44475A;
335
- --color-widget-shadow: #21222C;
336
- --color-current-line: #6272A4;
337
- --color-selection: #44475A;
338
- --color-primary: #BD93F9;
339
- --color-positive: #50FA7B;
340
- --color-negative: #FF5555;
341
- --color-tag-orange: #FFB86C;
342
- --color-tag-pink: #FF79C6;
343
- --color-tag-cyan: #8BE9FD;
344
- --color-tag-yellow: #F1FA8C;
345
- --color-tag-green: #50FA7B;
346
- --color-tag-purple: #BD93F9;
347
- /* Renamed in 0.3.0 from `tag-blue`, which held this same #BD93F9. Dracula
181
+ --color-background-body: #282a36;
182
+ --color-background: var(--color-background-body);
183
+ --color-background-surface: #343746;
184
+ --color-background-card: #343746;
185
+ --color-background-popover: #424450;
186
+ --color-background-muted: #44475a;
187
+ --color-background-inverted: #f8f8f2;
188
+ --color-background-error-inverted: #ffd5cc;
189
+ --color-overlay: #191a21cc;
190
+ --color-overlay-hover: #0000001f;
191
+ --color-overlay-pressed: #00000033;
192
+ --color-border: #6272a4;
193
+ --color-border-emphasized: #9aa1bc;
194
+ --color-neutral: #f8f8f21a;
195
+ --color-tint-hover: #ffffff;
196
+ --color-on-dark: #f8f8f2;
197
+ --color-on-light: #000000;
198
+ --color-shadow: #21222c;
199
+ --color-track: #6272a4;
200
+ --color-skeleton: #6272a4;
201
+ --color-accent: #bd93f9;
202
+ --color-success: #50fa7b;
203
+ --color-error: #ff5555;
204
+ --color-warning: #f1fa8c;
205
+ --color-info: #8be9fd;
206
+ --color-accent-muted: var(--color-background-purple);
207
+ --color-success-muted: var(--color-background-green);
208
+ --color-warning-muted: var(--color-background-yellow);
209
+ --color-error-muted: var(--color-background-red);
210
+ --color-info-muted: var(--color-background-cyan);
211
+ --color-text-primary: #f8f8f2;
212
+ --color-text-secondary: #9aa1bc;
213
+ --color-text-disabled: #6272a4;
214
+ --color-text-accent: #bd93f9;
215
+ --color-text-highlight: #f8f8f2;
216
+ --color-text-paragraph: #b0b3c4;
217
+ --color-text-base: #9aa1bc;
218
+ --color-text-base-muted: #8288a6;
219
+ --color-text-subdue: #4c5067;
220
+ --color-icon-primary: #f8f8f2;
221
+ --color-icon-secondary: #9aa1bc;
222
+ --color-icon-disabled: #6272a4;
223
+ --color-icon-accent: #bd93f9;
224
+ --color-on-accent: #21222c;
225
+ --color-on-success: #21222c;
226
+ --color-on-warning: #21222c;
227
+ --color-on-error: #21222c;
228
+ --color-on-info: #21222c;
229
+ --color-functional-red: #de5735;
230
+ --color-functional-orange: #a39514;
231
+ --color-functional-green: #089108;
232
+ --color-functional-cyan: #0081d6;
233
+ --color-functional-purple: #815cd6;
234
+ --color-background-blue: #6272a41a;
235
+ --color-border-blue: #6272a44d;
236
+ --color-icon-blue: #6272a4;
237
+ --color-text-blue: #6272a4;
238
+ --color-background-cyan: #8be9fd1a;
239
+ --color-border-cyan: #8be9fd4d;
240
+ --color-icon-cyan: #8be9fd;
241
+ --color-text-cyan: #8be9fd;
242
+ --color-background-gray: #9aa1bc1a;
243
+ --color-border-gray: #9aa1bc4d;
244
+ --color-icon-gray: #9aa1bc;
245
+ --color-text-gray: #9aa1bc;
246
+ --color-background-green: #50fa7b1a;
247
+ --color-border-green: #50fa7b4d;
248
+ --color-icon-green: #50fa7b;
249
+ --color-text-green: #50fa7b;
250
+ --color-background-orange: #ffb86c1a;
251
+ --color-border-orange: #ffb86c4d;
252
+ --color-icon-orange: #ffb86c;
253
+ --color-text-orange: #ffb86c;
254
+ --color-background-pink: #ff79c61a;
255
+ --color-border-pink: #ff79c64d;
256
+ --color-icon-pink: #ff79c6;
257
+ --color-text-pink: #ff79c6;
258
+ --color-background-purple: #bd93f91a;
259
+ --color-border-purple: #bd93f94d;
260
+ --color-icon-purple: #bd93f9;
261
+ --color-text-purple: #bd93f9;
262
+ --color-background-red: #ff55551a;
263
+ --color-border-red: #ff55554d;
264
+ --color-icon-red: #ff5555;
265
+ --color-text-red: #ff5555;
266
+ --color-background-teal: #a4ffff1a;
267
+ --color-border-teal: #a4ffff4d;
268
+ --color-icon-teal: #a4ffff;
269
+ --color-text-teal: #a4ffff;
270
+ --color-background-yellow: #f1fa8c1a;
271
+ --color-border-yellow: #f1fa8c4d;
272
+ --color-icon-yellow: #f1fa8c;
273
+ --color-text-yellow: #f1fa8c;
274
+ --color-data-categorical-blue: #6272a4;
275
+ --color-data-categorical-orange: #ffb86c;
276
+ --color-data-categorical-green: #50fa7b;
277
+ --color-data-categorical-pink: #ff79c6;
278
+ --color-data-categorical-cyan: #8be9fd;
279
+ --color-data-categorical-red: #ff5555;
280
+ --color-data-categorical-teal: #a4ffff;
281
+ --color-data-categorical-indigo: #d6acff;
282
+ --color-data-categorical-purple: #bd93f9;
283
+ --color-data-categorical-brown: #ffb86c;
284
+ --color-data-neutral: #8c939b;
285
+ --color-data-purple-5: hsl(264.71 89.47% 28%);
286
+ --color-data-purple-4: hsl(264.71 89.47% 44%);
287
+ --color-data-purple-3: hsl(264.71 89.47% 60%);
288
+ --color-data-purple-2: hsl(264.71 89.47% 74%);
289
+ --color-data-purple-1: hsl(264.71 89.47% 88%);
290
+ --color-data-pink-5: hsl(325.52 100% 28%);
291
+ --color-data-pink-4: hsl(325.52 100% 44%);
292
+ --color-data-pink-3: hsl(325.52 100% 60%);
293
+ --color-data-pink-2: hsl(325.52 100% 74%);
294
+ --color-data-pink-1: hsl(325.52 100% 88%);
295
+ --color-data-red-5: hsl(0 100% 28%);
296
+ --color-data-red-4: hsl(0 100% 44%);
297
+ --color-data-red-3: hsl(0 100% 60%);
298
+ --color-data-red-2: hsl(0 100% 74%);
299
+ --color-data-red-1: hsl(0 100% 88%);
300
+ --color-data-orange-5: hsl(31.02 100% 28%);
301
+ --color-data-orange-4: hsl(31.02 100% 44%);
302
+ --color-data-orange-3: hsl(31.02 100% 60%);
303
+ --color-data-orange-2: hsl(31.02 100% 74%);
304
+ --color-data-orange-1: hsl(31.02 100% 88%);
305
+ --color-data-yellow-5: hsl(64.91 91.67% 28%);
306
+ --color-data-yellow-4: hsl(64.91 91.67% 44%);
307
+ --color-data-yellow-3: hsl(64.91 91.67% 60%);
308
+ --color-data-yellow-2: hsl(64.91 91.67% 74%);
309
+ --color-data-yellow-1: hsl(64.91 91.67% 88%);
310
+ --color-data-teal-5: hsl(180 100% 28%);
311
+ --color-data-teal-4: hsl(180 100% 44%);
312
+ --color-data-teal-3: hsl(180 100% 60%);
313
+ --color-data-teal-2: hsl(180 100% 74%);
314
+ --color-data-teal-1: hsl(180 100% 88%);
315
+ --color-data-blue-5: hsl(225.45 26.61% 28%);
316
+ --color-data-blue-4: hsl(225.45 26.61% 44%);
317
+ --color-data-blue-3: hsl(225.45 26.61% 60%);
318
+ --color-data-blue-2: hsl(225.45 26.61% 74%);
319
+ --color-data-blue-1: hsl(225.45 26.61% 88%);
320
+ --color-data-shamrock-5: hsl(135.18 94.44% 28%);
321
+ --color-data-shamrock-4: hsl(135.18 94.44% 44%);
322
+ --color-data-shamrock-3: hsl(135.18 94.44% 60%);
323
+ --color-data-shamrock-2: hsl(135.18 94.44% 74%);
324
+ --color-data-shamrock-1: hsl(135.18 94.44% 88%);
325
+ --color-data-gray-5: hsl(231.43 14.89% 28%);
326
+ --color-data-gray-4: hsl(231.43 14.89% 44%);
327
+ --color-data-gray-3: hsl(231.43 14.89% 60%);
328
+ --color-data-gray-2: hsl(231.43 14.89% 74%);
329
+ --color-data-gray-1: hsl(231.43 14.89% 88%);
330
+ --color-widget-background: #343746;
331
+ --color-widget-content-border: #6272a4;
332
+ --color-widget-background-highlight: #44475a;
333
+ --color-separator: #44475a;
334
+ --color-popover-background: #424450;
335
+ --color-popover-border: #6272a4;
336
+ --color-progress-border: #44475a;
337
+ --color-progress-value: #6272a4;
338
+ --color-vertical-progress-value: #6272a4;
339
+ --color-graph-gridlines: #44475a;
340
+ --color-widget-shadow: #21222c;
341
+ --color-current-line: #6272a4;
342
+ --color-selection: #44475a;
343
+ --color-primary: #bd93f9;
344
+ --color-positive: #50fa7b;
345
+ --color-negative: #ff5555;
346
+ --color-tag-orange: #ffb86c;
347
+ --color-tag-pink: #ff79c6;
348
+ --color-tag-cyan: #8be9fd;
349
+ --color-tag-yellow: #f1fa8c;
350
+ --color-tag-green: #50fa7b;
351
+ /* Syntax theme, mirrored from astryx-theme.ts's draculaSyntax map. Core
352
+ * 0.7.x emits NO --color-syntax-* defaults in CSS — the canonical values
353
+ * live in JS only — and core's highlighter uses them with no fallback, so
354
+ * a plain-CSS consumer that imports this file without theme.css would
355
+ * render an UNHIGHLIGHTED CodeBlock. These 19 slots close that gap; the
356
+ * five diff slots are the 0.7.1 diff layer and derive from Dracula's
357
+ * green/red rather than being Dracula spec tokens. */
358
+ --color-syntax-keyword: #ff79c6;
359
+ --color-syntax-string: #f1fa8c;
360
+ --color-syntax-comment: #6272a4;
361
+ --color-syntax-number: #ffb86c;
362
+ --color-syntax-function: #50fa7b;
363
+ --color-syntax-type: #8be9fd;
364
+ --color-syntax-variable: #f8f8f2;
365
+ --color-syntax-operator: #ff79c6;
366
+ --color-syntax-constant: #bd93f9;
367
+ --color-syntax-tag: #ff79c6;
368
+ --color-syntax-attribute: #50fa7b;
369
+ --color-syntax-property: #f8f8f2;
370
+ --color-syntax-punctuation: #f8f8f2;
371
+ --color-syntax-background: #282a36;
372
+ --color-syntax-added: #50fa7b26;
373
+ --color-syntax-removed: #ff555526;
374
+ --color-syntax-diff-header: #44475a;
375
+ --color-syntax-added-marker: #50fa7b;
376
+ --color-syntax-removed-marker: #ff5555;
377
+ --color-tag-purple: #bd93f9;
378
+ /* Renamed in 0.3.0 from `tag-blue`, which held this same #BD93F9. Dracula
348
379
  * has no blue; Purple is what the rest of the kit already uses for a fourth
349
380
  * accent, so the VALUE was right and the NAME was the lie. Renamed rather
350
381
  * than repinned, because a `blue` tag that paints purple is wrong in a way
@@ -387,72 +418,35 @@ body {
387
418
  * rules cannot be verified there. Check them in a real Chrome against
388
419
  * /templates and /bento: resting thumb Current Line, hover Purple. */
389
420
  @supports (scrollbar-color: auto) and (not (-webkit-hyphens: none)) {
390
- :root {
391
- scrollbar-color: var(--dracula-current-line) transparent;
392
- }
421
+ :root {
422
+ scrollbar-color: var(--dracula-current-line) transparent;
423
+ }
393
424
  }
394
425
 
395
426
  @supports selector(::-webkit-scrollbar) {
396
- *::-webkit-scrollbar {
397
- width: 10px;
398
- height: 10px;
399
- background: transparent;
400
- }
427
+ *::-webkit-scrollbar {
428
+ width: 10px;
429
+ height: 10px;
430
+ background: transparent;
431
+ }
401
432
 
402
- *::-webkit-scrollbar-track,
403
- *::-webkit-scrollbar-corner {
404
- background: transparent;
405
- }
433
+ *::-webkit-scrollbar-track,
434
+ *::-webkit-scrollbar-corner {
435
+ background: transparent;
436
+ }
406
437
 
407
- *::-webkit-scrollbar-thumb {
408
- background-color: var(--dracula-current-line);
409
- border-radius: 5px;
410
- border: 2px solid transparent;
411
- background-clip: content-box;
412
- }
438
+ *::-webkit-scrollbar-thumb {
439
+ background-color: var(--dracula-current-line);
440
+ border-radius: 5px;
441
+ border: 2px solid transparent;
442
+ background-clip: content-box;
443
+ }
413
444
 
414
- *::-webkit-scrollbar-thumb:hover {
415
- background-color: var(--dracula-purple);
416
- border: 2px solid transparent;
417
- background-clip: content-box;
418
- }
419
- }
420
-
421
- /* A resizable SideNav reports exactly 1px of horizontal overflow: the resize
422
- * handle renders 1px wider than its own box, and the side-nav panel scrolls
423
- * both axes, so a permanent horizontal scrollbar paints under the rail even
424
- * though nothing overflows visually. Clip the offending pixel on the handle
425
- * itself rather than on the panel: a collapsed rail renders its child popovers
426
- * as descendants of that panel, and they only escape the clip because their
427
- * root happens to be position:fixed. Clipping the panel would break them the
428
- * day an ancestor gains a transform. The handle contains nothing but its pill,
429
- * which sits inside its box, so clipping it costs nothing. Needed until the
430
- * resize handle stops reporting the extra pixel. Re-verified against
431
- * @astryxdesign/core 0.3.0: without the clip the hit area's half-pixel inline
432
- * shift leaves content at 300.5px in a 300px rail, and the LayoutPanel
433
- * (overflow:auto on both axes) reports scrollWidth 301 > 300 — the permanent
434
- * bar is back. Keep. */
435
- .astryx-app-shell-sidenav .astryx-resize-handle {
436
- overflow: hidden;
437
- }
438
-
439
- /* Astryx leaves the resize handle's drag surface translated -50% along the
440
- * block axis without ever positioning it at top:50%, so it spans only the TOP
441
- * HALF of the rail: the pointer reads col-resize and dragging works above the
442
- * midpoint, and nothing at all happens below it, even though the pill is drawn
443
- * straddling that boundary. The pill sibling carries a correct top:50%, which
444
- * is exactly what the drag surface is missing. Re-verified against
445
- * @astryxdesign/core 0.3.0: hitAreaHorizontal is still top:0/bottom:0 while
446
- * hitAreaOffsetX translates Y by -50%, so without this the drag surface spans
447
- * [-50%,+50%] of the rail and the bottom half is dead (elementFromPoint hits
448
- * the handle, which has no pointer handler). Upstream workaround; drop it if
449
- * the component starts positioning its own hit area. */
450
- .astryx-app-shell-sidenav
451
- .astryx-resize-handle
452
- > :not(.astryx-resize-handle-pill) {
453
- top: 50%;
454
- bottom: auto;
455
- height: 100%;
445
+ *::-webkit-scrollbar-thumb:hover {
446
+ background-color: var(--dracula-purple);
447
+ border: 2px solid transparent;
448
+ background-clip: content-box;
449
+ }
456
450
  }
457
451
 
458
452
  /* Everything below this line is UNLAYERED on purpose, and that is load-bearing,
@@ -486,17 +480,17 @@ body {
486
480
  * carousel relies on a layered `scrollbar-width: none` to hide its bar and a
487
481
  * universal rule here would un-hide it (the one scrollbar-width in the stack). */
488
482
  @media (prefers-reduced-motion: reduce) {
489
- *,
490
- *::before,
491
- *::after {
492
- animation-duration: 0.01ms;
493
- animation-iteration-count: 1;
494
- transition-duration: 0.01ms;
495
- }
483
+ *,
484
+ *::before,
485
+ *::after {
486
+ animation-duration: 0.01ms;
487
+ animation-iteration-count: 1;
488
+ transition-duration: 0.01ms;
489
+ }
496
490
 
497
- html {
498
- scroll-behavior: auto;
499
- }
491
+ html {
492
+ scroll-behavior: auto;
493
+ }
500
494
  }
501
495
 
502
496
  /* Sticky-header focus and in-page anchor offset. AppShell in `auto` mode pins
@@ -519,6 +513,5 @@ body {
519
513
  * correct at every viewport width and in both AppShell modes — with
520
514
  * `--spacing-8` only as the fallback for pages that have no sticky header at all. */
521
515
  :where(:focus-visible, h1, h2, h3, h4, [id]) {
522
- scroll-margin-block: var(--appshell-header-height, var(--spacing-8))
523
- var(--space-viewport);
516
+ scroll-margin-block: var(--appshell-header-height, var(--spacing-8)) var(--space-viewport);
524
517
  }