@motion-proto/live-tokens 0.6.2 → 0.7.1

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 (212) hide show
  1. package/README.md +14 -13
  2. package/dist-plugin/index.cjs +147 -136
  3. package/dist-plugin/index.d.cts +1 -1
  4. package/dist-plugin/index.d.ts +1 -1
  5. package/dist-plugin/index.js +145 -135
  6. package/package.json +25 -40
  7. package/src/{component-editor → editor/component-editor}/BadgeEditor.svelte +8 -82
  8. package/src/{component-editor → editor/component-editor}/CalloutEditor.svelte +4 -4
  9. package/src/{component-editor → editor/component-editor}/CardEditor.svelte +28 -76
  10. package/src/{component-editor → editor/component-editor}/CollapsibleSectionEditor.svelte +3 -3
  11. package/src/{component-editor → editor/component-editor}/CornerBadgeEditor.svelte +31 -93
  12. package/src/{component-editor → editor/component-editor}/DialogEditor.svelte +60 -57
  13. package/src/editor/component-editor/ImageEditor.svelte +30 -0
  14. package/src/{component-editor → editor/component-editor}/InlineEditActionsEditor.svelte +6 -4
  15. package/src/editor/component-editor/MenuSelectEditor.svelte +160 -0
  16. package/src/{component-editor → editor/component-editor}/NotificationEditor.svelte +64 -37
  17. package/src/{component-editor → editor/component-editor}/ProgressBarEditor.svelte +5 -4
  18. package/src/{component-editor → editor/component-editor}/RadioButtonEditor.svelte +3 -3
  19. package/src/{component-editor → editor/component-editor}/SectionDividerEditor.svelte +57 -84
  20. package/src/{component-editor → editor/component-editor}/SegmentedControlEditor.svelte +2 -2
  21. package/src/{component-editor → editor/component-editor}/StandardButtonsEditor.svelte +16 -20
  22. package/src/{component-editor → editor/component-editor}/TabBarEditor.svelte +9 -14
  23. package/src/{component-editor → editor/component-editor}/TableEditor.svelte +9 -18
  24. package/src/{component-editor → editor/component-editor}/TooltipEditor.svelte +11 -47
  25. package/src/{component-editor → editor/component-editor}/registry.ts +28 -18
  26. package/src/{component-editor → editor/component-editor}/scaffolding/AngleDial.svelte +2 -2
  27. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentEditorBase.svelte +3 -51
  28. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileManager.svelte +144 -416
  29. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentFileMenu.svelte +18 -170
  30. package/src/{component-editor → editor/component-editor}/scaffolding/ComponentsTab.svelte +2 -2
  31. package/src/{component-editor → editor/component-editor}/scaffolding/CopyFromMenu.svelte +44 -4
  32. package/src/{component-editor → editor/component-editor}/scaffolding/DividerEditor.svelte +1 -1
  33. package/src/{component-editor → editor/component-editor}/scaffolding/FieldsetWrapper.svelte +1 -1
  34. package/src/{component-editor → editor/component-editor}/scaffolding/GradientCard.svelte +6 -6
  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 -11
  37. package/src/editor/component-editor/scaffolding/NonStylableConfig.svelte +38 -0
  38. package/src/{component-editor → editor/component-editor}/scaffolding/SaveAsDialog.svelte +66 -12
  39. package/src/editor/component-editor/scaffolding/ShadowBackdrop.svelte +72 -0
  40. package/src/editor/component-editor/scaffolding/ShadowBackdropControls.svelte +132 -0
  41. package/src/editor/component-editor/scaffolding/StateBlock.svelte +257 -0
  42. package/src/{component-editor → editor/component-editor}/scaffolding/TokenLayout.svelte +9 -7
  43. package/src/editor/component-editor/scaffolding/VariantGroup.svelte +644 -0
  44. package/src/{component-editor → editor/component-editor}/scaffolding/editorContext.ts +19 -9
  45. package/src/{component-editor → editor/component-editor}/scaffolding/linkedBlock.ts +2 -2
  46. package/src/{component-editor → editor/component-editor}/scaffolding/types.ts +14 -0
  47. package/src/{lib → editor/core/components}/componentConfigService.ts +2 -2
  48. package/src/{lib → editor/core/components}/componentPersist.ts +5 -5
  49. package/src/editor/core/flashStatus.ts +30 -0
  50. package/src/{lib → editor/core/fonts}/fontLoader.ts +2 -2
  51. package/src/{lib → editor/core/fonts}/fontMigration.ts +4 -4
  52. package/src/{lib → editor/core/fonts}/fontParse.ts +1 -1
  53. package/src/editor/core/manifests/manifestService.ts +116 -0
  54. package/src/{lib → editor/core/palettes}/paletteDerivation.ts +2 -2
  55. package/src/{lib → editor/core/palettes}/tokenRegistry.ts +5 -5
  56. package/src/editor/core/productionPulse.ts +37 -0
  57. package/src/{lib → editor/core/routing}/router.ts +1 -1
  58. package/src/{lib/files/versionedFileResource.ts → editor/core/storage/files/versionedFileResourceClient.ts} +8 -1
  59. package/src/{lib → editor/core/store}/editorCore.ts +24 -8
  60. package/src/{lib → editor/core/store}/editorPersistence.ts +3 -3
  61. package/src/{lib → editor/core/store}/editorRenderer.ts +2 -2
  62. package/src/{lib → editor/core/store}/editorStore.ts +17 -17
  63. package/src/{lib → editor/core/store}/editorTypes.ts +1 -1
  64. package/src/{lib → editor/core/themes}/slices/columns.ts +2 -2
  65. package/src/{lib → editor/core/themes}/slices/components.ts +2 -2
  66. package/src/{lib → editor/core/themes}/slices/fonts.ts +1 -1
  67. package/src/{lib → editor/core/themes}/slices/gradients.ts +2 -2
  68. package/src/{lib → editor/core/themes}/slices/overlays.ts +1 -1
  69. package/src/{lib → editor/core/themes}/slices/palettes.ts +1 -1
  70. package/src/{lib → editor/core/themes}/slices/shadows.ts +3 -3
  71. package/src/{lib → editor/core/themes}/themeInit.ts +6 -6
  72. package/src/{lib → editor/core/themes}/themeService.ts +6 -6
  73. package/src/{lib → editor/core/themes}/themeTypes.ts +11 -7
  74. package/src/editor/index.ts +69 -0
  75. package/src/{lib → editor/overlay}/LiveEditorOverlay.svelte +79 -125
  76. package/src/{lib → editor/overlay}/columnsOverlay.ts +2 -2
  77. package/src/{pages → editor/pages}/ComponentEditorPage.svelte +12 -12
  78. package/src/{pages → editor/pages}/Editor.svelte +4 -4
  79. package/src/{pages → editor/pages}/EditorShell.svelte +18 -36
  80. package/src/{styles → editor/styles}/ui-editor.css +41 -21
  81. package/src/{styles → editor/styles}/ui-form-controls.css +8 -8
  82. package/src/{ui → editor/ui}/BezierCurveEditor.svelte +8 -8
  83. package/src/{ui → editor/ui}/ColorEditPanel.svelte +13 -13
  84. package/src/{ui → editor/ui}/EditorViewSwitcher.svelte +8 -6
  85. package/src/editor/ui/FileLoadList.svelte +350 -0
  86. package/src/editor/ui/FilePill.svelte +80 -0
  87. package/src/{ui → editor/ui}/FontStackEditor.svelte +7 -7
  88. package/src/{ui → editor/ui}/GradientEditor.svelte +11 -11
  89. package/src/{ui → editor/ui}/GradientStopPicker.svelte +1 -1
  90. package/src/editor/ui/ManifestFileManager.svelte +371 -0
  91. package/src/{ui → editor/ui}/PaletteEditor.svelte +132 -598
  92. package/src/{ui → editor/ui}/ProjectFontsSection.svelte +102 -144
  93. package/src/{ui → editor/ui}/SurfacesTab.svelte +3 -3
  94. package/src/{ui → editor/ui}/TextTab.svelte +3 -3
  95. package/src/{ui → editor/ui}/ThemeFileManager.svelte +286 -519
  96. package/src/{ui → editor/ui}/UICopyPopover.svelte +4 -4
  97. package/src/{ui → editor/ui}/UIFontFamilySelector.svelte +6 -6
  98. package/src/{ui → editor/ui}/UIFontSizeSelector.svelte +1 -1
  99. package/src/editor/ui/UIInfoPopover.svelte +244 -0
  100. package/src/{ui → editor/ui}/UILineHeightSelector.svelte +5 -5
  101. package/src/{ui → editor/ui}/UILinkToggle.svelte +2 -2
  102. package/src/{ui → editor/ui}/UIPaddingSelector.svelte +6 -6
  103. package/src/{ui → editor/ui}/UIPaletteSelector.svelte +26 -26
  104. package/src/editor/ui/UIPillButton.svelte +138 -0
  105. package/src/{ui → editor/ui}/UIRadio.svelte +2 -2
  106. package/src/{ui → editor/ui}/UIRelinkConfirmPopover.svelte +4 -4
  107. package/src/editor/ui/UISquareButton.svelte +172 -0
  108. package/src/{ui → editor/ui}/UITokenSelector.svelte +10 -10
  109. package/src/{ui → editor/ui}/UIVariantSelector.svelte +1 -1
  110. package/src/{ui → editor/ui}/VariablesTab.svelte +31 -8
  111. package/src/{ui → editor/ui}/palette/GradientStopEditor.svelte +13 -13
  112. package/src/{ui → editor/ui}/palette/OverridesPanel.svelte +13 -13
  113. package/src/{ui → editor/ui}/palette/PaletteBase.svelte +8 -5
  114. package/src/{ui → editor/ui}/palette/paletteEditorState.ts +1 -1
  115. package/src/editor/ui/palette/paletteMath.ts +275 -0
  116. package/src/{ui → editor/ui}/sections/ColumnsSection.svelte +137 -17
  117. package/src/{ui → editor/ui}/sections/GradientsSection.svelte +7 -7
  118. package/src/{ui → editor/ui}/sections/OverlaysSection.svelte +17 -17
  119. package/src/{ui → editor/ui}/sections/ShadowsSection.svelte +22 -22
  120. package/src/{ui → editor/ui}/sections/TokenScaleTable.svelte +3 -3
  121. package/src/{components → system/components}/Badge.svelte +0 -36
  122. package/src/{components → system/components}/Card.svelte +8 -62
  123. package/src/{components → system/components}/CornerBadge.svelte +8 -24
  124. package/src/{components → system/components}/Dialog.svelte +1 -1
  125. package/src/system/components/FloatingTokenTags.css +256 -0
  126. package/src/system/components/FloatingTokenTags.svelte +592 -0
  127. package/src/{components → system/components}/InlineEditActions.svelte +6 -4
  128. package/src/system/components/MenuSelect.svelte +229 -0
  129. package/src/{components → system/components}/ProgressBar.svelte +29 -11
  130. package/src/{components → system/components}/SegmentedControl.svelte +49 -43
  131. package/src/{components → system/components}/TabBar.svelte +81 -65
  132. package/src/{components → system/components}/Table.svelte +17 -3
  133. package/src/{components → system/components}/Tooltip.svelte +6 -4
  134. package/src/system/styles/CONVENTIONS.md +178 -0
  135. package/src/{styles → system/styles}/fonts.css +6 -3
  136. package/src/{styles → system/styles}/tokens.css +149 -29
  137. package/src/component-editor/ImageEditor.svelte +0 -74
  138. package/src/component-editor/scaffolding/NonStylableConfig.svelte +0 -62
  139. package/src/component-editor/scaffolding/ShadowBackdrop.svelte +0 -37
  140. package/src/component-editor/scaffolding/ShadowBackdropControls.svelte +0 -61
  141. package/src/component-editor/scaffolding/StateBlock.svelte +0 -132
  142. package/src/component-editor/scaffolding/VariantGroup.svelte +0 -310
  143. package/src/data/google-fonts.json +0 -75
  144. package/src/lib/index.ts +0 -68
  145. package/src/lib/presetService.ts +0 -214
  146. package/src/lib/productionPulse.ts +0 -32
  147. package/src/ui/PresetFileManager.svelte +0 -1116
  148. package/src/ui/UnsavedComponentsDialog.svelte +0 -315
  149. /package/src/{styles → app}/site.css +0 -0
  150. /package/src/{component-editor → editor/component-editor}/index.ts +0 -0
  151. /package/src/{component-editor → editor/component-editor}/scaffolding/DemoHeader.svelte +0 -0
  152. /package/src/{component-editor → editor/component-editor}/scaffolding/TypeEditor.svelte +0 -0
  153. /package/src/{component-editor → editor/component-editor}/scaffolding/buildTypeGroupTokens.ts +0 -0
  154. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSectionType.ts +0 -0
  155. /package/src/{component-editor → editor/component-editor}/scaffolding/componentSources.ts +0 -0
  156. /package/src/{component-editor → editor/component-editor}/scaffolding/defaultSections.ts +0 -0
  157. /package/src/{component-editor → editor/component-editor}/scaffolding/siblings.ts +0 -0
  158. /package/src/{lib → editor/core/components}/componentConfigKeys.ts +0 -0
  159. /package/src/{lib → editor/core}/cssVarSync.ts +0 -0
  160. /package/src/{lib → editor/core/palettes}/oklch.ts +0 -0
  161. /package/src/{lib → editor/core/routing}/navLinkTypes.ts +0 -0
  162. /package/src/{lib → editor/core/routing}/parentRouteStore.ts +0 -0
  163. /package/src/{lib → editor/core/storage}/storage.ts +0 -0
  164. /package/src/{lib → editor/core/store}/editorConfig.ts +0 -0
  165. /package/src/{lib → editor/core/store}/editorConfigStore.ts +0 -0
  166. /package/src/{lib → editor/core/store}/editorKeybindings.ts +0 -0
  167. /package/src/{lib → editor/core/store}/editorViewStore.ts +0 -0
  168. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-component-prefix-and-suffix-renames.ts +0 -0
  169. /package/src/{lib → editor/core/themes}/migrations/2026-04-24-legacy-keys-and-bg-to-canvas.ts +0 -0
  170. /package/src/{lib → editor/core/themes}/migrations/2026-04-27-segmentedcontrol-disabled-flatten.ts +0 -0
  171. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-frame-and-cleanup.ts +0 -0
  172. /package/src/{lib → editor/core/themes}/migrations/2026-05-08-collapsiblesection-variant-namespace.ts +0 -0
  173. /package/src/{lib → editor/core/themes}/migrations/2026-05-10-sectiondivider-gradient-stops.ts +0 -0
  174. /package/src/{lib → editor/core/themes}/migrations/2026-05-13-primary-to-brand.ts +0 -0
  175. /package/src/{lib → editor/core/themes}/migrations/index.ts +0 -0
  176. /package/src/{lib → editor/core/themes}/parsers/globalRootBlock.ts +0 -0
  177. /package/src/{lib → editor/core/themes}/slices/domainVars.ts +0 -0
  178. /package/src/{lib → editor/overlay}/ColumnsOverlay.svelte +0 -0
  179. /package/src/{lib → editor/overlay}/overlayState.ts +0 -0
  180. /package/src/{pages → editor/pages}/ComponentEditorPage.svelte.d.ts +0 -0
  181. /package/src/{pages → editor/pages}/Editor.svelte.d.ts +0 -0
  182. /package/src/{ui → editor/ui}/Toggle.svelte +0 -0
  183. /package/src/{ui → editor/ui}/UIDialog.svelte +0 -0
  184. /package/src/{ui → editor/ui}/UIFontWeightSelector.svelte +0 -0
  185. /package/src/{ui → editor/ui}/UIOptionItem.svelte +0 -0
  186. /package/src/{ui → editor/ui}/UIOptionList.svelte +0 -0
  187. /package/src/{ui → editor/ui}/UIRadioGroup.svelte +0 -0
  188. /package/src/{lib → editor/ui}/copyPopover.ts +0 -0
  189. /package/src/{ui → editor/ui}/curveEngine.ts +0 -0
  190. /package/src/{ui → editor/ui}/index.ts +0 -0
  191. /package/src/{ui → editor/ui}/keepInViewport.ts +0 -0
  192. /package/src/{ui → editor/ui}/palette/ScaleCurveEditor.svelte +0 -0
  193. /package/src/{lib → editor/ui}/scrollSection.ts +0 -0
  194. /package/src/{ui → editor/ui}/sections/tokenScales.ts +0 -0
  195. /package/src/{ui → editor/ui}/variantScales.ts +0 -0
  196. /package/src/{assets → system/assets}/newspaper.webp +0 -0
  197. /package/src/{assets → system/assets}/offering.webp +0 -0
  198. /package/src/{components → system/components}/Button.svelte +0 -0
  199. /package/src/{components → system/components}/Callout.svelte +0 -0
  200. /package/src/{components → system/components}/CollapsibleSection.svelte +0 -0
  201. /package/src/{components → system/components}/Image.svelte +0 -0
  202. /package/src/{components → system/components}/Notification.svelte +0 -0
  203. /package/src/{components → system/components}/RadioButton.svelte +0 -0
  204. /package/src/{components → system/components}/SectionDivider.svelte +0 -0
  205. /package/src/{components → system/components}/types.ts +0 -0
  206. /package/src/{styles → system/styles}/_padding.scss +0 -0
  207. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin-ext.woff2 +0 -0
  208. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-italic-latin.woff2 +0 -0
  209. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin-ext.woff2 +0 -0
  210. /package/src/{styles → system/styles}/fonts/Fraunces/Fraunces-roman-latin.woff2 +0 -0
  211. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin-ext.woff2 +0 -0
  212. /package/src/{styles → system/styles}/fonts/Manrope/Manrope-latin.woff2 +0 -0
