mnfst 0.5.192 → 0.5.194

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.
package/lib/manifest.css CHANGED
@@ -271,13 +271,7 @@
271
271
 
272
272
  :where(::placeholder) {
273
273
  opacity: 1;
274
- color: #9ca3af
275
- }
276
-
277
- @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {
278
- :where(::placeholder) {
279
- color: color-mix(in oklab, currentcolor 50%, transparent)
280
- }
274
+ color: color-mix(in oklab, currentcolor 50%, transparent)
281
275
  }
282
276
 
283
277
  @keyframes mnfst-popover-in {
@@ -290,13 +284,9 @@
290
284
  }
291
285
  }
292
286
 
293
- :where([popover]) {
294
- display: none;
295
-
296
- &:popover-open {
297
- display: flex;
298
- animation: mnfst-popover-in .15s ease-in both;
299
- }
287
+ :where([popover]):not(.unstyle):popover-open {
288
+ display: flex;
289
+ animation: mnfst-popover-in .15s ease-in both;
300
290
  }
301
291
 
302
292
  :where(progress) {
@@ -375,6 +365,11 @@
375
365
  navigation: auto
376
366
  }
377
367
 
368
+ /* Unlayered on purpose: a closed popover must beat layer-based layout classes. */
369
+ [popover]:not(.unstyle):not(:popover-open) {
370
+ display: none;
371
+ }
372
+
378
373
  /* Manifest Accordions */
379
374
 
380
375
  @layer base, components, utilities;
@@ -435,11 +430,8 @@
435
430
  width: 1rem;
436
431
  height: 1rem;
437
432
  background-color: color-mix(in oklch, var(--color-field-surface, color-mix(in oklch, oklch(20.5% 0 0) 10%, transparent)) 50%, var(--color-field-inverse, oklch(43.9% 0 0)));
438
- -webkit-mask-image: var(--icon-accordion, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 256 256'%3E%3Cpath fill='%23000' d='m184.49 136.49l-80 80a12 12 0 0 1-17-17L159 128L87.51 56.49a12 12 0 1 1 17-17l80 80a12 12 0 0 1-.02 17'/%3E%3C/svg%3E"));
439
433
  mask-image: var(--icon-accordion, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 256 256'%3E%3Cpath fill='%23000' d='m184.49 136.49l-80 80a12 12 0 0 1-17-17L159 128L87.51 56.49a12 12 0 1 1 17-17l80 80a12 12 0 0 1-.02 17'/%3E%3C/svg%3E"));
440
- -webkit-mask-repeat: no-repeat;
441
434
  mask-repeat: no-repeat;
442
- -webkit-mask-size: 100% 100%;
443
435
  mask-size: 100% 100%;
444
436
  transform: rotate(0);
445
437
  transition: 0.25s transform ease
@@ -666,11 +658,13 @@
666
658
  appearance: base-select;
667
659
 
668
660
  &::picker-icon {
669
- content: "⌄";
670
- height: calc(var(--spacing-field-height, 2.25rem) * 0.5);
671
- transform: scaleY(0.7);
672
- font-size: 20px;
673
- line-height: 0.4
661
+ content: "";
662
+ width: 1rem;
663
+ height: 1rem;
664
+ background-color: currentColor;
665
+ mask-repeat: no-repeat;
666
+ mask-size: 100% 100%;
667
+ mask-image: var(--icon-chevron-down, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 9 6 6 6-6'/%3E%3C/svg%3E"))
674
668
  }
675
669
  }
676
670
  }
@@ -861,9 +855,9 @@
861
855
 
862
856
  /* On a filled segment (bar/slice center) — read against the fill */
863
857
  &.inverse {
864
- fill: black;
858
+ fill: var(--color-content-stark, oklch(20.5% 0 0));
865
859
  paint-order: stroke;
866
- stroke: rgba(255, 255, 255, 0.75);
860
+ stroke: color-mix(in oklch, var(--color-page, oklch(98.5% 0 0)) 75%, transparent);
867
861
  stroke-width: 1.5px
868
862
  }
869
863
  }
@@ -985,7 +979,6 @@
985
979
  flex-direction: column;
986
980
  width: 100%;
987
981
  height: 100%;
988
- box-shadow: var(--shadow);
989
982
  overflow: hidden;
990
983
 
991
984
  /* Chat log scroll container */
@@ -1134,6 +1127,8 @@
1134
1127
 
1135
1128
  @layer components {
1136
1129
 
1130
+ /* Deliberately unflattened: manifest.input.css supplies the field chrome via
1131
+ a lower-specificity rule that sorts later, so this must outrank it. */
1137
1132
  input[type=checkbox]:not([role=switch], .unstyle) {
1138
1133
  position: relative;
1139
1134
  min-width: calc(var(--spacing-field-height, 2.25rem) * 0.6);
@@ -1167,11 +1162,8 @@
1167
1162
  width: 60%;
1168
1163
  height: 60%;
1169
1164
  background-color: var(--color-field-inverse, oklch(43.9% 0 0));
1170
- -webkit-mask-image: var(--icon-check, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='currentColor' d='m0 11l2-2l5 5L18 3l2 2L7 18z'/%3E%3C/svg%3E"));
1171
1165
  mask-image: var(--icon-check, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath fill='currentColor' d='m0 11l2-2l5 5L18 3l2 2L7 18z'/%3E%3C/svg%3E"));
1172
- -webkit-mask-repeat: no-repeat;
1173
1166
  mask-repeat: no-repeat;
1174
- -webkit-mask-size: 100% 100%;
1175
1167
  mask-size: 100% 100%;
1176
1168
  transform-origin: center;
1177
1169
  transition: var(--transition, all .05s ease-in-out);
@@ -1193,6 +1185,8 @@
1193
1185
 
1194
1186
  @layer base, components, utilities;
1195
1187
 
1188
+
1189
+
1196
1190
  :root {
1197
1191
  --color-picker-swatch: var(--color-line, color-mix(in oklch, oklch(20.5% 0 0) 10%, transparent));
1198
1192
  --icon-color-solid: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='lucide lucide-paint-roller-icon lucide-paint-roller'%3E%3Crect width='16' height='6' x='2' y='2' rx='2'/%3E%3Cpath d='M10 16v-2a2 2 0 0 1 2-2h8a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2h-2'/%3E%3Crect width='4' height='6' x='8' y='16' rx='1'/%3E%3C/svg%3E");
@@ -1875,7 +1869,7 @@
1875
1869
  height: 1em;
1876
1870
  margin-inline-start: auto;
1877
1871
  background-color: var(--color-content-subtle, oklch(55.6% 0 0));
1878
- mask: var(--icon-chevron-down, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 9 6 6 6-6'/%3E%3C/svg%3E")) center / contain no-repeat
1872
+ mask: var(--icon-chevron-down, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 9 6 6 6-6'/%3E%3C/svg%3E")) center / contain no-repeat
1879
1873
  }
1880
1874
  }
1881
1875
 
@@ -1944,6 +1938,8 @@
1944
1938
 
1945
1939
  @layer base, components, utilities;
1946
1940
 
1941
+
1942
+
1947
1943
  @layer utilities {
1948
1944
 
1949
1945
  /* Picker container only (not trigger input/button) */
@@ -2297,11 +2293,13 @@
2297
2293
  }
2298
2294
 
2299
2295
  &::before {
2300
- content: "⌄";
2301
- height: calc(var(--spacing-field-height, 2.25rem) * 0.5);
2302
- transform: scaleY(0.7);
2303
- font-size: 20px;
2304
- line-height: 0.4
2296
+ content: "";
2297
+ width: 1rem;
2298
+ height: 1rem;
2299
+ background-color: currentColor;
2300
+ mask-repeat: no-repeat;
2301
+ mask-size: 100% 100%;
2302
+ mask-image: var(--icon-chevron-down, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m6 9 6 6 6-6'/%3E%3C/svg%3E"))
2305
2303
  }
2306
2304
  }
2307
2305
  }
@@ -2470,11 +2468,11 @@
2470
2468
  }
2471
2469
 
2472
2470
  /* Manifest Dialogs */
2471
+
2473
2472
  @layer base, components, utilities;
2474
2473
 
2475
- [popover]:not(.unstyle):not(:popover-open) {
2476
- display: none;
2477
- }
2474
+
2475
+
2478
2476
 
2479
2477
 
2480
2478
  @layer components {
@@ -2493,7 +2491,7 @@
2493
2491
  background-color: var(--color-popover-surface, oklch(98.5% 0 0));
2494
2492
  border: 0 none;
2495
2493
  border-radius: calc(var(--radius, 0.5rem) * 2);
2496
- box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
2494
+ box-shadow: var(--shadow-lg, 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1));
2497
2495
 
2498
2496
  &::backdrop {
2499
2497
  background-color: rgba(0, 0, 0, 0.2);
@@ -2709,19 +2707,17 @@
2709
2707
  }
2710
2708
 
2711
2709
  /* Active item — a hook, not a look (bind :aria-current="$route === '/x' ? 'page' : null') */
2712
- [dock] > a[aria-current="page"],
2713
- [dock] > button[aria-current="page"],
2714
- [dock] > .selected {
2710
+ :where([dock] > a[aria-current="page"], [dock] > button[aria-current="page"], [dock] > .selected) {
2715
2711
  color: var(--color-content-stark, oklch(14.5% 0 0))
2716
2712
  }
2717
2713
  }
2718
2714
 
2719
2715
  /* Manifest Dropdowns */
2716
+
2720
2717
  @layer base, components, utilities;
2721
2718
 
2722
- [popover]:not(.unstyle):not(:popover-open) {
2723
- display: none;
2724
- }
2719
+
2720
+
2725
2721
 
2726
2722
 
2727
2723
  @layer components {
@@ -2864,109 +2860,17 @@
2864
2860
  margin: 0 var(--spacing-popover-offset, 0.5rem)
2865
2861
  }
2866
2862
 
2867
- /* Center alignment */
2863
+ /* Center alignment (dropdown-only; tooltips have no .center) */
2868
2864
  :where(menu.center) {
2869
2865
  position-area: center
2870
2866
  }
2867
+ }
2871
2868
 
2872
- /* Top alignment */
2873
- :where(menu.top) {
2874
- position-area: top;
2875
- margin: var(--spacing-popover-offset, 0.5rem) 0
2876
- }
2877
-
2878
- /* Bottom alignment */
2879
- :where(menu.bottom) {
2880
- position-area: bottom;
2881
- margin: var(--spacing-popover-offset, 0.5rem) 0
2882
- }
2883
-
2884
- /* Start alignment */
2885
- :where(menu.start) {
2886
- position-area: center start;
2887
- margin: 0 var(--spacing-popover-offset, 0.5rem)
2888
- }
2889
-
2890
- /* End alignment */
2891
- :where(menu.end) {
2892
- position-area: center end;
2893
- margin: 0 var(--spacing-popover-offset, 0.5rem)
2894
- }
2895
-
2896
- /* Top start alignment */
2897
- :where(menu.top-start) {
2898
- position-area: start span-end;
2899
- margin: var(--spacing-popover-offset, 0.5rem) 0
2900
- }
2901
-
2902
- /* Top end alignment */
2903
- :where(menu.top-end) {
2904
- position-area: start span-start;
2905
- margin: var(--spacing-popover-offset, 0.5rem) 0
2906
- }
2907
-
2908
- /* Bottom start alignment */
2909
- :where(menu.bottom-start) {
2910
- position-area: end span-end;
2911
- margin: var(--spacing-popover-offset, 0.5rem) 0
2912
- }
2913
-
2914
- /* Bottom end alignment */
2915
- :where(menu.bottom-end) {
2916
- position-area: end span-start;
2917
- margin: var(--spacing-popover-offset, 0.5rem) 0
2918
- }
2919
-
2920
- /* Start top alignment */
2921
- :where(menu.start-top) {
2922
- position-area: span-end start;
2923
- margin: 0 var(--spacing-popover-offset, 0.5rem)
2924
- }
2925
-
2926
- /* Start bottom alignment */
2927
- :where(menu.start-bottom) {
2928
- position-area: span-start start;
2929
- margin: 0 var(--spacing-popover-offset, 0.5rem)
2930
- }
2931
-
2932
-
2933
- /* End top alignment */
2934
- :where(menu.end-top) {
2935
- position-area: span-end end;
2936
- margin: 0 var(--spacing-popover-offset, 0.5rem)
2937
- }
2938
-
2939
- /* End bottom alignment */
2940
- :where(menu.end-bottom) {
2941
- position-area: span-start end;
2942
- margin: 0 var(--spacing-popover-offset, 0.5rem)
2943
- }
2944
-
2945
- /* Top start corner alignment */
2946
- :where(menu.top-start-corner, menu.start-top-corner) {
2947
- position-area: start start;
2948
- margin: var(--spacing-popover-offset, 0.5rem)
2949
- }
2950
-
2951
- /* Top end corner alignment */
2952
- :where(menu.top-end-corner, menu.end-top-corner) {
2953
- position-area: start end;
2954
- margin: var(--spacing-popover-offset, 0.5rem)
2955
- }
2869
+ /* Directional alignment lives in styles/snippets/manifest.alignment.css */
2956
2870
 
2957
- /* Bottom start corner alignment */
2958
- :where(menu.bottom-start-corner, menu.start-bottom-corner) {
2959
- position-area: end start;
2960
- margin: var(--spacing-popover-offset, 0.5rem)
2961
- }
2962
-
2963
- /* Bottom end corner alignment */
2964
- :where(menu.bottom-end-corner, menu.end-bottom-corner) {
2965
- position-area: end end;
2966
- margin: var(--spacing-popover-offset, 0.5rem)
2967
- }
2871
+ @layer utilities {
2968
2872
 
2969
- /* Touchscreen version */
2873
+ /* Touchscreen version — outranks the shared alignment table on specificity */
2970
2874
  @media (pointer: coarse) {
2971
2875
  menu[popover]:not(.unstyle) {
2972
2876
  position: fixed;
@@ -3064,7 +2968,7 @@
3064
2968
  /* ---- Size (resize handles) — injected overlay children, fully stylable ---- */
3065
2969
  /* The element keeps its own markup untouched, so its native :hover/:focus still
3066
2970
  fire. Handles are separate elements with pointer-events; the body of the
3067
- element stays interactive. */
2971
+ element stays interactive. Geometry: styles/snippets/manifest.handles.css. */
3068
2972
  :where([data-edit-sizable]) {
3069
2973
  position: relative;
3070
2974
 
@@ -3090,28 +2994,11 @@
3090
2994
  }
3091
2995
  }
3092
2996
 
3093
- .edit-handle-top, .edit-handle-bottom { left: 0; width: 100%; height: var(--h); cursor: ns-resize; &::before { width: 100%; } }
3094
- .edit-handle-left, .edit-handle-right, .edit-handle-start, .edit-handle-end { top: 0; height: 100%; width: var(--h); cursor: ew-resize; &::before { height: 100%; } }
3095
- .edit-handle-top { top: calc(var(--h) * -0.5); }
3096
- .edit-handle-bottom { bottom: calc(var(--h) * -0.5); }
3097
- .edit-handle-left { left: calc(var(--h) * -0.5); }
3098
- .edit-handle-right { right: calc(var(--h) * -0.5); }
3099
- /* Logical edges — inset-inline-* auto-flips for RTL */
3100
- .edit-handle-start { inset-inline-start: calc(var(--h) * -0.5); }
3101
- .edit-handle-end { inset-inline-end: calc(var(--h) * -0.5); }
3102
-
3103
- .edit-handle-top-left, .edit-handle-top-right, .edit-handle-bottom-left, .edit-handle-bottom-right,
3104
- .edit-handle-top-start, .edit-handle-top-end, .edit-handle-bottom-start, .edit-handle-bottom-end {
3105
- width: var(--h); height: var(--h);
3106
- }
3107
- .edit-handle-top-left { top: calc(var(--h) * -0.5); left: calc(var(--h) * -0.5); cursor: nwse-resize; }
3108
- .edit-handle-top-right { top: calc(var(--h) * -0.5); right: calc(var(--h) * -0.5); cursor: nesw-resize; }
3109
- .edit-handle-bottom-left { bottom: calc(var(--h) * -0.5); left: calc(var(--h) * -0.5); cursor: nesw-resize; }
3110
- .edit-handle-bottom-right { bottom: calc(var(--h) * -0.5); right: calc(var(--h) * -0.5); cursor: nwse-resize; }
3111
- .edit-handle-top-start { top: calc(var(--h) * -0.5); inset-inline-start: calc(var(--h) * -0.5); cursor: nwse-resize; }
3112
- .edit-handle-top-end { top: calc(var(--h) * -0.5); inset-inline-end: calc(var(--h) * -0.5); cursor: nesw-resize; }
3113
- .edit-handle-bottom-start { bottom: calc(var(--h) * -0.5); inset-inline-start: calc(var(--h) * -0.5); cursor: nesw-resize; }
3114
- .edit-handle-bottom-end { bottom: calc(var(--h) * -0.5); inset-inline-end: calc(var(--h) * -0.5); cursor: nwse-resize; }
2997
+ /* Corner cursors (geometry is shared; resize handles use nw/ne/sw/se) */
2998
+ .edit-handle-top-left, .edit-handle-bottom-right,
2999
+ .edit-handle-top-start, .edit-handle-bottom-end { cursor: nwse-resize; }
3000
+ .edit-handle-top-right, .edit-handle-bottom-left,
3001
+ .edit-handle-top-end, .edit-handle-bottom-start { cursor: nesw-resize; }
3115
3002
  }
3116
3003
 
3117
3004
  /* Collapsed state (size dropped below --edit-size-collapse-*) — authors restyle freely */
@@ -3157,7 +3044,7 @@
3157
3044
  box-shadow: 0 8px 30px rgb(0 0 0 / 0.2);
3158
3045
  }
3159
3046
  :where(.edit-classes)[hidden] { display: none; }
3160
- :where(.edit-classes) input { width: 100%; font-family: ui-monospace, Menlo, monospace; font-size: 0.75rem; }
3047
+ :where(.edit-classes) input { width: 100%; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; font-size: 0.75rem; }
3161
3048
  :where(.edit-classes) .muted { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--color-content-subtle); }
3162
3049
 
3163
3050
  :where(.edit-toolbar) button[disabled] { opacity: 0.35; pointer-events: none; }
@@ -3251,7 +3138,7 @@
3251
3138
  &>:is(.selected, [aria-selected=true], [aria-current]) {
3252
3139
  color: var(--color-field-inverse, oklch(20.5% 0 0));
3253
3140
  background-color: var(--color-field-surface, oklch(87% 0 0));
3254
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)
3141
+ box-shadow: var(--shadow-sm, 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1))
3255
3142
  }
