cursedbelt 5.63.0 → 5.66.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 (104) hide show
  1. package/dist/looks.css +237 -0
  2. package/dist/react/components/Accordion.d.ts.map +1 -1
  3. package/dist/react/components/Accordion.js +6 -1
  4. package/dist/react/components/Accordion.js.map +1 -1
  5. package/dist/react/components/Button.d.ts.map +1 -1
  6. package/dist/react/components/Button.js +26 -5
  7. package/dist/react/components/Button.js.map +1 -1
  8. package/dist/react/components/CardTapTarget.d.ts.map +1 -1
  9. package/dist/react/components/CardTapTarget.js +5 -1
  10. package/dist/react/components/CardTapTarget.js.map +1 -1
  11. package/dist/react/components/ColorField.js +1 -1
  12. package/dist/react/components/ColorField.js.map +1 -1
  13. package/dist/react/components/ComboboxField.js +1 -1
  14. package/dist/react/components/ComboboxField.js.map +1 -1
  15. package/dist/react/components/CopyButton.d.ts.map +1 -1
  16. package/dist/react/components/CopyButton.js +2 -1
  17. package/dist/react/components/CopyButton.js.map +1 -1
  18. package/dist/react/components/SecretInput.js +1 -1
  19. package/dist/react/components/SecretInput.js.map +1 -1
  20. package/dist/react/components/TagsInput.js +1 -1
  21. package/dist/react/components/TagsInput.js.map +1 -1
  22. package/dist/react/components/auth/SignInCard.d.ts +9 -1
  23. package/dist/react/components/auth/SignInCard.d.ts.map +1 -1
  24. package/dist/react/components/auth/SignInCard.js +2 -2
  25. package/dist/react/components/auth/SignInCard.js.map +1 -1
  26. package/dist/react/components/searchInput.css +4 -2
  27. package/dist/react/index.d.ts +3 -0
  28. package/dist/react/index.d.ts.map +1 -1
  29. package/dist/react/index.js +3 -0
  30. package/dist/react/index.js.map +1 -1
  31. package/dist/react/lib/field.d.ts +2 -2
  32. package/dist/react/lib/field.d.ts.map +1 -1
  33. package/dist/react/lib/field.js +9 -3
  34. package/dist/react/lib/field.js.map +1 -1
  35. package/dist/react/look/LookPicker.d.ts +27 -0
  36. package/dist/react/look/LookPicker.d.ts.map +1 -0
  37. package/dist/react/look/LookPicker.js +29 -0
  38. package/dist/react/look/LookPicker.js.map +1 -0
  39. package/dist/react/look/lookStore.d.ts +88 -0
  40. package/dist/react/look/lookStore.d.ts.map +1 -0
  41. package/dist/react/look/lookStore.js +120 -0
  42. package/dist/react/look/lookStore.js.map +1 -0
  43. package/dist/react/look/useLook.d.ts +22 -0
  44. package/dist/react/look/useLook.d.ts.map +1 -0
  45. package/dist/react/look/useLook.js +16 -0
  46. package/dist/react/look/useLook.js.map +1 -0
  47. package/dist/react/media-gallery/MediaGallery.d.ts +22 -1
  48. package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
  49. package/dist/react/media-gallery/MediaGallery.js +13 -3
  50. package/dist/react/media-gallery/MediaGallery.js.map +1 -1
  51. package/dist/react/nav/TopBar.d.ts.map +1 -1
  52. package/dist/react/nav/TopBar.js +13 -2
  53. package/dist/react/nav/TopBar.js.map +1 -1
  54. package/dist/styles-areas/calendar.css +2 -2
  55. package/dist/styles-areas/chat.css +7 -7
  56. package/dist/styles-areas/core.css +62 -59
  57. package/dist/styles-areas/emoji.css +3 -3
  58. package/dist/styles-areas/folder-tree.css +3 -3
  59. package/dist/styles-areas/layout-engine.css +6 -6
  60. package/dist/styles-areas/media-gallery.css +3 -3
  61. package/dist/styles-areas/media.css +4 -4
  62. package/dist/styles-areas/overlays.css +4 -4
  63. package/dist/styles-areas/workbench.css +7 -7
  64. package/dist/styles-utilities.css +55 -2
  65. package/dist/theme.css +3 -0
  66. package/package.json +2 -1
  67. package/scripts/styleAreas.ts +2 -0
  68. package/src/looks.css +237 -0
  69. package/src/looks.spec.ts +128 -0
  70. package/src/react/components/Accordion.tsx +8 -1
  71. package/src/react/components/Button.spec.tsx +15 -0
  72. package/src/react/components/Button.tsx +27 -5
  73. package/src/react/components/CardTapTarget.tsx +4 -1
  74. package/src/react/components/ColorField.tsx +1 -1
  75. package/src/react/components/ComboboxField.tsx +1 -1
  76. package/src/react/components/CopyButton.tsx +2 -1
  77. package/src/react/components/SecretInput.tsx +1 -1
  78. package/src/react/components/TagsInput.tsx +1 -1
  79. package/src/react/components/auth/SignInCard.spec.tsx +9 -0
  80. package/src/react/components/auth/SignInCard.tsx +10 -1
  81. package/src/react/components/searchInput.css +4 -2
  82. package/src/react/index.ts +22 -0
  83. package/src/react/lib/field.ts +9 -3
  84. package/src/react/look/LookPicker.spec.tsx +40 -0
  85. package/src/react/look/LookPicker.tsx +112 -0
  86. package/src/react/look/lookStore.spec.ts +120 -0
  87. package/src/react/look/lookStore.ts +172 -0
  88. package/src/react/look/useLook.ts +37 -0
  89. package/src/react/media-gallery/MediaGallery.spec.tsx +65 -1
  90. package/src/react/media-gallery/MediaGallery.tsx +37 -2
  91. package/src/react/nav/TopBar.spec.tsx +34 -0
  92. package/src/react/nav/TopBar.tsx +22 -0
  93. package/src/styles-areas/calendar.css +2 -2
  94. package/src/styles-areas/chat.css +7 -7
  95. package/src/styles-areas/core.css +62 -59
  96. package/src/styles-areas/emoji.css +3 -3
  97. package/src/styles-areas/folder-tree.css +3 -3
  98. package/src/styles-areas/layout-engine.css +6 -6
  99. package/src/styles-areas/media-gallery.css +3 -3
  100. package/src/styles-areas/media.css +4 -4
  101. package/src/styles-areas/overlays.css +4 -4
  102. package/src/styles-areas/workbench.css +7 -7
  103. package/src/styles-utilities.css +55 -2
  104. package/src/theme.css +3 -0
