@threadlabs/looma 0.33.1 → 0.35.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 (215) hide show
  1. package/components/shared/overlay.js +8 -2
  2. package/components/shared/surface-material.js +21 -0
  3. package/components/ui-badge/ui-badge.html +11 -3
  4. package/components/ui-button/ui-button.html +92 -51
  5. package/components/ui-card/ui-card.html +50 -6
  6. package/components/ui-checkbox/ui-checkbox.html +4 -2
  7. package/components/ui-curve-editor/curve.js +10 -0
  8. package/components/ui-curve-editor/ui-curve-editor.html +181 -0
  9. package/components/ui-curve-editor/ui-curve-editor.js +51 -0
  10. package/components/ui-dialog/ui-dialog.html +64 -1
  11. package/components/ui-dialog/ui-dialog.js +9 -1
  12. package/components/ui-icon-button/ui-icon-button.html +97 -31
  13. package/components/ui-input/ui-input.html +2 -1
  14. package/components/ui-input-group/ui-input-group.html +4 -1
  15. package/components/ui-light-editor/ui-light-editor.html +45 -0
  16. package/components/ui-light-editor/ui-light-editor.js +53 -0
  17. package/components/ui-menu/ui-menu.html +62 -0
  18. package/components/ui-menu/ui-menu.js +1 -1
  19. package/components/ui-number-input/arithmetic.js +47 -0
  20. package/components/ui-number-input/ui-number-input.html +63 -0
  21. package/components/ui-number-input/ui-number-input.js +47 -0
  22. package/components/ui-popover/ui-popover.html +66 -1
  23. package/components/ui-popover/ui-popover.js +1 -1
  24. package/components/ui-select/ui-select.html +9 -7
  25. package/components/ui-slider/ui-slider.html +84 -0
  26. package/components/ui-slider/ui-slider.js +29 -0
  27. package/components/ui-switch/ui-switch.html +3 -0
  28. package/components/ui-tabs/ui-tabs.html +6 -1
  29. package/components/ui-text/ui-text.html +31 -6
  30. package/components/ui-textarea/ui-textarea.html +2 -1
  31. package/components/ui-tooltip/ui-tooltip.html +60 -0
  32. package/components/ui-tooltip/ui-tooltip.js +1 -1
  33. package/dist/index.js +47 -43
  34. package/docs/README.md +59 -5
  35. package/docs/card.html +16 -2
  36. package/docs/card.js +17 -2
  37. package/docs/catalog.json +1640 -108
  38. package/docs/customizer-render.mjs +50 -11
  39. package/docs/customizer.js +137 -24
  40. package/docs/documentation.css +9 -1
  41. package/docs/index.d.ts +8 -3
  42. package/docs/index.mjs +1 -1
  43. package/docs/preview.js +2 -0
  44. package/docs/render.mjs +16 -7
  45. package/docs/site.mjs +78 -27
  46. package/docs/theme-session.mjs +53 -0
  47. package/docs/theme.mjs +189 -18
  48. package/docs/value-editors.mjs +33 -0
  49. package/package.json +2 -2
  50. package/styles/ui-badge.css +11 -6
  51. package/styles/ui-button.css +74 -49
  52. package/styles/ui-card.css +51 -4
  53. package/styles/ui-checkbox.css +4 -2
  54. package/styles/ui-curve-editor.css +109 -0
  55. package/styles/ui-dialog.css +136 -0
  56. package/styles/ui-icon-button.css +85 -28
  57. package/styles/ui-input-group.css +4 -1
  58. package/styles/ui-input.css +2 -1
  59. package/styles/ui-light-editor.css +28 -0
  60. package/styles/ui-menu.css +74 -0
  61. package/styles/ui-number-input.css +34 -0
  62. package/styles/ui-popover.css +76 -0
  63. package/styles/ui-select.css +9 -7
  64. package/styles/ui-slider.css +53 -0
  65. package/styles/ui-switch.css +3 -0
  66. package/styles/ui-tabs.css +6 -1
  67. package/styles/ui-text.css +23 -1
  68. package/styles/ui-textarea.css +2 -1
  69. package/styles/ui-tooltip.css +72 -0
  70. package/theme-light.css +1 -0
  71. package/theme-system.css +69 -17
  72. package/tokens.css +12 -2
  73. package/vanilla/UiButton.d.ts +1 -0
  74. package/vanilla/UiButton.js +195 -130
  75. package/vanilla/UiCard.d.ts +1 -0
  76. package/vanilla/UiCard.js +12 -12
  77. package/vanilla/UiCurveEditor.d.ts +28 -0
  78. package/vanilla/UiCurveEditor.js +134 -0
  79. package/vanilla/UiIconButton.d.ts +2 -1
  80. package/vanilla/UiIconButton.js +58 -31
  81. package/vanilla/UiLightEditor.d.ts +29 -0
  82. package/vanilla/UiLightEditor.js +102 -0
  83. package/vanilla/UiNumberInput.d.ts +33 -0
  84. package/vanilla/UiNumberInput.js +86 -0
  85. package/vanilla/UiSlider.d.ts +33 -0
  86. package/vanilla/UiSlider.js +125 -0
  87. package/vanilla/UiText.d.ts +2 -2
  88. package/vanilla/UiText.js +45 -11
  89. package/vanilla/index.js +4 -0
  90. package/vue/UiBadge.vue +29 -4
  91. package/vue/UiButton.d.ts +6 -0
  92. package/vue/UiButton.vue +188 -60
  93. package/vue/UiCard.d.ts +6 -0
  94. package/vue/UiCard.vue +80 -6
  95. package/vue/UiCheckbox.vue +4 -2
  96. package/vue/UiCurveEditor.d.ts +53 -0
  97. package/vue/UiCurveEditor.js +2 -0
  98. package/vue/UiCurveEditor.vue +427 -0
  99. package/vue/UiDialog.vue +181 -1
  100. package/vue/UiIconButton.d.ts +8 -2
  101. package/vue/UiIconButton.vue +190 -45
  102. package/vue/UiInput.vue +2 -1
  103. package/vue/UiInputGroup.vue +4 -1
  104. package/vue/UiLightEditor.d.ts +75 -0
  105. package/vue/UiLightEditor.js +2 -0
  106. package/vue/UiLightEditor.vue +402 -0
  107. package/vue/UiMenu.vue +91 -0
  108. package/vue/UiNumberInput.d.ts +83 -0
  109. package/vue/UiNumberInput.js +2 -0
  110. package/vue/UiNumberInput.vue +399 -0
  111. package/vue/UiPopover.vue +94 -1
  112. package/vue/UiSelect.vue +16 -10
  113. package/vue/UiSlider.d.ts +83 -0
  114. package/vue/UiSlider.js +2 -0
  115. package/vue/UiSlider.vue +412 -0
  116. package/vue/UiSwitch.vue +3 -0
  117. package/vue/UiTabs.vue +6 -1
  118. package/vue/UiText.d.ts +7 -5
  119. package/vue/UiText.vue +104 -22
  120. package/vue/UiTextarea.vue +2 -1
  121. package/vue/UiTooltip.vue +89 -0
  122. package/vue/chunks/UiActionBar.js +1 -1
  123. package/vue/chunks/UiAffordanceScope.js +2 -2
  124. package/vue/chunks/UiAvatar.js +2 -2
  125. package/vue/chunks/UiAvatarGroup.js +2 -2
  126. package/vue/chunks/UiBadge.js +3 -3
  127. package/vue/chunks/UiBreadcrumbItem.js +2 -2
  128. package/vue/chunks/UiBreadcrumbs.js +2 -2
  129. package/vue/chunks/UiButton.js +94 -11
  130. package/vue/chunks/UiCallout.js +2 -2
  131. package/vue/chunks/UiCard.js +34 -5
  132. package/vue/chunks/UiCheckbox.js +3 -3
  133. package/vue/chunks/UiCluster.js +2 -2
  134. package/vue/chunks/UiColorPicker.js +2 -2
  135. package/vue/chunks/UiCombobox.js +2 -2
  136. package/vue/chunks/UiContainer.js +2 -2
  137. package/vue/chunks/UiContextMenu.js +2 -2
  138. package/vue/chunks/UiCover.js +2 -2
  139. package/vue/chunks/UiCurveEditor.js +413 -0
  140. package/vue/chunks/UiDescriptionItem.js +2 -2
  141. package/vue/chunks/UiDescriptionList.js +2 -2
  142. package/vue/chunks/UiDialog.js +4 -4
  143. package/vue/chunks/UiDisclosure.js +2 -2
  144. package/vue/chunks/UiEditable.js +2 -2
  145. package/vue/chunks/UiEditorBlockActions.js +2 -2
  146. package/vue/chunks/UiEditorChipEditor.js +2 -2
  147. package/vue/chunks/UiEditorCodeLanguage.js +2 -2
  148. package/vue/chunks/UiEditorFootnoteEditor.js +2 -2
  149. package/vue/chunks/UiEditorImageToolbar.js +3 -3
  150. package/vue/chunks/UiEditorInsertTableGrid.js +2 -2
  151. package/vue/chunks/UiEditorLinkCard.js +3 -3
  152. package/vue/chunks/UiEditorLinkForm.js +3 -3
  153. package/vue/chunks/UiEditorMentionMenu.js +2 -2
  154. package/vue/chunks/UiEditorMentionMenuItem.js +2 -2
  155. package/vue/chunks/UiEditorSlashMenu.js +2 -2
  156. package/vue/chunks/UiEditorSlashMenuGroup.js +2 -2
  157. package/vue/chunks/UiEditorSlashMenuItem.js +2 -2
  158. package/vue/chunks/UiEditorSurface.js +2 -2
  159. package/vue/chunks/UiEditorTableContextMenu.js +2 -2
  160. package/vue/chunks/UiEditorTableOverlay.js +2 -2
  161. package/vue/chunks/UiEditorTableToolbar.js +2 -2
  162. package/vue/chunks/UiEditorToolbar.js +2 -2
  163. package/vue/chunks/UiFloatingActionButton.js +2 -2
  164. package/vue/chunks/UiFormField.js +2 -2
  165. package/vue/chunks/UiGrid.js +2 -2
  166. package/vue/chunks/UiIcon.js +2 -2
  167. package/vue/chunks/UiIconButton.js +77 -11
  168. package/vue/chunks/UiImage.js +2 -2
  169. package/vue/chunks/UiInput.js +3 -3
  170. package/vue/chunks/UiInputGroup.js +3 -3
  171. package/vue/chunks/UiLightEditor.js +347 -0
  172. package/vue/chunks/UiList.js +2 -2
  173. package/vue/chunks/UiListItem.js +2 -2
  174. package/vue/chunks/UiListbox.js +2 -2
  175. package/vue/chunks/UiMenu.js +3 -3
  176. package/vue/chunks/UiMenuGroup.js +2 -2
  177. package/vue/chunks/UiMenuItem.js +2 -2
  178. package/vue/chunks/UiMeter.js +2 -2
  179. package/vue/chunks/UiNavItem.js +2 -2
  180. package/vue/chunks/UiNumberInput.js +403 -0
  181. package/vue/chunks/UiPageHeader.js +2 -2
  182. package/vue/chunks/UiPopover.js +4 -4
  183. package/vue/chunks/UiRadio.js +2 -2
  184. package/vue/chunks/UiRadioGroup.js +2 -2
  185. package/vue/chunks/UiReel.js +2 -2
  186. package/vue/chunks/UiScrollArea.js +2 -2
  187. package/vue/chunks/UiSearchResultRow.js +2 -2
  188. package/vue/chunks/UiSearchShell.js +2 -2
  189. package/vue/chunks/UiSection.js +2 -2
  190. package/vue/chunks/UiSelect.js +3 -3
  191. package/vue/chunks/UiSeparator.js +2 -2
  192. package/vue/chunks/UiSidebar.js +2 -2
  193. package/vue/chunks/UiSlider.js +396 -0
  194. package/vue/chunks/UiSpinner.js +2 -2
  195. package/vue/chunks/UiStack.js +2 -2
  196. package/vue/chunks/UiStatusMessage.js +2 -2
  197. package/vue/chunks/UiSwatch.js +2 -2
  198. package/vue/chunks/UiSwitch.js +3 -3
  199. package/vue/chunks/UiSwitcher.js +2 -2
  200. package/vue/chunks/UiTable.js +2 -2
  201. package/vue/chunks/UiTabs.js +3 -3
  202. package/vue/chunks/UiText.js +53 -12
  203. package/vue/chunks/UiTextarea.js +3 -3
  204. package/vue/chunks/UiToast.js +2 -2
  205. package/vue/chunks/UiToastRegion.js +2 -2
  206. package/vue/chunks/UiTooltip.js +3 -3
  207. package/vue/chunks/UiTopBar.js +1 -1
  208. package/vue/chunks/UiTree.js +2 -2
  209. package/vue/chunks/UiTreeItem.js +2 -2
  210. package/vue/chunks/_plugin-vue_export-helper.js +68 -2
  211. package/vue/chunks/props.js +24 -1
  212. package/vue/components.css +3391 -2139
  213. package/vue/editor/index.js +623 -211
  214. package/vue/index.d.ts +4 -0
  215. package/vue/index.js +6 -2