3256
3143
 
3257
3144
  /* Background slider for selected tab) */
@@ -3276,7 +3163,7 @@
3276
3163
  height: anchor-size(height);
3277
3164
  background-color: var(--color-page, oklch(98.5% 0 0));
3278
3165
  border-radius: max(calc(var(--radius, 0.5rem) - var(--spacing, 0.25rem) / 2), 0px);
3279
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
3166
+ box-shadow: var(--shadow-sm, 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1));
3280
3167
  transition: var(--tab-slide-transition, all 0.15s ease-in-out)
3281
3168
  }
3282
3169
 
@@ -3431,7 +3318,7 @@
3431
3318
  height: calc(var(--spacing-field-height, 2.5rem) / 2);
3432
3319
  padding: 0;
3433
3320
  border-radius: var(--spacing-field-height, 2.5rem);
3434
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
3321
+ box-shadow: var(--shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1));
3435
3322
  opacity: 0;
3436
3323
  transition: var(--transition);
3437
3324
 
@@ -3703,9 +3590,7 @@
3703
3590
  /* Hide search input cancel button */
3704
3591
  :where(input[type=search]):not(.unstyle)::-webkit-search-cancel-button {
3705
3592
  appearance: none;
3706
- -webkit-appearance: none;
3707
- -moz-appearance: none;
3708
- appearance: none
3593
+ -webkit-appearance: none
3709
3594
  }
