@motion-proto/live-tokens 0.67.1 → 0.69.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 (138) hide show
  1. package/.claude/skills/live-tokens-build-page/SKILL.md +16 -5
  2. package/.claude/skills/live-tokens-create-component/SKILL.md +43 -8
  3. package/.claude/skills/live-tokens-create-component/references/token-naming.md +30 -1
  4. package/.claude/skills/live-tokens-fix-findings/SKILL.md +131 -0
  5. package/.claude/skills/live-tokens-pick-component/SKILL.md +2 -1
  6. package/CHANGELOG.md +239 -0
  7. package/README.md +11 -4
  8. package/bin/check-component.mjs +367 -63
  9. package/bin/check-page.mjs +409 -0
  10. package/bin/cli.mjs +57 -8
  11. package/bin/generate-theme.mjs +5 -4
  12. package/bin/lib/cssValues.mjs +50 -0
  13. package/bin/lib/findings.mjs +106 -0
  14. package/bin/lib/tokenVocabulary.mjs +213 -0
  15. package/dist-plugin/adjust/index.cjs +174 -23
  16. package/dist-plugin/adjust/index.d.cts +1 -1
  17. package/dist-plugin/adjust/index.d.ts +1 -1
  18. package/dist-plugin/adjust/index.js +68 -23
  19. package/dist-plugin/{chunk-J2JT4UEA.js → chunk-2YNERPXY.js} +26 -26
  20. package/dist-plugin/{chunk-NE6N66EE.js → chunk-GPIBU44G.js} +107 -1
  21. package/dist-plugin/{chunk-ZHPX7ZYQ.js → chunk-RFVYPNRO.js} +39 -1
  22. package/dist-plugin/{dataPaths-DZUzVv8H.d.ts → dataPaths-bJTCEO4H.d.cts} +1 -1
  23. package/dist-plugin/{dataPaths-DZUzVv8H.d.cts → dataPaths-bJTCEO4H.d.ts} +1 -1
  24. package/dist-plugin/fontPairing/index.d.cts +1 -1
  25. package/dist-plugin/fontPairing/index.d.ts +1 -1
  26. package/dist-plugin/generateColorsAndType/index.cjs +107 -1
  27. package/dist-plugin/generateColorsAndType/index.d.cts +1 -1
  28. package/dist-plugin/generateColorsAndType/index.d.ts +1 -1
  29. package/dist-plugin/generateColorsAndType/index.js +1 -1
  30. package/dist-plugin/index.cjs +173 -29
  31. package/dist-plugin/index.d.cts +1 -1
  32. package/dist-plugin/index.d.ts +1 -1
  33. package/dist-plugin/index.js +7 -7
  34. package/dist-plugin/migrateData/index.cjs +132 -26
  35. package/dist-plugin/migrateData/index.d.cts +1 -1
  36. package/dist-plugin/migrateData/index.d.ts +1 -1
  37. package/dist-plugin/migrateData/index.js +2 -2
  38. package/dist-plugin/tokensCssMigrations/index.cjs +39 -1
  39. package/dist-plugin/tokensCssMigrations/index.d.cts +1 -1
  40. package/dist-plugin/tokensCssMigrations/index.d.ts +1 -1
  41. package/dist-plugin/tokensCssMigrations/index.js +1 -1
  42. package/package.json +6 -5
  43. package/src/app/site.css +4 -4
  44. package/src/editor/bootstrap.ts +6 -6
  45. package/src/editor/component-editor/ButtonEditor.svelte +71 -4
  46. package/src/editor/component-editor/CardEditor.svelte +6 -6
  47. package/src/editor/component-editor/DialogEditor.svelte +3 -3
  48. package/src/editor/component-editor/IconButtonEditor.svelte +68 -3
  49. package/src/editor/component-editor/ImageEditor.svelte +8 -8
  50. package/src/editor/component-editor/ImageLightboxEditor.svelte +13 -2
  51. package/src/editor/component-editor/MenuSelectEditor.svelte +63 -3
  52. package/src/editor/component-editor/SegmentedControlEditor.svelte +63 -3
  53. package/src/editor/component-editor/SideNavigationEditor.svelte +67 -3
  54. package/src/editor/component-editor/SliderEditor.svelte +186 -0
  55. package/src/editor/component-editor/TabBarEditor.svelte +63 -3
  56. package/src/editor/component-editor/registry.ts +10 -0
  57. package/src/editor/component-editor/scaffolding/ComponentFileManager.svelte +4 -4
  58. package/src/editor/core/components/aliasKinds.ts +51 -28
  59. package/src/editor/core/fonts/fontLoader.ts +2 -2
  60. package/src/editor/core/preview/{lookPreview.ts → themePreview.ts} +27 -27
  61. package/src/editor/core/productionPulse.ts +3 -3
  62. package/src/editor/core/sketch/index.ts +52 -44
  63. package/src/editor/core/sketch/maskField.ts +9 -9
  64. package/src/editor/core/sketch/sketchLayer.ts +25 -9
  65. package/src/editor/core/sketch/sketchRegistry.ts +34 -34
  66. package/src/editor/core/sketch/sketchStore.ts +98 -83
  67. package/src/editor/core/sketch/sketchStyleService.ts +4 -4
  68. package/src/editor/core/sketch/sketchStyles.ts +28 -28
  69. package/src/editor/core/store/editorPersistence.ts +44 -1
  70. package/src/editor/core/store/editorRenderer.ts +2 -2
  71. package/src/editor/core/store/editorStore.ts +18 -18
  72. package/src/editor/core/store/editorTypes.ts +7 -6
  73. package/src/editor/core/themes/colorsAndTypeService.ts +1 -1
  74. package/src/editor/core/themes/loadRows.ts +8 -8
  75. package/src/editor/core/themes/migrations/2026-09-01-gate-suffix-enabled.ts +31 -0
  76. package/src/editor/core/themes/migrations/2026-09-01-scrim-rename.ts +52 -0
  77. package/src/editor/core/themes/migrations/2026-09-01-tabbar-active-tint.ts +27 -0
  78. package/src/editor/core/themes/migrations/2026-09-01-tint-rename.ts +42 -0
  79. package/src/editor/core/themes/migrations/index.ts +16 -0
  80. package/src/editor/core/themes/slices/domainVars.ts +2 -2
  81. package/src/editor/core/themes/slices/washes.ts +107 -0
  82. package/src/editor/core/themes/themeDocumentSync.ts +2 -2
  83. package/src/editor/core/themes/themeInit.ts +2 -2
  84. package/src/editor/core/themes/themeService.ts +17 -17
  85. package/src/editor/core/themes/{lookSummary.ts → themeSummary.ts} +9 -9
  86. package/src/editor/core/themes/themeTypes.ts +10 -6
  87. package/src/editor/docs/content/editing-tokens.md +5 -3
  88. package/src/editor/docs/content/getting-started.md +1 -1
  89. package/src/editor/docs/content/sketch-mode.md +22 -17
  90. package/src/editor/docs/content/themes-workflow.md +11 -11
  91. package/src/editor/docs/content/where-themes-live.md +6 -6
  92. package/src/editor/docs/content.generated.ts +5 -5
  93. package/src/editor/index.ts +2 -2
  94. package/src/editor/pages/EditorShell.svelte +1 -1
  95. package/src/editor/ui/SurfacesTab.svelte +3 -3
  96. package/src/editor/ui/ThemePanel.svelte +52 -52
  97. package/src/editor/ui/UITokenSelector.svelte +1 -0
  98. package/src/editor/ui/VariablesTab.svelte +2 -2
  99. package/src/editor/ui/sections/{OverlaysSection.svelte → WashesSection.svelte} +44 -43
  100. package/src/editor/ui/sketch/SketchPreview.svelte +2 -2
  101. package/src/editor/ui/sketch/SketchTab.svelte +64 -38
  102. package/src/live-tokens/data/colors-and-type/autumn.json +6 -6
  103. package/src/live-tokens/data/colors-and-type/default.json +6 -6
  104. package/src/live-tokens/data/colors-and-type/halloween.json +6 -6
  105. package/src/live-tokens/data/colors-and-type/midnight-study.json +6 -6
  106. package/src/live-tokens/data/colors-and-type/ocean.json +6 -6
  107. package/src/live-tokens/data/colors-and-type/royal-velvet.json +6 -6
  108. package/src/live-tokens/data/colors-and-type/sketchy.json +6 -6
  109. package/src/live-tokens/data/colors-and-type/spring-meadow.json +6 -6
  110. package/src/live-tokens/data/colors-and-type/sunset.json +6 -6
  111. package/src/live-tokens/data/sketch-styles/dry.json +5 -5
  112. package/src/live-tokens/data/sketch-styles/hatched.json +9 -9
  113. package/src/live-tokens/data/themes/autumn.json +82 -14
  114. package/src/live-tokens/data/themes/halloween.json +82 -14
  115. package/src/live-tokens/data/themes/midnight-study.json +82 -14
  116. package/src/live-tokens/data/themes/ocean.json +82 -14
  117. package/src/live-tokens/data/themes/royal-velvet.json +82 -14
  118. package/src/live-tokens/data/themes/sketchy.json +82 -14
  119. package/src/live-tokens/data/themes/spring-meadow.json +82 -14
  120. package/src/live-tokens/data/themes/sunset.json +82 -14
  121. package/src/live-tokens/data/tokens.generated.css +6 -6
  122. package/src/system/backdrop/backdrop.ts +1 -1
  123. package/src/system/components/Button.svelte +28 -10
  124. package/src/system/components/Card.svelte +6 -6
  125. package/src/system/components/Dialog.svelte +3 -3
  126. package/src/system/components/IconButton.svelte +23 -7
  127. package/src/system/components/Image.svelte +6 -6
  128. package/src/system/components/MenuSelect.svelte +17 -1
  129. package/src/system/components/SectionDivider.svelte +1 -1
  130. package/src/system/components/SegmentedControl.svelte +20 -2
  131. package/src/system/components/SideNavigation.svelte +22 -2
  132. package/src/system/components/Slider.svelte +348 -0
  133. package/src/system/components/TabBar.svelte +20 -2
  134. package/src/system/styles/CONVENTIONS.md +2 -2
  135. package/src/system/styles/tokens.css +12 -4
  136. package/template/package.json +3 -2
  137. package/template/src/pages/Home.svelte +1 -1
  138. package/src/editor/core/themes/slices/overlays.ts +0 -101
