@motion-proto/live-tokens 0.6.2 → 0.8.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 (232) hide show
  1. package/README.md +14 -13
  2. package/dist-plugin/index.cjs +854 -226
  3. package/dist-plugin/index.d.cts +2 -1
  4. package/dist-plugin/index.d.ts +2 -1
  5. package/dist-plugin/index.js +852 -225
  6. package/package.json +26 -40
  7. package/src/{styles → app}/site.css +1 -1
  8. package/src/{component-editor → editor/component-editor}/BadgeEditor.svelte +8 -82
  9. package/src/{component-editor → editor/component-editor}/CalloutEditor.svelte +4 -4
  10. package/src/{component-editor → editor/component-editor}/CardEditor.svelte +28 -76
  11. package/src/{component-editor → editor/component-editor}/CollapsibleSectionEditor.svelte +37 -30
  12. package/src/{component-editor → editor/component-editor}/CornerBadgeEditor.svelte +31 -93
  13. package/src/{component-editor → editor/component-editor}/DialogEditor.svelte +60 -57
  14. package/src/editor/component-editor/ImageEditor.svelte +30 -0
  15. package/src/{component-editor → editor/component-editor}/InlineEditActionsEditor.svelte +6 -4
  16. package/src/editor/component-editor/MenuSelectEditor.svelte +160 -0
  17. package/src/{component-editor → editor/component-editor}/NotificationEditor.svelte +67 -38
  18. package/src/{component-editor → editor/component-editor}/ProgressBarEditor.svelte +5 -4
  19. package/src/{component-editor → editor/component-editor}/RadioButtonEditor.svelte +3 -3
  20. package/src/editor/component-editor/SectionDividerEditor.svelte +565 -0
  21. package/src/{component-editor → editor/component-editor}/SegmentedControlEditor.svelte +2 -2
  22. package/src/{component-editor → editor/component-editor}/StandardButtonsEditor.svelte +29 -21
  23. package/src/{component-editor → editor/component-editor}/TabBarEditor.svelte +9 -14
  24. package/src/{component-editor → editor/component-editor}/TableEditor.svelte +9 -18
  25. package/src/{component-editor → editor/component-editor}/TooltipEditor.svelte +11 -47
  26. package/src/editor/component-editor/editors.d.ts +10 -0
  27. package/src/{component-editor → editor/component-editor}/registry.ts +28 -18
  28. package/src/{component-editor → editor/component-editor}/scaffolding/AngleDial.svelte +54 -15
  29. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentEditorBase.svelte +3 -51
  30. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileManager.svelte +151 -424
  31. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileMenu.svelte +18 -170
  32. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentsTab.svelte +2 -2
  33. package/src/{component-editor → editor/component-editor}/scaffolding/CopyFromMenu.svelte +44 -4
  34. package/src/{component-editor → editor/component-editor}/scaffolding/FieldsetWrapper.svelte +1 -1
  35. package/src/{component-editor → editor/component-editor}/scaffolding/LinkageChart.svelte +6 -6
  36. package/src/{component-editor → editor/component-editor}/scaffolding/LinkedBlock.svelte +6 -12
  37. package/src/editor/component-editor/scaffolding/NonStylableConfig.svelte +38 -0
  38. package/src/editor/component-editor/scaffolding/RadialShapePad.svelte +483 -0
  39. package/src/{component-editor → editor/component-editor}/scaffolding/SaveAsDialog.svelte +66 -12
  40. package/src/editor/component-editor/scaffolding/ShadowBackdrop.svelte +85 -0
  41. package/src/editor/component-editor/scaffolding/ShadowBackdropControls.svelte +132 -0
  42. package/src/editor/component-editor/scaffolding/StateBlock.svelte +345 -0
  43. package/src/{component-editor → editor/component-editor}/scaffolding/TokenLayout.svelte +17 -12
  44. package/src/{component-editor → editor/component-editor}/scaffolding/TypeEditor.svelte +13 -1
  45. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +858 -0
  46. package/src/{component-editor → editor/component-editor}/scaffolding/buildTypeGroupTokens.ts +1 -0
  47. package/src/{component-editor → editor/component-editor}/scaffolding/editorContext.ts +19 -9
  48. package/src/{component-editor → editor/component-editor}/scaffolding/linkedBlock.ts +2 -2
  49. package/src/{component-editor → editor/component-editor}/scaffolding/types.ts +25 -0
  50. package/src/{lib → editor/core/components}/componentConfigKeys.ts +8 -0
  51. package/src/{lib → editor/core/components}/componentConfigService.ts +3 -3
  52. package/src/{lib → editor/core/components}/componentPersist.ts +11 -9
  53. package/src/editor/core/flashStatus.ts +30 -0
  54. package/src/{lib → editor/core/fonts}/fontLoader.ts +2 -2
  55. package/src/{lib → editor/core/fonts}/fontMigration.ts +4 -4
  56. package/src/{lib → editor/core/fonts}/fontParse.ts +1 -1
  57. package/src/editor/core/manifests/manifestService.ts +171 -0
  58. package/src/editor/core/palettes/familySwap.ts +99 -0
  59. package/src/{lib → editor/core/palettes}/paletteDerivation.ts +71 -2
  60. package/src/{lib → editor/core/palettes}/tokenRegistry.ts +9 -6
  61. package/src/editor/core/productionPulse.ts +37 -0
  62. package/src/{lib → editor/core/routing}/router.ts +1 -1
  63. package/src/{lib/files/versionedFileResource.ts → editor/core/storage/files/versionedFileResourceClient.ts} +8 -1
  64. package/src/{lib → editor/core/store}/editorCore.ts +24 -8
  65. package/src/{lib → editor/core/store}/editorPersistence.ts +3 -3
  66. package/src/{lib → editor/core/store}/editorRenderer.ts +2 -2
  67. package/src/{lib → editor/core/store}/editorStore.ts +222 -28
  68. package/src/{lib → editor/core/store}/editorTypes.ts +56 -13
  69. package/src/editor/core/store/gradientSource.ts +192 -0
  70. package/src/editor/core/themes/migrations/2026-05-19-collapsiblesection-drop-frame-surface.ts +28 -0
  71. package/src/editor/core/themes/migrations/2026-05-19-sectiondivider-rich-gradient.ts +35 -0
  72. package/src/editor/core/themes/migrations/2026-05-20-sectiondivider-slim-variants.ts +82 -0
  73. package/src/editor/core/themes/migrations/2026-05-21-sectiondivider-spacing-to-padding.ts +24 -0
  74. package/src/editor/core/themes/migrations/2026-05-22-sectiondivider-intrinsics-to-css.ts +81 -0
  75. package/src/{lib → editor/core/themes}/migrations/index.ts +10 -0
  76. package/src/{lib → editor/core/themes}/slices/columns.ts +2 -2
  77. package/src/{lib → editor/core/themes}/slices/components.ts +20 -6
  78. package/src/{lib → editor/core/themes}/slices/fonts.ts +1 -1
  79. package/src/{lib → editor/core/themes}/slices/gradients.ts +89 -14
  80. package/src/{lib → editor/core/themes}/slices/overlays.ts +1 -1
  81. package/src/{lib → editor/core/themes}/slices/palettes.ts +1 -1
  82. package/src/{lib → editor/core/themes}/slices/shadows.ts +3 -3
  83. package/src/{lib → editor/core/themes}/themeInit.ts +8 -8
  84. package/src/{lib → editor/core/themes}/themeService.ts +6 -6
  85. package/src/{lib → editor/core/themes}/themeTypes.ts +67 -8
  86. package/src/editor/index.ts +69 -0
  87. package/src/{lib → editor/overlay}/ColumnsOverlay.svelte +0 -1
  88. package/src/{lib → editor/overlay}/LiveEditorOverlay.svelte +80 -129
  89. package/src/{lib → editor/overlay}/columnsOverlay.ts +2 -2
  90. package/src/{pages → editor/pages}/ComponentEditorPage.svelte +12 -12
  91. package/src/{pages → editor/pages}/Editor.svelte +4 -4
  92. package/src/{pages → editor/pages}/EditorShell.svelte +18 -36
  93. package/src/{styles → editor/styles}/ui-editor.css +43 -22
  94. package/src/{styles → editor/styles}/ui-form-controls.css +23 -24
  95. package/src/{ui → editor/ui}/BezierCurveEditor.svelte +119 -68
  96. package/src/{ui → editor/ui}/ColorEditPanel.svelte +13 -13
  97. package/src/{ui → editor/ui}/EditorViewSwitcher.svelte +7 -6
  98. package/src/editor/ui/FileLoadList.svelte +367 -0
  99. package/src/editor/ui/FilePill.svelte +80 -0
  100. package/src/editor/ui/FontStackEditor.svelte +499 -0
  101. package/src/editor/ui/GradientEditor.svelte +690 -0
  102. package/src/{ui → editor/ui}/GradientStopPicker.svelte +12 -4
  103. package/src/editor/ui/ManifestFileManager.svelte +438 -0
  104. package/src/{ui → editor/ui}/PaletteEditor.svelte +180 -673
  105. package/src/editor/ui/ProjectFontsSection.svelte +638 -0
  106. package/src/{ui → editor/ui}/SurfacesTab.svelte +3 -3
  107. package/src/{ui → editor/ui}/TextTab.svelte +3 -3
  108. package/src/editor/ui/ThemeFileManager.svelte +783 -0
  109. package/src/{ui → editor/ui}/UICopyPopover.svelte +4 -4
  110. package/src/{ui → editor/ui}/UIFontFamilySelector.svelte +6 -7
  111. package/src/{ui → editor/ui}/UIFontSizeSelector.svelte +4 -1
  112. package/src/editor/ui/UIInfoPopover.svelte +243 -0
  113. package/src/editor/ui/UILetterSpacingSelector.svelte +65 -0
  114. package/src/{ui → editor/ui}/UILineHeightSelector.svelte +5 -5
  115. package/src/{ui → editor/ui}/UILinkToggle.svelte +2 -2
  116. package/src/{ui → editor/ui}/UIPaddingSelector.svelte +6 -6
  117. package/src/{ui → editor/ui}/UIPaletteSelector.svelte +57 -30
  118. package/src/editor/ui/UIPillButton.svelte +168 -0
  119. package/src/{ui → editor/ui}/UIRadio.svelte +2 -2
  120. package/src/{ui → editor/ui}/UIRelinkConfirmPopover.svelte +4 -4
  121. package/src/editor/ui/UISegmentedControl.svelte +114 -0
  122. package/src/editor/ui/UISquareButton.svelte +172 -0
  123. package/src/{ui → editor/ui}/UITokenSelector.svelte +14 -11
  124. package/src/{ui → editor/ui}/UIVariantSelector.svelte +1 -1
  125. package/src/{ui → editor/ui}/VariablesTab.svelte +46 -17
  126. package/src/{ui → editor/ui}/palette/GradientStopEditor.svelte +13 -13
  127. package/src/{ui → editor/ui}/palette/OverridesPanel.svelte +24 -47
  128. package/src/{ui → editor/ui}/palette/PaletteBase.svelte +11 -8
  129. package/src/{ui → editor/ui}/palette/paletteEditorState.ts +1 -1
  130. package/src/editor/ui/palette/paletteMath.ts +275 -0
  131. package/src/{ui → editor/ui}/sections/ColumnsSection.svelte +137 -18
  132. package/src/{ui → editor/ui}/sections/GradientsSection.svelte +8 -8
  133. package/src/{ui → editor/ui}/sections/OverlaysSection.svelte +18 -18
  134. package/src/{ui → editor/ui}/sections/ShadowsSection.svelte +23 -23
  135. package/src/{ui → editor/ui}/sections/TokenScaleTable.svelte +3 -3
  136. package/src/{components → system/components}/Badge.svelte +0 -36
  137. package/src/{components → system/components}/Button.svelte +2 -2
  138. package/src/{components → system/components}/Card.svelte +34 -60
  139. package/src/{components → system/components}/CollapsibleSection.svelte +25 -2
  140. package/src/{components → system/components}/CornerBadge.svelte +8 -24
  141. package/src/{components → system/components}/Dialog.svelte +1 -1
  142. package/src/system/components/FloatingTokenTags.css +275 -0
  143. package/src/system/components/FloatingTokenTags.svelte +543 -0
  144. package/src/{components → system/components}/InlineEditActions.svelte +6 -4
  145. package/src/system/components/MenuSelect.svelte +229 -0
  146. package/src/{components → system/components}/Notification.svelte +8 -1
  147. package/src/{components → system/components}/ProgressBar.svelte +29 -11
  148. package/src/system/components/SectionDivider.svelte +560 -0
  149. package/src/{components → system/components}/SegmentedControl.svelte +49 -43
  150. package/src/{components → system/components}/TabBar.svelte +81 -65
  151. package/src/{components → system/components}/Table.svelte +17 -3
  152. package/src/{components → system/components}/Tooltip.svelte +6 -4
  153. package/src/system/styles/CONVENTIONS.md +178 -0
  154. package/src/system/styles/fonts.css +20 -0
  155. package/src/system/styles/tokens.css +601 -0
  156. package/src/system/styles/tokens.generated.css +544 -0
  157. package/src/component-editor/ImageEditor.svelte +0 -74
  158. package/src/component-editor/SectionDividerEditor.svelte +0 -265
  159. package/src/component-editor/scaffolding/DividerEditor.svelte +0 -94
  160. package/src/component-editor/scaffolding/GradientCard.svelte +0 -296
  161. package/src/component-editor/scaffolding/NonStylableConfig.svelte +0 -62
  162. package/src/component-editor/scaffolding/ShadowBackdrop.svelte +0 -37
  163. package/src/component-editor/scaffolding/ShadowBackdropControls.svelte +0 -61
  164. package/src/component-editor/scaffolding/StateBlock.svelte +0 -132
  165. package/src/component-editor/scaffolding/VariantGroup.svelte +0 -310
  166. package/src/components/SectionDivider.svelte +0 -483
  167. package/src/data/google-fonts.json +0 -75
  168. package/src/lib/index.ts +0 -68
  169. package/src/lib/presetService.ts +0 -214
  170. package/src/lib/productionPulse.ts +0 -32
  171. package/src/styles/fonts.css +0 -30
  172. package/src/styles/tokens.css +0 -1324
  173. package/src/ui/FontStackEditor.svelte +0 -361
  174. package/src/ui/GradientEditor.svelte +0 -470
  175. package/src/ui/PresetFileManager.svelte +0 -1116
  176. package/src/ui/ProjectFontsSection.svelte +0 -645
  177. package/src/ui/ThemeFileManager.svelte +0 -1020
  178. package/src/ui/UnsavedComponentsDialog.svelte +0 -315
  179. /package/src/{component-editor → editor/component-editor}/index.ts +0 -0
  180. /package/src/{component-editor → editor/component-editor}/scaffolding/DemoHeader.svelte +0 -0
  181. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSectionType.ts +0 -0
  182. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSources.ts +0 -0
  183. /package/src/{component-editor → editor/component-editor}/scaffolding/defaultSections.ts +0 -0
  184. /package/src/{component-editor → editor/component-editor}/scaffolding/siblings.ts +0 -0
  185. /package/src/{lib → editor/core}/cssVarSync.ts +0 -0
  186. /package/src/{lib → editor/core/palettes}/oklch.ts +0 -0
  187. /package/src/{lib → editor/core/routing}/navLinkTypes.ts +0 -0
  188. /package/src/{lib → editor/core/routing}/parentRouteStore.ts +0 -0
  189. /package/src/{lib → editor/core/storage}/storage.ts +0 -0
  190. /package/src/{lib → editor/core/store}/editorConfig.ts +0 -0
  191. /package/src/{lib → editor/core/store}/editorConfigStore.ts +0 -0
  192. /package/src/{lib → editor/core/store}/editorKeybindings.ts +0 -0
  193. /package/src/{lib → editor/core/store}/editorViewStore.ts +0 -0
  194. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-component-prefix-and-suffix-renames.ts +0 -0
  195. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-legacy-keys-and-bg-to-canvas.ts +0 -0
  196. /package/src/{lib → editor/core/themes}/migrations/2026-04-27-segmentedcontrol-disabled-flatten.ts +0 -0
  197. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-frame-and-cleanup.ts +0 -0
  198. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-variant-namespace.ts +0 -0
  199. /package/src/{lib → editor/core/themes}/migrations/2026-05-10-sectiondivider-gradient-stops.ts +0 -0
  200. /package/src/{lib → editor/core/themes}/migrations/2026-05-13-primary-to-brand.ts +0 -0
  201. /package/src/{lib → editor/core/themes}/parsers/globalRootBlock.ts +0 -0
  202. /package/src/{lib → editor/core/themes}/slices/domainVars.ts +0 -0
  203. /package/src/{lib → editor/overlay}/overlayState.ts +0 -0
  204. /package/src/{pages → editor/pages}/ComponentEditorPage.svelte.d.ts +0 -0
  205. /package/src/{pages → editor/pages}/Editor.svelte.d.ts +0 -0
  206. /package/src/{ui → editor/ui}/Toggle.svelte +0 -0
  207. /package/src/{ui → editor/ui}/UIDialog.svelte +0 -0
  208. /package/src/{ui → editor/ui}/UIFontWeightSelector.svelte +0 -0
  209. /package/src/{ui → editor/ui}/UIOptionItem.svelte +0 -0
  210. /package/src/{ui → editor/ui}/UIOptionList.svelte +0 -0
  211. /package/src/{ui → editor/ui}/UIRadioGroup.svelte +0 -0
  212. /package/src/{lib → editor/ui}/copyPopover.ts +0 -0
  213. /package/src/{ui → editor/ui}/curveEngine.ts +0 -0
  214. /package/src/{ui → editor/ui}/index.ts +0 -0
  215. /package/src/{ui → editor/ui}/keepInViewport.ts +0 -0
  216. /package/src/{ui → editor/ui}/palette/ScaleCurveEditor.svelte +0 -0
  217. /package/src/{lib → editor/ui}/scrollSection.ts +0 -0
  218. /package/src/{ui → editor/ui}/sections/tokenScales.ts +0 -0
  219. /package/src/{ui → editor/ui}/variantScales.ts +0 -0
  220. /package/src/{assets → system/assets}/newspaper.webp +0 -0
  221. /package/src/{assets → system/assets}/offering.webp +0 -0
  222. /package/src/{components → system/components}/Callout.svelte +0 -0
  223. /package/src/{components → system/components}/Image.svelte +0 -0
  224. /package/src/{components → system/components}/RadioButton.svelte +0 -0
  225. /package/src/{components → system/components}/types.ts +0 -0
  226. /package/src/{styles → system/styles}/_padding.scss +0 -0
  227. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin-ext.woff2 +0 -0
  228. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin.woff2 +0 -0
  229. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin-ext.woff2 +0 -0
  230. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin.woff2 +0 -0
  231. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin-ext.woff2 +0 -0
  232. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin.woff2 +0 -0
