@signal9/era-ui 10.0.0 → 11.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 (262) 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/index.js +1 -1
  23. package/dist/ai/inline-citation/inline-citation.svelte +5 -5
  24. package/dist/ai/loader.svelte +1 -4
  25. package/dist/ai/message/message-branch-selector.svelte +3 -3
  26. package/dist/ai/message/message-branch.svelte +1 -1
  27. package/dist/ai/message/message-content.svelte +1 -1
  28. package/dist/ai/message/message-toolbar.svelte +1 -1
  29. package/dist/ai/message/message-usage.svelte +5 -7
  30. package/dist/ai/message/message.svelte +1 -1
  31. package/dist/ai/model-selector/model-selector.svelte +2 -2
  32. package/dist/ai/open-in-chat/open-in-chat.svelte +2 -2
  33. package/dist/ai/plan/plan-content.svelte +1 -1
  34. package/dist/ai/plan/plan-header.svelte +2 -2
  35. package/dist/ai/plan/plan.svelte +1 -4
  36. package/dist/ai/prompt-input/prompt-input-add-attachments.svelte +1 -1
  37. package/dist/ai/prompt-input/prompt-input-attachments.svelte +5 -5
  38. package/dist/ai/prompt-input/prompt-input-submit.svelte +2 -2
  39. package/dist/ai/prompt-input/prompt-input-textarea.svelte +2 -2
  40. package/dist/ai/prompt-input/prompt-input-toolbar.svelte +1 -1
  41. package/dist/ai/prompt-input/prompt-input.svelte +1 -1
  42. package/dist/ai/queue/queue-item.svelte +1 -1
  43. package/dist/ai/queue/queue.svelte +1 -1
  44. package/dist/ai/reasoning/reasoning-trigger.svelte +1 -1
  45. package/dist/ai/response/response.svelte +1 -1
  46. package/dist/ai/run-status/run-status.svelte +7 -11
  47. package/dist/ai/runtime-feed/runtime-feed-item.svelte +1 -4
  48. package/dist/ai/runtime-feed/runtime-feed-root.svelte +1 -1
  49. package/dist/ai/sources/source.svelte +2 -2
  50. package/dist/ai/sources/sources-trigger.svelte +1 -1
  51. package/dist/ai/structured-value/structured-value.svelte +4 -4
  52. package/dist/ai/suggestion/suggestion.svelte +1 -1
  53. package/dist/ai/suggestion/suggestions.svelte +1 -1
  54. package/dist/ai/swarm/swarm-agent.svelte +3 -3
  55. package/dist/ai/swarm/swarm-artifact.svelte +2 -2
  56. package/dist/ai/swarm/swarm-barrier.svelte +3 -3
  57. package/dist/ai/swarm/swarm-barriers.svelte +1 -4
  58. package/dist/ai/swarm/swarm-counts.svelte +2 -2
  59. package/dist/ai/swarm/swarm-footer.svelte +4 -3
  60. package/dist/ai/swarm/swarm-grid.svelte +2 -2
  61. package/dist/ai/swarm/swarm-header.svelte +2 -2
  62. package/dist/ai/swarm/swarm-node.svelte +7 -9
  63. package/dist/ai/swarm/swarm-role.svelte +6 -3
  64. package/dist/ai/swarm/swarm-root.svelte +1 -4
  65. package/dist/ai/swarm/swarm-sandbox.svelte +4 -7
  66. package/dist/ai/swarm/swarm-tree.svelte +2 -2
  67. package/dist/ai/task/task-content.svelte +1 -4
  68. package/dist/ai/task/task-trigger.svelte +1 -1
  69. package/dist/ai/tool/tool-chip.svelte +3 -3
  70. package/dist/ai/tool/tool-chips.svelte +3 -3
  71. package/dist/ai/tool/tool-exec.svelte +4 -4
  72. package/dist/ai/tool/tool-header.svelte +1 -1
  73. package/dist/ai/web-preview/web-preview.svelte +4 -9
  74. package/dist/ai/workflow/canvas.svelte +1 -1
  75. package/dist/ai/workflow/node.svelte +3 -3
  76. package/dist/apps/index.d.ts +3 -3
  77. package/dist/apps/index.js +3 -3
  78. package/dist/apps/llm-shell/llm-shell.svelte +4 -4
  79. package/dist/apps/notes/editor/slash-menu.svelte +2 -4
  80. package/dist/apps/notes/notes.svelte +8 -8
  81. package/dist/dev/audit/audits/anonymous-text.d.ts +2 -0
  82. package/dist/dev/audit/audits/anonymous-text.js +73 -0
  83. package/dist/dev/audit/audits/even-container-padding.js +2 -2
  84. package/dist/dev/audit/audits/index.d.ts +2 -1
  85. package/dist/dev/audit/audits/index.js +3 -1
  86. package/dist/dev/audit/audits/single-glyph-square.js +2 -2
  87. package/dist/dev/audit/types.d.ts +1 -1
  88. package/dist/dev/audit-overlay.svelte +7 -7
  89. package/dist/docs/css-utilities.d.ts +31 -0
  90. package/dist/docs/css-utilities.js +142 -8
  91. package/dist/docs/llms-txt.js +2 -2
  92. package/dist/docs/notes.md +3 -3
  93. package/dist/docs/quickstart.md +5 -5
  94. package/dist/era-ui.css +1 -1
  95. package/dist/generated-docs/llms-full.txt +455 -110
  96. package/dist/generated-docs/llms.txt +29 -14
  97. package/dist/generated-docs/manifest.json +382 -55
  98. package/dist/generated-docs/notes.md +3 -3
  99. package/dist/generated-docs/utilities.json +359 -45
  100. package/dist/generated-docs/utilities.md +423 -93
  101. package/dist/os/notification-center.svelte +11 -17
  102. package/dist/os/pane-manager.svelte.d.ts +1 -1
  103. package/dist/os/pane.svelte +4 -6
  104. package/dist/os/taskbar.svelte +13 -18
  105. package/dist/os/toast.svelte +6 -11
  106. package/dist/os/toaster.svelte +1 -1
  107. package/dist/styles/density.css +0 -2
  108. package/dist/styles/index.css +160 -84
  109. package/dist/ui/accordion/accordion-content.svelte +1 -1
  110. package/dist/ui/accordion/accordion-trigger.svelte +2 -2
  111. package/dist/ui/alert-dialog/alert-dialog-content.svelte +2 -2
  112. package/dist/ui/alert-dialog/alert-dialog-overlay.svelte +1 -1
  113. package/dist/ui/aspect-ratio/aspect-ratio.svelte +1 -5
  114. package/dist/ui/avatar/avatar-fallback.svelte +1 -1
  115. package/dist/ui/avatar/avatar-root.svelte +1 -1
  116. package/dist/ui/badge/badge.svelte +1 -1
  117. package/dist/ui/badge/badge.svelte.d.ts +1 -1
  118. package/dist/ui/bar/bar.svelte +8 -8
  119. package/dist/ui/bar/bar.svelte.d.ts +16 -16
  120. package/dist/ui/button/button.svelte +13 -2
  121. package/dist/ui/button/variants.d.ts +4 -4
  122. package/dist/ui/button/variants.js +18 -18
  123. package/dist/ui/button-group/button-group.svelte +2 -2
  124. package/dist/ui/calendar/calendar-day.svelte +1 -1
  125. package/dist/ui/calendar/calendar-grid-row.svelte +1 -1
  126. package/dist/ui/calendar/calendar-grid.svelte +1 -1
  127. package/dist/ui/calendar/calendar-head-cell.svelte +1 -1
  128. package/dist/ui/calendar/calendar-header.svelte +1 -1
  129. package/dist/ui/calendar/calendar-next-button.svelte +1 -1
  130. package/dist/ui/calendar/calendar-prev-button.svelte +1 -1
  131. package/dist/ui/calendar/calendar-root.svelte +1 -1
  132. package/dist/ui/card/card.svelte +10 -10
  133. package/dist/ui/card/card.svelte.d.ts +16 -16
  134. package/dist/ui/checkbox/checkbox-group.svelte +1 -1
  135. package/dist/ui/checkbox/checkbox.svelte +1 -1
  136. package/dist/ui/chip/chip.svelte +15 -7
  137. package/dist/ui/chip/chip.svelte.d.ts +7 -7
  138. package/dist/ui/code-block/code-block.svelte +3 -9
  139. package/dist/ui/collapsible/collapsible-trigger.svelte +1 -1
  140. package/dist/ui/combobox/combobox-content.svelte +1 -1
  141. package/dist/ui/combobox/combobox-empty.svelte +1 -6
  142. package/dist/ui/combobox/combobox-group-heading.svelte +1 -4
  143. package/dist/ui/combobox/combobox-input.svelte +1 -1
  144. package/dist/ui/combobox/combobox-item.svelte +1 -1
  145. package/dist/ui/combobox/combobox-trigger.svelte +2 -2
  146. package/dist/ui/command/command-group-heading.svelte +1 -4
  147. package/dist/ui/command/command-group-items.svelte +1 -5
  148. package/dist/ui/command/command-item.svelte +1 -1
  149. package/dist/ui/command/command-link-item.svelte +1 -1
  150. package/dist/ui/command/command-root.svelte +2 -2
  151. package/dist/ui/command/command-viewport.svelte +1 -1
  152. package/dist/ui/command-bar/command-bar.svelte +9 -13
  153. package/dist/ui/context-menu/context-menu-checkbox-item.svelte +1 -1
  154. package/dist/ui/context-menu/context-menu-content.svelte +2 -2
  155. package/dist/ui/context-menu/context-menu-group-heading.svelte +1 -4
  156. package/dist/ui/context-menu/context-menu-item.svelte +1 -1
  157. package/dist/ui/context-menu/context-menu-radio-item.svelte +1 -1
  158. package/dist/ui/context-menu/context-menu-sub-content.svelte +1 -1
  159. package/dist/ui/context-menu/context-menu-sub-trigger.svelte +2 -2
  160. package/dist/ui/copy-button/copy-button.svelte +2 -2
  161. package/dist/ui/cycle/cycle.svelte +2 -2
  162. package/dist/ui/date-field/date-field-segment.svelte +1 -1
  163. package/dist/ui/date-picker/date-picker-calendar.svelte +1 -1
  164. package/dist/ui/date-picker/date-picker-content.svelte +1 -4
  165. package/dist/ui/date-picker/date-picker-day.svelte +1 -1
  166. package/dist/ui/date-picker/date-picker-grid-row.svelte +1 -1
  167. package/dist/ui/date-picker/date-picker-grid.svelte +1 -1
  168. package/dist/ui/date-picker/date-picker-head-cell.svelte +1 -1
  169. package/dist/ui/date-picker/date-picker-header.svelte +1 -1
  170. package/dist/ui/date-picker/date-picker-next-button.svelte +1 -1
  171. package/dist/ui/date-picker/date-picker-prev-button.svelte +1 -1
  172. package/dist/ui/date-picker/date-picker-segment.svelte +1 -1
  173. package/dist/ui/date-picker/date-picker-trigger.svelte +2 -2
  174. package/dist/ui/date-range-field/date-range-field-segment.svelte +1 -1
  175. package/dist/ui/date-range-picker/date-range-picker-calendar.svelte +1 -1
  176. package/dist/ui/date-range-picker/date-range-picker-content.svelte +1 -4
  177. package/dist/ui/date-range-picker/date-range-picker-day.svelte +1 -1
  178. package/dist/ui/date-range-picker/date-range-picker-grid-row.svelte +1 -1
  179. package/dist/ui/date-range-picker/date-range-picker-grid.svelte +1 -5
  180. package/dist/ui/date-range-picker/date-range-picker-head-cell.svelte +1 -1
  181. package/dist/ui/date-range-picker/date-range-picker-header.svelte +1 -1
  182. package/dist/ui/date-range-picker/date-range-picker-next-button.svelte +1 -1
  183. package/dist/ui/date-range-picker/date-range-picker-prev-button.svelte +1 -1
  184. package/dist/ui/date-range-picker/date-range-picker-segment.svelte +1 -1
  185. package/dist/ui/date-range-picker/date-range-picker-trigger.svelte +2 -2
  186. package/dist/ui/dialog/dialog-content.svelte +3 -5
  187. package/dist/ui/dialog/dialog-header.svelte +1 -6
  188. package/dist/ui/dialog/dialog-overlay.svelte +1 -5
  189. package/dist/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +1 -1
  190. package/dist/ui/dropdown-menu/dropdown-menu-content.svelte +2 -2
  191. package/dist/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -4
  192. package/dist/ui/dropdown-menu/dropdown-menu-item.svelte +1 -1
  193. package/dist/ui/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
  194. package/dist/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  195. package/dist/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +2 -2
  196. package/dist/ui/dropdown-menu/dropdown-menu-trigger.svelte +2 -2
  197. package/dist/ui/file-upload/file-upload.svelte +2 -2
  198. package/dist/ui/index.js +1 -1
  199. package/dist/ui/input/input.svelte +2 -2
  200. package/dist/ui/input/textarea.svelte +1 -1
  201. package/dist/ui/input/variants.d.ts +18 -18
  202. package/dist/ui/input/variants.js +6 -6
  203. package/dist/ui/kv/kv.svelte +2 -3
  204. package/dist/ui/link-preview/link-preview-content.svelte +1 -1
  205. package/dist/ui/menubar/menubar-checkbox-item.svelte +1 -1
  206. package/dist/ui/menubar/menubar-content.svelte +2 -2
  207. package/dist/ui/menubar/menubar-group-heading.svelte +1 -4
  208. package/dist/ui/menubar/menubar-item.svelte +1 -1
  209. package/dist/ui/menubar/menubar-radio-item.svelte +1 -1
  210. package/dist/ui/menubar/menubar-root.svelte +1 -4
  211. package/dist/ui/menubar/menubar-sub-content.svelte +1 -1
  212. package/dist/ui/menubar/menubar-sub-trigger.svelte +2 -2
  213. package/dist/ui/menubar/menubar-trigger.svelte +1 -1
  214. package/dist/ui/meter/meter.svelte +2 -2
  215. package/dist/ui/pagination/pagination-next-button.svelte +1 -1
  216. package/dist/ui/pagination/pagination-prev-button.svelte +1 -1
  217. package/dist/ui/pagination/pagination-root.svelte +1 -1
  218. package/dist/ui/pane/pane-content.svelte +1 -1
  219. package/dist/ui/pane/pane-root.svelte +1 -1
  220. package/dist/ui/pane/pane-tab-list.svelte +1 -1
  221. package/dist/ui/pane/pane-tab-panel.svelte +1 -1
  222. package/dist/ui/pane/pane-tab.svelte +1 -1
  223. package/dist/ui/pane/pane.svelte +1 -1
  224. package/dist/ui/pin-input/pin-input-cell.svelte +1 -1
  225. package/dist/ui/popover/popover-content.svelte +1 -1
  226. package/dist/ui/popover/popover-trigger.svelte +1 -4
  227. package/dist/ui/progress/progress.svelte +2 -2
  228. package/dist/ui/radio-group/radio-group-item.svelte +2 -2
  229. package/dist/ui/radio-group/radio-group-root.svelte +1 -1
  230. package/dist/ui/rating-group/rating-group-item.svelte +1 -1
  231. package/dist/ui/rating-group/rating-group-root.svelte +1 -1
  232. package/dist/ui/scroll-area/scroll-area-scrollbar.svelte +1 -1
  233. package/dist/ui/scroll-area/scroll-area-thumb.svelte +1 -1
  234. package/dist/ui/scroll-area/scroll-area.svelte +1 -1
  235. package/dist/ui/select/select-content.svelte +7 -6
  236. package/dist/ui/select/select-group-heading.svelte +1 -4
  237. package/dist/ui/select/select-item.svelte +1 -1
  238. package/dist/ui/select/select-trigger.svelte +2 -2
  239. package/dist/ui/select/select-value.svelte +1 -1
  240. package/dist/ui/separator/separator.svelte +1 -1
  241. package/dist/ui/sheet/sheet-content.svelte +3 -3
  242. package/dist/ui/sheet/sheet-content.svelte.d.ts +4 -4
  243. package/dist/ui/skeleton/skeleton.svelte +4 -4
  244. package/dist/ui/skeleton/skeleton.svelte.d.ts +10 -10
  245. package/dist/ui/slider/slider-range.svelte +1 -1
  246. package/dist/ui/slider/slider-thumb.svelte +1 -1
  247. package/dist/ui/slider/slider-tick.svelte +1 -1
  248. package/dist/ui/step/step-content.svelte +1 -1
  249. package/dist/ui/step/step-section.svelte +1 -1
  250. package/dist/ui/step/step-summary.svelte +7 -7
  251. package/dist/ui/switch/switch.svelte +2 -2
  252. package/dist/ui/table/table-cell.svelte +1 -1
  253. package/dist/ui/table/table-head-cell.svelte +1 -1
  254. package/dist/ui/table/table-row.svelte +1 -1
  255. package/dist/ui/time-field/time-field-segment.svelte +1 -1
  256. package/dist/ui/time-range-field/time-range-field-segment.svelte +1 -1
  257. package/dist/ui/toggle-group/toggle-group-item.svelte +1 -1
  258. package/dist/ui/toggle-group/toggle-group-root.svelte +1 -1
  259. package/dist/ui/tooltip/tooltip-content.svelte +1 -1
  260. package/dist/ui/video-player/video-player.svelte +44 -47
  261. package/dist/utils/index.js +1 -1
  262. package/package.json +4 -3
