@signal9/era-ui 10.1.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/dist/ai/actions/actions.svelte +1 -1
  2. package/dist/ai/artifact/artifact-actions.svelte +1 -1
  3. package/dist/ai/artifact/artifact-close.svelte +1 -1
  4. package/dist/ai/artifact/artifact-content.svelte +1 -1
  5. package/dist/ai/artifact/artifact-header.svelte +1 -1
  6. package/dist/ai/artifact/artifact.svelte +1 -4
  7. package/dist/ai/chain-of-thought/chain-of-thought-step.svelte +3 -3
  8. package/dist/ai/chain-of-thought/chain-of-thought.svelte +1 -1
  9. package/dist/ai/checkpoint.svelte +2 -2
  10. package/dist/ai/confirmation/confirmation-actions.svelte +1 -1
  11. package/dist/ai/confirmation/confirmation-args.svelte +4 -4
  12. package/dist/ai/confirmation/confirmation.svelte +5 -8
  13. package/dist/ai/context/context.svelte +3 -3
  14. package/dist/ai/conversation/conversation-content.svelte +1 -4
  15. package/dist/ai/conversation/conversation-empty-state.svelte +1 -1
  16. package/dist/ai/conversation/conversation-scroll-button.svelte +3 -3
  17. package/dist/ai/conversations/conversations-group.svelte +2 -2
  18. package/dist/ai/conversations/conversations-item.svelte +8 -8
  19. package/dist/ai/conversations/conversations-root.svelte +2 -2
  20. package/dist/ai/error-panel/error-panel.svelte +7 -7
  21. package/dist/ai/image.svelte +1 -1
  22. package/dist/ai/inline-citation/inline-citation.svelte +5 -5
  23. package/dist/ai/loader.svelte +1 -4
  24. package/dist/ai/message/message-branch-selector.svelte +3 -3
  25. package/dist/ai/message/message-branch.svelte +1 -1
  26. package/dist/ai/message/message-content.svelte +1 -1
  27. package/dist/ai/message/message-toolbar.svelte +1 -1
  28. package/dist/ai/message/message-usage.svelte +5 -7
  29. package/dist/ai/message/message.svelte +1 -1
  30. package/dist/ai/model-selector/model-selector.svelte +2 -2
  31. package/dist/ai/open-in-chat/open-in-chat.svelte +2 -2
  32. package/dist/ai/plan/plan-content.svelte +1 -1
  33. package/dist/ai/plan/plan-header.svelte +2 -2
  34. package/dist/ai/plan/plan.svelte +1 -4
  35. package/dist/ai/prompt-input/prompt-input-add-attachments.svelte +1 -1
  36. package/dist/ai/prompt-input/prompt-input-attachments.svelte +5 -5
  37. package/dist/ai/prompt-input/prompt-input-submit.svelte +2 -2
  38. package/dist/ai/prompt-input/prompt-input-textarea.svelte +2 -2
  39. package/dist/ai/prompt-input/prompt-input-toolbar.svelte +1 -1
  40. package/dist/ai/prompt-input/prompt-input.svelte +1 -1
  41. package/dist/ai/queue/queue-item.svelte +1 -1
  42. package/dist/ai/queue/queue.svelte +1 -1
  43. package/dist/ai/reasoning/reasoning-trigger.svelte +1 -1
  44. package/dist/ai/response/response.svelte +1 -1
  45. package/dist/ai/run-status/run-status.svelte +5 -10
  46. package/dist/ai/runtime-feed/runtime-feed-item.svelte +1 -4
  47. package/dist/ai/runtime-feed/runtime-feed-root.svelte +1 -1
  48. package/dist/ai/sources/source.svelte +2 -2
  49. package/dist/ai/sources/sources-trigger.svelte +1 -1
  50. package/dist/ai/structured-value/structured-value.svelte +4 -4
  51. package/dist/ai/suggestion/suggestion.svelte +1 -1
  52. package/dist/ai/suggestion/suggestions.svelte +1 -1
  53. package/dist/ai/swarm/swarm-agent.svelte +3 -3
  54. package/dist/ai/swarm/swarm-artifact.svelte +2 -2
  55. package/dist/ai/swarm/swarm-barrier.svelte +3 -3
  56. package/dist/ai/swarm/swarm-barriers.svelte +1 -4
  57. package/dist/ai/swarm/swarm-counts.svelte +2 -2
  58. package/dist/ai/swarm/swarm-footer.svelte +2 -2
  59. package/dist/ai/swarm/swarm-grid.svelte +2 -2
  60. package/dist/ai/swarm/swarm-header.svelte +2 -2
  61. package/dist/ai/swarm/swarm-node.svelte +7 -9
  62. package/dist/ai/swarm/swarm-role.svelte +2 -2
  63. package/dist/ai/swarm/swarm-root.svelte +1 -4
  64. package/dist/ai/swarm/swarm-sandbox.svelte +4 -7
  65. package/dist/ai/swarm/swarm-tree.svelte +2 -2
  66. package/dist/ai/task/task-content.svelte +1 -4
  67. package/dist/ai/task/task-trigger.svelte +1 -1
  68. package/dist/ai/tool/tool-chip.svelte +3 -3
  69. package/dist/ai/tool/tool-chips.svelte +3 -3
  70. package/dist/ai/tool/tool-exec.svelte +4 -4
  71. package/dist/ai/tool/tool-header.svelte +1 -1
  72. package/dist/ai/web-preview/web-preview.svelte +4 -9
  73. package/dist/ai/workflow/canvas.svelte +1 -1
  74. package/dist/ai/workflow/node.svelte +3 -3
  75. package/dist/apps/llm-shell/llm-shell.svelte +4 -4
  76. package/dist/apps/notes/notes.svelte +8 -8
  77. package/dist/dev/audit/audits/even-container-padding.js +2 -2
  78. package/dist/dev/audit/audits/single-glyph-square.js +2 -2
  79. package/dist/dev/audit-overlay.svelte +7 -7
  80. package/dist/docs/css-utilities.d.ts +31 -0
  81. package/dist/docs/css-utilities.js +141 -7
  82. package/dist/docs/quickstart.md +5 -5
  83. package/dist/era-ui.css +1 -1
  84. package/dist/generated-docs/llms-full.txt +359 -94
  85. package/dist/generated-docs/llms.txt +18 -7
  86. package/dist/generated-docs/manifest.json +355 -49
  87. package/dist/generated-docs/utilities.json +336 -41
  88. package/dist/generated-docs/utilities.md +341 -87
  89. package/dist/os/notification-center.svelte +11 -17
  90. package/dist/os/pane-manager.svelte.d.ts +1 -1
  91. package/dist/os/pane.svelte +4 -6
  92. package/dist/os/taskbar.svelte +13 -18
  93. package/dist/os/toast.svelte +6 -11
  94. package/dist/os/toaster.svelte +1 -1
  95. package/dist/styles/density.css +0 -2
  96. package/dist/styles/index.css +117 -79
  97. package/dist/styles/themes.css +49 -42
  98. package/dist/ui/accordion/accordion-content.svelte +1 -1
  99. package/dist/ui/accordion/accordion-trigger.svelte +2 -2
  100. package/dist/ui/alert-dialog/alert-dialog-content.svelte +2 -2
  101. package/dist/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
  102. package/dist/ui/aspect-ratio/aspect-ratio.svelte +1 -5
  103. package/dist/ui/avatar/avatar-fallback.svelte +1 -1
  104. package/dist/ui/avatar/avatar-root.svelte +1 -1
  105. package/dist/ui/badge/badge.svelte +1 -1
  106. package/dist/ui/badge/badge.svelte.d.ts +1 -1
  107. package/dist/ui/bar/bar.svelte +7 -7
  108. package/dist/ui/bar/bar.svelte.d.ts +15 -15
  109. package/dist/ui/button/button.svelte +1 -1
  110. package/dist/ui/button/variants.d.ts +4 -4
  111. package/dist/ui/button/variants.js +18 -18
  112. package/dist/ui/button-group/button-group.svelte +2 -2
  113. package/dist/ui/calendar/calendar-day.svelte +1 -1
  114. package/dist/ui/calendar/calendar-grid-row.svelte +1 -1
  115. package/dist/ui/calendar/calendar-grid.svelte +1 -1
  116. package/dist/ui/calendar/calendar-head-cell.svelte +1 -1
  117. package/dist/ui/calendar/calendar-header.svelte +1 -1
  118. package/dist/ui/calendar/calendar-next-button.svelte +1 -1
  119. package/dist/ui/calendar/calendar-prev-button.svelte +1 -1
  120. package/dist/ui/calendar/calendar-root.svelte +1 -1
  121. package/dist/ui/card/card.svelte +10 -10
  122. package/dist/ui/card/card.svelte.d.ts +16 -16
  123. package/dist/ui/checkbox/checkbox-group.svelte +1 -1
  124. package/dist/ui/checkbox/checkbox.svelte +1 -1
  125. package/dist/ui/chip/chip.svelte +7 -9
  126. package/dist/ui/chip/chip.svelte.d.ts +7 -7
  127. package/dist/ui/code-block/code-block.svelte +3 -9
  128. package/dist/ui/collapsible/collapsible-trigger.svelte +1 -1
  129. package/dist/ui/combobox/combobox-content.svelte +1 -1
  130. package/dist/ui/combobox/combobox-empty.svelte +1 -6
  131. package/dist/ui/combobox/combobox-group-heading.svelte +1 -4
  132. package/dist/ui/combobox/combobox-input.svelte +1 -1
  133. package/dist/ui/combobox/combobox-item.svelte +1 -1
  134. package/dist/ui/combobox/combobox-trigger.svelte +2 -2
  135. package/dist/ui/command/command-group-heading.svelte +1 -4
  136. package/dist/ui/command/command-group-items.svelte +1 -5
  137. package/dist/ui/command/command-item.svelte +1 -1
  138. package/dist/ui/command/command-link-item.svelte +1 -1
  139. package/dist/ui/command/command-root.svelte +2 -2
  140. package/dist/ui/command/command-viewport.svelte +1 -1
  141. package/dist/ui/command-bar/command-bar.svelte +9 -13
  142. package/dist/ui/context-menu/context-menu-checkbox-item.svelte +1 -1
  143. package/dist/ui/context-menu/context-menu-content.svelte +2 -2
  144. package/dist/ui/context-menu/context-menu-group-heading.svelte +1 -4
  145. package/dist/ui/context-menu/context-menu-item.svelte +1 -1
  146. package/dist/ui/context-menu/context-menu-radio-item.svelte +1 -1
  147. package/dist/ui/context-menu/context-menu-sub-content.svelte +1 -1
  148. package/dist/ui/context-menu/context-menu-sub-trigger.svelte +2 -2
  149. package/dist/ui/copy-button/copy-button.svelte +2 -2
  150. package/dist/ui/cycle/cycle.svelte +2 -2
  151. package/dist/ui/date-field/date-field-segment.svelte +1 -1
  152. package/dist/ui/date-picker/date-picker-calendar.svelte +1 -1
  153. package/dist/ui/date-picker/date-picker-content.svelte +1 -4
  154. package/dist/ui/date-picker/date-picker-day.svelte +1 -1
  155. package/dist/ui/date-picker/date-picker-grid-row.svelte +1 -1
  156. package/dist/ui/date-picker/date-picker-grid.svelte +1 -1
  157. package/dist/ui/date-picker/date-picker-head-cell.svelte +1 -1
  158. package/dist/ui/date-picker/date-picker-header.svelte +1 -1
  159. package/dist/ui/date-picker/date-picker-next-button.svelte +1 -1
  160. package/dist/ui/date-picker/date-picker-prev-button.svelte +1 -1
  161. package/dist/ui/date-picker/date-picker-segment.svelte +1 -1
  162. package/dist/ui/date-picker/date-picker-trigger.svelte +2 -2
  163. package/dist/ui/date-range-field/date-range-field-segment.svelte +1 -1
  164. package/dist/ui/date-range-picker/date-range-picker-calendar.svelte +1 -1
  165. package/dist/ui/date-range-picker/date-range-picker-content.svelte +1 -4
  166. package/dist/ui/date-range-picker/date-range-picker-day.svelte +1 -1
  167. package/dist/ui/date-range-picker/date-range-picker-grid-row.svelte +1 -1
  168. package/dist/ui/date-range-picker/date-range-picker-grid.svelte +1 -5
  169. package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte +1 -1
  170. package/dist/ui/date-range-picker/date-range-picker-header.svelte +1 -1
  171. package/dist/ui/date-range-picker/date-range-picker-next-button.svelte +1 -1
  172. package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte +1 -1
  173. package/dist/ui/date-range-picker/date-range-picker-segment.svelte +1 -1
  174. package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +2 -2
  175. package/dist/ui/dialog/dialog-content.svelte +3 -5
  176. package/dist/ui/dialog/dialog-header.svelte +1 -6
  177. package/dist/ui/dialog/dialog-overlay.svelte +1 -5
  178. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  179. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +2 -2
  180. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -4
  181. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  182. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  183. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  184. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  185. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +2 -2
  186. package/dist/ui/file-upload/file-upload.svelte +2 -2
  187. package/dist/ui/input/input.svelte +2 -2
  188. package/dist/ui/input/textarea.svelte +1 -1
  189. package/dist/ui/input/variants.d.ts +18 -18
  190. package/dist/ui/input/variants.js +6 -6
  191. package/dist/ui/kv/kv.svelte +2 -3
  192. package/dist/ui/link-preview/link-preview-content.svelte +1 -1
  193. package/dist/ui/menubar/menubar-checkbox-item.svelte +1 -1
  194. package/dist/ui/menubar/menubar-content.svelte +2 -2
  195. package/dist/ui/menubar/menubar-group-heading.svelte +1 -4
  196. package/dist/ui/menubar/menubar-item.svelte +1 -1
  197. package/dist/ui/menubar/menubar-radio-item.svelte +1 -1
  198. package/dist/ui/menubar/menubar-root.svelte +1 -4
  199. package/dist/ui/menubar/menubar-sub-content.svelte +1 -1
  200. package/dist/ui/menubar/menubar-sub-trigger.svelte +2 -2
  201. package/dist/ui/menubar/menubar-trigger.svelte +1 -1
  202. package/dist/ui/meter/meter.svelte +2 -2
  203. package/dist/ui/pagination/pagination-next-button.svelte +1 -1
  204. package/dist/ui/pagination/pagination-prev-button.svelte +1 -1
  205. package/dist/ui/pagination/pagination-root.svelte +1 -1
  206. package/dist/ui/pane/pane-content.svelte +1 -1
  207. package/dist/ui/pane/pane-root.svelte +1 -1
  208. package/dist/ui/pane/pane-tab-list.svelte +1 -1
  209. package/dist/ui/pane/pane-tab-panel.svelte +1 -1
  210. package/dist/ui/pane/pane-tab.svelte +1 -1
  211. package/dist/ui/pane/pane.svelte +1 -1
  212. package/dist/ui/pin-input/pin-input-cell.svelte +1 -1
  213. package/dist/ui/popover/popover-content.svelte +1 -1
  214. package/dist/ui/popover/popover-trigger.svelte +1 -4
  215. package/dist/ui/progress/progress.svelte +2 -2
  216. package/dist/ui/radio-group/radio-group-item.svelte +2 -2
  217. package/dist/ui/radio-group/radio-group-root.svelte +1 -1
  218. package/dist/ui/rating-group/rating-group-item.svelte +1 -1
  219. package/dist/ui/rating-group/rating-group-root.svelte +1 -1
  220. package/dist/ui/scroll-area/scroll-area-scrollbar.svelte +1 -1
  221. package/dist/ui/scroll-area/scroll-area-thumb.svelte +1 -1
  222. package/dist/ui/scroll-area/scroll-area.svelte +1 -1
  223. package/dist/ui/select/select-content.svelte +7 -6
  224. package/dist/ui/select/select-group-heading.svelte +1 -4
  225. package/dist/ui/select/select-item.svelte +1 -1
  226. package/dist/ui/select/select-trigger.svelte +2 -2
  227. package/dist/ui/select/select-value.svelte +1 -1
  228. package/dist/ui/separator/separator.svelte +1 -1
  229. package/dist/ui/sheet/sheet-content.svelte +3 -3
  230. package/dist/ui/sheet/sheet-content.svelte.d.ts +4 -4
  231. package/dist/ui/skeleton/skeleton.svelte +4 -4
  232. package/dist/ui/skeleton/skeleton.svelte.d.ts +10 -10
  233. package/dist/ui/slider/slider-range.svelte +1 -1
  234. package/dist/ui/slider/slider-thumb.svelte +1 -1
  235. package/dist/ui/slider/slider-tick.svelte +1 -1
  236. package/dist/ui/step/step-content.svelte +1 -1
  237. package/dist/ui/step/step-section.svelte +1 -1
  238. package/dist/ui/step/step-summary.svelte +7 -7
  239. package/dist/ui/switch/switch.svelte +2 -2
  240. package/dist/ui/table/table-cell.svelte +1 -1
  241. package/dist/ui/table/table-head-cell.svelte +1 -1
  242. package/dist/ui/table/table-row.svelte +1 -1
  243. package/dist/ui/time-field/time-field-segment.svelte +1 -1
  244. package/dist/ui/time-range-field/time-range-field-segment.svelte +1 -1
  245. package/dist/ui/toggle-group/toggle-group-item.svelte +1 -1
  246. package/dist/ui/toggle-group/toggle-group-root.svelte +1 -1
  247. package/dist/ui/tooltip/tooltip-content.svelte +1 -1
  248. package/dist/ui/video-player/video-player.svelte +44 -47
  249. package/dist/utils/index.js +1 -1
  250. package/package.json +4 -3