@@ -6,8 +6,8 @@
6
6
  * rgba values out to :root, so this component only orchestrates mutations
7
7
  * and reads derived display state.
8
8
  */
9
- import { editorState, mutate, beginSliderGesture } from '../../lib/editorStore';
10
- import type { OverlayToken, OverlayChannelGlobals, EditorState } from '../../lib/editorTypes';
9
+ import { editorState, mutate, beginSliderGesture } from '../../core/store/editorStore';
10
+ import type { OverlayToken, OverlayChannelGlobals, EditorState } from '../../core/store/editorTypes';
11
11
 
12
12
  interface Props {
13
13
  copiedVar?: string | null;
@@ -337,20 +337,20 @@
337
337
  .section {
338
338
  display: flex;
339
339
  flex-direction: column;
340
- gap: var(--ui-space-16);
340
+ gap: var(--ui-space-24);
341
341
  }
342
342
 
343
343
  .section-title {
344
- font-size: var(--ui-font-size-lg);
344
+ font-size: var(--ui-font-size-2xl);
345
345
  font-weight: var(--ui-font-weight-semibold);
346
346
  color: var(--ui-text-primary);
347
347
  margin: 0;
348
348
  padding-bottom: var(--ui-space-8);
349
- border-bottom: 1px solid var(--ui-border-subtle);
349
+ border-bottom: 2px solid var(--ui-border-high);
350
350
  }
351
351
 
352
352
  .group-title {
353
- font-size: var(--ui-font-size-md);
353
+ font-size: var(--ui-font-size-lg);
354
354
  font-weight: var(--ui-font-weight-semibold);
355
355
  color: var(--ui-text-secondary);
356
356
  margin: 0;
@@ -404,7 +404,7 @@
404
404
  border-radius: var(--ui-radius-md);
405
405
  position: relative;
406
406
  overflow: hidden;
407
- border: 1px solid var(--ui-border-subtle);
407
+ border: 1px solid var(--ui-border-low);
408
408
  background-image:
409
409
  linear-gradient(45deg, #ccc 25%, transparent 25%),
410
410
  linear-gradient(-45deg, #ccc 25%, transparent 25%),
@@ -442,7 +442,7 @@
442
442
  gap: var(--ui-space-8);
443
443
  padding: var(--ui-space-12);
444
444
  background: var(--ui-surface-lowest);
445
- border: 1px solid var(--ui-border-subtle);
445
+ border: 1px solid var(--ui-border-low);
446
446
  border-radius: var(--ui-radius-md);
447
447
  margin-top: var(--ui-space-8);
448
448
  }
@@ -517,7 +517,7 @@
517
517
  text-align: right;
518
518
  flex-shrink: 0;
519
519
  background: var(--ui-surface-lowest);
520
- border: 1px solid var(--ui-border-subtle);
520
+ border: 1px solid var(--ui-border-low);
521
521
  border-radius: var(--ui-radius-sm);
522
522
  padding: var(--ui-space-2) var(--ui-space-4);
523
523
  -moz-appearance: textfield;
@@ -532,7 +532,7 @@
532
532
 
533
533
  .shadow-slider-input:focus {
534
534
  outline: none;
535
- border-color: var(--ui-border-medium);
535
+ border-color: var(--ui-border-high);
536
536
  }
537
537
 
538
538
  .shadow-slider-unit {
@@ -564,7 +564,7 @@
564
564
  gap: var(--ui-space-8);
565
565
  padding: var(--ui-space-12);
566
566
  background: var(--ui-surface-lowest);
567
- border: 1px solid var(--ui-border-subtle);
567
+ border: 1px solid var(--ui-border-low);
568
568
  border-radius: var(--ui-radius-md);
569
569
  width: 100%;
570
570
  min-width: 14rem;
@@ -576,7 +576,7 @@
576
576
  gap: var(--ui-space-4);
577
577
  margin-top: var(--ui-space-4);
578
578
  padding-top: var(--ui-space-8);
579
- border-top: 1px solid var(--ui-border-faint);
579
+ border-top: 1px solid var(--ui-border-low);
580
580
  }
581
581
 
582
582
  .shadow-css-output code {
@@ -592,7 +592,7 @@
592
592
  color: var(--ui-text-muted);
593
593
  cursor: pointer;
594
594
  padding: var(--ui-space-2) var(--ui-space-6);
595
- border: 1px solid var(--ui-border-subtle);
595
+ border: 1px solid var(--ui-border-low);
596
596
  border-radius: var(--ui-radius-sm);
597
597
  text-align: center;
598
598
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -600,7 +600,7 @@
600
600
 
601
601
  .shadow-copy-btn:hover {
602
602
  color: var(--ui-text-primary);
603
- border-color: var(--ui-border-medium);
603
+ border-color: var(--ui-border-high);
604
604
  }
605
605
 
606
606
  .slider-track {
@@ -609,7 +609,7 @@
609
609
  position: relative;
610
610
  height: 12px;
611
611
  border-radius: var(--ui-radius-sm);
612
- border: 1px solid var(--ui-border-subtle);
612
+ border: 1px solid var(--ui-border-low);
613
613
  }
614
614
 
615
615
  .slider-track input[type="range"] {
@@ -631,7 +631,7 @@
631
631
  height: 14px;
632
632
  border-radius: 2px;
633
633
  background: white;
634
- border: 1px solid var(--ui-border-subtle);
634
+ border: 1px solid var(--ui-border-low);
635
635
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
636
636
  cursor: pointer;
637
637
  }
@@ -641,7 +641,7 @@
641
641
  height: 14px;
642
642
  border-radius: 2px;
643
643
  background: white;
644
- border: 1px solid var(--ui-border-subtle);
644
+ border: 1px solid var(--ui-border-low);
645
645
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
646
646
  cursor: pointer;
647
647
  }
@@ -661,7 +661,7 @@
661
661
  width: 2rem;
662
662
  flex-shrink: 0;
663
663
  border-radius: var(--ui-radius-sm);
664
- border: 1px solid var(--ui-border-subtle);
664
+ border: 1px solid var(--ui-border-low);
665
665
  }
666
666
 
667
667
  .global-color-sliders {
@@ -18,8 +18,8 @@
18
18
  seedShadowsFromDom, shadowTokenCss, computeShadowXY,
19
19
  SCALE_SHADOW_VARIABLES, defaultShadowOverride,
20
20
  type Scope,
21
- } from '../../lib/editorStore';
22
- import type { ShadowToken, ShadowOverrideFlags, EditorState } from '../../lib/editorTypes';
21
+ } from '../../core/store/editorStore';
22
+ import type { ShadowToken, ShadowOverrideFlags, EditorState } from '../../core/store/editorTypes';
23
23
 
24
24
  interface Props {
25
25
  copiedVar?: string | null;
@@ -799,16 +799,16 @@
799
799
  .section {
800
800
  display: flex;
801
801
  flex-direction: column;
802
- gap: var(--ui-space-16);
802
+ gap: var(--ui-space-24);
803
803
  }
804
804
 
805
805
  .section-title {
806
- font-size: var(--ui-font-size-lg);
806
+ font-size: var(--ui-font-size-2xl);
807
807
  font-weight: var(--ui-font-weight-semibold);
808
808
  color: var(--ui-text-primary);
809
809
  margin: 0;
810
810
  padding-bottom: var(--ui-space-8);
811
- border-bottom: 1px solid var(--ui-border-subtle);
811
+ border-bottom: 2px solid var(--ui-border-high);
812
812
  }
813
813
 
814
814
  .token-info {
@@ -890,7 +890,7 @@
890
890
  color: var(--ui-text-muted);
891
891
  cursor: pointer;
892
892
  padding: var(--ui-space-4) var(--ui-space-8);
893
- border: 1px solid var(--ui-border-subtle);
893
+ border: 1px solid var(--ui-border-low);
894
894
  border-radius: var(--ui-radius-sm);
895
895
  text-align: center;
896
896
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -898,7 +898,7 @@
898
898
 
899
899
  .reset-btn:hover {
900
900
  color: var(--ui-text-primary);
901
- border-color: var(--ui-border-medium);
901
+ border-color: var(--ui-border-high);
902
902
  }
903
903
 
904
904
  .shadow-box {
@@ -945,7 +945,7 @@
945
945
  text-align: right;
946
946
  flex-shrink: 0;
947
947
  background: var(--ui-surface-lowest);
948
- border: 1px solid var(--ui-border-subtle);
948
+ border: 1px solid var(--ui-border-low);
949
949
  border-radius: var(--ui-radius-sm);
950
950
  padding: var(--ui-space-2) var(--ui-space-4);
951
951
  -moz-appearance: textfield;
@@ -960,7 +960,7 @@
960
960
 
961
961
  .shadow-slider-input:focus {
962
962
  outline: none;
963
- border-color: var(--ui-border-medium);
963
+ border-color: var(--ui-border-high);
964
964
  }
965
965
 
966
966
  .shadow-slider-unit {
@@ -980,7 +980,7 @@
980
980
 
981
981
  .dial-ring {
982
982
  fill: none;
983
- stroke: var(--ui-border-subtle);
983
+ stroke: var(--ui-border-low);
984
984
  stroke-width: 1.5;
985
985
  }
986
986
 
@@ -996,7 +996,7 @@
996
996
  }
997
997
 
998
998
  .angle-dial:hover .dial-ring {
999
- stroke: var(--ui-border-medium);
999
+ stroke: var(--ui-border-high);
1000
1000
  }
1001
1001
 
1002
1002
  .angle-dial:hover .dial-handle {
@@ -1009,7 +1009,7 @@
1009
1009
  gap: var(--ui-space-4);
1010
1010
  margin-top: var(--ui-space-4);
1011
1011
  padding-top: var(--ui-space-8);
1012
- border-top: 1px solid var(--ui-border-faint);
1012
+ border-top: 1px solid var(--ui-border-low);
1013
1013
  }
1014
1014
 
1015
1015
  .shadow-css-output code {
@@ -1025,7 +1025,7 @@
1025
1025
  color: var(--ui-text-muted);
1026
1026
  cursor: pointer;
1027
1027
  padding: var(--ui-space-2) var(--ui-space-6);
1028
- border: 1px solid var(--ui-border-subtle);
1028
+ border: 1px solid var(--ui-border-low);
1029
1029
  border-radius: var(--ui-radius-sm);
1030
1030
  text-align: center;
1031
1031
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -1033,7 +1033,7 @@
1033
1033
 
1034
1034
  .shadow-copy-btn:hover {
1035
1035
  color: var(--ui-text-primary);
1036
- border-color: var(--ui-border-medium);
1036
+ border-color: var(--ui-border-high);
1037
1037
  }
1038
1038
 
1039
1039
  /* Global shadow editor */
@@ -1046,7 +1046,7 @@
1046
1046
  gap: var(--ui-space-6);
1047
1047
  padding: var(--ui-space-12);
1048
1048
  background: var(--ui-surface-lowest);
1049
- border: 1px solid var(--ui-border-subtle);
1049
+ border: 1px solid var(--ui-border-low);
1050
1050
  border-radius: var(--ui-radius-md);
1051
1051
  width: 18rem;
1052
1052
  }
@@ -1103,7 +1103,7 @@
1103
1103
  position: relative;
1104
1104
  height: 12px;
1105
1105
  border-radius: var(--ui-radius-sm);
1106
- border: 1px solid var(--ui-border-subtle);
1106
+ border: 1px solid var(--ui-border-low);
1107
1107
  }
1108
1108
 
1109
1109
  .slider-track input[type="range"] {
@@ -1125,7 +1125,7 @@
1125
1125
  height: 14px;
1126
1126
  border-radius: 2px;
1127
1127
  background: white;
1128
- border: 1px solid var(--ui-border-subtle);
1128
+ border: 1px solid var(--ui-border-low);
1129
1129
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
1130
1130
  cursor: pointer;
1131
1131
  }
@@ -1135,7 +1135,7 @@
1135
1135
  height: 14px;
1136
1136
  border-radius: 2px;
1137
1137
  background: white;
1138
- border: 1px solid var(--ui-border-subtle);
1138
+ border: 1px solid var(--ui-border-low);
1139
1139
  box-shadow: 0 1px 3px rgba(0,0,0,0.4);
1140
1140
  cursor: pointer;
1141
1141
  }
@@ -1155,7 +1155,7 @@
1155
1155
  width: 2rem;
1156
1156
  flex-shrink: 0;
1157
1157
  border-radius: var(--ui-radius-sm);
1158
- border: 1px solid var(--ui-border-subtle);
1158
+ border: 1px solid var(--ui-border-low);
1159
1159
  }
1160
1160
 
1161
1161
  .global-color-sliders {
@@ -1172,7 +1172,7 @@
1172
1172
  color: var(--ui-text-muted);
1173
1173
  cursor: pointer;
1174
1174
  padding: var(--ui-space-4) var(--ui-space-8);
1175
- border: 1px solid var(--ui-border-subtle);
1175
+ border: 1px solid var(--ui-border-low);
1176
1176
  border-radius: var(--ui-radius-md);
1177
1177
  background: var(--ui-surface-low);
1178
1178
  transition: color var(--ui-transition-fast), border-color var(--ui-transition-fast);
@@ -1180,7 +1180,7 @@
1180
1180
 
1181
1181
  .bg-picker-btn:hover {
1182
1182
  color: var(--ui-text-primary);
1183
- border-color: var(--ui-border-medium);
1183
+ border-color: var(--ui-border-high);
1184
1184
  }
1185
1185
 
1186
1186
  .bg-picker-menu {
@@ -1192,7 +1192,7 @@
1192
1192
  max-height: 24rem;
1193
1193
  overflow-y: auto;
1194
1194
  background: var(--ui-surface-low);
1195
- border: 1px solid var(--ui-border-subtle);
1195
+ border: 1px solid var(--ui-border-low);
1196
1196
  border-radius: var(--ui-radius-md);
1197
1197
  padding: var(--ui-space-4);
1198
1198
  display: flex;
@@ -1250,7 +1250,7 @@
1250
1250
  width: 1rem;
1251
1251
  height: 1rem;
1252
1252
  border-radius: var(--ui-radius-sm);
1253
- border: 1px solid var(--ui-border-subtle);
1253
+ border: 1px solid var(--ui-border-low);
1254
1254
  flex-shrink: 0;
1255
1255
  }
1256
1256
  </style>
@@ -12,7 +12,7 @@
12
12
  * Values are read live via getComputedStyle (passed in by the parent through
13
13
  * `tokens`), so tokens.css remains the single source of truth.
14
14
  */
15
- import { editorState } from '../../lib/editorStore';
15
+ import { editorState } from '../../core/store/editorStore';
16
16
 
17
17
  interface TokenItem {
18
18
  variable: string;
@@ -263,7 +263,7 @@
263
263
  width: 3.5rem;
264
264
  height: 3.5rem;
265
265
  background: none;
266
- border: 2px solid var(--ui-border-medium);
266
+ border: 2px solid var(--ui-border-high);
267
267
  }
268
268
 
269
269
  /* Font sizes / icon sizes */
@@ -339,7 +339,7 @@
339
339
  align-items: baseline;
340
340
  gap: var(--ui-space-12);
341
341
  padding: var(--ui-space-4) 0;
342
- border-bottom: 1px solid var(--ui-border-faint);
342
+ border-bottom: 1px solid var(--ui-border-low);
343
343
  }
344
344
 
345
345
  .token-row:last-child {
@@ -21,14 +21,6 @@
21
21
  variant?: BadgeVariant;
22
22
  size?: 'default' | 'small';
23
23
  icon?: string | undefined;
24
- /** When true, badge is absolutely positioned. Requires the parent to be position: relative. */
25
- floating?: boolean;
26
- /** Corner of the positioned parent to attach to when floating. */
27
- anchor?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
28
- /** CSS length to offset from the anchor edges. Defaults to --space-12 (or --space-8 when size='small'). */
29
- offset?: string | undefined;
30
- /** When true, badge sits flush in the anchor corner: zero offset and squared corners. */
31
- flush?: boolean;
32
24
  /** Custom icon content. Falls back to `icon` prop's font-icon class. Renamed from `slot="icon"` in 0.5.0. */
33
25
  iconSlot?: Snippet;
34
26
  children?: Snippet;
@@ -38,10 +30,6 @@
38
30
  variant = 'info',
39
31
  size = 'default',
40
32
  icon = undefined,
41
- floating = false,
42
- anchor = 'bottom-right',
43
- offset = undefined,
44
- flush = false,
45
33
  iconSlot,
46
34
  children,
47
35
  }: Props = $props();
@@ -50,10 +38,6 @@
50
38
  <span
51
39
  class="badge badge-{variant}"
52
40
  class:badge-small={size === 'small'}
53
- class:badge-floating={floating}
54
- class:badge-flush={flush}
55
- data-anchor={floating ? anchor : undefined}
56
- style={floating && offset && !flush ? `--badge-offset: ${offset};` : undefined}
57
41
  >
58
42
  {#if icon}
59
43
  <span class="icon"><i class={icon}></i></span>
@@ -228,7 +212,6 @@
228
212
  }
229
213
 
230
214
  .badge {
231
- --badge-offset: var(--space-12);
232
215
  display: inline-flex;
233
216
  align-items: center;
234
217
  gap: var(--space-6);
@@ -249,22 +232,9 @@
249
232
  }
250
233
 
251
234
  .badge-small {
252
- --badge-offset: var(--space-8);
253
235
  gap: var(--space-4);
254
236
  }
255
237
 
256
- .badge-floating {
257
- position: absolute;
258
- /* Floating badges are decorative overlays over other content — let clicks
259
- pass through to whatever owns the underlying surface (links, buttons). */
260
- pointer-events: none;
261
- }
262
-
263
- .badge-floating[data-anchor='top-left'] { top: var(--badge-offset); left: var(--badge-offset); }
264
- .badge-floating[data-anchor='top-right'] { top: var(--badge-offset); right: var(--badge-offset); }
265
- .badge-floating[data-anchor='bottom-left'] { bottom: var(--badge-offset); left: var(--badge-offset); }
266
- .badge-floating[data-anchor='bottom-right'] { bottom: var(--badge-offset); right: var(--badge-offset); }
267
-
268
238
  @each $v in $variants {
269
239
  .badge-#{$v} {
270
240
  --badge-icon-size: var(--badge-#{$v}-icon-size);
@@ -281,10 +251,4 @@
281
251
  box-shadow: var(--badge-#{$v}-shadow);
282
252
  }
283
253
  }
284
-
285
- /* Flush wins over per-variant radius via source order — declared after @each. */
286
- .badge-flush {
287
- --badge-offset: 0;
288
- border-radius: 0;
289
- }
290
254
  </style>
@@ -140,6 +140,7 @@
140
140
  --button-outline-hover-border-width: var(--border-width-1);
141
141
  --button-outline-hover-radius: var(--radius-md);
142
142
  --button-outline-hover-padding: var(--space-8);
143
+ --button-outline-active-surface: var(--hover);
143
144
  --button-outline-disabled-surface: var(--color-transparent);
144
145
  --button-outline-disabled-text: var(--text-tertiary);
145
146
  --button-outline-disabled-border: var(--border-neutral-faint);
@@ -226,7 +227,6 @@
226
227
 
227
228
  .button {
228
229
  cursor: pointer;
229
- letter-spacing: 0.0125rem;
230
230
  display: inline-flex;
231
231
  align-items: center;
232
232
  justify-content: center;
@@ -385,7 +385,7 @@
385
385
  }
386
386
 
387
387
  &:active:not(:disabled) {
388
- background: rgba(255, 255, 255, 0.08);
388
+ background: var(--button-outline-active-surface);
389
389
  }
390
390
 
391
391
  &:disabled {
@@ -39,9 +39,10 @@
39
39
  </div>
40
40
  </div>
41
41
 
42
- <style>
42
+ <style lang="scss">
43
+ @use '../styles/padding' as *;
44
+
43
45
  :global(:root) {
44
- /* Default */
45
46
  --card-default-surface: var(--surface-neutral-high);
46
47
  --card-default-border: var(--border-neutral);
47
48
  --card-default-border-width: var(--border-width-1);
@@ -66,30 +67,8 @@
66
67
  --card-default-body-font-weight: var(--font-weight-normal);
67
68
  --card-default-body-line-height: var(--line-height-md);
68
69
 
69
- /* Hover */
70
- --card-hover-surface: var(--surface-neutral-high);
71
70
  --card-hover-border: var(--border-neutral-strong);
72
- --card-hover-border-width: var(--border-width-1);
73
- --card-hover-radius: var(--radius-lg);
74
- --card-hover-header-padding: var(--space-16);
75
- --card-hover-body-padding: var(--space-16);
76
71
  --card-hover-shadow: var(--shadow-md);
77
- --card-hover-blur: var(--blur-none);
78
- --card-hover-header-surface: var(--color-transparent);
79
-
80
- --card-hover-title: var(--text-primary);
81
- --card-hover-title-font-family: var(--font-sans);
82
- --card-hover-title-font-size: var(--font-size-lg);
83
- --card-hover-title-font-weight: var(--font-weight-normal);
84
- --card-hover-title-line-height: var(--line-height-sm);
85
-
86
- --card-hover-icon-size: var(--icon-size-lg);
87
-
88
- --card-hover-body: var(--text-secondary);
89
- --card-hover-body-font-family: var(--font-sans);
90
- --card-hover-body-font-size: var(--font-size-md);
91
- --card-hover-body-font-weight: var(--font-weight-normal);
92
- --card-hover-body-line-height: var(--line-height-md);
93
72
  }
94
73
 
95
74
  .card {
@@ -98,7 +77,7 @@
98
77
  border-radius: var(--card-default-radius);
99
78
  box-shadow: var(--card-default-shadow);
100
79
  backdrop-filter: blur(var(--card-default-blur));
101
- transition: all var(--duration-150);
80
+ transition: border-color var(--duration-150), box-shadow var(--duration-150);
102
81
  display: flex;
103
82
  flex-direction: column;
104
83
  overflow: hidden;
@@ -106,27 +85,18 @@
106
85
 
107
86
  .card:not(.no-hover):hover,
108
87
  .card.force-hover {
109
- background: var(--card-hover-surface);
110
- border: var(--card-hover-border-width) solid var(--card-hover-border);
111
- border-radius: var(--card-hover-radius);
88
+ border-color: var(--card-hover-border);
112
89
  box-shadow: var(--card-hover-shadow);
113
- backdrop-filter: blur(var(--card-hover-blur));
114
90
  }
115
91
 
116
92
  .card-header {
117
93
  display: flex;
118
94
  align-items: center;
119
95
  gap: var(--space-8);
120
- padding: var(--card-default-header-padding);
96
+ @include themed-padding(--card-default-header-padding);
121
97
  background: var(--card-default-header-surface);
122
98
  }
123
99
 
124
- .card:not(.no-hover):hover .card-header,
125
- .card.force-hover .card-header {
126
- padding: var(--card-hover-header-padding);
127
- background: var(--card-hover-header-surface);
128
- }
129
-
130
100
  .card.compact .card-header,
131
101
  .card.compact .card-body {
132
102
  padding: var(--space-8) var(--space-12);
@@ -137,12 +107,6 @@
137
107
  color: var(--card-color, var(--card-default-title));
138
108
  }
139
109
 
140
- .card:not(.no-hover):hover .card-icon,
141
- .card.force-hover .card-icon {
142
- font-size: var(--card-hover-icon-size);
143
- color: var(--card-color, var(--card-hover-title));
144
- }
145
-
146
110
  .card.compact .card-icon {
147
111
  font-size: var(--icon-size-md);
148
112
  }
@@ -155,15 +119,6 @@
155
119
  line-height: var(--card-default-title-line-height);
156
120
  }
157
121
 
158
- .card:not(.no-hover):hover .card-title,
159
- .card.force-hover .card-title {
160
- color: var(--card-hover-title);
161
- font-family: var(--card-hover-title-font-family);
162
- font-size: var(--card-hover-title-font-size);
163
- font-weight: var(--card-hover-title-font-weight);
164
- line-height: var(--card-hover-title-line-height);
165
- }
166
-
167
122
  .card.compact .card-title {
168
123
  font-size: var(--font-size-md);
169
124
  }
@@ -174,17 +129,36 @@
174
129
  font-size: var(--card-default-body-font-size);
175
130
  font-weight: var(--card-default-body-font-weight);
176
131
  line-height: var(--card-default-body-line-height);
177
- padding: var(--card-default-body-padding);
132
+ @include themed-padding(--card-default-body-padding);
133
+ }
134
+
135
+ /* Slot content inherits the card's body typography so consumer-side global
136
+ element rules (e.g. site.css `p { font-family: serif }`) don't override
137
+ the card-body-font-family alias. */
138
+ .card-body :global(p),
139
+ .card-body :global(ul),
140
+ .card-body :global(ol),
141
+ .card-body :global(li) {
142
+ font: inherit;
143
+ color: inherit;
144
+ }
145
+
146
+ .card-body :global(p) {
147
+ margin: 0 0 var(--space-12);
148
+ }
149
+
150
+ .card-body :global(p:last-child) {
151
+ margin-bottom: 0;
152
+ }
153
+
154
+ .card-body :global(ul),
155
+ .card-body :global(ol) {
156
+ margin: var(--space-12) 0;
157
+ padding-left: var(--space-24);
178
158
  }
179
159
 
180
- .card:not(.no-hover):hover .card-body,
181
- .card.force-hover .card-body {
182
- color: var(--card-hover-body);
183
- font-family: var(--card-hover-body-font-family);
184
- font-size: var(--card-hover-body-font-size);
185
- font-weight: var(--card-hover-body-font-weight);
186
- line-height: var(--card-hover-body-line-height);
187
- padding: var(--card-hover-body-padding);
160
+ .card-body :global(li) {
161
+ margin-bottom: var(--space-4);
188
162
  }
189
163
 
190
164
  .card.compact .card-body {
@@ -147,7 +147,6 @@
147
147
  --collapsiblesection-divider-expanded-padding: var(--space-4);
148
148
 
149
149
  /* Container — frame (always-on outer chrome) */
150
- --collapsiblesection-container-frame-surface: var(--surface-canvas);
151
150
  --collapsiblesection-container-frame-border: var(--color-transparent);
152
151
  --collapsiblesection-container-frame-border-width: var(--border-width-3);
153
152
  --collapsiblesection-container-frame-radius: var(--radius-none);
@@ -270,7 +269,6 @@
270
269
  }
271
270
 
272
271
  .es-root.variant-container {
273
- background: var(--collapsiblesection-container-frame-surface);
274
272
  border: var(--collapsiblesection-container-frame-border-width) solid var(--collapsiblesection-container-frame-border);
275
273
  border-radius: var(--collapsiblesection-container-frame-radius);
276
274
  overflow: hidden;
@@ -286,4 +284,29 @@
286
284
  @include themed-padding(--collapsiblesection-container-expanded-padding, $h: 2);
287
285
  }
288
286
  }
287
+
288
+ .section-content {
289
+ color: var(--text-secondary);
290
+ font-size: var(--font-size-md);
291
+ line-height: var(--line-height-md);
292
+ }
293
+
294
+ /* Slot content inherits the section's body typography so consumer-side
295
+ global element rules (e.g. site.css `p { font-family: serif }`) don't
296
+ override the collapsible's intended type styling. */
297
+ .section-content :global(p),
298
+ .section-content :global(ul),
299
+ .section-content :global(ol),
300
+ .section-content :global(li) {
301
+ font: inherit;
302
+ color: inherit;
303
+ }
304
+
305
+ .section-content :global(p) {
306
+ margin: 0 0 var(--space-12);
307
+ }
308
+
309
+ .section-content :global(p:last-child) {
310
+ margin-bottom: 0;
311
+ }
289
312
  </style>