@@ -44,7 +44,7 @@
44
44
  "slug": "utilities",
45
45
  "title": "Utilities",
46
46
  "summary": "The CSS classes era ships alongside the components — links, ink-centred text, shimmer, hidden scrollbars.",
47
- "tokenEstimate": 6147,
47
+ "tokenEstimate": 10357,
48
48
  "sections": [
49
49
  "Overview",
50
50
  "era-interactive",
@@ -53,20 +53,33 @@
53
53
  "era-text-trim",
54
54
  "truncate",
55
55
  "era-text-trim-caps",
56
- "era-token-ink · era-ink-center",
56
+ "era-ink-center",
57
+ "era-token-ink",
58
+ "era-label-ink",
57
59
  "era-shimmer",
58
60
  "era-collapse",
59
61
  "h-icon · h-pill · h-chip · h-control · h-bar",
60
62
  "min-h-icon · min-h-pill · min-h-chip · min-h-control · min-h-bar",
63
+ "w-icon · w-pill · w-chip · w-control · w-bar",
64
+ "min-w-icon · min-w-pill · min-w-chip · min-w-control · min-w-bar",
61
65
  "size-icon · size-pill · size-chip · size-control · size-bar",
62
- "gap-gutter · p-gutter · px-gutter · py-gutter",
63
- "p-inset-pill · p-inset-chip · p-inset-control · px-inset-pill · px-inset-chip · px-inset-control · py-inset-pill · py-inset-chip · py-inset-control",
64
- "px-pill · px-chip",
65
- "px-field",
66
- "p-panel · p-card",
67
- "p-content",
68
- "p-menu",
66
+ "px-pill · px-chip · pl-pill · pr-pill · pl-chip · pr-chip",
67
+ "p-section",
69
68
  "duration-base",
69
+ "text-body",
70
+ "leading-body",
71
+ "rounded-icon · rounded-pill · rounded-chip · rounded-control · rounded-bar · rounded-menu-item",
72
+ "shadow",
73
+ "shadow-sm · shadow-lg · shadow-well · shadow-pressed · shadow-highlight",
74
+ "bg-well · text-well · border-well · bg-elevated · text-elevated · border-elevated · bg-highlight · text-highlight · … (12 in all)",
75
+ "p-gutter · px-gutter · py-gutter · gap-gutter · p-panel · px-panel · py-panel · gap-panel · … (24 in all)",
76
+ "p-inset-pill · px-inset-pill · py-inset-pill · gap-inset-pill · p-inset-chip · px-inset-chip · py-inset-chip · gap-inset-chip · … (12 in all)",
77
+ "p-icon-inset-pill · px-icon-inset-pill · py-icon-inset-pill · gap-icon-inset-pill · p-icon-inset-chip · px-icon-inset-chip · py-icon-inset-chip · gap-icon-inset-chip · … (32 in all)",
78
+ "p-glyph-icon · px-glyph-icon · py-glyph-icon · gap-glyph-icon · p-glyph-pill · px-glyph-pill · py-glyph-pill · gap-glyph-pill",
79
+ "bg-field · text-field · border-field · bg-field-highlight · text-field-highlight · border-field-highlight",
80
+ "ease-base",
81
+ "bg-divider · text-divider · border-divider · bg-divider-faded · text-divider-faded · border-divider-faded · bg-background · text-background · … (66 in all)",
82
+ "bg-fill · text-fill · border-fill · bg-link · text-link · border-link · bg-primary · text-primary · … (33 in all)",
70
83
  "glass-blur"
71
84
  ],