@@ -2,7 +2,7 @@
2
2
  "name": "Spring Meadow",
3
3
  "createdAt": "2026-08-13T10:21:46.867Z",
4
4
  "updatedAt": "2026-08-19T22:39:32.785Z",
5
- "schemaVersion": 4,
5
+ "schemaVersion": 5,
6
6
  "colorsAndType": {
7
7
  "name": "Spring Meadow",
8
8
  "createdAt": "2026-08-12T20:13:46.433Z",
@@ -2250,12 +2250,12 @@
2250
2250
  "--columns-max-width": "1440px",
2251
2251
  "--columns-gutter": "32px",
2252
2252
  "--columns-margin": "0px",
2253
- "--overlay-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2254
- "--overlay": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2255
- "--overlay-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2256
- "--hover-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2257
- "--hover": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2258
- "--hover-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2253
+ "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2254
+ "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2255
+ "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2256
+ "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2257
+ "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2258
+ "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2259
2259
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.2)",
2260
2260
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.2)",
2261
2261
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.2)",
@@ -2641,6 +2641,9 @@
2641
2641
  "createdAt": "2026-05-10T19:28:06.893Z",
2642
2642
  "updatedAt": "2026-08-19T22:39:32.785Z",
2643
2643
  "aliases": {
2644
+ "--button-hover-tint": "--tint",
2645
+ "--button-hover-tint-enabled": "--color-transparent",
2646
+ "--button-shimmer": "--shimmer-on",
2644
2647
  "--button-primary-surface": "--surface-brand",
2645
2648
  "--button-primary-text": "--text-primary",
2646
2649
  "--button-primary-text-font-family": "--font-sans",
@@ -2688,7 +2691,7 @@
2688
2691
  "--button-outline-hover-surface": "--surface-neutral-lower",
2689
2692
  "--button-outline-hover-text": "--text-primary",
2690
2693
  "--button-outline-hover-border": "--border-neutral-strong",
2691
- "--button-outline-active-surface": "--hover",
2694
+ "--button-outline-active-surface": "--tint",
2692
2695
  "--button-outline-disabled-surface": "--color-transparent",
2693
2696
  "--button-outline-disabled-text": "--text-tertiary",
2694
2697
  "--button-outline-disabled-border": "--border-neutral-faint",
@@ -2860,8 +2863,8 @@
2860
2863
  "--card-default-body-line-height": "--line-height-normal",
2861
2864
  "--card-hover-border": "--border-neutral-strong",
2862
2865
  "--card-hover-shadow": "--shadow-md",
2863
- "--card-hover-border-active": "--card-default-border",
2864
- "--card-hover-shadow-active": "--card-default-shadow"
2866
+ "--card-hover-border-enabled": "--card-default-border",
2867
+ "--card-hover-shadow-enabled": "--card-default-shadow"
2865
2868
  }