@@ -38,6 +38,7 @@
38
38
  }
39
39
 
40
40
  :scope:where([data-component~="ui-dialog"]) {
41
+ --_ui-material-scale: 1;
41
42
  /* Hooks do not inherit, so the parts below read them from the root. */
42
43
  --_ui-dialog-duration: var(--ui-dialog-duration);
43
44
 
@@ -70,6 +71,67 @@
70
71
  overlay var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete;
71
72
  }
72
73
 
74
+ /* Purpose and measured size shape one shared separation lever. The content plane stays opaque;
75
+ transparency, saturation and edge light belong to the surrounding decorative material. */
76
+ :scope:where([data-component~="ui-dialog"]) {
77
+ --_ui-material-glassiness: clamp(0, var(--ui-glassiness, 0), 1);
78
+ --_ui-material-separation: clamp(0, var(--ui-surface-separation, 0), 1);
79
+ --_ui-material-active: clamp(0, calc((var(--_ui-material-glassiness) + var(--_ui-material-separation)) * 100000), 1);
80
+ --_ui-material-rim: calc((var(--_ui-material-separation) + var(--_ui-material-glassiness) * 0.25) * var(--_ui-material-scale, 1) * 8px);
81
+ --_ui-material-content-color: var(--ui-dialog-surface, var(--ui-material-content, var(--ui-overlay-surface, var(--ui-surface-elevated))));
82
+ --_ui-material-rim-color: color-mix(in srgb, var(--ui-material-glass, var(--ui-surface-elevated)) calc(var(--_ui-material-active) * 100%), transparent);
83
+ background:
84
+ var(--ui-surface-highlight, linear-gradient(transparent, transparent)) padding-box,
85
+ linear-gradient(var(--_ui-material-content-color), var(--_ui-material-content-color)) padding-box,
86
+ linear-gradient(var(--_ui-material-rim-color), var(--_ui-material-rim-color)) border-box,
87
+ var(--_ui-material-content-color) padding-box;
88
+ border-width: calc(var(--ui-border-width) + var(--_ui-material-rim));
89
+ border-color: var(
90
+ --ui-dialog-border,
91
+ color-mix(in oklab, var(--ui-overlay-border, var(--ui-border-strong)) calc((1 - var(--_ui-material-active)) * 100%), transparent)
92
+ );
93
+ box-shadow: var(
94
+ --ui-dialog-shadow,
95
+ var(
96
+ --ui-overlay-shadow,
97
+ 0 calc(var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 8px) calc(
98
+ var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 24px
99
+ ) color-mix(in oklab, var(--ui-text-primary) 15%, transparent),
100
+ var(--ui-material-glow, 0 0 transparent),
101
+ inset 0 0 0 calc(var(--_ui-material-active) * var(--ui-border-width)) var(--ui-material-edge, var(--ui-border-strong)),
102
+ var(--ui-elevation-dialog, var(--ui-shadow-xl))
103
+ )
104
+ );
105
+ backdrop-filter: blur(calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 18px))
106
+ saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 0.18));
107
+ -webkit-backdrop-filter: blur(calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 18px))
108
+ saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 0.18));
109
+ }
110
+
111
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
112
+ :scope:where([data-component~="ui-dialog"]) {
113
+ background: var(--_ui-material-content-color);
114
+ }
115
+ }
116
+
117
+ @media (prefers-reduced-transparency: reduce) {
118
+ :scope:where([data-component~="ui-dialog"]) {
119
+ background: var(--_ui-material-content-color);
120
+ backdrop-filter: none;
121
+ -webkit-backdrop-filter: none;
122
+ }
123
+ }
124
+
125
+ @media (forced-colors: active) {
126
+ :scope:where([data-component~="ui-dialog"]) {
127
+ background: Canvas;
128
+ border-color: CanvasText;
129
+ box-shadow: none;
130
+ backdrop-filter: none;
131
+ -webkit-backdrop-filter: none;
132
+ }
133
+ }
134
+
73
135
  :scope:where([data-component~="ui-dialog"])[open] {
74
136
  display: flex !important;
75
137
  visibility: visible;
@@ -241,6 +303,18 @@
241
303
  @scope ([data-component~="ui-dialog"]) to ([data-component]) {
242
304
  /* This component's hooks style the element they are set on, and never a nested one. */
243
305
 
306
+ /* Purpose and measured size shape one shared separation lever. The content plane stays opaque;
307
+ transparency, saturation and edge light belong to the surrounding decorative material. */
308
+
309
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
310
+ }
311
+
312
+ @media (prefers-reduced-transparency: reduce) {
313
+ }
314
+
315
+ @media (forced-colors: active) {
316
+ }
317
+
244
318
  /* Own the layout wrapper; nested component roots are outside these scoped rules. */
245
319
 
246
320
  /* Alerts have no close target to add height above the title. */
@@ -285,6 +359,7 @@
285
359
  }