72
85
  "file": "utilities.md"
@@ -107,7 +120,7 @@
107
120
  "slug": "notes",
108
121
  "title": "Notes",
109
122
  "summary": "A complete notes app — rich-text editor, slash commands, local persistence.",
110
- "tokenEstimate": 885,
123
+ "tokenEstimate": 884,
111
124
  "sections": [
112
125
  "Usage",
113
126
  "Peer dependencies",
@@ -1022,15 +1035,34 @@
1022
1035
  "css": "@utility era-text-trim-caps {\n\tline-height: 1;\n\ttext-box: trim-both cap alphabetic;\n}"
1023
1036
  },
1024
1037
  {
1025
- "name": "era-token-ink",
1038
+ "name": "era-ink-center",
1026
1039
  "names": [
1027
- "era-token-ink",
1028
1040
  "era-ink-center"
1029
1041
  ],
1030
1042
  "file": "index.css",
1031
- "useCase": "the ink centring for a token pill a badge, a KV value, any short caps-or-digits label in a fixed-height box; it needs no icon sibling (with one the box must stay flex, and the general trim applies).",
1043
+ "useCase": "on a native single-line <input> (or the text layer that must mirror one) inside a fixed-height field never alongside era-text-trim.",
1044
+ "description": "The EDITABLE counterpart of era-text-trim — for native <input>s, which the\ntrim is forbidden on (it collapses the UA's inner editor box and slices the\nglyphs; see typography/collapsed-text-trim).\n\nWithout help, a tier-height input centres its text by FONT BOX, and the ui\nstacks' font box is deeply asymmetric: ascent ≈1.07em against descent\n≈0.29em. Centring that box parks the visible band (caps, x-height) ~0.115em\nLOW — so a field's text sat visibly below the trimmed label beside it.\n\nThe value is OPTICAL, not the derivation's: pure x-band centring computes\nto ~0.23em of padding, but pixel-measured against real Title-Case text it\nover-lifts — the eye weighs the cap-to-baseline mass, which x-band\ncentring parks ~2px high (caps 2.75px off the top against 5.7px of air\nunder the baseline, measured at dense). 0.08em splits the difference\nbetween the x-band ideal and the cap-band ideal, landing caps ~3.7px in an\n18px field with ~4.7px under the baseline — the reading where neither\nband's partisans win and neither complains.\n\nThe lift is padding, not a translateY: an icon-less Input paints the field\nchrome itself, and a transform would drag the field along with the ink.\npadding-bottom shrinks the content box from below, and a single-line input\nre-centres its line box in what remains — the ink rises by exactly half the\npadding, the chrome doesn't move, and the caret and selection follow the\ntext. In em on purpose: the correction is a fraction of the type, so it\nholds across every density and text size with one value.",
1045
+ "css": "@utility era-ink-center {\n\tpadding-bottom: 0.08em;\n}"
1046
+ },
1047
+ {
1048
+ "name": "era-token-ink",
1049
+ "names": [
1050
+ "era-token-ink"
1051
+ ],
1052
+ "file": "index.css",
1053
+ "useCase": "the ink centring for a token pill — a badge, a KV value, any short caps-or-digits label in a fixed-height box, CENTRED horizontally and with no icon sibling. For a left-aligned sentence-case label use era-label-ink; when an icon really must sit beside the text, see the note there.",
1032
1054
  "description": "TOKEN INK — the ink centring for a pill whose content is a TOKEN: an id, a\ncount, a status, a tag. Font-independent, unlike everything it replaces.\n\nTHE BUG IT FIXES, which had been shipping library-wide and invisibly:\n`text-box-trim` DOES NOTHING ON A FLEX CONTAINER. Era's controls are all\nflex, and a flex container's bare text becomes an ANONYMOUS flex item — a box\nno selector can reach and no non-inherited property can touch. So\n`era-text-trim` on a Badge, a Chip, a Button or a Bar contributed exactly one\nthing: `line-height: 1`. The ink was then centred by `align-items: center`\non the LINE BOX, which is precisely the font-metric-dependent centring the\ntrim exists to eliminate. Measured on the shipped mono stack: a badge reading\n\"AC-2.1\" sat 2px high in an 18px pill, and no amount of tuning the trim's\nBAND changed it, because the trim was never running.\n\nThe mechanism here restores it: a BLOCK box (where text-box-trim does apply)\nwhose trimmed line box is then centred by `align-content` — block-container\nalignment, so no flex formatting context and no anonymous item. The browser\ncomputes the band from the font's own metrics, which is what makes it hold\nacross ui-monospace, system-ui and ui-serif instead of needing a constant\nper stack.\n\nCAP band, not the x-height band the general trim uses, because the content\nclass is different: a token is caps and digits (both cap-height), and\ncentring the x-band parks them high by (cap − x)/2. Measured on the shipped\nstacks, cap-band centring takes an id/count/status from −2.0px to 0.0.\nProse and sentence-case labels keep era-text-trim; this is for tokens.",
1033
- "css": "@utility era-token-ink {\n\tdisplay: block;\n\talign-content: center;\n\ttext-align: center;\n\tline-height: 1;\n\ttext-box: trim-both cap alphabetic;\n}\n\n@utility era-ink-center {\n\tpadding-bottom: 0.08em;\n}"
1055
+ "css": "@utility era-token-ink {\n\tdisplay: block;\n\talign-content: center;\n\ttext-align: center;\n\tline-height: 1;\n\ttext-box: trim-both cap alphabetic;\n}"
1056
+ },
1057
+ {
1058
+ "name": "era-label-ink",
1059
+ "names": [
1060
+ "era-label-ink"
1061
+ ],
1062
+ "file": "index.css",
1063
+ "useCase": "the ink centring for a fixed-height control holding ONE line of sentence-case text and no icon — a menu item, a nav trigger, a button label. Never alongside `truncate` (the trimmed box becomes the clip).",
1064
+ "description": "LABEL INK — era-token-ink's mixed-case sibling, and the general answer to\n\"this fixed-height control holds one line of text\".\n\nSame mechanism, same reason: `text-box-trim` needs a BLOCK box, so the row\nbecomes one and `align-content` (block-container alignment) does the\ncentring. What differs is the band and the alignment, because the content\nclass differs — a label is sentence case, so the x-height band is the visual\nmass to centre (cap-band reads low on \"System\"), and it is laid out against\nthe row's padding rather than centred in it.\n\nWHY IT EXISTS AT ALL: era's controls are flex, and a flex container's bare\ntext is an ANONYMOUS flex item — a box no selector reaches and no\nnon-inherited property touches. So `era-text-trim` on a flex row is inert,\ncontributing only its `line-height: 1`, and the ink falls back to line-box\ncentring by font metrics. era-token-ink already fixed that for centred\ntokens; this fixes it for everything else.\n\nTHE ICON CASE IS NOT SOLVED, and cannot be from CSS: an icon beside the text\nneeds the box to stay flex, which re-creates the anonymous item. A component\nwhose children are an opaque slot therefore guards it —\n`not-has-[svg]:era-label-ink` — and ink-centres the text-only case while\nleaving the icon case on line-box centring. Splitting icon and label into\nseparate slots is what would close it; typography/inert-trim reports every\nsite still on the fallback.",
1065
+ "css": "@utility era-label-ink {\n\tdisplay: block;\n\talign-content: center;\n\tline-height: 1;\n\ttext-box: trim-both ex alphabetic;\n}"
1034
1066
  },