@@ -1569,6 +1569,27 @@ export interface MediaGalleryProps {
1569
1569
  /** Infinite scroll — forwarded to the virtualized grids. */
1570
1570
  onNearEnd?: () => void;
1571
1571
  initialOrder?: MediaGalleryOrder;
1572
+ /**
1573
+ * The sort, CONTROLLED by the app — pass with {@link onOrderChange}, the way {@link query}
1574
+ * and {@link viewMode} are controlled, for an app whose own toolbar holds the sort menu
1575
+ * (`chrome='none'`). Uncontrolled, {@link initialOrder} seeds the gallery's own state as before.
1576
+ *
1577
+ * 🔴 Why: until 2026-10-06 family's Keepsakes toolbar could change the order only by
1578
+ * remounting the gallery (`key={order}`) — a film playing while the reader changed sort
1579
+ * started over, and the ticked selection had to be reset by hand.
1580
+ */
1581
+ order?: MediaGalleryOrder;
1582
+ /** Told when a sort pill or the table's header changes the order — see {@link order}. */
1583
+ onOrderChange?: (next: MediaGalleryOrder) => void;
1584
+ /**
1585
+ * Draw the single-choice tag chips in the filter strip, or not. Default `true`.
1586
+ *
1587
+ * `false` keeps the tags' other two jobs — the line under every tile and the search —
1588
+ * and drops only the chips, for an app whose own people row (family's multi-select
1589
+ * `ChipFilterStrip`) already asks that question. Until 2026-10-06 family hid the strip by
1590
+ * CSS instead, which also hid the kind chips.
1591
+ */
1592
+ tagStrip?: boolean;
1572
1593
  /** Extra per-item actions in the detail view (use `cbgd-order-btn` styling to match). */
1573
1594
  detailActions?: (item: MediaGalleryItem) => ReactNode;
1574
1595
  /** When set, the detail view offers Delete (confirm-gated). Closes the detail on success. */
@@ -1911,6 +1932,9 @@ export function MediaGallery({
1911
1932
  loading,
1912
1933
  onNearEnd,
1913
1934
  initialOrder = 'recent',
1935
+ order: controlledOrder,
1936
+ onOrderChange,
1937
+ tagStrip = true,
1914
1938
  detailActions,
1915
1939
  onDelete,
1916
1940
  headerExtra,
@@ -1963,7 +1987,16 @@ export function MediaGallery({
1963
1987
  },
1964
1988
  [controlledQuery, onQueryChange],
1965
1989
  );
1966
- const [order, setOrder] = useState<MediaGalleryOrder>(initialOrder);
1990
+ const [uncontrolledOrder, setUncontrolledOrder] = useState<MediaGalleryOrder>(initialOrder);
1991
+ /** Controlled when the consumer passes `order`, uncontrolled otherwise — see the prop. */
1992
+ const order = controlledOrder !== undefined ? controlledOrder : uncontrolledOrder;
1993
+ const setOrder = useCallback(
1994
+ (next: MediaGalleryOrder): void => {
1995
+ if (controlledOrder === undefined) setUncontrolledOrder(next);
1996
+ onOrderChange?.(next);
1997
+ },
1998
+ [controlledOrder, onOrderChange],
1999
+ );
1967
2000
  const [kind, setKind] = useState<FileCategory | null>(null);
1968
2001
  const [tag, setTag] = useState<string | null>(null);
1969
2002
  const [uncontrolledId, setUncontrolledId] = useState<string | null>(null);
@@ -3381,7 +3414,9 @@ export function MediaGallery({
3381
3414
  options={kindOptions}
3382
3415
  value={kind}
3383
3416
  onChange={setKind}
3384
- tags={tags}
3417
+ // 🔴 `[]`, not a hidden strip: the kind chips stay, and `tags` keeps captioning
3418
+ // and searching — see the `tagStrip` prop.
3419
+ tags={tagStrip ? tags : []}
3385
3420
  activeTag={tag}
3386
3421
  onTagChange={setTag}
3387
3422
  />
@@ -85,6 +85,40 @@ describe('TopBar — destinations have words (NAV-2, owner review 2026-10-01)',
85
85
  expect((container.querySelector('[data-cb-topbar-nav]') as HTMLElement).className).toContain('max-md:hidden');
86
86
  });
87
87
 
88
+ test("🔴 phonePlaces='none' names the active place in the bar's centre below md (NAV-14)", () => {
89
+ // happy-dom's window is 1024 wide, where the places paint their own words: go to a phone.
90
+ const wide = window.matchMedia;
91
+ const narrow = (query: string) => ({
92
+ matches: false,
93
+ media: query,
94
+ onchange: null,
95
+ addEventListener() {},
96
+ removeEventListener() {},
97
+ addListener() {},
98
+ removeListener() {},
99
+ dispatchEvent: () => false,
100
+ });
101
+ window.matchMedia = narrow as unknown as typeof window.matchMedia;
102
+ try {
103
+ const { container } = render(<TopBar brand={brand} items={items} phonePlaces='none' />);
104
+ const title = container.querySelector('[data-cb-topbar-title]') as HTMLElement;
105
+ expect(title.textContent).toBe('Library');
106
+ // Painted only where the places are not: the word would double the strip from md up.
107
+ expect(title.className).toContain('md:hidden');
108
+ // The strip's own word is its accessible name; this one is paint, not a second announcement.
109
+ expect(title.getAttribute('aria-hidden')).toBe('true');
110
+ cleanup();
111
+ // With the places in the bar there is no title to paint, and a utility bar never names a page.
112
+ expect(render(<TopBar brand={brand} items={items} />).container.querySelector('[data-cb-topbar-title]')).toBeNull();
113
+ cleanup();
114
+ expect(render(<TopBar brand={brand} items={items} iconOnly phonePlaces='none' />).container.querySelector('[data-cb-topbar-title]')).toBeNull();
115
+ } finally {
116
+ window.matchMedia = wide;
117
+ }
118
+ // From md up it is not in the DOM at all: a zone's children share one midline (NAV-1).
119
+ expect(render(<TopBar brand={brand} items={items} phonePlaces='none' />).container.querySelector('[data-cb-topbar-title]')).toBeNull();
120
+ });
121
+
88
122
  test('six or more places warn in dev — NAV-3 puts them in a sectioned SideNav', () => {
89
123
  const warn = console.warn;
90
124
  const said: string[] = [];
@@ -211,7 +211,28 @@ export function TopBarPlaces({
211
211
  }: TopBarPlacesProps) {
212
212
  const fade = useScrollEdgeFade();
213
213
  const wide = useMediaQuery(WIDE_QUERY);
214
+ /**
215
+ * NAV-14: the phone's top bar names the page. With `phonePlaces='none'` the places ride the
216
+ * bottom `PlaceBar` and the bar's centre was empty below 768px — a brand glyph, a bell and an
217
+ * avatar, and nothing saying where the reader is (family's 390 captures, forge task
218
+ * family-app-ux-overhaul, 2026-10-06). The active place's own word fills it; the strip of
219
+ * places is still rendered (hidden) so a router's primary nav keeps one DOM shape at every
220
+ * width, which is what the design audit and every app's selectors read. The title itself is
221
+ * NOT in the DOM from md up: the header's midline check measures every child of a zone, and a
222
+ * `display: none` span measures as a box at 0 (`e2e/app-shell.spec.ts`).
223
+ */
224
+ const current = phonePlaces === 'none' && !iconOnly && !wide ? items.find((item) => item.active) : undefined;
214
225
  return (
226
+ <>
227
+ {current ? (
228
+ <span
229
+ data-cb-topbar-title=''
230
+ aria-hidden='true'
231
+ className='min-w-0 truncate text-sm font-semibold text-foreground md:hidden'
232
+ >
233
+ {current.label}
234
+ </span>
235
+ ) : null}
215
236
  <nav
216
237
  aria-label={navLabel}
217
238
  data-cb-topbar-nav=''
@@ -245,6 +266,7 @@ export function TopBarPlaces({
245
266
  </div>
246
267
  </ScrollArea>
247
268
  </nav>
269
+ </>
248
270
  );
249
271
  }
250
272
 
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 78 candidate(s).
21
+ * 77 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -34,7 +34,7 @@
34
34
  @source inline("dark:text-rose-200 dark:text-sky-200 dark:text-slate-200 dark:text-teal-200 dark:text-violet-200");
35
35
  @source inline("focus:opacity-100 grid-cols-[repeat(7,minmax(0,1fr))] group-focus-within:opacity-100 h-3.5");
36
36
  @source inline("hover:bg-muted/30 hover:bg-muted/40 hover:border-border/80 last:border-r-0 line-through min-h-28");
37
- @source inline("min-h-40 opacity-85 outline-1 outline-dashed outline-tone-amber-ink p-1.5 sm:inline sm:min-h-0");
37
+ @source inline("min-h-40 opacity-85 outline-1 outline-dashed outline-tone-amber-ink sm:inline sm:min-h-0");
38
38
  @source inline("sm:min-h-24 sm:px-1.5 sm:text-xs text-accent-solid-foreground text-amber-900 text-blue-800");
39
39
  @source inline("text-emerald-800 text-green-800 text-purple-800 text-rose-800 text-sky-800 text-slate-800");
40
40
  @source inline("text-teal-800 text-tone-amber-ink text-violet-800 w-20 w-3.5");
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 68 candidate(s).
21
+ * 67 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -28,9 +28,9 @@
28
28
  @source inline("bg-background/30 bg-black/10 bg-gradient-to-t border-border/40 bottom-3 col collapse");
29
29
  @source inline("dark:bg-white/10 first:mt-0 flex-row flex-row-reverse flex-shrink focus-visible:outline-2");
30
30
  @source inline("focus-visible:outline-offset-2 focus-visible:outline-ring from-surface h-105 h-3.5");
31
- @source inline("hover:bg-background/50 hover:border-border-strong hover:border-field-ring hover:opacity-80");
32
- @source inline("italic list-decimal list-disc max-w-4/5 min-h-20 min-w-16 ml-0.5 ml-1.5 mr-9 outline-2");
33
- @source inline("outline-accent outline-dashed pl-5 pointer-coarse:mr-12 pt-0.5 px-0.5 px-3.5 resize-none right-1");
34
- @source inline("rounded-2xl rounded-bl-md rounded-bl-sm rounded-br-md rounded-br-sm size-7");
35
- @source inline("text-[length:var(--text-code-block)] text-[length:var(--text-code-inline)] text-xl");
36
- @source inline("to-transparent top-1 underline-offset-2 w-1.5 w-3 w-3.5 w-40 w-48 w-56 w-88 z-[9]");
31
+ @source inline("hover:bg-background/50 hover:border-field-ring hover:opacity-80 italic list-decimal list-disc");
32
+ @source inline("max-w-4/5 min-h-20 min-w-16 ml-0.5 ml-1.5 mr-9 outline-2 outline-accent outline-dashed pl-5");
33
+ @source inline("pointer-coarse:mr-12 pt-0.5 px-0.5 px-3.5 resize-none right-1 rounded-2xl rounded-bl-md");
34
+ @source inline("rounded-bl-sm rounded-br-md rounded-br-sm size-7 text-[length:var(--text-code-block)]");
35
+ @source inline("text-[length:var(--text-code-inline)] text-xl to-transparent top-1 underline-offset-2 w-1.5 w-3");
36
+ @source inline("w-3.5 w-40 w-48 w-56 w-88 z-[9]");
@@ -15,7 +15,7 @@
15
15
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
16
16
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
17
17
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
18
- * 864 candidate(s).
18
+ * 879 candidate(s).
19
19
  *
20
20
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
21
21
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -39,28 +39,29 @@
39
39
  @source inline("[&_[data-icon]]:text-warning [&_sup]:leading-none [&_svg]:shrink-0 [&_svg]:size-12");
40
40
  @source inline("[&_svg]:size-4 [&_svg]:size-5 [&_svg]:size-6 [--cbfk-sticky-top:-1rem]");
41
41
  @source inline("[-webkit-touch-callout:none] [overflow-clip-margin:calc(var(--spacing)*1)] a absolute act active");
42
- @source inline("active:bg-accent alert alert-icon align align-middle an animate-in");
43
- @source inline("animate-progress-indeterminate animate-pulse animate-spin aria");
42
+ @source inline("active:bg-accent active:scale-100 active:scale-[var(--press-scale)] alert alert-icon align");
43
+ @source inline("align-middle an animate-in animate-progress-indeterminate animate-pulse animate-spin aria");
44
44
  @source inline("aria-[invalid=true]:border-field-error aria-[invalid=true]:ring-field-error/30 aria-disabled");
45
- @source inline("aria-disabled:cursor-not-allowed aria-disabled:hover:bg-transparent aria-disabled:opacity-30");
46
- @source inline("aria-disabled:opacity-50 aria-disabled:pointer-events-none aria-pressed");
47
- @source inline("aria-pressed:bg-accent/10 aria-pressed:border aria-pressed:border-accent");
48
- @source inline("aria-pressed:text-accent auto auto-cols-fr b back backdrop backdrop-blur backdrop-blur-md");
49
- @source inline("backdrop-blur-sm bg bg-accent bg-accent-solid bg-accent/10 bg-accent/5 bg-background");
50
- @source inline("bg-background/80 bg-background/90 bg-background/95 bg-black/50 bg-border bg-border-strong");
51
- @source inline("bg-card bg-current bg-destructive bg-destructive-solid bg-destructive/15 bg-destructive/5");
52
- @source inline("bg-destructive/8 bg-emerald-100 bg-field-bg bg-muted bg-muted-foreground bg-muted-foreground/40");
53
- @source inline("bg-muted-foreground/50 bg-muted-foreground/60 bg-muted/20 bg-muted/40 bg-popover bg-popover!");
54
- @source inline("bg-success bg-success-solid bg-success/15 bg-success/5 bg-surface bg-surface-sunken");
55
- @source inline("bg-tone-amber-bg bg-tone-amber-fg bg-tone-cyan-bg bg-tone-cyan-fg bg-tone-emerald-bg");
56
- @source inline("bg-tone-emerald-fg bg-tone-fuchsia-bg bg-tone-fuchsia-fg bg-tone-lime-bg bg-tone-lime-fg");
57
- @source inline("bg-tone-orange-bg bg-tone-orange-fg bg-tone-purple-bg bg-tone-purple-fg bg-tone-rose-bg");
58
- @source inline("bg-tone-rose-fg bg-tone-sky-bg bg-tone-sky-fg bg-tone-slate-bg bg-tone-slate-fg bg-tone-teal-bg");
59
- @source inline("bg-tone-teal-fg bg-tone-violet-bg bg-tone-violet-fg bg-transparent bg-warning bg-warning/15");
60
- @source inline("bg-warning/5 bg-warning/8 bg-white block blur border border-0 border-accent border-accent/40");
61
- @source inline("border-accent/50 border-b border-b-0 border-b-2 border-b-[length:var(--status-glyph-h)]");
62
- @source inline("border-b-current border-border border-border! border-border-strong border-border/60");
63
- @source inline("border-collapse border-current border-destructive/30 border-destructive/40 border-destructive/50");
45
+ @source inline("aria-disabled:active:scale-100 aria-disabled:cursor-not-allowed");
46
+ @source inline("aria-disabled:hover:bg-transparent aria-disabled:opacity-30 aria-disabled:opacity-50");
47
+ @source inline("aria-disabled:pointer-events-none aria-pressed aria-pressed:bg-accent/10 aria-pressed:border");
48
+ @source inline("aria-pressed:border-accent aria-pressed:text-accent auto auto-cols-fr b back backdrop");
49
+ @source inline("backdrop-blur backdrop-blur-md backdrop-blur-sm bg bg-accent bg-accent-solid bg-accent/10");
50
+ @source inline("bg-accent/5 bg-background bg-background/80 bg-background/90 bg-background/95 bg-black/50");
51
+ @source inline("bg-border bg-border-strong bg-card bg-card-raised bg-current bg-destructive bg-destructive-solid");
52
+ @source inline("bg-destructive/15 bg-destructive/5 bg-destructive/8 bg-emerald-100 bg-field-bg bg-foreground/70");
53
+ @source inline("bg-muted bg-muted-foreground bg-muted-foreground/40 bg-muted-foreground/50");
54
+ @source inline("bg-muted-foreground/60 bg-muted/20 bg-muted/40 bg-popover bg-popover! bg-success");
55
+ @source inline("bg-success-solid bg-success/15 bg-success/5 bg-surface bg-surface-sunken bg-tone-amber-bg");
56
+ @source inline("bg-tone-amber-fg bg-tone-cyan-bg bg-tone-cyan-fg bg-tone-emerald-bg bg-tone-emerald-fg");
57
+ @source inline("bg-tone-fuchsia-bg bg-tone-fuchsia-fg bg-tone-lime-bg bg-tone-lime-fg bg-tone-orange-bg");
58
+ @source inline("bg-tone-orange-fg bg-tone-purple-bg bg-tone-purple-fg bg-tone-rose-bg bg-tone-rose-fg");
59
+ @source inline("bg-tone-sky-bg bg-tone-sky-fg bg-tone-slate-bg bg-tone-slate-fg bg-tone-teal-bg bg-tone-teal-fg");
60
+ @source inline("bg-tone-violet-bg bg-tone-violet-fg bg-transparent bg-warning bg-warning/15 bg-warning/5");
61
+ @source inline("bg-warning/8 bg-white block blur border border-0 border-accent border-accent/40 border-accent/50");
62
+ @source inline("border-b border-b-0 border-b-2 border-b-[length:var(--status-glyph-h)] border-b-current");
63
+ @source inline("border-border border-border! border-border-strong border-border/60 border-collapse");
64
+ @source inline("border-current border-destructive/30 border-destructive/40 border-destructive/50");
64
65
  @source inline("border-field-border border-rule border-success/30 border-success/40 border-success/50 border-t");
65
66
  @source inline("border-tone-sky-fg/30 border-tone-slate-fg/30 border-transparent border-warning/30");
66
67
  @source inline("border-warning/40 border-warning/50 border-x-4 border-x-transparent bot bottom bottom-0 break");
@@ -79,10 +80,10 @@
79
80
  @source inline("data-[state=active]:text-accent data-[state=active]:text-foreground");
80
81
  @source inline("data-[state=checked]:bg-accent-solid data-[state=checked]:bg-accent/10");
81
82
  @source inline("data-[state=checked]:border-accent data-[state=checked]:border-accent-solid");
82
- @source inline("data-[state=checked]:font-medium data-[state=checked]:ring-2 data-[state=checked]:ring-accent");
83
- @source inline("data-[state=checked]:text-white data-[state=checked]:translate-x-4");
84
- @source inline("data-[state=closed]:animate-collapsible-up data-[state=closed]:animate-out");
85
- @source inline("data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95");
83
+ @source inline("data-[state=checked]:font-medium data-[state=checked]:ring-1 data-[state=checked]:ring-2");
84
+ @source inline("data-[state=checked]:ring-accent data-[state=checked]:text-white");
85
+ @source inline("data-[state=checked]:translate-x-4 data-[state=closed]:animate-collapsible-up");
86
+ @source inline("data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95");
86
87
  @source inline("data-[state=indeterminate]:bg-accent-solid data-[state=indeterminate]:border-accent-solid");
87
88
  @source inline("data-[state=indeterminate]:text-white data-[state=open]:animate-collapsible-down");
88
89
  @source inline("data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95");
@@ -90,7 +91,7 @@
90
91
  @source inline("disabled:bg-muted disabled:border-transparent disabled:cursor-not-allowed");
91
92
  @source inline("disabled:hover:bg-transparent disabled:hover:border-border disabled:hover:text-muted-foreground");
92
93
  @source inline("disabled:opacity-50 disabled:pointer-events-none disabled:text-muted-foreground div");
93
- @source inline("divide-border divide-y duration duration-200 duration-300 duration-[var(--duration-fast)] e");
94
+ @source inline("divide-border divide-y duration duration-200 duration-300 duration-[var(--duration-fast)] e ease");
94
95
  @source inline("ease-[var(--ease-out)] empty empty:hidden fade fade-out file file:bg-transparent file:border-0");
95
96
  @source inline("file:font-medium file:mr-3 file:text-foreground file:text-sm fill fill-[var(--color-popover)]");
96
97
  @source inline("fill-border fill-current filter fix fixed flex flex-1 flex-col flex-none flex-wrap focus");
@@ -108,19 +109,19 @@
108
109
  @source inline("grid-cols-[minmax(0,var(--property-label-w))_minmax(0,1fr)]");
109
110
  @source inline("grid-cols-[repeat(auto-fit,minmax(min(var(--cb-grid-min),100%),1fr))] grid-flow-col group");
110
111
  @source inline("group-active/sep:opacity-100 group-data-[density=compact]/properties:items-start");
111
- @source inline("group-data-[density=compact]/properties:min-h-6 group-data-[state=open]:rotate-90");
112
- @source inline("group-focus-visible/sep:opacity-100 group-hover group-hover/path:opacity-100");
113
- @source inline("group-hover/sep:opacity-100 group-hover:opacity-100 group/path group/properties group/sep grow h");
114
- @source inline("h-0.5 h-1 h-1.5 h-10 h-14 h-16 h-2 h-2.5 h-24 h-3 h-32 h-4 h-5 h-6 h-7 h-8 h-9");
115
- @source inline("h-[calc(100dvh-…)] h-[min(var(--region-h-lg),var(--region-h-phone))]");
112
+ @source inline("group-data-[density=compact]/properties:min-h-6 group-data-[state=checked]:opacity-100");
113
+ @source inline("group-data-[state=open]:rotate-90 group-focus-visible/sep:opacity-100 group-hover");
114
+ @source inline("group-hover/path:opacity-100 group-hover/sep:opacity-100 group-hover:opacity-100 group/path");
115
+ @source inline("group/properties group/sep grow h h-0.5 h-1 h-1.5 h-10 h-14 h-16 h-2 h-2.5 h-24 h-3 h-32 h-4 h-5");
116
+ @source inline("h-6 h-7 h-8 h-9 h-[calc(100dvh-…)] h-[min(var(--region-h-lg),var(--region-h-phone))]");
116
117
  @source inline("h-[min(var(--region-h-md),var(--region-h-phone))]");
117
118
  @source inline("h-[min(var(--region-h-sm),var(--region-h-phone))] h-[var(--control-h-lg)]");
118
119
  @source inline("h-[var(--control-h-md)] h-[var(--control-h-sm)] h-[var(--indicator-w)] h-auto h-full h-px hi hid");
119
120
  @source inline("hidden hover hover:bg-accent hover:bg-accent-solid-hover hover:bg-accent/10 hover:bg-accent/20");
120
121
  @source inline("hover:bg-border hover:bg-destructive-solid hover:bg-destructive-solid-hover");
121
122
  @source inline("hover:bg-destructive/10 hover:bg-muted hover:bg-success-solid-hover hover:bg-transparent");
122
- @source inline("hover:border-accent hover:border-destructive-solid hover:opacity-70 hover:text-accent");
123
- @source inline("hover:text-destructive hover:text-destructive-foreground hover:text-foreground");
123
+ @source inline("hover:border-accent hover:border-border-strong hover:border-destructive-solid hover:opacity-70");
124
+ @source inline("hover:text-accent hover:text-destructive hover:text-destructive-foreground hover:text-foreground");
124
125
  @source inline("hover:text-foreground! hover:underline i in inline inline-block inline-flex inline-grid inset");
125
126
  @source inline("inset-0 inset-x-0 inset-y-0 invisible is iso isolate it item items items-baseline items-center");
126
127
  @source inline("items-end items-start just justify-between justify-center justify-end justify-start l last");
@@ -139,29 +140,30 @@
139
140
  @source inline("md:grid-cols-4 md:inline md:w-1/3 md:w-2/5 min min-h-0 min-h-11 min-h-[1lh]");
140
141
  @source inline("min-h-[var(--control-h-lg)] min-h-[var(--control-h-md)] min-h-[var(--control-h-sm)] min-h-row");
141
142
  @source inline("min-w-0 min-w-11 min-w-32 min-w-[var(--radix-select-trigger-width)] ml-1 ml-auto motion");
142
- @source inline("motion-reduce:animate-none mt-0.5 mt-1 mt-2 mx-auto my my-1 object object-cover opacity");
143
- @source inline("opacity-0 opacity-30 opacity-40 opacity-50 opacity-60 opacity-70 out outline outline-none over");
144
- @source inline("overflow overflow-auto overflow-hidden overflow-x-auto overflow-x-clip overflow-y-auto");
145
- @source inline("overscroll-contain p p-0 p-0.5 p-1 p-2 p-3 p-4 p-6 p-[7px] p-[var(--panel-pad)] pause paused");
146
- @source inline("pb-0 pb-1 pb-2 pb-3 pb-4 pb-[max(env(safe-area-inset-bottom,0px),0.75rem)]");
147
- @source inline("pb-[var(--empty-lift)] pl-4 pl-8 place placeholder placeholder:text-field-placeholder point");
148
- @source inline("pointer pointer-coarse pointer-coarse:-m-2 pointer-coarse:data-[state=checked]:translate-x-8");
149
- @source inline("pointer-coarse:h-11 pointer-coarse:min-h-11 pointer-coarse:min-w-11 pointer-coarse:opacity-100");
150
- @source inline("pointer-coarse:size-5 pointer-coarse:size-9 pointer-coarse:w-11 pointer-coarse:w-18");
151
- @source inline("pointer-events pointer-events-auto pointer-events-none pr-8 pt-2 pt-3 px px-0 px-1 px-1.5 px-2");
152
- @source inline("px-2.5 px-3 px-4 px-5 px-6 px-row-x py-0 py-0.5 py-1 py-1.5 py-12 py-2 py-2.5 py-3 py-4 py-6");
153
- @source inline("py-[var(--panel-pad)] py-px py-row-y r re relative res resize right right-0 right-2 ring ring-2");
154
- @source inline("ring-background ro rotate-90 round rounded rounded-[calc(var(--radius-md)-0.25rem)]");
155
- @source inline("rounded-field rounded-full rounded-l-full rounded-lg rounded-md rounded-none rounded-r-full");
156
- @source inline("rounded-sm rounded-xl ru run running s select select-all select-none self-start shadow");
157
- @source inline("shadow-[var(--shadow-overlay)] shadow-[var(--shadow-popover)] shadow-none shadow-overlay");
158
- @source inline("shadow-raised shadow-sm shrink shrink-0 size size-0 size-1.5 size-10 size-12 size-14 size-2");
159
- @source inline("size-2.5 size-20 size-3 size-3.5 size-4 size-5 size-6 size-8 sm sm:-translate-x-1/2");
160
- @source inline("sm:-translate-y-1/2 sm:block sm:data-[state=closed]:zoom-out-95 sm:data-[state=open]:zoom-in-95");
161
- @source inline("sm:h-[var(--region-h-lg)] sm:h-[var(--region-h-md)] sm:h-[var(--region-h-sm)] sm:hidden");
162
- @source inline("sm:left-1/2 sm:max-h-[calc(100dvh-2rem)] sm:max-h-[min(90dvh,calc(100dvh-2rem))]");
163
- @source inline("sm:max-w-[calc(100vw-2rem)] sm:max-w-[var(--modal-w-lg)] sm:max-w-[var(--modal-w-md)]");
164
- @source inline("sm:max-w-[var(--modal-w-sm)] sm:p-4 sm:p-5 sm:p-8 sm:px-6 sm:rounded-xl sm:text-sm sm:top-1/2");
143
+ @source inline("motion-reduce:active:scale-100 motion-reduce:animate-none motion-reduce:transition-none mt-0.5");
144
+ @source inline("mt-1 mt-2 mx-auto my my-1 object object-cover opacity opacity-0 opacity-30 opacity-40 opacity-50");
145
+ @source inline("opacity-60 opacity-70 out outline outline-none over overflow overflow-auto overflow-hidden");
146
+ @source inline("overflow-x-auto overflow-x-clip overflow-y-auto overscroll-contain p p-0 p-0.5 p-1 p-1.5 p-2 p-3");
147
+ @source inline("p-4 p-6 p-[7px] p-[var(--panel-pad)] pause paused pb-0 pb-1 pb-2 pb-3 pb-4");
148
+ @source inline("pb-[max(env(safe-area-inset-bottom,0px),0.75rem)] pb-[var(--empty-lift)] pl-4 pl-8 place");
149
+ @source inline("placeholder placeholder:text-field-placeholder point pointer pointer-coarse pointer-coarse:-m-2");
150
+ @source inline("pointer-coarse:data-[state=checked]:translate-x-8 pointer-coarse:h-11 pointer-coarse:min-h-11");
151
+ @source inline("pointer-coarse:min-w-11 pointer-coarse:opacity-100 pointer-coarse:size-5 pointer-coarse:size-9");
152
+ @source inline("pointer-coarse:w-11 pointer-coarse:w-18 pointer-events pointer-events-auto pointer-events-none");
153
+ @source inline("pr-8 pt-2 pt-3 px px-0 px-1 px-1.5 px-2 px-2.5 px-3 px-4 px-5 px-6 px-row-x py-0 py-0.5 py-1");
154
+ @source inline("py-1.5 py-12 py-2 py-2.5 py-3 py-4 py-6 py-[var(--panel-pad)] py-px py-row-y r re relative res");
155
+ @source inline("resize right right-0 right-2 ring ring-2 ring-background ro rotate-90 round rounded");
156
+ @source inline("rounded-[calc(var(--radius-md)-0.25rem)] rounded-field rounded-full rounded-l-full rounded-lg");
157
+ @source inline("rounded-md rounded-none rounded-r-full rounded-sm rounded-xl ru run running s select select-all");
158
+ @source inline("select-none self-start shadow shadow-[var(--shadow-overlay)] shadow-[var(--shadow-popover)]");
159
+ @source inline("shadow-none shadow-overlay shadow-raised shadow-sm shrink shrink-0 size size-0 size-1.5 size-10");
160
+ @source inline("size-12 size-14 size-2 size-2.5 size-20 size-3 size-3.5 size-4 size-5 size-6 size-8 sm");
161
+ @source inline("sm:-translate-x-1/2 sm:-translate-y-1/2 sm:block sm:data-[state=closed]:zoom-out-95");
162
+ @source inline("sm:data-[state=open]:zoom-in-95 sm:grid-cols-4 sm:h-[var(--region-h-lg)]");
163
+ @source inline("sm:h-[var(--region-h-md)] sm:h-[var(--region-h-sm)] sm:hidden sm:left-1/2");
164
+ @source inline("sm:max-h-[calc(100dvh-2rem)] sm:max-h-[min(90dvh,calc(100dvh-2rem))] sm:max-w-[calc(100vw-2rem)]");
165
+ @source inline("sm:max-w-[var(--modal-w-lg)] sm:max-w-[var(--modal-w-md)] sm:max-w-[var(--modal-w-sm)] sm:p-4");
166
+ @source inline("sm:p-5 sm:p-8 sm:pointer-fine:text-sm sm:px-6 sm:rounded-xl sm:text-sm sm:top-1/2");
165
167
  @source inline("sm:w-[calc(100vw-2rem)] space space-y-1 space-y-3 sr-only stat static sticky stroke");
166
168
  @source inline("stroke-accent-solid stroke-destructive stroke-muted stroke-warning t ta tab table tabular-nums");
167
169
  @source inline("text text-2xl text-[length:var(--text-glyph-relative)] text-[var(--foreground)]");
@@ -174,6 +176,7 @@
174
176
  @source inline("text-tone-sky-fg text-tone-slate-fg text-tone-teal-fg text-tone-violet-fg text-warning");
175
177
  @source inline("text-warning-strong text-white text-xs to top top-0 top-1/2 top-2 touch touch-manipulation");
176
178
  @source inline("touch-none track tracking tracking-tight tracking-wide tracking-wider transform transition");
179
+ @source inline("transition-[color,background-color,border-color,box-shadow,transform]");
177
180
  @source inline("transition-[stroke-dashoffset] transition-[width] transition-all transition-colors");
178
181
  @source inline("transition-opacity transition-transform translate-x-1/2 translate-y-1/2 truncate under underline");
179
182
  @source inline("underline-offset-4 up uppercase v visible w w-0.5 w-1 w-1/2 w-1/3 w-10 w-16 w-2.5 w-2/3 w-24");
@@ -185,11 +188,11 @@
185
188
  /*
186
189
  * Theme variables cursedbelt's components read BY NAME (`var(--color-card)` in a style prop).
187
190
  * Tailwind emits a theme variable only when the app's own pass sees it used, and a `var()` here is
188
- * that use — `@source inline` cannot mark one. 10 variable(s), derived by
191
+ * that use — `@source inline` cannot mark one. 11 variable(s), derived by
189
192
  * scripts/generateUtilityStyles.ts → themeVariablesReadByName(). Nothing reads this property.
190
193
  */
191
194
  @layer theme {
192
195
  :root, :host {
193
- --cb-theme-read-by-name: var(--color-accent) var(--color-border) var(--color-card) var(--color-muted) var(--color-popover) var(--duration-base) var(--ease-out) var(--spacing) var(--text-caption) var(--text-sm);
196
+ --cb-theme-read-by-name: var(--color-accent) var(--color-border) var(--color-card) var(--color-muted) var(--color-popover) var(--duration-base) var(--ease-out) var(--press-scale) var(--spacing) var(--text-caption) var(--text-sm);
194
197
  }
195
198
  }
@@ -18,11 +18,11 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 10 candidate(s).
21
+ * 9 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
25
25
  * import closures rather than a hand-written list, is scripts/styleAreas.ts.
26
26
  */
27
- @source inline("h-105 hover:border-border-strong hover:border-field-ring max-h-64 min-w-48 shadow-popover size-7");
28
- @source inline("text-field-placeholder text-xl w-88");
27
+ @source inline("h-105 hover:border-field-ring max-h-64 min-w-48 shadow-popover size-7 text-field-placeholder");
28
+ @source inline("text-xl w-88");
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 23 candidate(s).
21
+ * 22 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -26,5 +26,5 @@
26
26
  */
27
27
  @source inline("[&>*]:min-w-0 bg-[var(--card)] bg-[var(--muted)]/10 bg-[var(--muted)]/20 bg-accent/15 collapse");
28
28
  @source inline("duration-150 hover:decoration-border hover:underline-offset-4 max-h-72 max-w max-w-48 max-w-80");
29
- @source inline("min-w-8 mx-0.5 p-1.5 place-items-center px-0.5 ring-1 ring-[var(--accent)] rotate-180");
30
- @source inline("self-stretch text-[var(--danger)]");
29
+ @source inline("min-w-8 mx-0.5 place-items-center px-0.5 ring-1 ring-[var(--accent)] rotate-180 self-stretch");
30
+ @source inline("text-[var(--danger)]");
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 61 candidate(s).
21
+ * 59 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -30,8 +30,8 @@
30
30
  @source inline("bg-tone-purple-bg/50 bg-tone-rose-bg/50 bg-tone-sky-bg/50 bg-tone-slate-bg/50 border-2");
31
31
  @source inline("border-current/20 border-dashed col-span-12 col-span-6 collapse focus:border-accent focus:ring-1");
32
32
  @source inline("focus:ring-ring gap-y-3 grid-cols-1 grid-cols-12 group-focus-within:opacity-100");
33
- @source inline("hover:bg-accent/5 hover:border-border-strong lg:flex-row lg:inset-8 lg:items-start lg:w-72 p-1.5");
34
- @source inline("p-5 pt-1 ring-1 ring-accent ring-accent/40 self-stretch sm:border sm:border-border sm:inset-4");
35
- @source inline("text-3xl text-muted-foreground/60 text-muted-foreground/70 text-tone-amber-ink");
36
- @source inline("text-tone-cyan-ink text-tone-emerald-ink text-tone-purple-ink text-tone-rose-ink");
37
- @source inline("text-tone-sky-ink text-tone-slate-ink text-xl");
33
+ @source inline("hover:bg-accent/5 lg:flex-row lg:inset-8 lg:items-start lg:w-72 p-5 pt-1 ring-1 ring-accent");
34
+ @source inline("ring-accent/40 self-stretch sm:border sm:border-border sm:inset-4 text-3xl");
35
+ @source inline("text-muted-foreground/60 text-muted-foreground/70 text-tone-amber-ink text-tone-cyan-ink");
36
+ @source inline("text-tone-emerald-ink text-tone-purple-ink text-tone-rose-ink text-tone-sky-ink");
37
+ @source inline("text-tone-slate-ink text-xl");
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 57 candidate(s).
21
+ * 56 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -28,8 +28,8 @@
28
28
  @source inline("bg-black/95 bg-white/10 border-none bottom-1 col collapse ease-in-out f");
29
29
  @source inline("focus-visible:ring-offset-black focus-within:border-field-ring focus-within:ring-2");
30
30
  @source inline("focus-within:ring-field-ring/30 hover:bg-white/20 hover:border-accent-solid hover:text-white");
31
- @source inline("inset-4 left-1 max-h-[40vh] min-h-20 min-h-dvh min-w-12 min-w-16 min-w-20 min-w-24 mx-1 p-1.5");
32
- @source inline("pl-2 place-items-center pr-1 resize-none right-1 right-4 size-9 text-tone-amber-ink");
31
+ @source inline("inset-4 left-1 max-h-[40vh] min-h-20 min-h-dvh min-w-12 min-w-16 min-w-20 min-w-24 mx-1 pl-2");
32
+ @source inline("place-items-center pr-1 resize-none right-1 right-4 size-9 text-tone-amber-ink");
33
33
  @source inline("text-tone-cyan-ink text-tone-emerald-ink text-tone-orange-ink text-tone-purple-ink");
34
34
  @source inline("text-tone-rose-ink text-tone-sky-ink text-tone-slate-ink text-white/70 top-1 top-4 translate");
35
35
  @source inline("translate-x-px w-40 w-48 zoom zoom-in");
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 82 candidate(s).
21
+ * 81 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -26,9 +26,9 @@
26
26
  */
27
27
  @source inline("[&_svg]:max-h-10 [&_svg]:min-h-5 [&_svg]:size-1/3 accent-white active:cursor-grabbing");
28
28
  @source inline("appearance-none aspect-square aspect-video backdrop-blur-xs bg-accent/15 bg-background/65");
29
- @source inline("bg-background/85 bg-black bg-black/55 bg-black/60 bg-black/85 bg-black/90 bg-card-raised");
30
- @source inline("bg-center bg-cover bg-linear-to-t bg-white/90 border-2 border-accent-solid border-white/90");
31
- @source inline("border-y-2 bottom-1 bottom-1.5 bottom-2 cursor-crosshair cursor-grab cursor-zoom-in ease-in-out");
29
+ @source inline("bg-background/85 bg-black bg-black/55 bg-black/60 bg-black/85 bg-black/90 bg-center bg-cover");
30
+ @source inline("bg-linear-to-t bg-white/90 border-2 border-accent-solid border-white/90 border-y-2 bottom-1");
31
+ @source inline("bottom-1.5 bottom-2 cursor-crosshair cursor-grab cursor-zoom-in ease-in-out");
32
32
  @source inline("focus-within:opacity-100 from-black/80 g grayscale group-focus-within:opacity-100 h-11");
33
33
  @source inline("hover:bg-black/75 hover:bg-destructive hover:bg-white/20 hover:border-accent-solid invert left-0");
34
34
  @source inline("left-1 max-h-[40vh] max-h-[var(--media-max-h)] max-h-full max-w-50 min-h-64 min-h-dvh min-w-10");
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 25 candidate(s).
21
+ * 24 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -28,6 +28,6 @@
28
28
  @source inline("data-[state=closed]:slide-out-to-bottom data-[state=closed]:slide-out-to-left");
29
29
  @source inline("data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-bottom");
30
30
  @source inline("data-[state=open]:slide-in-from-left data-[state=open]:slide-in-from-right hover:border-border");
31
- @source inline("hover:border-border-strong left-0 max-h-[var(--radix-popover-content-available-height)]");
32
- @source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)]");
33
- @source inline("max-w-[var(--overlay-max-w)] max-w-sm rounded-l-xl rounded-r-xl rounded-t-xl w-64");
31
+ @source inline("left-0 max-h-[var(--radix-popover-content-available-height)] max-h-[var(--sheet-h-lg)]");
32
+ @source inline("max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-w-[var(--overlay-max-w)] max-w-sm");
33
+ @source inline("rounded-l-xl rounded-r-xl rounded-t-xl w-64");
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 109 candidate(s).
21
+ * 108 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -32,12 +32,12 @@
32
32
  @source inline("data-[state=open]:slide-in-from-bottom data-[state=open]:slide-in-from-left");
33
33
  @source inline("data-[state=open]:slide-in-from-right disabled:opacity-0 duration-150 first:pt-1 flex-row");
34
34
  @source inline("group-hover:disabled:opacity-50 h-105 h-40 hover:bg-card-overlay hover:bg-muted-foreground/10");
35
- @source inline("hover:bg-muted/80 hover:border-border-strong hover:border-field-ring hover:shadow-popover italic");
36
- @source inline("left-0 left-2.5 max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)]");
37
- @source inline("max-h-full max-w-sm min-h min-h-20 min-h-8 min-h-9 min-h-dvh min-h-full min-w-20 min-w-40");
38
- @source inline("opacity-100 pb-0.5 pb-[max(env(safe-area-inset-bottom,0px),0.5rem)] peer-focus");
39
- @source inline("peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-field-ring/40 peer-focus:rounded-lg");
40
- @source inline("pl-1 pl-3 pointer-coarse:disabled:opacity-50 pointer-coarse:h-12 pointer-coarse:w-12 pr-16 pr-9");
35
+ @source inline("hover:bg-muted/80 hover:border-field-ring hover:shadow-popover italic left-0 left-2.5");
36
+ @source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-h-full");
37
+ @source inline("max-w-sm min-h min-h-20 min-h-8 min-h-9 min-h-dvh min-h-full min-w-20 min-w-40 opacity-100");
38
+ @source inline("pb-0.5 pb-[max(env(safe-area-inset-bottom,0px),0.5rem)] peer-focus peer-focus:outline-none");
39
+ @source inline("peer-focus:ring-2 peer-focus:ring-field-ring/40 peer-focus:rounded-lg pl-1 pl-3");
40
+ @source inline("pointer-coarse:disabled:opacity-50 pointer-coarse:h-12 pointer-coarse:w-12 pr-16 pr-9");
41
41
  @source inline("resize-none right-4 ring-1 ring-4 ring-accent/20 ring-accent/30 ring-accent/40 ring-border");
42
42
  @source inline("ring-inset ring-ring rounded-[var(--radius-device)] rounded-l-xl rounded-r-xl rounded-t-xl");
43
43
  @source inline("scale-[1.01] self-stretch shrink-[2] size-7 sm:flex-1 sm:flex-nowrap sm:shrink-0 sm:w-56");