286
360
 
287
361
  :where([data-component~="ui-dialog"]):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-dialog"]))) {
362
+ --_ui-material-scale: 1;
288
363
  /* Hooks do not inherit, so the parts below read them from the root. */
289
364
  --_ui-dialog-duration: var(--ui-dialog-duration);
290
365
 
@@ -317,6 +392,67 @@
317
392
  overlay var(--ui-dialog-duration, var(--ui-motion-base)) var(--ui-motion-ease) allow-discrete;
318
393
  }
319
394
 
395
+ /* Purpose and measured size shape one shared separation lever. The content plane stays opaque;
396
+ transparency, saturation and edge light belong to the surrounding decorative material. */
397
+ :where([data-component~="ui-dialog"]):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-dialog"]))) {
398
+ --_ui-material-glassiness: clamp(0, var(--ui-glassiness, 0), 1);
399
+ --_ui-material-separation: clamp(0, var(--ui-surface-separation, 0), 1);
400
+ --_ui-material-active: clamp(0, calc((var(--_ui-material-glassiness) + var(--_ui-material-separation)) * 100000), 1);
401
+ --_ui-material-rim: calc((var(--_ui-material-separation) + var(--_ui-material-glassiness) * 0.25) * var(--_ui-material-scale, 1) * 8px);
402
+ --_ui-material-content-color: var(--ui-dialog-surface, var(--ui-material-content, var(--ui-overlay-surface, var(--ui-surface-elevated))));
403
+ --_ui-material-rim-color: color-mix(in srgb, var(--ui-material-glass, var(--ui-surface-elevated)) calc(var(--_ui-material-active) * 100%), transparent);
404
+ background:
405
+ var(--ui-surface-highlight, linear-gradient(transparent, transparent)) padding-box,
406
+ linear-gradient(var(--_ui-material-content-color), var(--_ui-material-content-color)) padding-box,
407
+ linear-gradient(var(--_ui-material-rim-color), var(--_ui-material-rim-color)) border-box,
408
+ var(--_ui-material-content-color) padding-box;
409
+ border-width: calc(var(--ui-border-width) + var(--_ui-material-rim));
410
+ border-color: var(
411
+ --ui-dialog-border,
412
+ color-mix(in oklab, var(--ui-overlay-border, var(--ui-border-strong)) calc((1 - var(--_ui-material-active)) * 100%), transparent)
413
+ );
414
+ box-shadow: var(
415
+ --ui-dialog-shadow,
416
+ var(
417
+ --ui-overlay-shadow,
418
+ 0 calc(var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 8px) calc(
419
+ var(--_ui-material-separation) * var(--_ui-material-scale, 1) * 24px
420
+ ) color-mix(in oklab, var(--ui-text-primary) 15%, transparent),
421
+ var(--ui-material-glow, 0 0 transparent),
422
+ inset 0 0 0 calc(var(--_ui-material-active) * var(--ui-border-width)) var(--ui-material-edge, var(--ui-border-strong)),
423
+ var(--ui-elevation-dialog, var(--ui-shadow-xl))
424
+ )
425
+ );
426
+ backdrop-filter: blur(calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 18px))
427
+ saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 0.18));
428
+ -webkit-backdrop-filter: blur(calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 18px))
429
+ saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 1) * 0.18));
430
+ }
431
+
432
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
433
+ :where([data-component~="ui-dialog"]):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-dialog"]))) {
434
+ background: var(--_ui-material-content-color);
435
+ }
436
+ }
437
+
438
+ @media (prefers-reduced-transparency: reduce) {
439
+ :where([data-component~="ui-dialog"]):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-dialog"]))) {
440
+ background: var(--_ui-material-content-color);
441
+ backdrop-filter: none;
442
+ -webkit-backdrop-filter: none;
443
+ }
444
+ }
445
+
446
+ @media (forced-colors: active) {
447
+ :where([data-component~="ui-dialog"]):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-dialog"]))) {
448
+ background: Canvas;
449
+ border-color: CanvasText;
450
+ box-shadow: none;
451
+ backdrop-filter: none;
452
+ -webkit-backdrop-filter: none;
453
+ }
454
+ }
455
+
320
456
  :where([data-component~="ui-dialog"])[open]:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-dialog"]))) {