3710
3595
 
3711
3596
  /* Textarea-specific styles */
@@ -3722,6 +3607,8 @@
3722
3607
 
3723
3608
  @layer components {
3724
3609
 
3610
+ /* Deliberately unflattened: manifest.input.css supplies the field chrome via
3611
+ a lower-specificity rule that sorts later, so this must outrank it. */
3725
3612
  input[type=radio]:not(.unstyle) {
3726
3613
  position: relative;
3727
3614
  min-width: calc(var(--spacing-field-height, 2.25rem) * 0.625);
@@ -3763,7 +3650,7 @@
3763
3650
 
3764
3651
  @layer components {
3765
3652
 
3766
- input[type=range]:not(.unstyle) {
3653
+ :where(input[type=range]):not(.unstyle) {
3767
3654
  appearance: none;
3768
3655
  background-color: transparent;
3769
3656
  border-radius: var(--radius, 0.5rem);
@@ -3790,7 +3677,7 @@
3790
3677
  transform: translateY(-50%);
3791
3678
  background-color: color-mix(in oklch, var(--color-field-surface, color-mix(in oklch, oklch(20.5% 0 0) 10%, transparent)) 60%, var(--color-field-inverse, oklch(43.9% 0 0)));
3792
3679
  border-radius: 200px;
3793
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
3680
+ box-shadow: var(--shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1));
3794
3681
  cursor: pointer;
3795
3682
  transition: var(--transition, all .05s ease-in-out)
3796
3683
  }
@@ -3815,7 +3702,7 @@
3815
3702
  }
3816
3703
  }
3817
3704
 
3818
- label:has(input[type=range]):not(.unstyle) {
3705
+ :where(label:has(input[type=range])):not(.unstyle) {
3819
3706
  cursor: default;
3820
3707
  }
3821
3708
  }
@@ -3829,16 +3716,17 @@
3829
3716
  :where([x-resize]) {
3830
3717
  position: relative;
3831
3718
 
3832
- /* Resize handle area */
3719
+ /* Resize handle area (geometry: styles/snippets/manifest.handles.css) */
3833
3720
  .resize-handle {
3834
3721
  position: absolute;
3835
3722
  display: block;
3836
- width: var(--spacing-resize-handle, 1rem);
3837
- height: var(--spacing-resize-handle, 1rem);
3723
+ width: var(--h);
3724
+ height: var(--h);
3838
3725
  z-index: 100;
3839
3726
  background: transparent;
3840
3727
  border: none;
3841
3728
  outline: none;
3729
+ --h: var(--spacing-resize-handle, 1rem);
3842
3730
 
3843
3731
  /* Visible handle */
3844
3732
  &::before {
@@ -3860,113 +3748,24 @@
3860
3748
  }
3861
3749
  }
3862
3750
 
3863
- /* Edge handles */
3864
- .resize-handle-top,
3865
- .resize-handle-bottom {
3866
- width: 100%;
3867
- left: 0;
3868
- cursor: ns-resize;
3869
-
3870
- &::before {
3871
- width: 100%;
3872
- }
3873
- }
3874
-
3875
- .resize-handle-left,
3876
- .resize-handle-right,
3877
- .resize-handle-start,
3878
- .resize-handle-end {
3879
- height: 100%;
3880
- top: 0;
3881
- cursor: ew-resize;
3882
-
3883
- &::before {
3884
- height: 100%;
3885
- }
3886
- }
3887
-
3888
- .resize-handle-top {
3889
- top: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3890
- }
3891
-
3892
- .resize-handle-bottom {
3893
- top: auto;
3894
- bottom: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3895
- }
3896
-
3897
- .resize-handle-left,
3898
- .resize-handle-start {
3899
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3900
- }
3901
-
3902
- .resize-handle-right,
3903
- .resize-handle-end {
3904
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3905
- }
3906
-
3907
- /* Corner handles */
3908
- .resize-handle-top-left {
3909
- width: var(--spacing-resize-handle, 1rem);
3910
- height: var(--spacing-resize-handle, 1rem);
3911
- top: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3912
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3913
- cursor: nw-resize;
3914
- }
3915
-
3916
- .resize-handle-top-right {
3917
- width: var(--spacing-resize-handle, 1rem);
3918
- height: var(--spacing-resize-handle, 1rem);
3919
- top: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3920
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3921
- cursor: ne-resize;
3922
- }
3923
-
3924
- .resize-handle-bottom-left {
3925
- width: var(--spacing-resize-handle, 1rem);
3926
- height: var(--spacing-resize-handle, 1rem);
3927
- bottom: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3928
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3929
- cursor: sw-resize;
3930
- }
3931
-
3932
- .resize-handle-bottom-right {
3933
- width: var(--spacing-resize-handle, 1rem);
3934
- height: var(--spacing-resize-handle, 1rem);
3935
- bottom: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3936
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3937
- cursor: se-resize;
3938
- }
3939
-
3940
- /* Logical direction handles */
3751
+ /* Corner cursors (geometry is shared; edit handles use nwse/nesw) */
3752
+ .resize-handle-top-left,
3941
3753
  .resize-handle-top-start {
3942
- width: var(--spacing-resize-handle, 1rem);
3943
- height: var(--spacing-resize-handle, 1rem);
3944
- top: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3945
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3946
3754
  cursor: nw-resize;
3947
3755
  }
3948
3756
 
3757
+ .resize-handle-top-right,
3949
3758
  .resize-handle-top-end {
3950
- width: var(--spacing-resize-handle, 1rem);
3951
- height: var(--spacing-resize-handle, 1rem);
3952
- top: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3953
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3954
3759
  cursor: ne-resize;
3955
3760
  }
3956
3761
 
3762
+ .resize-handle-bottom-left,
3957
3763
  .resize-handle-bottom-start {
3958
- width: var(--spacing-resize-handle, 1rem);
3959
- height: var(--spacing-resize-handle, 1rem);
3960
- bottom: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3961
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3962
3764
  cursor: sw-resize;
3963
3765
  }
3964
3766
 
3767
+ .resize-handle-bottom-right,
3965
3768
  .resize-handle-bottom-end {
3966
- width: var(--spacing-resize-handle, 1rem);
3967
- height: var(--spacing-resize-handle, 1rem);
3968
- bottom: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3969
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
3970
3769
  cursor: se-resize;
3971
3770
  }
3972
3771
 
@@ -3992,76 +3791,46 @@
3992
3791
  display: none !important
3993
3792
  }
3994
3793
 
3995
- /* Focus states for accessibility */
3794
+ /* Focus states for accessibility — framework ring (manifest.theme.css) */
3996
3795
  .resize-handle:focus {
3997
- outline: 2px solid rgba(59, 130, 246, 0.5);
3998
- outline-offset: 2px
3999
- }
4000
-
4001
- /* High contrast mode support */
4002
- @media (prefers-contrast: high) {
4003
- :where(.resize-handle:hover .resize-handle-inner) {
4004
- background: rgba(0, 0, 0, 0.3)
4005
- }
4006
-
4007
- :where(.resize-handle:active .resize-handle-inner) {
4008
- background: rgba(0, 0, 0, 0.5)
4009
- }
3796
+ outline: none;
3797
+ box-shadow: 0 0 0 2px color-mix(in oklch, var(--color-content-stark) 30%, transparent)
4010
3798
  }
4011
3799
 
4012
3800
  /* Reduced motion support */
4013
3801
  @media (prefers-reduced-motion: reduce) {
4014
3802
 
4015
- :where(.resize-handle-inner,
4016
- .resizable-closing,
3803
+ :where(.resizable-closing,
4017
3804
  .resize-handle) {
4018
3805
  transition: none
4019
3806
  }
4020
3807
  }
4021
3808
  }
4022
3809
 
4023
- /* RTL overrides - more specific than :where([x-resize]) */
4024
- [dir=rtl] :where([x-resize]) .resize-handle-start {
4025
- left: auto;
4026
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
4027
- }
4028
-
4029
- [dir=rtl] :where([x-resize]) .resize-handle-end {
4030
- right: auto;
4031
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
4032
- }
4033
-
3810
+ /* RTL cursor flips — placement follows the logical insets in the shared geometry */
4034
3811
  [dir=rtl] :where([x-resize]) .resize-handle-top-start {
4035
- left: auto;
4036
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
4037
3812
  cursor: ne-resize;
4038
3813
  }
4039
3814
 
4040
3815
  [dir=rtl] :where([x-resize]) .resize-handle-top-end {
4041
- right: auto;
4042
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
4043
3816
  cursor: nw-resize;
4044
3817
  }
4045
3818
 
4046
3819
  [dir=rtl] :where([x-resize]) .resize-handle-bottom-start {
4047
- left: auto;
4048
- right: calc(var(--spacing-resize-handle, 1rem) * -0.5);
4049
3820
  cursor: se-resize;
4050
3821
  }
4051
3822
 
4052
3823
  [dir=rtl] :where([x-resize]) .resize-handle-bottom-end {
4053
- right: auto;
4054
- left: calc(var(--spacing-resize-handle, 1rem) * -0.5);
4055
3824
  cursor: sw-resize;
4056
3825
  }
4057
3826
  }