2866
2869
  },
2867
2870
  "codesnippet": {
@@ -3015,7 +3018,7 @@
3015
3018
  "createdAt": "2026-05-10T20:05:24.719Z",
3016
3019
  "updatedAt": "2026-08-19T22:39:32.785Z",
3017
3020
  "aliases": {
3018
- "--dialog-overlay-surface": "--overlay-high",
3021
+ "--dialog-scrim-surface": "--scrim-high",
3019
3022
  "--dialog-surface": "--surface-neutral-lowest",
3020
3023
  "--dialog-border": "--border-neutral-strong",
3021
3024
  "--dialog-border-width": "--border-width-2",
@@ -3050,6 +3053,8 @@
3050
3053
  "createdAt": "2026-06-14T00:00:00.000Z",
3051
3054
  "updatedAt": "2026-08-19T22:39:32.785Z",
3052
3055
  "aliases": {
3056
+ "--iconbutton-hover-tint": "--tint",
3057
+ "--iconbutton-hover-tint-enabled": "--color-transparent",
3053
3058
  "--iconbutton-primary-surface": "--surface-brand",
3054
3059
  "--iconbutton-primary-icon": "--text-primary",
3055
3060
  "--iconbutton-primary-border": "--border-brand",
@@ -3086,7 +3091,7 @@
3086
3091
  "--iconbutton-outline-hover-surface": "--surface-neutral-lower",
3087
3092
  "--iconbutton-outline-hover-icon": "--text-primary",
3088
3093
  "--iconbutton-outline-hover-border": "--border-neutral-strong",
3089
- "--iconbutton-outline-active-surface": "--hover",
3094
+ "--iconbutton-outline-active-surface": "--tint",
3090
3095
  "--iconbutton-outline-disabled-surface": "--color-transparent",
3091
3096
  "--iconbutton-outline-disabled-icon": "--text-tertiary",
3092
3097
  "--iconbutton-outline-disabled-border": "--border-neutral-faint",
@@ -3266,6 +3271,8 @@
3266
3271
  "createdAt": "2026-05-16T00:00:00.000Z",
3267
3272
  "updatedAt": "2026-08-19T22:39:32.785Z",
3268
3273
  "aliases": {
3274
+ "--menuselect-hover-tint": "--tint",
3275
+ "--menuselect-hover-tint-enabled": "--color-transparent",
3269
3276
  "--menuselect-menu-surface": "color-mix(in srgb, var(--surface-neutral-lower) 95%, transparent)",
3270
3277
  "--menuselect-menu-border": "--border-neutral-medium",
3271
3278
  "--menuselect-menu-border-width": "--border-width-1",
@@ -3584,6 +3591,8 @@
3584
3591
  "createdAt": "2026-04-28T21:13:17.669Z",
3585
3592
  "updatedAt": "2026-08-19T22:39:32.785Z",
3586
3593
  "aliases": {
3594
+ "--segmentedcontrol-hover-tint": "--tint",
3595
+ "--segmentedcontrol-hover-tint-enabled": "--color-transparent",
3587
3596
  "--segmentedcontrol-bar-surface": "color-mix(in srgb, var(--surface-neutral-lowest) 75%, transparent)",
3588
3597
  "--segmentedcontrol-bar-border": "--border-neutral",
3589
3598
  "--segmentedcontrol-bar-border-width": "--border-width-1",
@@ -3644,6 +3653,8 @@
3644
3653
  "createdAt": "2026-05-25T19:34:09.771Z",
3645
3654
  "updatedAt": "2026-08-19T22:39:32.785Z",
3646
3655
  "aliases": {
3656
+ "--sidenavigation-hover-tint": "--tint",
3657
+ "--sidenavigation-hover-tint-enabled": "--color-transparent",
3647
3658
  "--sidenavigation-panel-surface": "--surface-canvas-lower",
3648
3659
  "--sidenavigation-panel-border": "--border-canvas-faint",
3649
3660
  "--sidenavigation-panel-border-width": "--border-width-1",
@@ -3804,6 +3815,8 @@
3804
3815
  "createdAt": "2026-05-12T01:57:26.390Z",
3805
3816
  "updatedAt": "2026-08-19T22:39:32.785Z",
3806
3817
  "aliases": {
3818
+ "--tabbar-hover-tint": "--tint",
3819
+ "--tabbar-hover-tint-enabled": "--color-transparent",
3807
3820
  "--tabbar-bar-divider": "--border-neutral-subtle",
3808
3821
  "--tabbar-bar-divider-thickness": "--border-width-1",
3809
3822
  "--tabbar-bar-top-margin": "--space-4",
@@ -3840,7 +3853,7 @@
3840
3853
  "--tabbar-hover-indicator-border-width": "--border-width-2",
3841
3854
  "--tabbar-active-text": "--text-primary",
3842
3855
  "--tabbar-active-border": "--color-brand-500",
3843
- "--tabbar-active-surface": "--overlay-low",
3856
+ "--tabbar-active-surface": "--tint-low",
3844
3857
  "--tabbar-active-text-font-family": "--font-sans",
3845
3858
  "--tabbar-active-text-font-size": "--font-size-md",
3846
3859
  "--tabbar-active-text-font-weight": "--font-weight-light",
@@ -3952,7 +3965,62 @@
3952
3965
  "--tooltip-padding": "--space-10",
3953
3966
  "--tooltip-shadow": "--shadow-md"
3954
3967
  }
3968
+ },
3969
+ "slider": {
3970
+ "name": "spring-meadow",
3971
+ "component": "slider",
3972
+ "createdAt": "2026-09-02T10:55:50.831Z",
3973
+ "updatedAt": "2026-09-02T10:55:50.831Z",
3974
+ "aliases": {
3975
+ "--slider-single-track-surface": "--surface-neutral-lowest",
3976
+ "--slider-single-track-border": "--border-neutral-subtle",
3977
+ "--slider-single-track-border-width": "--border-width-1",
3978
+ "--slider-single-track-height": "--space-8",
3979
+ "--slider-single-track-radius": "--radius-full",
3980
+ "--slider-single-fill": "--surface-brand-high",
3981
+ "--slider-single-thumb-surface": "--surface-neutral-highest",
3982
+ "--slider-single-thumb-border": "--border-brand",
3983
+ "--slider-single-thumb-border-width": "--border-width-2",
3984
+ "--slider-single-thumb-size": "--font-size-lg",
3985
+ "--slider-single-thumb-radius": "--radius-full",
3986
+ "--slider-single-thumb-shadow": "--shadow-sm",
3987
+ "--slider-single-hover-thumb-surface": "--surface-brand-high",
3988
+ "--slider-single-hover-thumb-border": "--border-brand-strong",
3989
+ "--slider-single-disabled-track-surface": "--surface-neutral-lower",
3990
+ "--slider-single-disabled-fill": "--surface-neutral",
3991
+ "--slider-single-disabled-thumb-surface": "--surface-neutral-lower",
3992
+ "--slider-single-disabled-thumb-border": "--border-neutral",
3993
+ "--slider-range-track-surface": "--surface-neutral-lowest",
3994
+ "--slider-range-track-border": "--border-neutral-subtle",
3995
+ "--slider-range-track-border-width": "--border-width-1",
3996
+ "--slider-range-track-height": "--space-8",
3997
+ "--slider-range-track-radius": "--radius-full",
3998
+ "--slider-range-fill": "--surface-brand-high",
3999
+ "--slider-range-thumb-surface": "--surface-neutral-highest",
4000
+ "--slider-range-thumb-border": "--border-brand",
4001
+ "--slider-range-thumb-border-width": "--border-width-2",
4002
+ "--slider-range-thumb-size": "--font-size-lg",
4003
+ "--slider-range-thumb-radius": "--radius-full",
4004
+ "--slider-range-thumb-shadow": "--shadow-sm",
4005
+ "--slider-range-hover-thumb-surface": "--surface-brand-high",
4006
+ "--slider-range-hover-thumb-border": "--border-brand-strong",
4007
+ "--slider-range-disabled-track-surface": "--surface-neutral-lower",
4008
+ "--slider-range-disabled-fill": "--surface-neutral",
4009
+ "--slider-range-disabled-thumb-surface": "--surface-neutral-lower",
4010
+ "--slider-range-disabled-thumb-border": "--border-neutral",
4011
+ "--slider-label-gap": "--space-6",
4012
+ "--slider-label": "--text-secondary",
4013
+ "--slider-label-font-family": "--font-sans",
4014
+ "--slider-label-font-size": "--font-size-md",
4015
+ "--slider-label-font-weight": "--font-weight-normal",
4016
+ "--slider-label-line-height": "--line-height-normal",
4017
+ "--slider-value": "--text-tertiary",
4018
+ "--slider-value-font-family": "--font-mono",
4019
+ "--slider-value-font-size": "--font-size-md",
4020
+ "--slider-value-font-weight": "--font-weight-normal",
4021
+ "--slider-value-line-height": "--line-height-normal"
4022
+ }
3955
4023
  }
3956
4024
  },
3957
- "componentSchemaVersion": 21
4025
+ "componentSchemaVersion": 25
3958
4026
  }
@@ -2,7 +2,7 @@
2
2
  "name": "Sunset",
3
3
  "createdAt": "2026-08-13T10:21:46.867Z",
4
4
  "updatedAt": "2026-08-19T22:39:32.785Z",
5
- "schemaVersion": 4,
5
+ "schemaVersion": 5,
6
6
  "colorsAndType": {
7
7
  "name": "Sunset",
8
8
  "createdAt": "2026-08-12T20:13:46.488Z",
@@ -2311,12 +2311,12 @@
2311
2311
  "--columns-max-width": "1440px",
2312
2312
  "--columns-gutter": "32px",
2313
2313
  "--columns-margin": "0px",
2314
- "--overlay-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2315
- "--overlay": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2316
- "--overlay-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2317
- "--hover-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2318
- "--hover": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2319
- "--hover-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2314
+ "--scrim-low": "color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent)",
2315
+ "--scrim": "color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent)",
2316
+ "--scrim-high": "color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent)",
2317
+ "--tint-low": "color-mix(in srgb, var(--text-primary) 5%, transparent)",
2318
+ "--tint": "color-mix(in srgb, var(--text-primary) 10%, transparent)",
2319
+ "--tint-high": "color-mix(in srgb, var(--text-primary) 15%, transparent)",
2320
2320
  "--shadow-sm": "1px 1px 2px hsla(237, 18%, 3%, 0.9)",
2321
2321
  "--shadow-md": "3px 3px 6px hsla(237, 18%, 3%, 0.9)",
2322
2322
  "--shadow-lg": "5px 5px 9px hsla(237, 18%, 3%, 0.9)",
@@ -2693,6 +2693,9 @@
2693
2693
  "createdAt": "2026-05-10T19:28:06.893Z",
2694
2694
  "updatedAt": "2026-08-19T22:39:32.785Z",
2695
2695
  "aliases": {
2696
+ "--button-hover-tint": "--tint",
2697
+ "--button-hover-tint-enabled": "--color-transparent",
2698
+ "--button-shimmer": "--shimmer-on",
2696
2699
  "--button-primary-surface": "--surface-brand",
2697
2700
  "--button-primary-text": "--text-primary",
2698
2701
  "--button-primary-text-font-family": "--font-sans",
@@ -2740,7 +2743,7 @@
2740
2743
  "--button-outline-hover-surface": "--surface-neutral-lower",
2741
2744
  "--button-outline-hover-text": "--text-primary",
2742
2745
  "--button-outline-hover-border": "--border-neutral-strong",
2743
- "--button-outline-active-surface": "--hover",
2746
+ "--button-outline-active-surface": "--tint",
2744
2747
  "--button-outline-disabled-surface": "--color-transparent",
2745
2748
  "--button-outline-disabled-text": "--text-tertiary",
2746
2749
  "--button-outline-disabled-border": "--border-neutral-faint",
@@ -2912,8 +2915,8 @@
2912
2915
  "--card-default-body-line-height": "--line-height-normal",
2913
2916
  "--card-hover-border": "--border-neutral-strong",
2914
2917
  "--card-hover-shadow": "--shadow-md",
2915
- "--card-hover-border-active": "--card-default-border",
2916
- "--card-hover-shadow-active": "--card-default-shadow"
2918
+ "--card-hover-border-enabled": "--card-default-border",
2919
+ "--card-hover-shadow-enabled": "--card-default-shadow"
2917
2920
  }
2918
2921
  },
2919
2922
  "codesnippet": {
@@ -3067,7 +3070,7 @@
3067
3070
  "createdAt": "2026-05-10T20:05:24.719Z",
3068
3071
  "updatedAt": "2026-08-19T22:39:32.785Z",
3069
3072
  "aliases": {
3070
- "--dialog-overlay-surface": "--overlay-high",
3073
+ "--dialog-scrim-surface": "--scrim-high",
3071
3074
  "--dialog-surface": "--surface-neutral-lowest",
3072
3075
  "--dialog-border": "--border-neutral-strong",
3073
3076
  "--dialog-border-width": "--border-width-2",
@@ -3102,6 +3105,8 @@
3102
3105
  "createdAt": "2026-06-14T00:00:00.000Z",
3103
3106
  "updatedAt": "2026-08-19T22:39:32.785Z",
3104
3107
  "aliases": {
3108
+ "--iconbutton-hover-tint": "--tint",
3109
+ "--iconbutton-hover-tint-enabled": "--color-transparent",
3105
3110
  "--iconbutton-primary-surface": "--surface-brand",
3106
3111
  "--iconbutton-primary-icon": "--text-primary",
3107
3112
  "--iconbutton-primary-border": "--border-brand",
@@ -3138,7 +3143,7 @@
3138
3143
  "--iconbutton-outline-hover-surface": "--surface-neutral-lower",
3139
3144
  "--iconbutton-outline-hover-icon": "--text-primary",
3140
3145
  "--iconbutton-outline-hover-border": "--border-neutral-strong",
3141
- "--iconbutton-outline-active-surface": "--hover",
3146
+ "--iconbutton-outline-active-surface": "--tint",
3142
3147
  "--iconbutton-outline-disabled-surface": "--color-transparent",
3143
3148
  "--iconbutton-outline-disabled-icon": "--text-tertiary",
3144
3149
  "--iconbutton-outline-disabled-border": "--border-neutral-faint",
@@ -3318,6 +3323,8 @@
3318
3323
  "createdAt": "2026-05-16T00:00:00.000Z",
3319
3324
  "updatedAt": "2026-08-19T22:39:32.785Z",
3320
3325
  "aliases": {
3326
+ "--menuselect-hover-tint": "--tint",
3327
+ "--menuselect-hover-tint-enabled": "--color-transparent",
3321
3328
  "--menuselect-menu-surface": "color-mix(in srgb, var(--surface-neutral-lower) 95%, transparent)",
3322
3329
  "--menuselect-menu-border": "--border-neutral-medium",
3323
3330
  "--menuselect-menu-border-width": "--border-width-1",
@@ -3636,6 +3643,8 @@
3636
3643
  "createdAt": "2026-04-28T21:13:17.669Z",
3637
3644
  "updatedAt": "2026-08-19T22:39:32.785Z",
3638
3645
  "aliases": {
3646
+ "--segmentedcontrol-hover-tint": "--tint",
3647
+ "--segmentedcontrol-hover-tint-enabled": "--color-transparent",
3639
3648
  "--segmentedcontrol-bar-surface": "color-mix(in srgb, var(--surface-neutral-lowest) 75%, transparent)",
3640
3649
  "--segmentedcontrol-bar-border": "--border-neutral",
3641
3650
  "--segmentedcontrol-bar-border-width": "--border-width-1",
@@ -3696,6 +3705,8 @@
3696
3705
  "createdAt": "2026-05-25T19:34:09.771Z",
3697
3706
  "updatedAt": "2026-08-19T22:39:32.785Z",
3698
3707
  "aliases": {
3708
+ "--sidenavigation-hover-tint": "--tint",
3709
+ "--sidenavigation-hover-tint-enabled": "--color-transparent",
3699
3710
  "--sidenavigation-panel-surface": "--surface-canvas-lower",
3700
3711
  "--sidenavigation-panel-border": "--border-canvas-faint",
3701
3712
  "--sidenavigation-panel-border-width": "--border-width-1",
@@ -3856,6 +3867,8 @@
3856
3867
  "createdAt": "2026-05-12T01:57:26.390Z",
3857
3868
  "updatedAt": "2026-08-19T22:39:32.785Z",
3858
3869
  "aliases": {
3870
+ "--tabbar-hover-tint": "--tint",
3871
+ "--tabbar-hover-tint-enabled": "--color-transparent",
3859
3872
  "--tabbar-bar-divider": "--border-neutral-subtle",
3860
3873
  "--tabbar-bar-divider-thickness": "--border-width-1",
3861
3874
  "--tabbar-bar-top-margin": "--space-2",
@@ -3892,7 +3905,7 @@
3892
3905
  "--tabbar-hover-indicator-border-width": "--border-width-2",
3893
3906
  "--tabbar-active-text": "--text-primary",
3894
3907
  "--tabbar-active-border": "--color-brand-500",
3895
- "--tabbar-active-surface": "--overlay-low",
3908
+ "--tabbar-active-surface": "--tint-low",
3896
3909
  "--tabbar-active-text-font-family": "--font-sans",
3897
3910
  "--tabbar-active-text-font-size": "--font-size-md",
3898
3911
  "--tabbar-active-text-font-weight": "--font-weight-light",
@@ -4004,7 +4017,62 @@
4004
4017
  "--tooltip-padding": "--space-8",
4005
4018
  "--tooltip-shadow": "--shadow-md"
4006
4019
  }
4020
+ },
4021
+ "slider": {
4022
+ "name": "sunset",
4023
+ "component": "slider",
4024
+ "createdAt": "2026-09-02T10:55:50.831Z",
4025
+ "updatedAt": "2026-09-02T10:55:50.831Z",
4026
+ "aliases": {
4027
+ "--slider-single-track-surface": "--surface-neutral-lowest",
4028
+ "--slider-single-track-border": "--border-neutral-subtle",
4029
+ "--slider-single-track-border-width": "--border-width-1",
4030
+ "--slider-single-track-height": "--space-8",
4031
+ "--slider-single-track-radius": "--radius-full",
4032
+ "--slider-single-fill": "--surface-brand-high",
4033
+ "--slider-single-thumb-surface": "--surface-neutral-highest",
4034
+ "--slider-single-thumb-border": "--border-brand",
4035
+ "--slider-single-thumb-border-width": "--border-width-2",
4036
+ "--slider-single-thumb-size": "--font-size-lg",
4037
+ "--slider-single-thumb-radius": "--radius-full",
4038
+ "--slider-single-thumb-shadow": "--shadow-sm",
4039
+ "--slider-single-hover-thumb-surface": "--surface-brand-high",
4040
+ "--slider-single-hover-thumb-border": "--border-brand-strong",
4041
+ "--slider-single-disabled-track-surface": "--surface-neutral-lower",
4042
+ "--slider-single-disabled-fill": "--surface-neutral",
4043
+ "--slider-single-disabled-thumb-surface": "--surface-neutral-lower",
4044
+ "--slider-single-disabled-thumb-border": "--border-neutral",
4045
+ "--slider-range-track-surface": "--surface-neutral-lowest",
4046
+ "--slider-range-track-border": "--border-neutral-subtle",
4047
+ "--slider-range-track-border-width": "--border-width-1",
4048
+ "--slider-range-track-height": "--space-8",
4049
+ "--slider-range-track-radius": "--radius-full",
4050
+ "--slider-range-fill": "--surface-brand-high",
4051
+ "--slider-range-thumb-surface": "--surface-neutral-highest",
4052
+ "--slider-range-thumb-border": "--border-brand",
4053
+ "--slider-range-thumb-border-width": "--border-width-2",
4054
+ "--slider-range-thumb-size": "--font-size-lg",
4055
+ "--slider-range-thumb-radius": "--radius-full",
4056
+ "--slider-range-thumb-shadow": "--shadow-sm",
4057
+ "--slider-range-hover-thumb-surface": "--surface-brand-high",
4058
+ "--slider-range-hover-thumb-border": "--border-brand-strong",
4059
+ "--slider-range-disabled-track-surface": "--surface-neutral-lower",
4060
+ "--slider-range-disabled-fill": "--surface-neutral",
4061
+ "--slider-range-disabled-thumb-surface": "--surface-neutral-lower",
4062
+ "--slider-range-disabled-thumb-border": "--border-neutral",
4063
+ "--slider-label-gap": "--space-6",
4064
+ "--slider-label": "--text-secondary",
4065
+ "--slider-label-font-family": "--font-sans",
4066
+ "--slider-label-font-size": "--font-size-md",
4067
+ "--slider-label-font-weight": "--font-weight-normal",
4068
+ "--slider-label-line-height": "--line-height-normal",
4069
+ "--slider-value": "--text-tertiary",
4070
+ "--slider-value-font-family": "--font-mono",
4071
+ "--slider-value-font-size": "--font-size-md",
4072
+ "--slider-value-font-weight": "--font-weight-normal",
4073
+ "--slider-value-line-height": "--line-height-normal"
4074
+ }
4007
4075
  }
4008
4076
  },
4009
- "componentSchemaVersion": 21
4077
+ "componentSchemaVersion": 25
4010
4078
  }
@@ -47,12 +47,12 @@
47
47
  --columns-max-width: 1440px;
48
48
  --columns-gutter: 32px;
49
49
  --columns-margin: 0px;
50
- --overlay-low: color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent);
51
- --overlay: color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent);
52
- --overlay-high: color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent);
53
- --hover-low: color-mix(in srgb, var(--text-primary) 5%, transparent);
54
- --hover: color-mix(in srgb, var(--text-primary) 10%, transparent);
55
- --hover-high: color-mix(in srgb, var(--text-primary) 15%, transparent);
50
+ --scrim-low: color-mix(in srgb, var(--surface-neutral-lowest) 38%, transparent);
51
+ --scrim: color-mix(in srgb, var(--surface-neutral-lowest) 51%, transparent);
52
+ --scrim-high: color-mix(in srgb, var(--surface-neutral-lowest) 64%, transparent);
53
+ --tint-low: color-mix(in srgb, var(--text-primary) 5%, transparent);
54
+ --tint: color-mix(in srgb, var(--text-primary) 10%, transparent);
55
+ --tint-high: color-mix(in srgb, var(--text-primary) 15%, transparent);
56
56
  --shadow-sm: 1px 1px 2px hsla(237, 18%, 3%, 0.9);
57
57
  --shadow-md: 3px 3px 6px hsla(237, 18%, 3%, 0.9);
58
58
  --shadow-lg: 5px 5px 9px hsla(237, 18%, 3%, 0.9);
@@ -16,7 +16,7 @@ export const BACKDROP_ATTRIBUTE = 'data-backdrop';
16
16
 
17
17
  /** Relative luminance at or above which a backdrop counts as light. Sits
18
18
  between the palest shipped dark theme (~0.03) and the darkest light one
19
- (~0.6), so no shipped look lands near the line. */
19
+ (~0.6), so no shipped sketchstyle lands near the line. */
20
20
  export const LIGHT_BACKDROP = 0.2;
21
21
 
22
22
  /** A fill this see-through says nothing about what shows through it, so the
@@ -2,6 +2,9 @@
2
2
  import { createEventDispatcher } from 'svelte';
3
3
 
4
4
  interface Props {
5
+ /** Wash the hovered surface with the theme's tint. `undefined` inherits the
6
+ global default; `true`/`false` force this instance on/off. */
7
+ hoverTint?: boolean | undefined;
5
8
  disabled?: boolean;
6
9
  type?: 'button' | 'submit' | 'reset';
7
10
  variant?: 'primary' | 'secondary' | 'outline' | 'success' | 'danger' | 'warning';
@@ -19,6 +22,7 @@
19
22
  }
20
23
 
21
24
  let {
25
+ hoverTint = undefined,
22
26
  disabled = false,
23
27
  type = 'button',
24
28
  variant = 'primary',
@@ -34,6 +38,11 @@
34
38
  children
35
39
  }: Props = $props();
36
40
 
41
+ // Per-instance override of the global hover-tint intrinsic; undefined leaves :root in charge.
42
+ let hoverTintValue = $derived(
43
+ hoverTint === undefined ? undefined : hoverTint ? 'var(--button-hover-tint)' : 'var(--color-transparent)',
44
+ );
45
+
37
46
  // Dual-fire bridge: keeps Svelte-4-style `<Button on:click={fn}>` consumers
38
47
  // working until 0.6.0. Remove the dispatcher and this comment in 0.6.0.
39
48
  const dispatch = createEventDispatcher();
@@ -47,6 +56,7 @@
47
56
  </script>
48
57
 
49
58
  <button
59
+ style:--button-hover-tint-enabled={hoverTintValue}
50
60
  bind:this={buttonRef}
51
61
  {type}
52
62
  class="button {variant} {className}"
@@ -70,8 +80,15 @@
70
80
  @use '../styles/padding' as *;
71
81
 
72
82
  :global(:root) {
73
- /* Shared — set to `none` to disable the hover shimmer sweep */
74
- --button-shimmer: block;
83
+ /* Hover tint: an optional wash over the hovered surface, one stop for the
84
+ whole component. Off by default. Turning it on is one switch that moves
85
+ both gates: the tint gate takes the tint, and the swap gate falls back to
86
+ each variant's own base surface, so the tint owns hover on its own. */
87
+ --button-hover-tint: var(--tint);
88
+ --button-hover-tint-enabled: var(--color-transparent);
89
+
90
+ /* Shared — the shimmer sweep's display, gated by the editor's switch. */
91
+ --button-shimmer: var(--shimmer-on);
75
92
 
76
93
  /* Primary */
77
94
  --button-primary-surface: var(--surface-brand);
@@ -125,7 +142,7 @@
125
142
  --button-outline-hover-surface: var(--surface-neutral-lower);
126
143
  --button-outline-hover-text: var(--text-primary);
127
144
  --button-outline-hover-border: var(--border-neutral-strong);
128
- --button-outline-active-surface: var(--hover);
145
+ --button-outline-active-surface: var(--surface-neutral-low);
129
146
  --button-outline-disabled-surface: var(--color-transparent);
130
147
  --button-outline-disabled-text: var(--text-tertiary);
131
148
  --button-outline-disabled-border: var(--border-neutral-faint);
@@ -233,6 +250,7 @@
233
250
 
234
251
  &:hover:not(:disabled),
235
252
  &.force-hover:not(:disabled) {
253
+ background-image: linear-gradient(var(--button-hover-tint-enabled), var(--button-hover-tint-enabled));
236
254
  transform: translateY(-0.0625rem);
237
255
  box-shadow: var(--shadow-md);
238
256
  }
@@ -271,7 +289,7 @@
271
289
 
272
290
  &:hover:not(:disabled),
273
291
  &.force-hover:not(:disabled) {
274
- background: var(--button-primary-hover-surface);
292
+ background-color: var(--button-primary-hover-surface);
275
293
  border-color: var(--button-primary-hover-border);
276
294
  color: var(--button-primary-hover-text);
277
295
  }
@@ -309,7 +327,7 @@
309
327
 
310
328
  &:hover:not(:disabled),
311
329
  &.force-hover:not(:disabled) {
312
- background: var(--button-secondary-hover-surface);
330
+ background-color: var(--button-secondary-hover-surface);
313
331
  border-color: var(--button-secondary-hover-border);
314
332
  color: var(--button-secondary-hover-text);
315
333
  }
@@ -343,7 +361,7 @@
343
361
 
344
362
  &:hover:not(:disabled),
345
363
  &.force-hover:not(:disabled) {
346
- background: var(--button-outline-hover-surface);
364
+ background-color: var(--button-outline-hover-surface);
347
365
  border-color: var(--button-outline-hover-border);
348
366
  color: var(--button-outline-hover-text);
349
367
  }
@@ -382,7 +400,7 @@
382
400
 
383
401
  &:hover:not(:disabled),
384
402
  &.force-hover:not(:disabled) {
385
- background: var(--button-success-hover-surface);
403
+ background-color: var(--button-success-hover-surface);
386
404
  border-color: var(--button-success-hover-border);
387
405
  color: var(--button-success-hover-text);
388
406
  }
@@ -416,7 +434,7 @@
416
434
 
417
435
  &:hover:not(:disabled),
418
436
  &.force-hover:not(:disabled) {
419
- background: var(--button-danger-hover-surface);
437
+ background-color: var(--button-danger-hover-surface);
420
438
  border-color: var(--button-danger-hover-border);
421
439
  color: var(--button-danger-hover-text);
422
440
  }
@@ -450,7 +468,7 @@
450
468
 
451
469
  &:hover:not(:disabled),
452
470
  &.force-hover:not(:disabled) {
453
- background: var(--button-warning-hover-surface);
471
+ background-color: var(--button-warning-hover-surface);
454
472
  border-color: var(--button-warning-hover-border);
455
473
  color: var(--button-warning-hover-text);
456
474
  }
@@ -498,7 +516,7 @@
498
516
  font-size: var(--font-size-sm);
499
517
  opacity: 0.9;
500
518
  padding: var(--space-2) var(--space-6);
501
- background: var(--overlay-low);
519
+ background: var(--tint-low);
502
520
  border-radius: var(--radius-sm);
503
521
  margin-left: var(--space-4);
504
522
  }
@@ -54,8 +54,8 @@
54
54
  class:bare={variant === 'bare'}
55
55
  class:compact={size === 'compact'}
56
56
  style:--card-color={iconColor}
57
- style:--card-hover-border-active={hoverBorder}
58
- style:--card-hover-shadow-active={hoverShadow}
57
+ style:--card-hover-border-enabled={hoverBorder}
58
+ style:--card-hover-shadow-enabled={hoverShadow}
59
59
  >
60
60
  {#if showHeader}
61
61
  <div class="card-header">
@@ -121,8 +121,8 @@
121
121
  /* Global "Use hover" intrinsic: the active hover values default to the resting
122
122
  tokens (hover off). The editor checkbox / a per-instance `hover` prop swap
123
123
  these to the `--card-hover-*` tokens to turn hover on. */
124
- --card-hover-border-active: var(--card-default-border);
125
- --card-hover-shadow-active: var(--card-default-shadow);
124
+ --card-hover-border-enabled: var(--card-default-border);
125
+ --card-hover-shadow-enabled: var(--card-default-shadow);
126
126
  }
127
127
 
128
128
  .card {
@@ -138,8 +138,8 @@
138
138
  }
139
139
 
140
140
  .card:hover {
141
- border-color: var(--card-hover-border-active);
142
- box-shadow: var(--card-hover-shadow-active);
141
+ border-color: var(--card-hover-border-enabled);
142
+ box-shadow: var(--card-hover-shadow-enabled);
143
143
  }
144
144
 
145
145
  /* Editor preview hook: paint hover tokens directly, ignoring the on/off gate. */
@@ -166,8 +166,8 @@
166
166
 
167
167
  <style>
168
168
  :global(:root) {
169
- /* Overlay */
170
- --dialog-overlay-surface: var(--overlay-high);
169
+ /* Scrim */
170
+ --dialog-scrim-surface: var(--scrim-high);
171
171
 
172
172
  /* Dialog frame */
173
173
  --dialog-surface: var(--surface-neutral-lowest);
@@ -214,7 +214,7 @@
214
214
  left: 0;
215
215
  width: 100%;
216
216
  height: 100%;
217
- background: var(--dialog-overlay-surface);
217
+ background: var(--dialog-scrim-surface);
218
218
  display: flex;
219
219
  justify-content: center;
220
220
  align-items: center;