321
457
  display: flex !important;
322
458
  visibility: visible;
@@ -88,7 +88,9 @@
88
88
  :scope:where([data-component~="ui-icon-button"]) {
89
89
  /* Optional inherited action-group values keep text and icon actions under the same light.
90
90
  One fine top/start highlight follows the bottom/end lowlight at a joined action seam.
91
- A single ambient lift avoids stacking a face gradient or another inset bevel. */
91
+ The shared theme supplies reflections and glow independently of the resting lift. */
92
+ --_tone-highlight: var(--ui-accent-highlight, none);
93
+ --_tone-glow: var(--ui-accent-glow, 0 0 transparent);
92
94
  --_ui-action-start: 1px;
93
95
  --_ui-action-edge: var(
94
96
  --ui-action-edge,
@@ -108,7 +110,9 @@
108
110
  --_ui-action-start: -1px;
109
111
  }
110
112
 
111
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="tone=accent"] {
113
+ :scope:where([data-component~="ui-icon-button"])[data-tone="accent"] {
114
+ --_tone-highlight: var(--ui-accent-highlight, none);
115
+ --_tone-glow: var(--ui-accent-glow, 0 0 transparent);
112
116
  --_icon-button-border: var(--ui-accent-solid);
113
117
  --_icon-button-hover-border: var(--ui-accent-hover);
114
118
  --_icon-button-text: var(--ui-accent-subtle-text, var(--ui-accent-solid));
@@ -116,11 +120,65 @@
116
120
  color: var(--_icon-button-text);
117
121
  }
118
122
 
123
+ :scope:where([data-component~="ui-icon-button"])[data-tone="danger"] {
124
+ --_tone-highlight: var(--ui-danger-highlight, none);
125
+ --_tone-glow: var(--ui-danger-glow, 0 0 transparent);
126
+ --_icon-button-border: var(--ui-danger);
127
+ --_icon-button-hover-border: var(--ui-danger-hover);
128
+ --_icon-button-text: var(--ui-danger-subtle-text);
129
+ --_icon-button-outline-surface: color-mix(in srgb, var(--ui-danger) 5%, var(--ui-surface-default));
130
+ --_icon-button-solid-surface: var(--ui-danger);
131
+ --_icon-button-solid-hover-surface: var(--ui-danger-hover);
132
+ --_icon-button-solid-text: var(--ui-danger-on-strong);
133
+ color: var(--_icon-button-text);
134
+ }
135
+
136
+ :scope:where([data-component~="ui-icon-button"])[data-tone="success"] {
137
+ --_tone-highlight: var(--ui-success-highlight, none);
138
+ --_tone-glow: var(--ui-success-glow, 0 0 transparent);
139
+ --_icon-button-border: var(--ui-success);
140
+ --_icon-button-hover-border: var(--ui-success-hover);
141
+ --_icon-button-text: var(--ui-success-subtle-text);
142
+ --_icon-button-outline-surface: color-mix(in srgb, var(--ui-success) 5%, var(--ui-surface-default));
143
+ --_icon-button-solid-surface: var(--ui-success);
144
+ --_icon-button-solid-hover-surface: var(--ui-success-hover);
145
+ --_icon-button-solid-text: var(--ui-success-on-strong);
146
+ color: var(--_icon-button-text);
147
+ }
148
+
149
+ :scope:where([data-component~="ui-icon-button"])[data-tone="warning"] {
150
+ --_tone-highlight: var(--ui-warning-highlight, none);
151
+ --_tone-glow: var(--ui-warning-glow, 0 0 transparent);
152
+ --_icon-button-border: var(--ui-warning);
153
+ --_icon-button-hover-border: var(--ui-warning-hover);
154
+ --_icon-button-text: var(--ui-warning-subtle-text);
155
+ --_icon-button-outline-surface: color-mix(in srgb, var(--ui-warning) 5%, var(--ui-surface-default));
156
+ --_icon-button-solid-surface: var(--ui-warning);
157
+ --_icon-button-solid-hover-surface: var(--ui-warning-hover);
158
+ --_icon-button-solid-text: var(--ui-warning-on-strong);
159
+ color: var(--_icon-button-text);
160
+ }
161
+
162
+ :scope:where([data-component~="ui-icon-button"])[data-tone="info"] {
163
+ --_tone-highlight: var(--ui-info-highlight, none);
164
+ --_tone-glow: var(--ui-info-glow, 0 0 transparent);
165
+ --_icon-button-border: var(--ui-info);
166
+ --_icon-button-hover-border: var(--ui-info-hover);
167
+ --_icon-button-text: var(--ui-info-subtle-text);
168
+ --_icon-button-outline-surface: color-mix(in srgb, var(--ui-info) 5%, var(--ui-surface-default));
169
+ --_icon-button-solid-surface: var(--ui-info);
170
+ --_icon-button-solid-hover-surface: var(--ui-info-hover);
171
+ --_icon-button-solid-text: var(--ui-info-on-strong);
172
+ color: var(--_icon-button-text);
173
+ }
174
+
119
175
  /* Omitted tone retains the existing accent solid; explicit neutral is additive. */
120
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="tone=neutral"] {
121
- --_icon-button-solid-surface: var(--ui-text-primary);
122
- --_icon-button-solid-hover-surface: var(--ui-text-primary);
123
- --_icon-button-solid-text: var(--ui-surface-default);
176
+ :scope:where([data-component~="ui-icon-button"])[data-tone="neutral"] {
177
+ --_tone-highlight: var(--ui-neutral-highlight, none);
178
+ --_tone-glow: var(--ui-neutral-glow, 0 0 transparent);
179
+ --_icon-button-solid-surface: var(--ui-neutral-surface);
180
+ --_icon-button-solid-hover-surface: var(--ui-neutral-hover);
181
+ --_icon-button-solid-text: var(--ui-text);
124
182
  }
125
183
 
126
184
  :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"] {
@@ -162,13 +220,13 @@
162
220
  }