1035
1067
  {
1036
1068
  "name": "era-shimmer",
@@ -1080,6 +1112,34 @@
1080
1112
  "description": "",
1081
1113
  "css": "@utility min-h-icon {\n\tmin-height: var(--era-h-icon);\n}\n@utility min-h-pill {\n\tmin-height: var(--era-h-pill);\n}\n@utility min-h-chip {\n\tmin-height: var(--era-h-chip);\n}\n@utility min-h-control {\n\tmin-height: var(--era-h-control);\n}\n@utility min-h-bar {\n\tmin-height: var(--era-h-bar);\n}"
1082
1114
  },
1115
+ {
1116
+ "name": "w-icon",
1117
+ "names": [
1118
+ "w-icon",
1119
+ "w-pill",
1120
+ "w-chip",
1121
+ "w-control",
1122
+ "w-bar"
1123
+ ],
1124
+ "file": "index.css",
1125
+ "useCase": "a tier-sized WIDTH — the horizontal twin of the h-* ladder, for a rail or a column measured in tiers rather than in content.",
1126
+ "description": "",
1127
+ "css": "@utility w-icon {\n\twidth: var(--era-h-icon);\n}\n@utility w-pill {\n\twidth: var(--era-h-pill);\n}\n@utility w-chip {\n\twidth: var(--era-h-chip);\n}\n@utility w-control {\n\twidth: var(--era-h-control);\n}\n@utility w-bar {\n\twidth: var(--era-h-bar);\n}"
1128
+ },
1129
+ {
1130
+ "name": "min-w-icon",
1131
+ "names": [
1132
+ "min-w-icon",
1133
+ "min-w-pill",
1134
+ "min-w-chip",
1135
+ "min-w-control",
1136
+ "min-w-bar"
1137
+ ],
1138
+ "file": "index.css",
1139
+ "useCase": "a minimum tier WIDTH — the floor that makes a single-glyph control render as a square rather than a skinny pill (min-w-control on an icon button, min-w-pill on a badge). These could not exist before the ladder was renamed: the old rungs were sm/md/lg, and Tailwind's container scale already owns min-w-md and min-w-lg, so the names collided and every call site had to write min-w-(--era-h-control) by hand. icon/pill/chip/control/bar collide with nothing.",
1140
+ "description": "",
1141
+ "css": "@utility min-w-icon {\n\tmin-width: var(--era-h-icon);\n}\n@utility min-w-pill {\n\tmin-width: var(--era-h-pill);\n}\n@utility min-w-chip {\n\tmin-width: var(--era-h-chip);\n}\n@utility min-w-control {\n\tmin-width: var(--era-h-control);\n}\n@utility min-w-bar {\n\tmin-width: var(--era-h-bar);\n}"
1142
+ },
1083
1143
  {
1084
1144
  "name": "size-icon",
1085
1145
  "names": [
@@ -1095,96 +1155,363 @@
1095
1155
  "css": "@utility size-icon {\n\twidth: var(--era-h-icon);\n\theight: var(--era-h-icon);\n}\n@utility size-pill {\n\twidth: var(--era-h-pill);\n\theight: var(--era-h-pill);\n}\n@utility size-chip {\n\twidth: var(--era-h-chip);\n\theight: var(--era-h-chip);\n}\n@utility size-control {\n\twidth: var(--era-h-control);\n\theight: var(--era-h-control);\n}\n@utility size-bar {\n\twidth: var(--era-h-bar);\n\theight: var(--era-h-bar);\n}"
1096
1156
  },
1097
1157
  {
1098
- "name": "gap-gutter",
1158
+ "name": "px-pill",
1159
+ "names": [
1160
+ "px-pill",
1161
+ "px-chip",
1162
+ "pl-pill",
1163
+ "pr-pill",
1164
+ "pl-chip",
1165
+ "pr-chip"
1166
+ ],
1167
+ "file": "index.css",
1168
+ "useCase": "pill side padding — the wider-than-vertical horizontal breathing room badge/chip text wants (glyph-advance derived, ~2× the vertical inset).",
1169
+ "description": "",
1170
+ "css": "@utility px-pill {\n\tpadding-inline: var(--era-pill-px);\n}\n@utility px-chip {\n\tpadding-inline: var(--era-chip-px);\n}\n@utility pl-pill {\n\tpadding-left: var(--era-pill-px);\n}\n@utility pr-pill {\n\tpadding-right: var(--era-pill-px);\n}\n@utility pl-chip {\n\tpadding-left: var(--era-chip-px);\n}\n@utility pr-chip {\n\tpadding-right: var(--era-chip-px);\n}"
1171
+ },
1172
+ {
1173
+ "name": "p-section",
1174
+ "names": [
1175
+ "p-section"
1176
+ ],
1177
+ "file": "index.css",
1178
+ "useCase": "padding for a content panel that sits UNDER a section header row — the even-padding exception, and the reason it is not called p-section: it deliberately under-pays the block start. For an evenly padded content panel use p-section, which is the plain token.",
1179
+ "description": "A content panel always follows a section header ROW, and that row already\ncontributes its own slack: the heading's text sits in an h-bar bar, so there\nis (h-bar − text)/2 of empty bar under its glyphs before the panel even\nstarts. Padding the panel evenly on top of that spends the space twice — the\nheader ends up floating between the section above and the paragraph it\nintroduces rather than binding to it.\n\nSo the block-start pays only the REMAINDER. The target is the indent: the\nspace under a heading should measure the same as the space beside the text,\nwhich is --era-pad-content. The header row already supplies (h-bar − text)/2 of\nit, so the panel adds what's left, and heading-to-paragraph reads equal to\nthe paragraph's own inset. Subtracting one --era-gap (the previous rule) left\nthe header's slack unaccounted for and the heading still detached.\n\nBoth terms are density-derived, so the equality holds at every mode; the\nmax() is the floor for a hypothetical mode where the row's slack would\nexceed the inset outright.",
1180
+ "css": "@utility p-section {\n\tpadding: var(--era-pad-content);\n\tpadding-top: max(0px, calc(var(--era-pad-content) - (var(--era-h-bar) - var(--era-text)) / 2));\n}"
1181
+ },
1182
+ {
1183
+ "name": "duration-base",
1184
+ "names": [
1185
+ "duration-base"
1186
+ ],
1187
+ "file": "index.css",
1188
+ "useCase": "the motion axis as an explicit transition-duration — for the rare case a utility (not the transition-* default) needs to name it; 0s at data-motion=\"instant\", longer at \"extra\".",
1189
+ "description": "",
1190
+ "css": "@utility duration-base {\n\ttransition-duration: var(--era-duration);\n}"
1191
+ },
1192
+ {
1193
+ "name": "text-body",
1194
+ "names": [
1195
+ "text-body"
1196
+ ],
1197
+ "file": "index.css",
1198
+ "description": "Density-derived body size: `text-body` replaces text-[length:var(--era-text)]",
1199
+ "css": "@theme inline {\n\t--text-body: var(--era-text);\n}"
1200
+ },
1201
+ {
1202
+ "name": "leading-body",
1203
+ "names": [
1204
+ "leading-body"
1205
+ ],
1206
+ "file": "index.css",
1207
+ "description": "Prose leading — `leading-body` is the pair to `text-body`, and every piece\nof text in the library that can wrap to a second line carries it. Enforced\nat runtime by typography/prose-leading.",
1208
+ "css": "@theme inline {\n\t--leading-body: var(--era-leading);\n}"
1209
+ },
1210
+ {
1211
+ "name": "rounded-icon",
1212
+ "names": [
1213
+ "rounded-icon",
1214
+ "rounded-pill",
1215
+ "rounded-chip",
1216
+ "rounded-control",
1217
+ "rounded-bar",
1218
+ "rounded-menu-item"
1219
+ ],
1220
+ "file": "index.css",
1221
+ "description": "Radius ladder — Tailwind's own rounded-* names now walk era's concentric\nladder (rd-T = rd-xs + (h-T − h-icon)/2), ride the corners toggle, and\ncollapse to 0 on square. rounded-menu-item is the menu-row radius\n(rd-md − panel-inset) that keeps rows concentric inside a rounded-control\npanel on every surface.",
1222
+ "css": "@theme inline {\n\t--radius-icon: var(--era-rd-icon);\n\t--radius-pill: var(--era-rd-pill);\n\t--radius-chip: var(--era-rd-chip);\n\t--radius-control: var(--era-rd-control);\n\t--radius-bar: var(--era-rd-bar);\n\t--radius-menu-item: var(--era-item-rd);\n}"
1223
+ },
1224
+ {
1225
+ "name": "shadow",
1226
+ "names": [
1227
+ "shadow"
1228
+ ],
1229
+ "file": "index.css",
1230
+ "description": "Surface chrome — bare `shadow` is the resting control edge, shadow-lg the\nfloating panel, shadow-well the recessed container, shadow-pressed the\nactive/latched face, shadow-highlight the material half of hover feedback.\nFlat renders them as none, bevel as chisels, glass as frosted rims — the\nclass stays the same.",
1231
+ "css": "@theme inline {\n\t--shadow: var(--era-shadow);\n}"
1232
+ },
1233
+ {
1234
+ "name": "shadow-sm",
1235
+ "names": [
1236
+ "shadow-sm",
1237
+ "shadow-lg",
1238
+ "shadow-well",
1239
+ "shadow-pressed",
1240
+ "shadow-highlight"
1241
+ ],
1242
+ "file": "index.css",
1243
+ "description": "v4 marks bare `shadow` a deprecated spelling of shadow-sm, and lints\nauto-fix one to the other — alias both to the control edge so either\nspelling renders era chrome.",
1244
+ "css": "@theme inline {\n\t--shadow-sm: var(--era-shadow);\n\t--shadow-lg: var(--era-shadow-lg);\n\t--shadow-well: var(--era-shadow-well);\n\t--shadow-pressed: var(--era-shadow-pressed);\n\t--shadow-highlight: var(--era-highlight-shadow);\n}"
1245
+ },
1246
+ {
1247
+ "name": "bg-well",
1248
+ "names": [
1249
+ "bg-well",
1250
+ "text-well",
1251
+ "border-well",
1252
+ "bg-elevated",
1253
+ "text-elevated",
1254
+ "border-elevated",
1255
+ "bg-highlight",
1256
+ "text-highlight",
1257
+ "border-highlight",
1258
+ "bg-overlay",
1259
+ "text-overlay",
1260
+ "border-overlay"
1261
+ ],
1262
+ "file": "index.css",
1263
+ "description": "Surface fills — bg-well is the surface's own resting fill (pairs with\nshadow-well for recessed chrome), bg-elevated the raised tier (pairs with\nshadow-lg + glass-blur for floating chrome), bg-highlight the transient\nhover/focus/keyboard wash (pairs with shadow-highlight; latched states\nstay on opaque bg-hover), bg-overlay the modal scrim.",
1264
+ "css": "@theme inline {\n\t--color-well: var(--era-surface-bg);\n\t--color-elevated: var(--era-surface-bg-elevated);\n\t--color-highlight: var(--era-highlight);\n\t--color-overlay: var(--era-overlay-bg);\n}"
1265
+ },
1266
+ {
1267
+ "name": "p-gutter",
1099
1268
  "names": [
1100
- "gap-gutter",
1101
1269
  "p-gutter",
1102
1270
  "px-gutter",
1103
- "py-gutter"
1271
+ "py-gutter",
1272
+ "gap-gutter",
1273
+ "p-panel",
1274
+ "px-panel",
1275
+ "py-panel",
1276
+ "gap-panel",
1277
+ "p-card",
1278
+ "px-card",
1279
+ "py-card",
1280
+ "gap-card",
1281
+ "p-content",
1282
+ "px-content",
1283
+ "py-content",
1284
+ "gap-content",
1285
+ "p-menu",
1286
+ "px-menu",
1287
+ "py-menu",
1288
+ "gap-menu",
1289
+ "p-field",
1290
+ "px-field",
1291
+ "py-field",
1292
+ "gap-field"
1104
1293
  ],
1105
1294
  "file": "index.css",
1106
- "useCase": "the inter-element gap (sp/2) flex/grid gap between sibling controls, and the matching gutter padding a scrollable list or rail owes its rows on all four sides (p-gutter on the rail = gap-gutter between its rows).",
1107
- "description": "",
1108
- "css": "@utility gap-gutter {\n\tgap: var(--era-gap);\n}\n@utility p-gutter {\n\tpadding: var(--era-gap);\n}\n@utility px-gutter {\n\tpadding-inline: var(--era-gap);\n}\n@utility py-gutter {\n\tpadding-block: var(--era-gap);\n}"
1295
+ "description": "THE SPACING SCALE — one entry per token, from which Tailwind derives the\nWHOLE directional family: p/px/py/pt/pr/pb/pl/ps/pe, every margin, gap and\ngap-x/y, inset/top/right/bottom/left, translate, and the sizing prefixes.\n\nThese were hand-written `@utility` blocks, which could only ever cover the\nspellings someone remembered to write: `px-gutter` existed and `mt-gutter`\ndid not, `p-inset-control` existed and `pl-inset-control` did not, so the\nlibrary fell back to `mt-(--era-gap)` in exactly the places the named API\nwas supposed to cover. One line here replaces twenty blocks and leaves no\nspelling missing.\n\nONLY genuine spacing belongs here. The namespace is shared across\nh/w/p/m/gap, so a name registered here means the same length in ALL of\nthem — true of a gap or an inset, false of a TIER HEIGHT. Tiers stay\nhand-written per prefix below, and the two vocabularies deliberately share\nno word: icon/pill/chip/control/bar are heights; gutter, card, panel,\ncontent, menu, field and the inset-* names are spacing. Registering a tier\nname here would silently make `px-control` mean 24px of side padding.",
1296
+ "css": "@theme inline {\n\t--spacing-gutter: var(--era-gap);\n\t--spacing-panel: var(--era-pad-panel);\n\t--spacing-card: var(--era-pad-card);\n\t--spacing-content: var(--era-pad-content);\n\t--spacing-menu: var(--era-panel-inset);\n\t--spacing-field: var(--era-field-px);\n}"
1109
1297
  },
1110
1298
  {
1111
1299
  "name": "p-inset-pill",
1112
1300
  "names": [
1113
1301
  "p-inset-pill",
1114
- "p-inset-chip",
1115
- "p-inset-control",
1116
1302
  "px-inset-pill",
1117
- "px-inset-chip",
1118
- "px-inset-control",
1119
1303
  "py-inset-pill",
1304
+ "gap-inset-pill",
1305
+ "p-inset-chip",
1306
+ "px-inset-chip",
1120
1307
  "py-inset-chip",
1121
- "py-inset-control"
1308
+ "gap-inset-chip",
1309
+ "p-inset-control",
1310
+ "px-inset-control",
1311
+ "py-inset-control",
1312
+ "gap-inset-control"
1122
1313
  ],
1123
1314
  "file": "index.css",
1124
- "useCase": "text-symmetric content padding — (tier − text)/2, the inset that vertically centers body text in its tier; px-inset-control is a text button's side padding, p-inset-control a code block's.",
1315
+ "useCase": "text-symmetric content padding — (tier − text)/2, the inset that vertically centres body text in its tier; px-inset-control is a text button's side padding, p-inset-control a code block's.",
1125
1316
  "description": "",
1126
- "css": "@utility p-inset-pill {\n\tpadding: var(--era-inset-pill);\n}\n@utility p-inset-chip {\n\tpadding: var(--era-inset-chip);\n}\n@utility p-inset-control {\n\tpadding: var(--era-inset-control);\n}\n@utility px-inset-pill {\n\tpadding-inline: var(--era-inset-pill);\n}\n@utility px-inset-chip {\n\tpadding-inline: var(--era-inset-chip);\n}\n@utility px-inset-control {\n\tpadding-inline: var(--era-inset-control);\n}\n@utility py-inset-pill {\n\tpadding-block: var(--era-inset-pill);\n}\n@utility py-inset-chip {\n\tpadding-block: var(--era-inset-chip);\n}\n@utility py-inset-control {\n\tpadding-block: var(--era-inset-control);\n}"
1317
+ "css": "@theme inline {\n\t--spacing-inset-pill: var(--era-inset-pill);\n\t--spacing-inset-chip: var(--era-inset-chip);\n\t--spacing-inset-control: var(--era-inset-control);\n}"
1127
1318
  },
1128
1319
  {
1129
- "name": "px-pill",
1320
+ "name": "p-icon-inset-pill",
1130
1321
  "names": [
1131
- "px-pill",
1132
- "px-chip"
1322
+ "p-icon-inset-pill",
1323
+ "px-icon-inset-pill",
1324
+ "py-icon-inset-pill",
1325
+ "gap-icon-inset-pill",
1326
+ "p-icon-inset-chip",
1327
+ "px-icon-inset-chip",
1328
+ "py-icon-inset-chip",
1329
+ "gap-icon-inset-chip",
1330
+ "p-icon-inset-control",
1331
+ "px-icon-inset-control",
1332
+ "py-icon-inset-control",
1333
+ "gap-icon-inset-control",
1334
+ "p-icon-inset-bar",
1335
+ "px-icon-inset-bar",
1336
+ "py-icon-inset-bar",
1337
+ "gap-icon-inset-bar",
1338
+ "p-pill-inset-chip",
1339
+ "px-pill-inset-chip",
1340
+ "py-pill-inset-chip",
1341
+ "gap-pill-inset-chip",
1342
+ "p-pill-inset-control",
1343
+ "px-pill-inset-control",
1344
+ "py-pill-inset-control",
1345
+ "gap-pill-inset-control",
1346
+ "p-chip-inset-control",
1347
+ "px-chip-inset-control",
1348
+ "py-chip-inset-control",
1349
+ "gap-chip-inset-control",
1350
+ "p-chip-inset-bar",
1351
+ "px-chip-inset-bar",
1352
+ "py-chip-inset-bar",
1353
+ "gap-chip-inset-bar"
1133
1354
  ],
1134
1355
  "file": "index.css",
1135
- "useCase": "pill side paddingthe wider-than-vertical horizontal breathing room badge/chip text wants (glyph-advance derived, ~2× the vertical inset).",
1356
+ "useCase": "the concentric inset for a nested pair (h-container − h-child)/2, the gap that makes a child control sit evenly inside its container, and the radius step that keeps their corners concentric. Named for the pair it joins: gap-icon-inset-control seats an icon in a control.",
1136
1357
  "description": "",
1137
- "css": "@utility px-pill {\n\tpadding-inline: var(--era-pill-px);\n}\n@utility px-chip {\n\tpadding-inline: var(--era-chip-px);\n}"
1358
+ "css": "@theme inline {\n\t--spacing-icon-inset-pill: var(--era-icon-inset-pill);\n\t--spacing-icon-inset-chip: var(--era-icon-inset-chip);\n\t--spacing-icon-inset-control: var(--era-icon-inset-control);\n\t--spacing-icon-inset-bar: var(--era-icon-inset-bar);\n\t--spacing-pill-inset-chip: var(--era-pill-inset-chip);\n\t--spacing-pill-inset-control: var(--era-pill-inset-control);\n\t--spacing-chip-inset-control: var(--era-chip-inset-control);\n\t--spacing-chip-inset-bar: var(--era-chip-inset-bar);\n}"
1138
1359
  },
1139
1360
  {
1140
- "name": "px-field",
1361
+ "name": "p-glyph-icon",
1141
1362
  "names": [
1142
- "px-field"
1363
+ "p-glyph-icon",
1364
+ "px-glyph-icon",
1365
+ "py-glyph-icon",
1366
+ "gap-glyph-icon",
1367
+ "p-glyph-pill",
1368
+ "px-glyph-pill",
1369
+ "py-glyph-pill",
1370
+ "gap-glyph-pill"
1143
1371
  ],
1144
1372
  "file": "index.css",
1145
- "useCase": "text-field side paddingwhere typed text starts in a control-tier input; the named form of px-(--era-field-px).",
1373
+ "useCase": "the glyph size for a tier the INK inside the box, not the box (size-glyph-pill is the dismiss × in a pill, size-pill is the pill).",
1146
1374
  "description": "",
1147
- "css": "@utility px-field {\n\tpadding-inline: var(--era-field-px);\n}"
1375
+ "css": "@theme inline {\n\t--spacing-glyph-icon: var(--era-glyph-icon);\n\t--spacing-glyph-pill: var(--era-glyph-pill);\n}"
1148
1376
  },
1149
1377
  {
1150
- "name": "p-panel",
1378
+ "name": "bg-field",
1151
1379
  "names": [
1152
- "p-panel",
1153
- "p-card"
1380
+ "bg-field",
1381
+ "text-field",
1382
+ "border-field",
1383
+ "bg-field-highlight",
1384
+ "text-field-highlight",
1385
+ "border-field-highlight"
1154
1386
  ],
1155
1387
  "file": "index.css",
1156
- "useCase": "optical padding for unbounded containers p-panel for compact shells and menu-adjacent chrome, p-card for cards/dialogs/popovers, p-content for full content panels. Grows super-linearly with density so whitespace holds its perceived share as controls loosen.",
1388
+ "useCase": "the recessed field fillbg-field is a text input's resting well, bg-field-highlight its focused/hovered face.",
1157
1389
  "description": "",
1158
- "css": "@utility p-panel {\n\tpadding: var(--era-pad-panel);\n}\n@utility p-card {\n\tpadding: var(--era-pad-card);\n}"
1390
+ "css": "@theme inline {\n\t--color-field: var(--era-field-bg);\n\t--color-field-highlight: var(--era-field-highlight);\n}"
1159
1391
  },
1160
1392
  {
1161
- "name": "p-content",
1393
+ "name": "ease-base",
1162
1394
  "names": [
1163
- "p-content"
1395
+ "ease-base"
1164
1396
  ],
1165
1397
  "file": "index.css",
1166
- "description": "A content panel always follows a section header ROW, and that row already\ncontributes its own slack: the heading's text sits in an h-bar bar, so there\nis (h-bar − text)/2 of empty bar under its glyphs before the panel even\nstarts. Padding the panel evenly on top of that spends the space twice — the\nheader ends up floating between the section above and the paragraph it\nintroduces rather than binding to it.\n\nSo the block-start pays only the REMAINDER. The target is the indent: the\nspace under a heading should measure the same as the space beside the text,\nwhich is --era-content-p. The header row already supplies (h-bar text)/2 of\nit, so the panel adds what's left, and heading-to-paragraph reads equal to\nthe paragraph's own inset. Subtracting one --era-gap (the previous rule) left\nthe header's slack unaccounted for and the heading still detached.\n\nBoth terms are density-derived, so the equality holds at every mode; the\nmax() is the floor for a hypothetical mode where the row's slack would\nexceed the inset outright.",
1167
- "css": "@utility p-content {\n\tpadding: var(--era-content-p);\n\tpadding-top: max(0px, calc(var(--era-content-p) - (var(--era-h-bar) - var(--era-text)) / 2));\n}"
1398
+ "description": "Motion bare transition utilities default to the motion axis, so\n`transition-colors` alone is on-design (0s at instant, longer at extra).\nease-base/duration-base name the axis explicitly for overrides.",
1399
+ "css": "@theme inline {\n\t--default-transition-duration: var(--era-duration);\n\t--default-transition-timing-function: var(--era-ease);\n\t--ease-base: var(--era-ease);\n}"
1168
1400
  },
1169
1401
  {
1170
- "name": "p-menu",
1402
+ "name": "bg-divider",
1171
1403
  "names": [
1172
- "p-menu"
1404
+ "bg-divider",
1405
+ "text-divider",
1406
+ "border-divider",
1407
+ "bg-divider-faded",
1408
+ "text-divider-faded",
1409
+ "border-divider-faded",
1410
+ "bg-background",
1411
+ "text-background",
1412
+ "border-background",
1413
+ "bg-foreground",
1414
+ "text-foreground",
1415
+ "border-foreground",
1416
+ "bg-1",
1417
+ "text-1",
1418
+ "border-1",
1419
+ "bg-2",
1420
+ "text-2",
1421
+ "border-2",
1422
+ "bg-3",
1423
+ "text-3",
1424
+ "border-3",
1425
+ "bg-4",
1426
+ "text-4",
1427
+ "border-4",
1428
+ "bg-5",
1429
+ "text-5",
1430
+ "border-5",
1431
+ "bg-6",
1432
+ "text-6",
1433
+ "border-6",
1434
+ "bg-7",
1435
+ "text-7",
1436
+ "border-7",
1437
+ "bg-8",
1438
+ "text-8",
1439
+ "border-8",
1440
+ "bg-9",
1441
+ "text-9",
1442
+ "border-9",
1443
+ "bg-10",
1444
+ "text-10",
1445
+ "border-10",
1446
+ "bg-11",
1447
+ "text-11",
1448
+ "border-11",
1449
+ "bg-12",
1450
+ "text-12",
1451
+ "border-12",
1452
+ "bg-border",
1453
+ "text-border",
1454
+ "border-border",
1455
+ "bg-surface",
1456
+ "text-surface",
1457
+ "border-surface",
1458
+ "bg-hover",
1459
+ "text-hover",
1460
+ "border-hover",
1461
+ "bg-fg",
1462
+ "text-fg",
1463
+ "border-fg",
1464
+ "bg-bright",
1465
+ "text-bright",
1466
+ "border-bright",
1467
+ "bg-muted",
1468
+ "text-muted",
1469
+ "border-muted"
1173
1470
  ],
1174
1471
  "file": "index.css",
1175
- "useCase": "menu-panel padding the surface-owned inset (0 on flat, 2px on glass/bevel) that keeps row highlights inside a floating panel's frame; pairs with rounded-menu-item on the rows.",
1176
- "description": "",
1177
- "css": "@utility p-menu {\n\tpadding: var(--era-panel-inset);\n}"
1472
+ "description": "Surface divider colors: border-divider, bg-divider-faded, ",
1473
+ "css": "@theme inline {\n\t--color-divider: var(--era-divider-color);\n\t--color-divider-faded: var(--era-divider-faded);\n\t--color-background: var(--color-1);\n\t--color-foreground: var(--color-fg);\n\t--color-1: var(--color-1);\n\t--color-2: var(--color-2);\n\t--color-3: var(--color-3);\n\t--color-4: var(--color-4);\n\t--color-5: var(--color-5);\n\t--color-6: var(--color-6);\n\t--color-7: var(--color-7);\n\t--color-8: var(--color-8);\n\t--color-9: var(--color-9);\n\t--color-10: var(--color-10);\n\t--color-11: var(--color-11);\n\t--color-12: var(--color-12);\n\t--color-border: var(--color-border);\n\t--color-surface: var(--color-surface);\n\t--color-hover: var(--color-hover);\n\t--color-fg: var(--color-fg);\n\t--color-bright: var(--color-bright);\n\t--color-muted: var(--color-muted);\n}"
1178
1474
  },
1179
1475
  {
1180
- "name": "duration-base",
1476
+ "name": "bg-fill",
1181
1477
  "names": [
1182
- "duration-base"
1478
+ "bg-fill",
1479
+ "text-fill",
1480
+ "border-fill",
1481
+ "bg-link",
1482
+ "text-link",
1483
+ "border-link",
1484
+ "bg-primary",
1485
+ "text-primary",
1486
+ "border-primary",
1487
+ "bg-primary-fg",
1488
+ "text-primary-fg",
1489
+ "border-primary-fg",
1490
+ "bg-primary-hover",
1491
+ "text-primary-hover",
1492
+ "border-primary-hover",
1493
+ "bg-destructive",
1494
+ "text-destructive",
1495
+ "border-destructive",
1496
+ "bg-destructive-fg",
1497
+ "text-destructive-fg",
1498
+ "border-destructive-fg",
1499
+ "bg-success",
1500
+ "text-success",
1501
+ "border-success",
1502
+ "bg-success-fg",
1503
+ "text-success-fg",
1504
+ "border-success-fg",
1505
+ "bg-warning",
1506
+ "text-warning",
1507
+ "border-warning",
1508
+ "bg-warning-fg",
1509
+ "text-warning-fg",
1510
+ "border-warning-fg"
1183
1511
  ],
1184
1512
  "file": "index.css",
1185
- "useCase": "the motion axis as an explicit transition-duration — for the rare case a utility (not the transition-* default) needs to name it; 0s at data-motion=\"instant\", longer at \"extra\".",
1186
- "description": "",
1187
- "css": "@utility duration-base {\n\ttransition-duration: var(--era-duration);\n}"
1513
+ "description": "The standing pill fill --era-fill, the latched counterpart of the\ntransient highlight. Surface-owned: a composing wash on flat/bevel, the\nopaque swatch on glass.",
1514
+ "css": "@theme inline {\n\t--color-fill: var(--era-fill);\n\t--color-link: var(--color-link);\n\t--color-primary: var(--color-primary);\n\t--color-primary-fg: var(--color-primary-fg);\n\t--color-primary-hover: var(--color-primary-hover);\n\t--color-destructive: var(--color-destructive);\n\t--color-destructive-fg: var(--color-destructive-fg);\n\t--color-success: var(--color-success);\n\t--color-success-fg: var(--color-success-fg);\n\t--color-warning: var(--color-warning);\n\t--color-warning-fg: var(--color-warning-fg);\n}"
1188
1515
  },
1189
1516
  {
1190
1517
  "name": "glass-blur",
@@ -4,13 +4,13 @@ A complete notes app — rich-text editor, slash commands, local persistence.
4
4
 
5
5
  ## Usage
6
6
 
7
- Apps ship on their own subpath and are **not** re-exported from `@sig-nine/era-ui`.
7
+ Apps ship on their own subpath and are **not** re-exported from `@signal9/era-ui`.
8
8
  Notes carries TipTap, and a consumer who never imports an app should never pay
9
9
  for it.
10
10
 
11
11
  ```svelte
12
12
  <script>
13
- import { Notes } from '@sig-nine/era-ui/apps';
13
+ import { Notes } from '@signal9/era-ui/apps';
14
14
  </script>
15
15
 
16
16
  <Notes />
@@ -50,7 +50,7 @@ Persistence is one small interface, so server-backed hosting is a drop-in swap
50
50
  `load`/`save` may be sync or async:
51
51
 
52
52
  ```ts
53
- import { Notes, NotesStore } from '@sig-nine/era-ui/apps';
53
+ import { Notes, NotesStore } from '@signal9/era-ui/apps';
54
54
 
55
55
  const store = new NotesStore({
56
56
  adapter: {