@@ -82,7 +82,7 @@
82
82
  // outline-(--color-7) rather than `outline-7`, which Tailwind reads as a 7px
83
83
  // outline WIDTH — the numeric colour scale collides with the width scale on
84
84
  // border-* and outline-*, so those two always take the paren-var form here.
85
- focused ? 'outline -outline-offset-1 outline-(--color-7)' : 'opacity-95 shadow-(--era-shadow)',
85
+ focused ? 'outline -outline-offset-1 outline-(--color-7)' : 'opacity-95 shadow-sm',
86
86
  pane.state === 'minimized' && 'hidden'
87
87
  )}
88
88
  >
@@ -94,7 +94,7 @@
94
94
  from the edge against 5px above and below it — read as crowded because it
95
95
  was. --era-inset-control is (h-control − text)/2, so the label now starts the same
96
96
  distance in from the edge as it sits from the top. -->
97
- <Pane.Handle class="gap-(--era-gap) pl-(--era-inset-control)" center={pane.center}>
97
+ <Pane.Handle class="gap-gutter pl-inset-control" center={pane.center}>
98
98
  {#if pane.lead}
99
99
  <!-- The app replaced the whole icon+title cluster. Its content lives in
100
100
  the drag zone like the default one; anything interactive in it
@@ -103,7 +103,7 @@
103
103
  {:else}
104
104
  {#if pane.icon}
105
105
  {@const Icon = pane.icon}
106
- <Icon class="size-(--era-h-icon) shrink-0 text-muted" />
106
+ <Icon class="size-icon shrink-0 text-muted" />
107
107
  {/if}
108
108
  <span class={cn('truncate text-body', focused ? 'text-bright' : 'text-muted')}
109
109
  >{pane.title}</span
@@ -140,9 +140,7 @@
140
140
  icon
141
141
  size="pill"
142
142
  tone={armed === 'minimize' ? 'warning' : armed === 'maximize' ? 'success' : 'destructive'}
143
- class={armed === 'maximize'
144
- ? '[&_svg]:size-(--era-glyph-pill)'
145
- : '[&_svg]:size-(--era-h-icon)'}
143
+ class={armed === 'maximize' ? '[&_svg]:size-glyph-pill' : '[&_svg]:size-icon'}
146
144
  aria-label="Close (right-click minimizes, middle-click maximizes)"
147
145
  onclick={() => pm.close(pane.id)}
148
146
  oncontextmenu={(e: MouseEvent) => e.preventDefault()}
@@ -202,17 +202,12 @@
202
202
  bind:this={ref}
203
203
  bind:clientHeight={barHeight}
204
204
  class={cn(
205
- 'absolute flex h-(--era-h-bar) items-center gap-(--era-gap) bg-(--era-surface-bg-elevated) px-(--era-inset-chip) shadow-(--era-shadow-lg) glass-blur',
205
+ 'absolute flex h-bar items-center gap-gutter bg-elevated px-inset-chip shadow-lg glass-blur',
206
206
  floating
207
- ? cn(
208
- 'inset-x-(--era-gap) rounded-(--era-rd-bar)',
209
- position === 'top' ? 'top-(--era-gap)' : 'bottom-(--era-gap)'
210
- )
207
+ ? cn('inset-x-gutter rounded-bar', position === 'top' ? 'top-gutter' : 'bottom-gutter')
211
208
  : cn(
212
209
  'inset-x-0 border-divider-faded',
213
- position === 'top'
214
- ? 'top-0 rounded-b-(--era-rd-bar) border-b'
215
- : 'bottom-0 rounded-t-(--era-rd-bar) border-t'
210
+ position === 'top' ? 'top-0 rounded-b-bar border-b' : 'bottom-0 rounded-t-bar border-t'
216
211
  ),
217
212
  LAYER.taskbar,
218
213
  className
@@ -232,10 +227,10 @@
232
227
  />
233
228
 
234
229
  {#if pinned.length}
235
- <div class="flex shrink-0 items-center gap-(--era-gap)">
230
+ <div class="flex shrink-0 items-center gap-gutter">
236
231
  {#each pinned as p (p.appId)}
237
232
  <Button icon size="control" aria-label={p.title} onclick={() => pm.open(p.appId)}>
238
- {#if p.icon}{@const Icon = p.icon}<Icon class="size-(--era-h-icon)" />{/if}
233
+ {#if p.icon}{@const Icon = p.icon}<Icon class="size-icon" />{/if}
239
234
  </Button>
240
235
  {/each}
241
236
  </div>
@@ -250,7 +245,7 @@
250
245
  gap between the bar's other groups. -->
251
246
  {#if tabPanes.length > 0}
252
247
  <div
253
- class="scrollbar-none flex max-w-[40%] min-w-0 shrink-0 items-center gap-(--era-gap) overflow-x-auto"
248
+ class="scrollbar-none flex max-w-[40%] min-w-0 shrink-0 items-center gap-gutter overflow-x-auto"
254
249
  >
255
250
  {#each tabPanes as win (win.id)}
256
251
  <Button
@@ -273,7 +268,7 @@
273
268
  win.state === 'minimized' && showWindows !== 'minimized' && 'opacity-60'
274
269
  )}
275
270
  >
276
- {#if win.icon}{@const Icon = win.icon}<Icon class="size-(--era-h-icon) shrink-0" />{/if}
271
+ {#if win.icon}{@const Icon = win.icon}<Icon class="size-icon shrink-0" />{/if}
277
272
  <span class="truncate">{win.title}</span>
278
273
  </Button>
279
274
  {/each}
@@ -284,7 +279,7 @@
284
279
  once there's something to switch between (and only when the bar exposes
285
280
  workspaces at all). -->
286
281
  {#if showWorkspaces && pm.workspaces.length > 1}
287
- <div class="flex shrink-0 items-center gap-(--era-gap)">
282
+ <div class="flex shrink-0 items-center gap-gutter">
288
283
  {#each pm.workspaces as ws, i (ws.id)}
289
284
  <Button
290
285
  icon
@@ -301,7 +296,7 @@
301
296
  {/if}
302
297
 
303
298
  <!-- System tray -->
304
- <div class="flex shrink-0 items-center gap-(--era-gap)">
299
+ <div class="flex shrink-0 items-center gap-gutter">
305
300
  {@render end?.()}
306
301
  <!-- The bell only exists while there's something unread — silent means
307
302
  no dead chrome (the center stays reachable via onNotifications
@@ -309,7 +304,7 @@
309
304
  {#if notif.unread > 0}
310
305
  <div class="relative">
311
306
  <Button icon size="control" aria-label="Notifications" onclick={onNotifications}>
312
- <Bell class="size-(--era-h-icon)" />
307
+ <Bell class="size-icon" />
313
308
  </Button>
314
309
  <span
315
310
  class="absolute -top-0.5 -right-0.5 flex min-w-4 items-center justify-center rounded-full bg-primary px-1 text-[0.65rem] leading-4 text-primary-fg"
@@ -336,7 +331,7 @@
336
331
  <div
337
332
  data-mode="touch"
338
333
  class={cn(
339
- 'absolute right-(--era-gap) bottom-[max(var(--era-gap),env(safe-area-inset-bottom))] sm:hidden',
334
+ 'absolute right-gutter bottom-[max(var(--era-gap),env(safe-area-inset-bottom))] sm:hidden',
340
335
  LAYER.taskbar
341
336
  )}
342
337
  >
@@ -350,10 +345,10 @@
350
345
  size="control"
351
346
  tone="accent"
352
347
  aria-label="Open command bar"
353
- class="shadow-(--era-shadow-lg)"
348
+ class="shadow-lg"
354
349
  onclick={() => commandBar?.focusInput()}
355
350
  >
356
- <Terminal class="size-(--era-h-icon)" />
351
+ <Terminal class="size-icon" />
357
352
  </Button>
358
353
  </div>
359
354
  {/if}
@@ -8,7 +8,7 @@
8
8
  const notif = getNotifications();
9
9
 
10
10
  const accent: Record<AppNotification['tone'], string> = {
11
- default: 'bg-(--era-highlight)',
11
+ default: 'bg-highlight',
12
12
  accent: 'bg-primary',
13
13
  success: 'bg-success',
14
14
  destructive: 'bg-destructive'
@@ -16,20 +16,15 @@
16
16
  </script>
17
17
 
18
18
  <div
19
- class="pointer-events-auto relative flex w-80 gap-(--era-inset-chip) overflow-hidden rounded-(--era-rd-bar) bg-(--era-surface-bg-elevated) p-(--era-pad-card) shadow-(--era-shadow-lg) glass-blur"
19
+ class="pointer-events-auto relative flex w-80 gap-inset-chip overflow-hidden rounded-bar bg-elevated p-card shadow-lg glass-blur"
20
20
  >
21
- <span
22
- class={cn(
23
- 'absolute inset-y-(--era-panel-inset) left-(--era-panel-inset) w-1 rounded-full',
24
- accent[n.tone]
25
- )}
26
- ></span>
21
+ <span class={cn('absolute inset-y-menu left-menu w-1 rounded-full', accent[n.tone])}></span>
27
22
  {#if n.icon}
28
23
  {@const Icon = n.icon}
29
- <Icon class="mt-0.5 size-(--era-h-chip) shrink-0 text-muted" />
24
+ <Icon class="mt-0.5 size-chip shrink-0 text-muted" />
30
25
  {/if}
31
26
  <div class="min-w-0 flex-1">
32
- <div class="flex items-start gap-(--era-gap)">
27
+ <div class="flex items-start gap-gutter">
33
28
  <p class="min-w-0 flex-1 truncate text-body text-bright">{n.title}</p>
34
29
  <!-- The dismiss family's ×: xxs tier, whose default glyph is the 12px
35
30
  dismiss ink (the size class that sat on the <X> lost to the Button
@@ -46,7 +41,7 @@
46
41
  </div>
47
42
  {#if n.body}<p class="mt-0.5 text-body leading-body break-words text-muted">{n.body}</p>{/if}
48
43
  {#if n.actions.length}
49
- <div class="mt-(--era-inset-chip) flex flex-wrap gap-(--era-gap)">
44
+ <div class="mt-inset-chip flex flex-wrap gap-gutter">
50
45
  {#each n.actions as action (action.label)}
51
46
  <Button
52
47
  size="icon"
@@ -16,7 +16,7 @@
16
16
  desktop; each toast re-enables its own. -->
17
17
  <div
18
18
  class={cn(
19
- 'pointer-events-none absolute right-(--era-pad-card) bottom-(--era-h-bar) flex flex-col-reverse gap-(--era-inset-chip)',
19
+ 'pointer-events-none absolute right-card bottom-(--era-h-bar) flex flex-col-reverse gap-inset-chip',
20
20
  LAYER.toast,
21
21
  className
22
22
  )}
@@ -74,7 +74,6 @@
74
74
  * --era-pad-content 2·so 16 / 22.5 / 30 / 48 — full content panels (docs sections)
75
75
  *
76
76
  * Whitespace share rises with mode: pad-md / h-control = 0.33 dense → 0.50 touch.
77
- * --era-content-p is kept as an alias of --era-pad-content.
78
77
  *
79
78
  * IDENTITY USED AT NESTING SITES
80
79
  * ==============================
@@ -312,7 +311,6 @@
312
311
  --era-pad-content: calc(var(--era-so) * 2); /* 16/22.5/30/48 */
313
312
 
314
313
  /* Content padding — alias of pad-lg (formerly 4·sp − 16 ≈ the same curve) */
315
- --era-content-p: var(--era-pad-content);
316
314
  }
317
315
 
318
316
  /* -------------------------------------------------- */
@@ -491,6 +491,56 @@
491
491
  --color-elevated: var(--era-surface-bg-elevated);
492
492
  --color-highlight: var(--era-highlight);
493
493
  --color-overlay: var(--era-overlay-bg);
494
+ /* THE SPACING SCALE — one entry per token, from which Tailwind derives the
495
+ * WHOLE directional family: p/px/py/pt/pr/pb/pl/ps/pe, every margin, gap and
496
+ * gap-x/y, inset/top/right/bottom/left, translate, and the sizing prefixes.
497
+ *
498
+ * These were hand-written `@utility` blocks, which could only ever cover the
499
+ * spellings someone remembered to write: `px-gutter` existed and `mt-gutter`
500
+ * did not, `p-inset-control` existed and `pl-inset-control` did not, so the
501
+ * library fell back to `mt-(--era-gap)` in exactly the places the named API
502
+ * was supposed to cover. One line here replaces twenty blocks and leaves no
503
+ * spelling missing.
504
+ *
505
+ * ONLY genuine spacing belongs here. The namespace is shared across
506
+ * h/w/p/m/gap, so a name registered here means the same length in ALL of
507
+ * them — true of a gap or an inset, false of a TIER HEIGHT. Tiers stay
508
+ * hand-written per prefix below, and the two vocabularies deliberately share
509
+ * no word: icon/pill/chip/control/bar are heights; gutter, card, panel,
510
+ * content, menu, field and the inset-* names are spacing. Registering a tier
511
+ * name here would silently make `px-control` mean 24px of side padding. */
512
+ --spacing-gutter: var(--era-gap);
513
+ --spacing-panel: var(--era-pad-panel);
514
+ --spacing-card: var(--era-pad-card);
515
+ --spacing-content: var(--era-pad-content);
516
+ --spacing-menu: var(--era-panel-inset);
517
+ --spacing-field: var(--era-field-px);
518
+ /* @use text-symmetric content padding — (tier − text)/2, the inset that
519
+ * vertically centres body text in its tier; px-inset-control is a text
520
+ * button's side padding, p-inset-control a code block's. */
521
+ --spacing-inset-pill: var(--era-inset-pill);
522
+ --spacing-inset-chip: var(--era-inset-chip);
523
+ --spacing-inset-control: var(--era-inset-control);
524
+ /* @use the concentric inset for a nested pair — (h-container − h-child)/2,
525
+ * the gap that makes a child control sit evenly inside its container, and
526
+ * the radius step that keeps their corners concentric. Named for the pair it
527
+ * joins: gap-icon-inset-control seats an icon in a control. */
528
+ --spacing-icon-inset-pill: var(--era-icon-inset-pill);
529
+ --spacing-icon-inset-chip: var(--era-icon-inset-chip);
530
+ --spacing-icon-inset-control: var(--era-icon-inset-control);
531
+ --spacing-icon-inset-bar: var(--era-icon-inset-bar);
532
+ --spacing-pill-inset-chip: var(--era-pill-inset-chip);
533
+ --spacing-pill-inset-control: var(--era-pill-inset-control);
534
+ --spacing-chip-inset-control: var(--era-chip-inset-control);
535
+ --spacing-chip-inset-bar: var(--era-chip-inset-bar);
536
+ /* @use the glyph size for a tier — the INK inside the box, not the box
537
+ * (size-glyph-pill is the dismiss × in a pill, size-pill is the pill). */
538
+ --spacing-glyph-icon: var(--era-glyph-icon);
539
+ --spacing-glyph-pill: var(--era-glyph-pill);
540
+ /* @use the recessed field fill — bg-field is a text input's resting well,
541
+ * bg-field-highlight its focused/hovered face. */
542
+ --color-field: var(--era-field-bg);
543
+ --color-field-highlight: var(--era-field-highlight);
494
544
  /* Motion — bare transition utilities default to the motion axis, so
495
545
  * `transition-colors` alone is on-design (0s at instant, longer at extra).
496
546
  * ease-base/duration-base name the axis explicitly for overrides. */
@@ -539,12 +589,13 @@
539
589
  /* ------------------------------------------------------------------ */
540
590
  /* Named tier + spacing utilities */
541
591
  /* */
542
- /* Static utilities (not @theme) because Tailwind's spacing namespace */
543
- /* is shared across h/w/p/m/gap — registering `md` there would give */
544
- /* px-gutter and h-control the SAME value, and era's tiers and insets are */
545
- /* different token families. Each name below maps to exactly one */
546
- /* token. Kept terse; the ladder itself is documented in density.css */
547
- /* and on the /spacing page. */
592
+ /* What is left here is what the SPACING SCALE above cannot express: */
593
+ /* a tier is a HEIGHT, and the spacing namespace is shared across */
594
+ /* h/w/p/m/gap, so registering `control` there would silently make */
595
+ /* px-control mean 24px of side padding. Tier names therefore get one */
596
+ /* hand-written block per prefix that needs them, and the two */
597
+ /* vocabularies share no word. Kept terse; the ladder itself is */
598
+ /* documented in density.css and on the /spacing page. */
548
599
  /* ------------------------------------------------------------------ */
549
600
 
550
601
  /* @use the tier-height ladder — h-icon (icon) · h-pill (nested pill) · h-chip
@@ -584,6 +635,46 @@
584
635
  min-height: var(--era-h-bar);
585
636
  }
586
637
 
638
+ /* @use a tier-sized WIDTH — the horizontal twin of the h-* ladder, for a rail or
639
+ * a column measured in tiers rather than in content. */
640
+ @utility w-icon {
641
+ width: var(--era-h-icon);
642
+ }
643
+ @utility w-pill {
644
+ width: var(--era-h-pill);
645
+ }
646
+ @utility w-chip {
647
+ width: var(--era-h-chip);
648
+ }
649
+ @utility w-control {
650
+ width: var(--era-h-control);
651
+ }
652
+ @utility w-bar {
653
+ width: var(--era-h-bar);
654
+ }
655
+
656
+ /* @use a minimum tier WIDTH — the floor that makes a single-glyph control render
657
+ * as a square rather than a skinny pill (min-w-control on an icon button,
658
+ * min-w-pill on a badge). These could not exist before the ladder was renamed:
659
+ * the old rungs were sm/md/lg, and Tailwind's container scale already owns
660
+ * min-w-md and min-w-lg, so the names collided and every call site had to write
661
+ * min-w-(--era-h-control) by hand. icon/pill/chip/control/bar collide with nothing. */
662
+ @utility min-w-icon {
663
+ min-width: var(--era-h-icon);
664
+ }
665
+ @utility min-w-pill {
666
+ min-width: var(--era-h-pill);
667
+ }
668
+ @utility min-w-chip {
669
+ min-width: var(--era-h-chip);
670
+ }
671
+ @utility min-w-control {
672
+ min-width: var(--era-h-control);
673
+ }
674
+ @utility min-w-bar {
675
+ min-width: var(--era-h-bar);
676
+ }
677
+
587
678
  /* @use a tier-sized square — size-icon is THE icon size (a Lucide glyph beside
588
679
  * body text), size-control a square control face. */
589
680
  @utility size-icon {
@@ -607,53 +698,6 @@
607
698
  height: var(--era-h-bar);
608
699
  }
609
700
 
610
- /* @use the inter-element gap (sp/2) — flex/grid gap between sibling controls,
611
- * and the matching gutter padding a scrollable list or rail owes its rows on
612
- * all four sides (p-gutter on the rail = gap-gutter between its rows). */
613
- @utility gap-gutter {
614
- gap: var(--era-gap);
615
- }
616
- @utility p-gutter {
617
- padding: var(--era-gap);
618
- }
619
- @utility px-gutter {
620
- padding-inline: var(--era-gap);
621
- }
622
- @utility py-gutter {
623
- padding-block: var(--era-gap);
624
- }
625
-
626
- /* @use text-symmetric content padding — (tier − text)/2, the inset that
627
- * vertically centers body text in its tier; px-inset-control is a text button's
628
- * side padding, p-inset-control a code block's. */
629
- @utility p-inset-pill {
630
- padding: var(--era-inset-pill);
631
- }
632
- @utility p-inset-chip {
633
- padding: var(--era-inset-chip);
634
- }
635
- @utility p-inset-control {
636
- padding: var(--era-inset-control);
637
- }
638
- @utility px-inset-pill {
639
- padding-inline: var(--era-inset-pill);
640
- }
641
- @utility px-inset-chip {
642
- padding-inline: var(--era-inset-chip);
643
- }
644
- @utility px-inset-control {
645
- padding-inline: var(--era-inset-control);
646
- }
647
- @utility py-inset-pill {
648
- padding-block: var(--era-inset-pill);
649
- }
650
- @utility py-inset-chip {
651
- padding-block: var(--era-inset-chip);
652
- }
653
- @utility py-inset-control {
654
- padding-block: var(--era-inset-control);
655
- }
656
-
657
701
  /* @use pill side padding — the wider-than-vertical horizontal breathing room
658
702
  * badge/chip text wants (glyph-advance derived, ~2× the vertical inset). */
659
703
  @utility px-pill {
@@ -662,24 +706,25 @@
662
706
  @utility px-chip {
663
707
  padding-inline: var(--era-chip-px);
664
708
  }
665
-
666
- /* @use text-field side padding — where typed text starts in a control-tier input;
667
- * the named form of px-(--era-field-px). */
668
- @utility px-field {
669
- padding-inline: var(--era-field-px);
709
+ @utility pl-pill {
710
+ padding-left: var(--era-pill-px);
670
711
  }
671
-
672
- /* @use optical padding for unbounded containers — p-panel for compact shells
673
- * and menu-adjacent chrome, p-card for cards/dialogs/popovers, p-content for
674
- * full content panels. Grows super-linearly with density so whitespace holds
675
- * its perceived share as controls loosen. */
676
- @utility p-panel {
677
- padding: var(--era-pad-panel);
712
+ @utility pr-pill {
713
+ padding-right: var(--era-pill-px);
678
714
  }
679
- @utility p-card {
680
- padding: var(--era-pad-card);
715
+ @utility pl-chip {
716
+ padding-left: var(--era-chip-px);
681
717
  }
682
- /* A content panel always follows a section header ROW, and that row already
718
+ @utility pr-chip {
719
+ padding-right: var(--era-chip-px);
720
+ }
721
+
722
+ /* @use padding for a content panel that sits UNDER a section header row — the
723
+ * even-padding exception, and the reason it is not called p-section: it
724
+ * deliberately under-pays the block start. For an evenly padded content panel
725
+ * use p-section, which is the plain token.
726
+ *
727
+ * A content panel always follows a section header ROW, and that row already
683
728
  * contributes its own slack: the heading's text sits in an h-bar bar, so there
684
729
  * is (h-bar − text)/2 of empty bar under its glyphs before the panel even
685
730
  * starts. Padding the panel evenly on top of that spends the space twice — the
@@ -688,7 +733,7 @@
688
733
  *
689
734
  * So the block-start pays only the REMAINDER. The target is the indent: the
690
735
  * space under a heading should measure the same as the space beside the text,
691
- * which is --era-content-p. The header row already supplies (h-bar − text)/2 of
736
+ * which is --era-pad-content. The header row already supplies (h-bar − text)/2 of
692
737
  * it, so the panel adds what's left, and heading-to-paragraph reads equal to
693
738
  * the paragraph's own inset. Subtracting one --era-gap (the previous rule) left
694
739
  * the header's slack unaccounted for and the heading still detached.
@@ -696,16 +741,9 @@
696
741
  * Both terms are density-derived, so the equality holds at every mode; the
697
742
  * max() is the floor for a hypothetical mode where the row's slack would
698
743
  * exceed the inset outright. */
699
- @utility p-content {
700
- padding: var(--era-content-p);
701
- padding-top: max(0px, calc(var(--era-content-p) - (var(--era-h-bar) - var(--era-text)) / 2));
702
- }
703
-
704
- /* @use menu-panel padding — the surface-owned inset (0 on flat, 2px on
705
- * glass/bevel) that keeps row highlights inside a floating panel's frame;
706
- * pairs with rounded-menu-item on the rows. */
707
- @utility p-menu {
708
- padding: var(--era-panel-inset);
744
+ @utility p-section {
745
+ padding: var(--era-pad-content);
746
+ padding-top: max(0px, calc(var(--era-pad-content) - (var(--era-h-bar) - var(--era-text)) / 2));
709
747
  }
710
748
 
711
749
  /* @use the motion axis as an explicit transition-duration — for the rare case
@@ -335,39 +335,46 @@
335
335
  }
336
336
 
337
337
  /* -------------------------------------------------- */
338
- /* Sand — dark (cooler sandstone with mint contrast) */
338
+ /* Sand — dark (saturated warm amber, mint contrast) */
339
339
  /* -------------------------------------------------- */
340
340
  :root[data-theme='sand'],
341
341
  [data-theme='sand'].dark {
342
342
  color-scheme: dark;
343
343
 
344
- --color-1: oklch(0.25 0.019 56);
345
- --color-2: oklch(0.3 0.022 57);
346
- --color-3: oklch(0.37 0.026 58);
347
- --color-4: oklch(0.45 0.03 58);
348
- --color-5: oklch(0.54 0.034 59);
349
- --color-6: oklch(0.62 0.036 58);
350
- --color-7: oklch(0.7 0.035 57);
351
- --color-8: oklch(0.76 0.033 56);
352
- --color-9: oklch(0.8 0.034 54);
353
- --color-10: oklch(0.84 0.028 62);
354
- --color-11: oklch(0.89 0.022 70);
355
- --color-12: oklch(0.93 0.016 78);
344
+ --color-1: oklch(0.5 0.1 70);
345
+ --color-2: oklch(0.55 0.11 68);
346
+ --color-3: oklch(0.6 0.12 65);
347
+ --color-4: oklch(0.65 0.13 62);
348
+ --color-5: oklch(0.7 0.14 60);
349
+ --color-6: oklch(0.75 0.12 58);
350
+ --color-7: oklch(0.8 0.1 55);
351
+ --color-8: oklch(0.82 0.08 52);
352
+ --color-9: oklch(0.855 0.065 50);
353
+ --color-10: oklch(0.89 0.05 48);
354
+ --color-11: oklch(0.915 0.035 46);
355
+ --color-12: oklch(0.945 0.022 44);
356
356
 
357
357
  --color-border: var(--color-5);
358
358
  --color-surface: var(--color-2);
359
359
  --color-hover: color-mix(in oklch, var(--color-3) 80%, var(--color-2));
360
360
  --color-fg: var(--color-11);
361
361
 
362
+ /* Accent INK. Every one of these used to be var(--color-1), which read as
363
+ * near-black ink on a bright accent while the scale's floor was L 0.25. This
364
+ * scale bottoms out at L 0.5, so that spelling collapsed to 2.48:1 on
365
+ * success — and no step in the palette is dark enough to replace it. A
366
+ * literal, at the palette's own hue so it still reads as sand. */
367
+ --color-ink: oklch(0.24 0.03 60);
368
+
362
369
  --color-primary: oklch(0.8 0.034 54);
363
- --color-primary-fg: var(--color-1);
370
+ --color-primary-fg: var(--color-ink);
364
371
  --color-primary-hover: color-mix(in oklch, var(--color-primary) 80%, var(--color-success));
365
372
  --color-destructive: oklch(0.615 0.15 33);
366
373
  --color-destructive-fg: var(--color-12);
367
374
  --color-success: oklch(0.71 0.09 164);
368
- --color-success-fg: var(--color-1);
375
+ --color-success-fg: var(--color-ink);
369
376
  --color-warning: oklch(0.78 0.1 85);
370
- --color-warning-fg: var(--color-1);
377
+ --color-warning-fg: var(--color-ink);
371
378
  }
372
379
 
373
380
  /* -------------------------------------------------- */
@@ -377,22 +384,22 @@
377
384
  :root[data-theme='sand']:not(.dark) {
378
385
  color-scheme: light;
379
386
 
380
- --color-1: oklch(0.96 0.01 78);
381
- --color-2: oklch(0.92 0.014 74);
382
- --color-3: oklch(0.85 0.02 68);
383
- --color-4: oklch(0.78 0.026 62);
384
- --color-5: oklch(0.69 0.032 57);
385
- --color-6: oklch(0.6 0.035 54);
386
- --color-7: oklch(0.52 0.033 52);
387
- --color-8: oklch(0.45 0.03 50);
388
- --color-9: oklch(0.39 0.026 48);
389
- --color-10: oklch(0.32 0.022 46);
390
- --color-11: oklch(0.26 0.018 44);
391
- --color-12: oklch(0.21 0.014 42);
387
+ --color-1: oklch(0.945 0.022 44);
388
+ --color-2: oklch(0.915 0.035 46);
389
+ --color-3: oklch(0.89 0.05 48);
390
+ --color-4: oklch(0.855 0.065 50);
391
+ --color-5: oklch(0.82 0.08 52);
392
+ --color-6: oklch(0.8 0.1 55);
393
+ --color-7: oklch(0.75 0.12 58);
394
+ --color-8: oklch(0.7 0.14 60);
395
+ --color-9: oklch(0.65 0.13 62);
396
+ --color-10: oklch(0.6 0.12 65);
397
+ --color-11: oklch(0.55 0.11 68);
398
+ --color-12: oklch(0.5 0.1 70);
392
399
 
393
400
  --color-border: var(--color-5);
394
401
  --color-surface: var(--color-2);
395
- --color-hover: oklch(0.88 0.016 72);
402
+ --color-hover: color-mix(in oklch, var(--color-3) 80%, var(--color-2));
396
403
  --color-fg: var(--color-11);
397
404
 
398
405
  --color-primary: oklch(0.55 0.12 58);
@@ -410,22 +417,22 @@
410
417
  [data-theme='sand'].light {
411
418
  color-scheme: light;
412
419
 
413
- --color-1: oklch(0.96 0.01 78);
414
- --color-2: oklch(0.92 0.014 74);
415
- --color-3: oklch(0.85 0.02 68);
416
- --color-4: oklch(0.78 0.026 62);
417
- --color-5: oklch(0.69 0.032 57);
418
- --color-6: oklch(0.6 0.035 54);
419
- --color-7: oklch(0.52 0.033 52);
420
- --color-8: oklch(0.45 0.03 50);
421
- --color-9: oklch(0.39 0.026 48);
422
- --color-10: oklch(0.32 0.022 46);
423
- --color-11: oklch(0.26 0.018 44);
424
- --color-12: oklch(0.21 0.014 42);
420
+ --color-1: oklch(0.945 0.022 44);
421
+ --color-2: oklch(0.915 0.035 46);
422
+ --color-3: oklch(0.89 0.05 48);
423
+ --color-4: oklch(0.855 0.065 50);
424
+ --color-5: oklch(0.82 0.08 52);
425
+ --color-6: oklch(0.8 0.1 55);
426
+ --color-7: oklch(0.75 0.12 58);
427
+ --color-8: oklch(0.7 0.14 60);
428
+ --color-9: oklch(0.65 0.13 62);
429
+ --color-10: oklch(0.6 0.12 65);
430
+ --color-11: oklch(0.55 0.11 68);
431
+ --color-12: oklch(0.5 0.1 70);
425
432
 
426
433
  --color-border: var(--color-5);
427
434
  --color-surface: var(--color-2);
428
- --color-hover: oklch(0.88 0.016 72);
435
+ --color-hover: color-mix(in oklch, var(--color-3) 80%, var(--color-2));
429
436
  --color-fg: var(--color-11);
430
437
 
431
438
  --color-primary: oklch(0.55 0.12 58);
@@ -8,7 +8,7 @@
8
8
  <Accordion.Content
9
9
  bind:ref
10
10
  class={cn(
11
- 'overflow-hidden border-t border-divider-faded p-(--era-content-p) text-body leading-body text-muted',
11
+ 'overflow-hidden border-t border-divider-faded p-content text-body leading-body text-muted',
12
12
  className
13
13
  )}
14
14
  {...restProps}
@@ -14,11 +14,11 @@
14
14
  <Accordion.Trigger
15
15
  bind:ref
16
16
  class={cn(
17
- 'flex h-(--era-h-control) w-full items-center justify-between gap-(--era-icon-inset-chip) rounded-(--era-rd-control) px-(--era-inset-control) text-body text-fg hover:bg-(--era-highlight) hover:shadow-(--era-highlight-shadow) focus:outline-none disabled:opacity-50',
17
+ 'flex h-control w-full items-center justify-between gap-icon-inset-chip rounded-control px-inset-control text-body text-fg hover:bg-highlight hover:shadow-highlight focus:outline-none disabled:opacity-50',
18
18
  className
19
19
  )}
20
20
  {...restProps}
21
21
  >
22
22
  {@render children?.()}
23
- <ChevronDown class="size-(--era-h-icon) text-muted" />
23
+ <ChevronDown class="size-icon text-muted" />
24
24
  </Accordion.Trigger>
@@ -11,11 +11,11 @@
11
11
  </script>
12
12
 
13
13
  <AlertDialog.Portal>
14
- <AlertDialog.Overlay class="fixed inset-0 z-50 bg-(--era-overlay-bg)" />
14
+ <AlertDialog.Overlay class="fixed inset-0 z-50 bg-overlay" />
15
15
  <AlertDialog.Content
16
16
  bind:ref
17
17
  class={cn(
18
- 'fixed top-1/2 left-1/2 z-50 flex w-full max-w-md -translate-x-1/2 -translate-y-1/2 flex-col gap-(--era-gap) rounded-(--era-rd-bar) border border-divider bg-(--era-surface-bg) p-(--era-pad-card) shadow-(--era-shadow-lg) glass-blur',
18
+ 'fixed top-1/2 left-1/2 z-50 flex w-full max-w-md -translate-x-1/2 -translate-y-1/2 flex-col gap-gutter rounded-bar border border-divider bg-well p-card shadow-lg glass-blur',
19
19
  className
20
20
  )}
21
21
  {...restProps}
@@ -11,6 +11,6 @@
11
11
 
12
12
  <AlertDialog.Overlay
13
13
  bind:ref
14
- class={cn('fixed inset-0 z-50 bg-(--era-overlay-bg)', className)}
14
+ class={cn('fixed inset-0 z-50 bg-overlay', className)}
15
15
  {...restProps}
16
16
  />
@@ -10,10 +10,6 @@
10
10
  }: PartProps<AspectRatio.RootProps> = $props();
11
11
  </script>
12
12
 
13
- <AspectRatio.Root
14
- bind:ref
15
- class={cn('overflow-hidden rounded-(--era-rd-control)', className)}
16
- {...restProps}
17
- >
13
+ <AspectRatio.Root bind:ref class={cn('overflow-hidden rounded-control', className)} {...restProps}>
18
14
  {@render children?.()}
19
15
  </AspectRatio.Root>
@@ -13,7 +13,7 @@
13
13
  <Avatar.Fallback
14
14
  bind:ref
15
15
  class={cn(
16
- 'inline-flex size-full items-center justify-center bg-(--era-surface-bg-elevated) text-body text-muted',
16
+ 'inline-flex size-full items-center justify-center bg-elevated text-body text-muted',
17
17
  className
18
18
  )}
19
19
  {...restProps}