163
221
 
164
222
  @media (hover: hover) and (pointer: fine) {
165
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:not(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="revealed"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible) {
223
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:not(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="revealed"], :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible) {
166
224
  border-color: transparent;
167
225
  background-color: transparent;
168
226
  box-shadow: none;
169
227
  }
170
228
 
171
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:not(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="revealed"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)
229
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:not(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="revealed"], :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="loading"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="pending"], :disabled, [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)
172
230
  .content {
173
231
  opacity: 0;
174
232
  transform: scale(0.65);
@@ -176,7 +234,7 @@
176
234
  }
177
235
  }
178
236
 
179
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:is(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="revealed"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"], [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
237
+ :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="anticipatory"]:is(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="revealed"], :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"], [aria-pressed="true"], [data-ui-proximity="near"], :hover, :focus-visible)::before {
180
238
  opacity: 0;
181
239
  }
182
240
 
@@ -285,19 +343,19 @@
285
343
  border-radius: var(--ui-radius-round);
286
344
  }
287
345
 
288
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"] {
346
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"] {
289
347
  border-color: var(--ui-icon-button-border, var(--_icon-button-border, var(--ui-control-border, var(--ui-border-strong))));
290
348
  background-color: var(--ui-icon-button-outline-surface, var(--_icon-button-outline-surface, var(--ui-surface-default)));