4058
3827
 
4059
3828
  /* Manifest Sidebars */
3829
+
4060
3830
  @layer base, components, utilities;
4061
3831
 
4062
- [popover]:not(.unstyle):not(:popover-open) {
4063
- display: none;
4064
- }
3832
+
3833
+
4065
3834
 
4066
3835
 
4067
3836
  @layer components {
@@ -4143,7 +3912,7 @@
4143
3912
 
4144
3913
  @layer components {
4145
3914
 
4146
- [x-carousel] {
3915
+ :where([x-carousel]) {
4147
3916
  position: relative;
4148
3917
  display: flex;
4149
3918
  flex-direction: column;
@@ -4151,16 +3920,16 @@
4151
3920
  overflow: hidden;
4152
3921
 
4153
3922
  /* Slides container */
4154
- .carousel-slides {
3923
+ :where(.carousel-slides) {
4155
3924
  display: flex;
4156
3925
  transition: transform 300ms ease-in-out;
4157
3926
  width: 100%;
4158
3927
  aspect-ratio: 16 / 9
4159
3928
  }
4160
3929
 
4161
- /* Previous & next buttons */
4162
- & button[\@click="prev()"],
4163
- & button[\@click="next()"] {
3930
+ /* Previous & next buttons. Arrow markup is author-written; the
3931
+ @click="prev()" selectors are deprecated aliases for the hooks. */
3932
+ & :where([data-carousel-prev], [data-carousel-next], button[\@click="prev()"], button[\@click="next()"]) {
4164
3933
  position: absolute;
4165
3934
  top: 50%;
4166
3935
  transform: translateY(-50%);
@@ -4171,17 +3940,17 @@
4171
3940
  }
4172
3941
  }
4173
3942
 
4174
- & button[\@click="prev()"] {
3943
+ & :where([data-carousel-prev], button[\@click="prev()"]) {
4175
3944
  left: calc(var(--spacing, 0.25rem) * 4)
4176
3945
  }
4177
3946
 
4178
- & button[\@click="next()"] {
3947
+ & :where([data-carousel-next], button[\@click="next()"]) {
4179
3948
  left: auto;
4180
3949
  right: calc(var(--spacing, 0.25rem) * 4)
4181
3950
  }
4182
3951
 
4183
- /* Dots container */
4184
- .carousel-dots {
3952
+ /* Dots container (author markup, driven by the plugin's `dots` getter) */
3953
+ :where(.carousel-dots) {
4185
3954
  position: absolute;
4186
3955
  bottom: calc(var(--spacing, 0.25rem) * 4);
4187
3956
  left: 50%;
@@ -4191,7 +3960,6 @@
4191
3960
  max-width: 100%;
4192
3961
  padding: 0 calc(var(--spacing, 0.25rem) * 4);
4193
3962
  overflow-x: auto;
4194
- -webkit-overflow-scrolling: touch;
4195
3963
  scrollbar-width: none;
4196
3964
 
4197
3965
  &::-webkit-scrollbar {
@@ -4199,7 +3967,7 @@
4199
3967
  }
4200
3968
 
4201
3969
  /* Dot button */
4202
- & span {
3970
+ & :where(span) {
4203
3971
  flex-shrink: 0;
4204
3972
  width: 0.625rem;
4205
3973
  height: 0.625rem;
@@ -4246,7 +4014,7 @@
4246
4014
  height: calc(var(--spacing-field-height, 2.25rem) * 0.65 - 0.125rem * 2);
4247
4015
  border-radius: 50%;
4248
4016
  background-color: color-mix(in oklch, var(--color-field-surface, color-mix(in oklch, oklch(20.5% 0 0) 10%, transparent)) 60%, var(--color-field-inverse, oklch(43.9% 0 0)));
4249
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
4017
+ box-shadow: var(--shadow-sm, 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1));
4250
4018
  transition: var(--transition, all .05s ease-in-out)
4251
4019
  }
4252
4020
 
@@ -4381,7 +4149,7 @@
4381
4149
  background-color: var(--color-popover-surface, oklch(98.5% 0 0));
4382
4150
  border: 1px solid var(--color-line, color-mix(in oklch, oklch(20.5% 0 0) 10%, transparent));
4383
4151
  border-radius: calc(var(--radius, 0.5rem) * 2);
4384
- box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
4152
+ box-shadow: var(--shadow-lg, 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1));
4385
4153
  overflow: hidden;
4386
4154
  opacity: 0;
4387
4155
  transform: translateY(1rem);
@@ -4455,11 +4223,9 @@
4455
4223
  }
4456
4224
 
4457
4225
  /* Manifest Tooltips */
4226
+
4458
4227
  @layer base, components, utilities;
4459
4228
 
4460
- [popover]:not(.unstyle):not(:popover-open) {
4461
- display: none;
4462
- }
4463
4229
 
4464
4230
 
4465
4231
  @layer utilities {
@@ -4474,7 +4240,7 @@
4474
4240
  background-color: var(--color-content-stark, oklch(43.9% 0 0));
4475
4241
  border: 0 none;
4476
4242
  border-radius: var(--radius, 0.5rem);
4477
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
4243
+ box-shadow: var(--shadow-sm, 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1));
4478
4244
 
4479
4245
  /* Leading icon */
4480
4246
  & [x-icon]:first-child {
@@ -4520,103 +4286,10 @@
4520
4286
  }
4521
4287
  }
4522
4288
 
4523
- /* Top alignment */
4524
- :where(.tooltip.top) {
4525
- position-area: top;
4526
- margin: var(--spacing-popover-offset, 0.5rem) 0
4527
- }
4528
-
4529
- /* Bottom alignment */
4530
- :where(.tooltip.bottom) {
4531
- position-area: bottom;
4532
- margin: var(--spacing-popover-offset, 0.5rem) 0
4533
- }
4534
-
4535
- /* Start alignment */
4536
- :where(.tooltip.start) {
4537
- position-area: center start;
4538
- margin: 0 var(--spacing-popover-offset, 0.5rem)
4539
- }
4540
-
4541
- /* End alignment */
4542
- :where(.tooltip.end) {
4543
- position-area: center end;
4544
- margin: 0 var(--spacing-popover-offset, 0.5rem)
4545
- }
4546
-
4547
- /* Top start alignment */
4548
- :where(.tooltip.top-start) {
4549
- position-area: start span-end;
4550
- margin: var(--spacing-popover-offset, 0.5rem) 0
4551
- }
4552
-
4553
- /* Top end alignment */
4554
- :where(.tooltip.top-end) {
4555
- position-area: start span-start;
4556
- margin: var(--spacing-popover-offset, 0.5rem) 0
4557
- }
4558
-
4559
- /* Bottom start alignment */
4560
- :where(.tooltip.bottom-start) {
4561
- position-area: end span-end;
4562
- margin: var(--spacing-popover-offset, 0.5rem) 0
4563
- }
4564
-
4565
- /* Bottom end alignment */
4566
- :where(.tooltip.bottom-end) {
4567
- position-area: end span-start;
4568
- margin: var(--spacing-popover-offset, 0.5rem) 0
4569
- }
4570
-
4571
- /* Start top alignment */
4572
- :where(.tooltip.start-top) {
4573
- position-area: span-end start;
4574
- margin: 0 var(--spacing-popover-offset, 0.5rem)
4575
- }
4576
-
4577
- /* Start bottom alignment */
4578
- :where(.tooltip.start-bottom) {
4579
- position-area: span-start start;
4580
- margin: 0 var(--spacing-popover-offset, 0.5rem)
4581
- }
4582
-
4583
- /* End top alignment */
4584
- :where(.tooltip.end-top) {
4585
- position-area: span-end end;
4586
- margin: 0 var(--spacing-popover-offset, 0.5rem)
4587
- }
4588
-
4589
- /* End bottom alignment */
4590
- :where(.tooltip.end-bottom) {
4591
- position-area: span-start end;
4592
- margin: 0 var(--spacing-popover-offset, 0.5rem)
4593
- }
4594
-
4595
- /* Top start corner alignment */
4596
- :where(.tooltip.top-start-corner, .tooltip.start-top-corner) {
4597
- position-area: start start;
4598
- margin: var(--spacing-popover-offset, 0.5rem)
4599
- }
4600
-
4601
- /* Top end corner alignment */
4602
- :where(.tooltip.top-end-corner, .tooltip.end-top-corner) {
4603
- position-area: start end;
4604
- margin: var(--spacing-popover-offset, 0.5rem)
4605
- }
4606
-
4607
- /* Bottom start corner alignment */
4608
- :where(.tooltip.bottom-start-corner, .tooltip.start-bottom-corner) {
4609
- position-area: end start;
4610
- margin: var(--spacing-popover-offset, 0.5rem)
4611
- }
4612
-
4613
- /* Bottom end corner alignment */
4614
- :where(.tooltip.bottom-end-corner, .tooltip.end-bottom-corner) {
4615
- position-area: end end;
4616
- margin: var(--spacing-popover-offset, 0.5rem)
4617
- }
4618
4289
  }
4619
4290
 
4291
+ /* Directional alignment lives in styles/snippets/manifest.alignment.css */
4292
+
4620
4293
  /* Manifest Typography */
4621
4294
 
4622
4295
  @layer base, components, utilities;
@@ -4876,7 +4549,6 @@
4876
4549
  /* Labels */
4877
4550
  :where(label):not(.unstyle),
4878
4551
  .label {
4879
- width: -moz-fit-content;
4880
4552
  width: fit-content;
4881
4553
  user-select: none
4882
4554
  }
@@ -5004,7 +4676,6 @@
5004
4676
  tab-size: 4;
5005
4677
  white-space: pre;
5006
4678
  white-space-collapse: preserve;
5007
- overflow: hidden;
5008
4679
 
5009
4680
  &>code {
5010
4681
  flex-grow: 1;
@@ -5032,6 +4703,229 @@
5032
4703
  }
5033
4704
  }
5034
4705
 
4706
+ /* Anchored popover alignment — single source shared by dropdowns and tooltips.
4707
+ The build appends this to standalone copies and adds it once to the bundle.
4708
+ Zero specificity throughout, so the coarse-pointer sheet and author rules
4709
+ still win. Dropdown-only variants (.center) stay in manifest.dropdown.css. */
4710
+
4711
+ @layer base, components, utilities;
4712
+
4713
+ @layer utilities {
4714
+
4715
+ /* Top alignment */
4716
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).top) {
4717
+ position-area: top;
4718
+ margin: var(--spacing-popover-offset, 0.5rem) 0
4719
+ }
4720
+
4721
+ /* Bottom alignment */
4722
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).bottom) {
4723
+ position-area: bottom;
4724
+ margin: var(--spacing-popover-offset, 0.5rem) 0
4725
+ }
4726
+
4727
+ /* Start alignment */
4728
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).start) {
4729
+ position-area: center start;
4730
+ margin: 0 var(--spacing-popover-offset, 0.5rem)
4731
+ }
4732
+
4733
+ /* End alignment */
4734
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).end) {
4735
+ position-area: center end;
4736
+ margin: 0 var(--spacing-popover-offset, 0.5rem)
4737
+ }
4738
+
4739
+ /* Top start alignment */
4740
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).top-start) {
4741
+ position-area: start span-end;
4742
+ margin: var(--spacing-popover-offset, 0.5rem) 0
4743
+ }
4744
+
4745
+ /* Top end alignment */
4746
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).top-end) {
4747
+ position-area: start span-start;
4748
+ margin: var(--spacing-popover-offset, 0.5rem) 0
4749
+ }
4750
+
4751
+ /* Bottom start alignment */
4752
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).bottom-start) {
4753
+ position-area: end span-end;
4754
+ margin: var(--spacing-popover-offset, 0.5rem) 0
4755
+ }
4756
+
4757
+ /* Bottom end alignment */
4758
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).bottom-end) {
4759
+ position-area: end span-start;
4760
+ margin: var(--spacing-popover-offset, 0.5rem) 0
4761
+ }
4762
+
4763
+ /* Start top alignment */
4764
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).start-top) {
4765
+ position-area: span-end start;
4766
+ margin: 0 var(--spacing-popover-offset, 0.5rem)
4767
+ }
4768
+
4769
+ /* Start bottom alignment */
4770
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).start-bottom) {
4771
+ position-area: span-start start;
4772
+ margin: 0 var(--spacing-popover-offset, 0.5rem)
4773
+ }
4774
+
4775
+ /* End top alignment */
4776
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).end-top) {
4777
+ position-area: span-end end;
4778
+ margin: 0 var(--spacing-popover-offset, 0.5rem)
4779
+ }
4780
+
4781
+ /* End bottom alignment */
4782
+ :where(:is(menu[popover], .dropdown-menu, .tooltip).end-bottom) {
4783
+ position-area: span-start end;
4784
+ margin: 0 var(--spacing-popover-offset, 0.5rem)
4785
+ }
4786
+
4787
+ /* Top start corner alignment */
4788
+ :where(:is(menu[popover], .dropdown-menu, .tooltip):is(.top-start-corner, .start-top-corner)) {
4789
+ position-area: start start;
4790
+ margin: var(--spacing-popover-offset, 0.5rem)
4791
+ }
4792
+
4793
+ /* Top end corner alignment */
4794
+ :where(:is(menu[popover], .dropdown-menu, .tooltip):is(.top-end-corner, .end-top-corner)) {
4795
+ position-area: start end;
4796
+ margin: var(--spacing-popover-offset, 0.5rem)
4797
+ }
4798
+
4799
+ /* Bottom start corner alignment */
4800
+ :where(:is(menu[popover], .dropdown-menu, .tooltip):is(.bottom-start-corner, .start-bottom-corner)) {
4801
+ position-area: end start;
4802
+ margin: var(--spacing-popover-offset, 0.5rem)
4803
+ }
4804
+
4805
+ /* Bottom end corner alignment */
4806
+ :where(:is(menu[popover], .dropdown-menu, .tooltip):is(.bottom-end-corner, .end-bottom-corner)) {
4807
+ position-area: end end;
4808
+ margin: var(--spacing-popover-offset, 0.5rem)
4809
+ }
4810
+ }
4811
+
4812
+ /* Drag-handle geometry — single source for x-resize and x-edit handles.
4813
+ The build appends this to standalone copies and adds it once to the bundle.
4814
+ Hosts set --h (handle thickness) and keep their own chrome: hairline colour,
4815
+ transition, and corner cursors (resize uses nw/ne/sw/se, edit nwse/nesw). */
4816
+
4817
+ @layer base, components, utilities;
4818
+
4819
+ @layer utilities {
4820
+
4821
+ /* Horizontal edges */
4822
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-top, .resize-handle-bottom, .edit-handle-top, .edit-handle-bottom) {
4823
+ left: 0;
4824
+ width: 100%;
4825
+ height: var(--h);
4826
+ cursor: ns-resize;
4827
+
4828
+ &::before {
4829
+ width: 100%
4830
+ }
4831
+ }
4832
+
4833
+ /* Vertical edges */
4834
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-left, .resize-handle-right, .resize-handle-start, .resize-handle-end, .edit-handle-left, .edit-handle-right, .edit-handle-start, .edit-handle-end) {
4835
+ top: 0;
4836
+ width: var(--h);
4837
+ height: 100%;
4838
+ cursor: ew-resize;
4839
+
4840
+ &::before {
4841
+ height: 100%
4842
+ }
4843
+ }
4844
+
4845
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-top, .edit-handle-top) {
4846
+ top: calc(var(--h) * -0.5)
4847
+ }
4848
+
4849
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-bottom, .edit-handle-bottom) {
4850
+ bottom: calc(var(--h) * -0.5)
4851
+ }
4852
+
4853
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-left, .edit-handle-left) {
4854
+ left: calc(var(--h) * -0.5)
4855
+ }
4856
+
4857
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-right, .edit-handle-right) {
4858
+ right: calc(var(--h) * -0.5)
4859
+ }
4860
+
4861
+ /* Logical edges — inset-inline-* auto-flips for RTL */
4862
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-start, .edit-handle-start) {
4863
+ inset-inline-start: calc(var(--h) * -0.5)
4864
+ }
4865
+
4866
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-end, .edit-handle-end) {
4867
+ inset-inline-end: calc(var(--h) * -0.5)
4868
+ }
4869
+
4870
+ /* Corners — square and inset; cursors stay with each host */
4871
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-top-left, .edit-handle-top-left) {
4872
+ width: var(--h);
4873
+ height: var(--h);
4874
+ top: calc(var(--h) * -0.5);
4875
+ left: calc(var(--h) * -0.5)
4876
+ }
4877
+
4878
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-top-right, .edit-handle-top-right) {
4879
+ width: var(--h);
4880
+ height: var(--h);
4881
+ top: calc(var(--h) * -0.5);
4882
+ right: calc(var(--h) * -0.5)
4883
+ }
4884
+
4885
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-bottom-left, .edit-handle-bottom-left) {
4886
+ width: var(--h);
4887
+ height: var(--h);
4888
+ bottom: calc(var(--h) * -0.5);
4889
+ left: calc(var(--h) * -0.5)
4890
+ }
4891
+
4892
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-bottom-right, .edit-handle-bottom-right) {
4893
+ width: var(--h);
4894
+ height: var(--h);
4895
+ bottom: calc(var(--h) * -0.5);
4896
+ right: calc(var(--h) * -0.5)
4897
+ }
4898
+
4899
+ /* Logical corners — inset-inline-* auto-flips for RTL */
4900
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-top-start, .edit-handle-top-start) {
4901
+ width: var(--h);
4902
+ height: var(--h);
4903
+ top: calc(var(--h) * -0.5);
4904
+ inset-inline-start: calc(var(--h) * -0.5)
4905
+ }
4906
+
4907
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-top-end, .edit-handle-top-end) {
4908
+ width: var(--h);
4909
+ height: var(--h);
4910
+ top: calc(var(--h) * -0.5);
4911
+ inset-inline-end: calc(var(--h) * -0.5)
4912
+ }
4913
+
4914
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-bottom-start, .edit-handle-bottom-start) {
4915
+ width: var(--h);
4916
+ height: var(--h);
4917
+ bottom: calc(var(--h) * -0.5);
4918
+ inset-inline-start: calc(var(--h) * -0.5)
4919
+ }
4920
+
4921
+ :where([x-resize], [data-edit-sizable]) :is(.resize-handle-bottom-end, .edit-handle-bottom-end) {
4922
+ width: var(--h);
4923
+ height: var(--h);
4924
+ bottom: calc(var(--h) * -0.5);
4925
+ inset-inline-end: calc(var(--h) * -0.5)
4926
+ }
4927
+ }
4928
+
5035
4929
  :root,
5036
4930
  ::selection {
5037
4931
 
@@ -5495,7 +5389,6 @@
5495
5389
 
5496
5390
  /* No spinners */
5497
5391
  .no-spinner {
5498
- -moz-appearance: textfield !important;
5499
5392
  appearance: textfield !important;
5500
5393
 
5501
5394
  &::-webkit-inner-spin-button,