@@ -0,0 +1,256 @@
1
+ /*
2
+ * Decoupled from the design system: pills, knots, strings, balls, and
3
+ * animations are hardcoded so token edits don't repaint our chrome. The
4
+ * two exceptions are intentional and ARE the demo: the central box's
5
+ * surface/radius/border (set inline) and the dropdown (rendered through
6
+ * <MenuSelect>). File is global; keep selectors `ftt-` prefixed.
7
+ */
8
+
9
+ .ftt-stage {
10
+ position: relative;
11
+ width: 100%;
12
+ height: 100%;
13
+ /* No overflow clipping: the bottom tag's dropdown must extend past the
14
+ stage edge. */
15
+ }
16
+
17
+ /* --- Central box ---------------------------------------------------------- */
18
+ .ftt-box {
19
+ position: absolute;
20
+ left: 50%;
21
+ top: 50%;
22
+ translate: -50% -50%;
23
+ box-sizing: border-box;
24
+ padding: 0.75rem 1.5rem;
25
+ display: inline-flex;
26
+ width: max-content;
27
+ align-items: center;
28
+ justify-content: center;
29
+ /* Defaults; overridden inline from the active token bindings. */
30
+ background: color-mix(in srgb, #264542 50%, transparent);
31
+ border-style: solid;
32
+ border-color: #52726e;
33
+ border-width: 2px;
34
+ border-radius: 0.25rem;
35
+ box-shadow: 3px 3px 6px 0px hsla(237, 18%, 3%, 0.9);
36
+ transition:
37
+ background 300ms ease,
38
+ border-color 300ms ease,
39
+ border-width 300ms ease,
40
+ border-radius 300ms ease;
41
+ z-index: 1;
42
+ }
43
+
44
+ .ftt-box-label {
45
+ font-family: Manrope, system-ui, -apple-system, sans-serif;
46
+ font-size: 1.25rem;
47
+ font-weight: 700;
48
+ color: rgba(255, 255, 255, 0.95);
49
+ letter-spacing: 0.01em;
50
+ white-space: nowrap;
51
+ user-select: none;
52
+ pointer-events: none;
53
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
54
+ }
55
+
56
+ .ftt-box.ftt-bloop {
57
+ animation: ftt-bloop 480ms ease-out;
58
+ }
59
+
60
+ @keyframes ftt-bloop {
61
+ 0% { scale: 1; filter: brightness(1); }
62
+ 30% { scale: 1.08; filter: brightness(1.8) saturate(1.4); }
63
+ 100% { scale: 1; filter: brightness(1); }
64
+ }
65
+
66
+ /* --- Kite strings --------------------------------------------------------- */
67
+ .ftt-strings {
68
+ position: absolute;
69
+ inset: 0;
70
+ width: 100%;
71
+ height: 100%;
72
+ pointer-events: none;
73
+ z-index: 2;
74
+ }
75
+
76
+ .ftt-string {
77
+ stroke: #9b938e;
78
+ stroke-width: 2;
79
+ stroke-linecap: round;
80
+ vector-effect: non-scaling-stroke;
81
+ opacity: 0.7;
82
+ transition: opacity 150ms ease, stroke 150ms ease;
83
+ }
84
+
85
+ .ftt-string.ftt-live {
86
+ stroke: #ff8eeb;
87
+ opacity: 1;
88
+ }
89
+
90
+ /* --- Anchor knots --------------------------------------------------------- */
91
+ .ftt-knot {
92
+ position: absolute;
93
+ width: 0.625rem;
94
+ height: 0.625rem;
95
+ translate: -50% -50%;
96
+ border-radius: 9999px;
97
+ background: #615954;
98
+ border: 1px solid #c4bcb6;
99
+ pointer-events: none;
100
+ z-index: 3;
101
+ }
102
+
103
+ /* --- Energy ball ---------------------------------------------------------- */
104
+ /* Colour must match `.ftt-string.ftt-live` so the beam reads as a continuous
105
+ trail, not a colour-shifting projectile. */
106
+ .ftt-energy-ball {
107
+ position: absolute;
108
+ width: 0.875rem;
109
+ height: 0.875rem;
110
+ translate: -50% -50%;
111
+ border-radius: 9999px;
112
+ background: #ff8eeb;
113
+ box-shadow:
114
+ 0 0 8px 2px #ff8eeb,
115
+ 0 0 18px 4px #ff8eeb;
116
+ pointer-events: none;
117
+ opacity: 0;
118
+ z-index: 6;
119
+ }
120
+
121
+ /* --- Floating tag wrapper ------------------------------------------------- */
122
+ .ftt-float {
123
+ position: absolute;
124
+ translate: -50% -50%;
125
+ rotate: var(--ftt-rot, 0deg);
126
+ animation: ftt-bob var(--ftt-bob-duration, 7s) ease-in-out infinite;
127
+ z-index: 4;
128
+ pointer-events: none;
129
+ display: flex;
130
+ flex-direction: column;
131
+ align-items: center;
132
+ gap: 0.25rem;
133
+
134
+ /* Black, not page-tinted: the tinted variant produces visible banding in
135
+ the soft outer halo. Composed into hover/flash filters below. */
136
+ --ftt-tag-shadow:
137
+ drop-shadow(0 10px 28px rgba(0, 0, 0, 0.55))
138
+ drop-shadow(0 6px 60px rgba(0, 0, 0, 0.4))
139
+ drop-shadow(0 0 120px rgba(0, 0, 0, 0.3));
140
+ }
141
+
142
+ /* Lift open tag so its dropdown paints over sibling tags. */
143
+ .ftt-float.ftt-open {
144
+ z-index: 20;
145
+ }
146
+
147
+ @keyframes ftt-bob {
148
+ 0%, 100% { translate: -50% -50%; }
149
+ 50% { translate: -50% calc(-50% + var(--ftt-bob-distance, -8px)); }
150
+ }
151
+
152
+ /* --- Property label above each tag ---------------------------------------- */
153
+ .ftt-float-property {
154
+ font-family: Manrope, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
155
+ font-size: 0.875rem;
156
+ font-weight: 700;
157
+ text-transform: uppercase;
158
+ color: #ffffffb6;
159
+ white-space: nowrap;
160
+ }
161
+
162
+ /* --- Tag pill ------------------------------------------------------------- */
163
+ /* Hardcoded (not the Badge component) so badge-* token edits don't repaint. */
164
+ .ftt-tag {
165
+ display: inline-flex;
166
+ align-items: center;
167
+ gap: 0.25rem;
168
+ padding: 0.375rem 0.75rem;
169
+ background: linear-gradient(
170
+ 135deg,
171
+ #cccdcd 0%,
172
+ #7c7d7d 38%,
173
+ #b1b2b2 62%,
174
+ #626363 100%
175
+ );
176
+ color: rgba(0, 0, 0, 0.88);
177
+ border: 1px solid rgba(255, 255, 255, 0.55);
178
+ border-radius: 9999px;
179
+ font-family: Manrope, system-ui, -apple-system, sans-serif;
180
+ font-size: 0.875rem;
181
+ font-weight: 500;
182
+ line-height: 1.1;
183
+ white-space: nowrap;
184
+ }
185
+
186
+ .ftt-tag-icon {
187
+ display: inline-flex;
188
+ align-items: center;
189
+ font-size: 0.875em;
190
+ }
191
+
192
+ .ftt-tag-label {
193
+ display: inline-block;
194
+ }
195
+
196
+ /* --- Tag trigger (draggable button wrapping the pill) --------------------- */
197
+ .ftt-tag-trigger {
198
+ pointer-events: auto;
199
+ background: transparent;
200
+ border: none;
201
+ padding: 0;
202
+ margin: 0;
203
+ cursor: grab;
204
+ touch-action: none;
205
+ filter: var(--ftt-tag-shadow);
206
+ transition: filter 150ms ease, scale 150ms ease;
207
+ }
208
+ .ftt-tag-trigger:hover {
209
+ filter: var(--ftt-tag-shadow) brightness(1.2);
210
+ scale: 1.04;
211
+ }
212
+ .ftt-float.ftt-dragging .ftt-tag-trigger {
213
+ cursor: grabbing;
214
+ }
215
+ .ftt-float.ftt-dragging {
216
+ animation: none; /* pause bob while dragging */
217
+ z-index: 30;
218
+ }
219
+ .ftt-tag-trigger:focus-visible {
220
+ outline: 2px solid #f31fdb;
221
+ outline-offset: 3px;
222
+ border-radius: 9999px;
223
+ }
224
+
225
+ .ftt-float.ftt-flash .ftt-tag-trigger {
226
+ animation: ftt-tag-flash 500ms ease-out;
227
+ }
228
+
229
+ @keyframes ftt-tag-flash {
230
+ 0% { scale: 1; filter: var(--ftt-tag-shadow) brightness(1) drop-shadow(0 0 0 transparent); }
231
+ 25% { scale: 1.14; filter: var(--ftt-tag-shadow) brightness(1.8) drop-shadow(0 0 14px #fff5f0); }
232
+ 100% { scale: 1; filter: var(--ftt-tag-shadow) brightness(1) drop-shadow(0 0 0 transparent); }
233
+ }
234
+
235
+ /* --- Dropdown menu -------------------------------------------------------- */
236
+ /* Wrapper handles position/stacking only; surface lives on <MenuSelect> so
237
+ menuselect-* token edits reshape the in-flight UI (this is intentional). */
238
+ .ftt-dropdown-wrap {
239
+ position: absolute;
240
+ top: calc(100% + 0.25rem);
241
+ left: 50%;
242
+ translate: -50% 0;
243
+ pointer-events: auto;
244
+ z-index: 10;
245
+ }
246
+
247
+ /* --- Reduced motion ------------------------------------------------------- */
248
+ @media (prefers-reduced-motion: reduce) {
249
+ .ftt-float {
250
+ animation: none;
251
+ }
252
+ .ftt-box.ftt-bloop,
253
+ .ftt-float.ftt-flash .ftt-tag-trigger {
254
+ animation: none;
255
+ }
256
+ }