291
- background-image: none;
349
+ background-image: var(--ui-surface-highlight, none);
292
350
  color: var(--ui-icon-button-outline-text, var(--_icon-button-text, var(--ui-text-primary)));
293
- box-shadow: var(--ui-action-shadow, var(--_ui-action-shadow));
351
+ box-shadow: var(--ui-action-shadow, var(--_ui-action-shadow)), var(--_tone-glow);
294
352
  }
295
353
 
296
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"] {
354
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"] {
297
355
  background-color: var(--ui-icon-button-solid-surface, var(--_icon-button-solid-surface, var(--ui-accent-solid)));
298
- background-image: none;
356
+ background-image: var(--_tone-highlight);
299
357
  color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
300
- box-shadow: var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow)));
358
+ box-shadow: var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))), var(--_tone-glow);
301
359
  }
302
360
 
303
361
  :scope:where([data-component~="ui-icon-button"]):hover:enabled:not([aria-disabled="true"]) {
@@ -306,27 +364,26 @@
306
364
  color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
307
365
  }
308
366
 
309
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"]:hover:enabled:not([aria-disabled="true"]) {
367
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"]:hover:enabled:not([aria-disabled="true"]) {
310
368
  border-color: var(--ui-icon-button-hover-border, var(--_icon-button-hover-border, var(--ui-control-border-hover, var(--ui-control-border))));
311
369
  }
312
370
 
313
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"]:hover:enabled:not([aria-disabled="true"]) {
371
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"]:hover:enabled:not([aria-disabled="true"]) {
314
372
  background-color: var(--ui-icon-button-solid-hover-surface, var(--_icon-button-solid-hover-surface, var(--ui-accent-hover)));
315
373
  }
316
374
 
317
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=accent"]:hover:enabled:not([aria-disabled="true"]),
318
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"][data-ui-icon-button-state~="tone=neutral"]:hover:enabled:not([aria-disabled="true"]) {
375
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"]:hover:enabled:not([aria-disabled="true"]) {
319
376
  color: var(--ui-icon-button-solid-text, var(--_icon-button-solid-text, var(--ui-text-on-accent)));
320
377
  }
321
378
 
322
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=ghost"][aria-expanded="true"]:enabled:not([aria-disabled="true"]) {
379
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="ghost"][aria-expanded="true"]:enabled:not([aria-disabled="true"]) {
323
380
  background-color: var(--ui-icon-button-active-surface, color-mix(in srgb, currentColor 16%, transparent));
324
381
  color: var(--ui-icon-button-hover-text, var(--_icon-button-text, var(--ui-text-primary)));
325
382
  box-shadow: var(--ui-pressed);
326
383
  }
327
384
 
328
385
  /* Native toggle state persists after pointer release, including during loading. */
329
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled {
386
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"][aria-pressed="true"]:enabled {
330
387
  background-color: var(--ui-icon-button-active-surface, color-mix(in srgb, currentColor 12%, var(--ui-surface-default)));
331
388
  background-image: none;
332
389
  box-shadow: var(--ui-pressed);
@@ -361,35 +418,35 @@
361
418
  box-shadow: var(--ui-focus-halo);
362
419
  }
363
420
 
364
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"]:focus-visible {
421
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"]:focus-visible {
365
422
  box-shadow:
366
423
  var(--ui-action-shadow, var(--_ui-action-shadow)),
367
424
  var(--ui-focus-halo);
368
425
  }
369
426
 
370
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"]:focus-visible {
427
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"]:focus-visible {
371
428
  box-shadow:
372
429
  var(--ui-icon-button-solid-shadow, var(--ui-action-shadow, var(--_ui-action-shadow))),
373
430
  var(--ui-focus-halo);
374
431
  }
375
432
 
376
- :scope:where([data-component~="ui-icon-button"]):is(:scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"], :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=solid"]):active:enabled:not([aria-disabled="true"]) {
433
+ :scope:where([data-component~="ui-icon-button"]):is(:scope:where([data-component~="ui-icon-button"])[data-appearance="outline"], :scope:where([data-component~="ui-icon-button"])[data-appearance="solid"]):active:enabled:not([aria-disabled="true"]) {
377
434
  background-image: none;
378
435
  box-shadow: var(--ui-pressed);
379
436
  }
380
437
 
381
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled:focus-visible {
438
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"][aria-pressed="true"]:enabled:focus-visible {
382
439
  box-shadow:
383
440
  var(--ui-pressed),
384
441
  var(--ui-focus-halo);
385
442
  }
386
443
 
387
444
  @media (forced-colors: active) {
388
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled {
445
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"][aria-pressed="true"]:enabled {
389
446
  outline: var(--ui-focus-width) solid Highlight;
390
447
  outline-offset: calc(-2 * var(--ui-focus-width));
391
448
  }
392
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=outline"][aria-pressed="true"]:enabled:focus-visible {
449
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="outline"][aria-pressed="true"]:enabled:focus-visible {
393
450
  outline-offset: var(--ui-focus-width);
394
451
  }
395
452
  }
@@ -406,7 +463,7 @@
406
463
  background-image: none;
407
464
  }
408
465
 
409
- :scope:where([data-component~="ui-icon-button"])[data-ui-icon-button-state~="variant=ghost"]:disabled {
466
+ :scope:where([data-component~="ui-icon-button"])[data-appearance="ghost"]:disabled {
410
467
  border-color: transparent;
411
468
  }
412
469
 
@@ -42,6 +42,7 @@
42
42
  --_ui-default-input-focus-outline: none;
43
43
  --_ui-default-input-radius: 0;
44
44
  --_ui-default-input-surface: transparent;
45
+ --_ui-default-input-highlight: none;
45
46
  --_ui-default-textarea-border-width: 0;
46
47
  --_ui-default-textarea-border: transparent;
47
48
  --_ui-default-textarea-border-hover: transparent;
@@ -53,6 +54,7 @@
53
54
  --_ui-default-textarea-focus-outline: none;
54
55
  --_ui-default-textarea-radius: 0;
55
56
  --_ui-default-textarea-surface: transparent;
57
+ --_ui-default-textarea-highlight: none;
56
58
 
57
59
  display: flex !important;
58
60
  align-items: stretch !important;
@@ -63,7 +65,8 @@
63
65
  /* The frame reads the shared control tokens with a lone Input's fallbacks, so the two match. */
64
66
  border: var(--ui-border-width) solid var(--ui-control-border, var(--ui-border-strong));
65
67
  border-radius: var(--ui-input-group-radius, var(--ui-field-radius, var(--ui-radius-md)));
66
- background: var(--ui-control-surface, var(--ui-surface-elevated));
68
+ background-color: var(--ui-control-surface, var(--ui-surface-elevated));
69
+ background-image: var(--ui-surface-highlight, none);
67
70
  box-shadow: var(--ui-control-inset);
68
71
  overflow: hidden;
69
72
  /* A press anywhere in the frame focuses the input. */
@@ -75,7 +75,8 @@
75
75
  border: var(--ui-input-border-width, var(--_ui-default-input-border-width, var(--ui-border-width))) solid
76
76
  var(--ui-input-border, var(--_ui-default-input-border, var(--ui-control-border, var(--ui-border-strong))));
77
77
  border-radius: var(--ui-input-radius, var(--_ui-default-input-radius, var(--ui-field-radius, var(--ui-radius-md))));
78
- background: var(--ui-input-surface, var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated))));
78
+ background-color: var(--ui-input-surface, var(--_ui-default-input-surface, var(--ui-control-surface, var(--ui-surface-elevated))));
79
+ background-image: var(--_ui-default-input-highlight, var(--ui-surface-highlight, none));
79
80
  color: var(--ui-text-primary);
80
81
  font: inherit;
81
82
  line-height: var(--ui-line-height-tight);
@@ -0,0 +1,28 @@
1
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
2
+ @supports (-moz-appearance: none) {
3
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
4
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
5
+ }
6
+ @supports (-moz-appearance: none) {
7
+ [data-component~="ui-light-editor"] { --html-next-scope-owner: "ui-light-editor" !important; }
8
+ }
9
+ @scope ([data-component~="ui-light-editor"]) to ([data-component], [data-slotted]) {
10
+ :scope:where([data-component~="ui-light-editor"]) { display: grid !important; gap: var(--ui-space-3) !important; min-inline-size: 0; padding: 0 !important; margin: 0 !important; }
11
+ .stage { box-sizing: border-box !important; display: block !important; block-size: 13rem; padding: calc(var(--ui-control-min-block-size) / 2) !important; border: var(--ui-border-width) solid var(--ui-control-border); border-radius: var(--ui-field-radius, var(--ui-radius-md)); background: var(--ui-neutral-surface, var(--ui-surface)); }
12
+ .plane { position: relative; display: block !important; inline-size: 100%; block-size: 100%; }
13
+ svg { inline-size: 100%; block-size: 100%; overflow: visible; }
14
+ path { fill: none; stroke: var(--ui-border); stroke-width: 1; vector-effect: non-scaling-stroke; }
15
+ .specimen { position: absolute; inset: 0; display: grid !important; place-items: center !important; }
16
+ .source { position: absolute; left: 50%; top: 0; translate: -50% -50%; display: grid !important; place-items: center !important; inline-size: max(2rem, var(--ui-control-min-block-size)); block-size: max(2rem, var(--ui-control-min-block-size)); padding: 0 !important; margin: 0 !important; border: 0; border-radius: 50%; background: transparent; cursor: grab; touch-action: none; }
17
+ .source:where(:not([data-component], [data-slotted]))::after { content: ""; inline-size: 1rem; block-size: 1rem; border: var(--ui-border-width) solid var(--ui-accent); border-radius: 50%; background: var(--ui-surface-raised); box-shadow: 0 0 0 var(--ui-space-2) color-mix(in srgb, var(--ui-accent) 12%, transparent), var(--ui-shadow-sm); }
18
+ .source:active { cursor: grabbing; }
19
+ .source:focus-visible { outline: var(--ui-focus-width) solid var(--ui-focus-ring); outline-offset: var(--ui-space-1); }
20
+ .source:disabled { cursor: not-allowed; }
21
+ .source:disabled:where(:not([data-component], [data-slotted]))::after { background: var(--ui-disabled-surface); border-color: var(--ui-disabled-border); box-shadow: none; }
22
+ .coordinates { display: grid !important; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--ui-space-2) !important; }
23
+ .hint { font-size: var(--ui-font-size-sm); color: var(--ui-text-secondary); }
24
+ @media (forced-colors: active) { .source:where(:not([data-component], [data-slotted]))::after { background: Canvas; border-color: CanvasText; } .source:focus-visible { outline-color: Highlight; } }
25
+ }
26
+ @scope ([data-component~="ui-light-editor"]) to ([data-component]) {
27
+ @media (forced-colors: active) { }
28
+ }
@@ -58,6 +58,7 @@
58
58
  }
59
59
 
60
60
  :scope:where([data-component~="ui-menu"]) {
61
+ --_ui-material-scale: 0.28;
61
62
  --_ui-menu-surface: var(--ui-menu-surface);
62
63
  --_ui-menu-border: var(--ui-menu-border);
63
64
  --_ui-menu-radius: var(--ui-menu-radius);
@@ -99,6 +100,67 @@
99
100
  overflow: auto;
100
101
  }
101
102
 
103
+ /* Purpose and measured size shape one shared separation lever. The content plane stays opaque;
104
+ transparency, saturation and edge light belong to the surrounding decorative material. */
105
+ :scope:where([data-component~="ui-menu"]):not([inline]) .surface {
106
+ --_ui-material-glassiness: clamp(0, var(--ui-glassiness, 0), 1);
107
+ --_ui-material-separation: clamp(0, var(--ui-surface-separation, 0), 1);
108
+ --_ui-material-active: clamp(0, calc((var(--_ui-material-glassiness) + var(--_ui-material-separation)) * 100000), 1);
109
+ --_ui-material-rim: calc((var(--_ui-material-separation) + var(--_ui-material-glassiness) * 0.25) * var(--_ui-material-scale, 0.28) * 8px);
110
+ --_ui-material-content-color: var(--_ui-menu-surface, var(--ui-material-content, var(--ui-overlay-surface, var(--ui-surface-elevated))));
111
+ --_ui-material-rim-color: color-mix(in srgb, var(--ui-material-glass, var(--ui-surface-elevated)) calc(var(--_ui-material-active) * 100%), transparent);
112
+ background:
113
+ var(--ui-surface-highlight, linear-gradient(transparent, transparent)) padding-box,
114
+ linear-gradient(var(--_ui-material-content-color), var(--_ui-material-content-color)) padding-box,
115
+ linear-gradient(var(--_ui-material-rim-color), var(--_ui-material-rim-color)) border-box,
116
+ var(--_ui-material-content-color) padding-box;
117
+ border-width: calc(var(--ui-border-width) + var(--_ui-material-rim));
118
+ border-color: var(
119
+ --_ui-menu-border,
120
+ color-mix(in oklab, var(--ui-overlay-border, var(--ui-border-strong)) calc((1 - var(--_ui-material-active)) * 100%), transparent)
121
+ );
122
+ box-shadow: var(
123
+ --_ui-menu-shadow,
124
+ var(
125
+ --ui-overlay-shadow,
126
+ 0 calc(var(--_ui-material-separation) * var(--_ui-material-scale, 0.28) * 8px) calc(
127
+ var(--_ui-material-separation) * var(--_ui-material-scale, 0.28) * 24px
128
+ ) color-mix(in oklab, var(--ui-text-primary) 15%, transparent),
129
+ var(--ui-material-glow, 0 0 transparent),
130
+ inset 0 0 0 calc(var(--_ui-material-active) * var(--ui-border-width)) var(--ui-material-edge, var(--ui-border-strong)),
131
+ var(--ui-elevation-overlay, var(--ui-shadow-lg))
132
+ )
133
+ );
134
+ backdrop-filter: blur(calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.28) * 18px))
135
+ saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.28) * 0.18));
136
+ -webkit-backdrop-filter: blur(calc(var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.28) * 18px))
137
+ saturate(calc(1 + var(--_ui-material-glassiness) * var(--_ui-material-scale, 0.28) * 0.18));
138
+ }
139
+
140
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
141
+ :scope:where([data-component~="ui-menu"]):not([inline]) .surface {
142
+ background: var(--_ui-material-content-color);
143
+ }
144
+ }
145
+
146
+ @media (prefers-reduced-transparency: reduce) {
147
+ :scope:where([data-component~="ui-menu"]):not([inline]) .surface {
148
+ background: var(--_ui-material-content-color);
149
+ backdrop-filter: none;
150
+ -webkit-backdrop-filter: none;
151
+ }
152
+ }
153
+
154
+ @media (forced-colors: active) {
155
+ :scope:where([data-component~="ui-menu"]):not([inline]) .surface {
156
+ background: Canvas;
157
+ border-color: CanvasText;
158
+ box-shadow: none;
159
+ backdrop-filter: none;
160
+ -webkit-backdrop-filter: none;
161
+ }
162
+ }
163
+
102
164
  .surface hr {
103
165
  align-self: stretch;
104
166
  block-size: 0;
@@ -156,6 +218,18 @@
156
218
 
157
219
  /* Small follows its trigger down: an item's own hooks still win. */
158
220
 
221
+ /* Purpose and measured size shape one shared separation lever. The content plane stays opaque;
222
+ transparency, saturation and edge light belong to the surrounding decorative material. */
223
+
224
+ @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
225
+ }
226
+
227
+ @media (prefers-reduced-transparency: reduce) {
228
+ }
229
+
230
+ @media (forced-colors: active) {
231
+ }
232
+
159
233
  @starting-style {
160
234
  }
161
235
 
@@ -0,0 +1,34 @@
1
+ /* Generated by HTML Next 1.0.0-alpha.69. Do not edit. */
2
+ @supports (-moz-appearance: none) {
3
+ :where([data-component], [data-slotted]) { --html-next-scope-owner: boundary; }
4
+ :where([data-slotted]:not([data-component])) { --html-next-scope-owner: projected !important; }
5
+ }
6
+ @supports (-moz-appearance: none) {
7
+ [data-component~="ui-number-input"] { --html-next-scope-owner: "ui-number-input" !important; }
8
+ }
9
+ @scope ([data-component~="ui-number-input"]) to ([data-component], [data-slotted]) {
10
+ :scope:where([data-component~="ui-number-input"]) {
11
+ display: flex !important;
12
+ align-items: center !important;
13
+ gap: var(--ui-space-1) !important;
14
+ margin: 0 !important;
15
+ padding: 0 !important;
16
+ min-inline-size: 0;
17
+ }
18
+ :scope:where([data-component~="ui-number-input"])[hidden] {
19
+ display: none !important;
20
+ }
21
+ }
22
+ @scope ([data-slotted~="ui-number-input"]:not([data-component])) to ([data-component], [data-slotted]) {
23
+ :where([data-component~="ui-number-input"]):where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-number-input"]))) {
24
+ display: flex !important;
25
+ align-items: center !important;
26
+ gap: var(--ui-space-1) !important;
27
+ margin: 0 !important;
28
+ padding: 0 !important;
29
+ min-inline-size: 0;
30
+ }
31
+ :where([data-component~="ui-number-input"])[hidden]:where(:scope, :not([data-component], [data-slotted]:not([data-slotted~="ui-number-input"]))) {
32
+ display: none !important;
33
+ }
34
+ }