cursedbelt 5.64.0 → 5.67.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 (145) hide show
  1. package/dist/react/Toast.d.ts.map +1 -1
  2. package/dist/react/Toast.js +4 -1
  3. package/dist/react/Toast.js.map +1 -1
  4. package/dist/react/components/Accordion.d.ts.map +1 -1
  5. package/dist/react/components/Accordion.js +6 -1
  6. package/dist/react/components/Accordion.js.map +1 -1
  7. package/dist/react/components/Button.d.ts.map +1 -1
  8. package/dist/react/components/Button.js +9 -2
  9. package/dist/react/components/Button.js.map +1 -1
  10. package/dist/react/components/CardTapTarget.d.ts.map +1 -1
  11. package/dist/react/components/CardTapTarget.js +7 -1
  12. package/dist/react/components/CardTapTarget.js.map +1 -1
  13. package/dist/react/components/ChipFilterStrip.d.ts.map +1 -1
  14. package/dist/react/components/ChipFilterStrip.js +2 -1
  15. package/dist/react/components/ChipFilterStrip.js.map +1 -1
  16. package/dist/react/components/ColorField.js +1 -1
  17. package/dist/react/components/ColorField.js.map +1 -1
  18. package/dist/react/components/ComboboxField.js +1 -1
  19. package/dist/react/components/ComboboxField.js.map +1 -1
  20. package/dist/react/components/ConfirmDialog.d.ts.map +1 -1
  21. package/dist/react/components/ConfirmDialog.js +2 -1
  22. package/dist/react/components/ConfirmDialog.js.map +1 -1
  23. package/dist/react/components/Drawer.d.ts.map +1 -1
  24. package/dist/react/components/Drawer.js +2 -1
  25. package/dist/react/components/Drawer.js.map +1 -1
  26. package/dist/react/components/Lightbox.d.ts.map +1 -1
  27. package/dist/react/components/Lightbox.js +2 -1
  28. package/dist/react/components/Lightbox.js.map +1 -1
  29. package/dist/react/components/Modal.d.ts.map +1 -1
  30. package/dist/react/components/Modal.js +5 -3
  31. package/dist/react/components/Modal.js.map +1 -1
  32. package/dist/react/components/PromptDialog.d.ts.map +1 -1
  33. package/dist/react/components/PromptDialog.js +2 -1
  34. package/dist/react/components/PromptDialog.js.map +1 -1
  35. package/dist/react/components/SecretInput.js +1 -1
  36. package/dist/react/components/SecretInput.js.map +1 -1
  37. package/dist/react/components/SegmentedControl.d.ts.map +1 -1
  38. package/dist/react/components/SegmentedControl.js +2 -1
  39. package/dist/react/components/SegmentedControl.js.map +1 -1
  40. package/dist/react/components/Tabs.d.ts.map +1 -1
  41. package/dist/react/components/Tabs.js +68 -15
  42. package/dist/react/components/Tabs.js.map +1 -1
  43. package/dist/react/components/TagsInput.js +1 -1
  44. package/dist/react/components/TagsInput.js.map +1 -1
  45. package/dist/react/components/TooltipImpl.d.ts.map +1 -1
  46. package/dist/react/components/TooltipImpl.js +2 -1
  47. package/dist/react/components/TooltipImpl.js.map +1 -1
  48. package/dist/react/components/dialog.d.ts.map +1 -1
  49. package/dist/react/components/dialog.js +2 -1
  50. package/dist/react/components/dialog.js.map +1 -1
  51. package/dist/react/components/searchInput.css +4 -2
  52. package/dist/react/layoutEngine/LayoutConfigDialog.d.ts.map +1 -1
  53. package/dist/react/layoutEngine/LayoutConfigDialog.js +3 -1
  54. package/dist/react/layoutEngine/LayoutConfigDialog.js.map +1 -1
  55. package/dist/react/lib/field.d.ts +2 -2
  56. package/dist/react/lib/field.d.ts.map +1 -1
  57. package/dist/react/lib/field.js +9 -3
  58. package/dist/react/lib/field.js.map +1 -1
  59. package/dist/react/lib/floatingStyles.d.ts +10 -2
  60. package/dist/react/lib/floatingStyles.d.ts.map +1 -1
  61. package/dist/react/lib/floatingStyles.js +12 -7
  62. package/dist/react/lib/floatingStyles.js.map +1 -1
  63. package/dist/react/lib/overlayMotion.d.ts +37 -0
  64. package/dist/react/lib/overlayMotion.d.ts.map +1 -0
  65. package/dist/react/lib/overlayMotion.js +50 -0
  66. package/dist/react/lib/overlayMotion.js.map +1 -0
  67. package/dist/react/lib/press.d.ts +37 -0
  68. package/dist/react/lib/press.d.ts.map +1 -0
  69. package/dist/react/lib/press.js +41 -0
  70. package/dist/react/lib/press.js.map +1 -0
  71. package/dist/react/media-gallery/MediaGallery.d.ts +22 -1
  72. package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
  73. package/dist/react/media-gallery/MediaGallery.js +13 -3
  74. package/dist/react/media-gallery/MediaGallery.js.map +1 -1
  75. package/dist/react/nav/PlaceBar.d.ts.map +1 -1
  76. package/dist/react/nav/PlaceBar.js +4 -3
  77. package/dist/react/nav/PlaceBar.js.map +1 -1
  78. package/dist/react/nav/TopBar.d.ts.map +1 -1
  79. package/dist/react/nav/TopBar.js +13 -2
  80. package/dist/react/nav/TopBar.js.map +1 -1
  81. package/dist/react/palette/CommandPalette.d.ts.map +1 -1
  82. package/dist/react/palette/CommandPalette.js +3 -2
  83. package/dist/react/palette/CommandPalette.js.map +1 -1
  84. package/dist/styles-areas/analytics.css +2 -2
  85. package/dist/styles-areas/core.css +73 -64
  86. package/dist/styles-areas/data-table.css +3 -3
  87. package/dist/styles-areas/fields.css +2 -2
  88. package/dist/styles-areas/media.css +4 -4
  89. package/dist/styles-areas/nav.css +18 -18
  90. package/dist/styles-areas/overlays.css +2 -2
  91. package/dist/styles-areas/palette.css +4 -5
  92. package/dist/styles-areas/place-bar.css +5 -5
  93. package/dist/styles-areas/sharing.css +4 -4
  94. package/dist/styles-areas/test-report.css +4 -4
  95. package/dist/styles-areas/wizard.css +2 -2
  96. package/dist/styles-areas/workbench.css +2 -2
  97. package/dist/styles-utilities.css +103 -20
  98. package/dist/theme.css +47 -0
  99. package/package.json +1 -1
  100. package/src/react/Toast.tsx +4 -1
  101. package/src/react/components/Accordion.tsx +8 -1
  102. package/src/react/components/Button.spec.tsx +16 -0
  103. package/src/react/components/Button.tsx +9 -2
  104. package/src/react/components/CardTapTarget.tsx +6 -1
  105. package/src/react/components/ChipFilterStrip.tsx +3 -1
  106. package/src/react/components/ColorField.tsx +1 -1
  107. package/src/react/components/ComboboxField.tsx +1 -1
  108. package/src/react/components/ConfirmDialog.tsx +2 -2
  109. package/src/react/components/Drawer.tsx +2 -0
  110. package/src/react/components/Lightbox.tsx +2 -2
  111. package/src/react/components/Modal.tsx +5 -4
  112. package/src/react/components/PromptDialog.tsx +2 -2
  113. package/src/react/components/SecretInput.tsx +1 -1
  114. package/src/react/components/SegmentedControl.tsx +3 -1
  115. package/src/react/components/Tabs.tsx +78 -5
  116. package/src/react/components/TagsInput.tsx +1 -1
  117. package/src/react/components/TooltipImpl.tsx +2 -0
  118. package/src/react/components/dialog.tsx +2 -2
  119. package/src/react/components/searchInput.css +4 -2
  120. package/src/react/layoutEngine/LayoutConfigDialog.tsx +3 -1
  121. package/src/react/lib/field.ts +9 -3
  122. package/src/react/lib/floatingStyles.ts +12 -8
  123. package/src/react/lib/overlayMotion.ts +58 -0
  124. package/src/react/lib/press.ts +43 -0
  125. package/src/react/media-gallery/MediaGallery.spec.tsx +65 -1
  126. package/src/react/media-gallery/MediaGallery.tsx +37 -2
  127. package/src/react/nav/PlaceBar.tsx +7 -3
  128. package/src/react/nav/TopBar.spec.tsx +34 -0
  129. package/src/react/nav/TopBar.tsx +22 -0
  130. package/src/react/palette/CommandPalette.tsx +3 -2
  131. package/src/styles-areas/analytics.css +2 -2
  132. package/src/styles-areas/core.css +73 -64
  133. package/src/styles-areas/data-table.css +3 -3
  134. package/src/styles-areas/fields.css +2 -2
  135. package/src/styles-areas/media.css +4 -4
  136. package/src/styles-areas/nav.css +18 -18
  137. package/src/styles-areas/overlays.css +2 -2
  138. package/src/styles-areas/palette.css +4 -5
  139. package/src/styles-areas/place-bar.css +5 -5
  140. package/src/styles-areas/sharing.css +4 -4
  141. package/src/styles-areas/test-report.css +4 -4
  142. package/src/styles-areas/wizard.css +2 -2
  143. package/src/styles-areas/workbench.css +2 -2
  144. package/src/styles-utilities.css +103 -20
  145. package/src/theme.css +47 -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
  />
@@ -10,6 +10,7 @@ import {
10
10
  import { Drawer } from '../components/Drawer.js';
11
11
  import { IconButton } from '../components/IconButton.js';
12
12
  import { cn } from '../lib/cn.js';
13
+ import { PRESS } from '../lib/press.js';
13
14
  import {
14
15
  isDomainActive,
15
16
  NAV_BADGE_TONE,
@@ -173,7 +174,8 @@ export function PlaceBar({
173
174
  className={cn(
174
175
  // `border-0` and an explicit ground: without preflight a raw `<button>` is the
175
176
  // browser's grey bordered box (measured in desk at 390, forge task 2748).
176
- 'relative flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-md border-0 px-0.5 py-1.5 font-[inherit] text-xs font-medium tracking-tight transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
177
+ 'relative flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-md border-0 px-0.5 py-1.5 font-[inherit] text-xs font-medium tracking-tight focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
178
+ PRESS,
177
179
  overflowActive ? 'bg-accent/10 text-foreground' : 'bg-transparent text-muted-foreground hover:bg-muted hover:text-foreground',
178
180
  )}
179
181
  >
@@ -218,7 +220,8 @@ export function PlaceBar({
218
220
  ariaCurrent={active ? 'page' : undefined}
219
221
  className={cn(
220
222
  // ≥48px touch rows — full labels, never clipped tab captions.
221
- 'flex min-h-12 items-center gap-3 rounded-md px-3 py-2 text-sm font-medium no-underline transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
223
+ 'flex min-h-12 items-center gap-3 rounded-md px-3 py-2 text-sm font-medium no-underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
224
+ PRESS,
222
225
  active ? 'bg-muted text-foreground' : 'text-foreground hover:bg-muted',
223
226
  )}
224
227
  >
@@ -295,7 +298,8 @@ function PlaceTab({
295
298
  ariaLabel={place.label}
296
299
  className={cn(
297
300
  // `no-underline`: a host without Tailwind's preflight (desk) draws a bare `<a>` underlined.
298
- 'relative flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-md px-0.5 py-1.5 text-xs font-medium tracking-tight no-underline transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
301
+ 'relative flex min-w-0 flex-1 flex-col items-center justify-center gap-0.5 rounded-md px-0.5 py-1.5 text-xs font-medium tracking-tight no-underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
302
+ PRESS,
299
303
  active ? 'bg-accent/10 text-foreground' : 'text-muted-foreground hover:bg-muted hover:text-foreground',
300
304
  )}
301
305
  >
@@ -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
 
@@ -31,6 +31,7 @@ import { ScrollArea } from '../components/ScrollArea.js';
31
31
  import { Spinner } from '../components/Spinner.js';
32
32
  import { useDebouncedValue } from '../hooks/useDebouncedValue.js';
33
33
  import { cn } from '../lib/cn.js';
34
+ import { DIALOG_MOTION, SCRIM_MOTION } from '../lib/overlayMotion.js';
34
35
  import type { IconResolver } from '../nav/navShared.js';
35
36
  import { renderIcon } from '../nav/navShared.js';
36
37
  import type { SearchResultGroup } from '../nav/SearchResults.js';
@@ -302,7 +303,7 @@ export function CommandPalette({
302
303
  return (
303
304
  <Dialog.Root open={open} onOpenChange={onOpenChange}>
304
305
  <Dialog.Portal>
305
- <Dialog.Overlay className='fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0' />
306
+ <Dialog.Overlay className={cn('fixed inset-0 z-50 bg-black/50 backdrop-blur-sm', SCRIM_MOTION)} />
306
307
  <Dialog.Content
307
308
  data-cb-command-palette=''
308
309
  onOpenAutoFocus={(e) => {
@@ -312,7 +313,7 @@ export function CommandPalette({
312
313
  }}
313
314
  className={cn(
314
315
  'fixed left-1/2 top-[var(--palette-top)] z-50 w-[calc(100%-2rem)] max-w-2xl -translate-x-1/2',
315
- 'data-[state=closed]:animate-out data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=open]:slide-in-from-top-2',
316
+ DIALOG_MOTION,
316
317
  className,
317
318
  )}
318
319
  >
@@ -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
- * 167 candidate(s).
21
+ * 166 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
@@ -43,7 +43,7 @@
43
43
  @source inline("focus-visible:ring-field-ring/40 focus-within:border-field-ring focus-within:ring-2");
44
44
  @source inline("focus-within:ring-field-ring/30 from-card gap-x-6 h-105");
45
45
  @source inline("has-[[aria-invalid=true]]:border-field-error hover:bg-background hover:bg-muted/40");
46
- @source inline("hover:border-field-ring hover:text-warning italic justify-self-end last:border-0 left-0 left-11");
46
+ @source inline("hover:border-field-ring hover:text-warning italic justify-self-end last:border-0 left-11");
47
47
  @source inline("left-2.5 list-none max-h-64 max-h-88 max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)]");
48
48
  @source inline("max-h-[var(--sheet-h-sm)] max-sm:flex-1 max-sm:flex-wrap max-sm:min-w-0 max-sm:min-w-24");
49
49
  @source inline("max-sm:min-w-32 max-sm:ml-13.5 max-sm:w-auto max-w-32 max-w-36 max-w-45 max-w-48 max-w-60");
@@ -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
- * 871 candidate(s).
18
+ * 898 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,42 +39,45 @@
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)]");
43
+ @source inline("active:scale-[var(--press-scale-surface)] alert alert-icon align align-middle an animate");
44
+ @source inline("animate-in animate-progress-indeterminate animate-pulse animate-spin aria");
44
45
  @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-card-raised bg-current bg-destructive bg-destructive-solid bg-destructive/15");
52
- @source inline("bg-destructive/5 bg-destructive/8 bg-emerald-100 bg-field-bg bg-foreground/70 bg-muted");
53
- @source inline("bg-muted-foreground bg-muted-foreground/40 bg-muted-foreground/50 bg-muted-foreground/60");
54
- @source inline("bg-muted/20 bg-muted/40 bg-popover bg-popover! bg-success bg-success-solid bg-success/15");
55
- @source inline("bg-success/5 bg-surface bg-surface-sunken bg-tone-amber-bg bg-tone-amber-fg bg-tone-cyan-bg");
56
- @source inline("bg-tone-cyan-fg bg-tone-emerald-bg bg-tone-emerald-fg bg-tone-fuchsia-bg bg-tone-fuchsia-fg");
57
- @source inline("bg-tone-lime-bg bg-tone-lime-fg bg-tone-orange-bg bg-tone-orange-fg bg-tone-purple-bg");
58
- @source inline("bg-tone-purple-fg bg-tone-rose-bg bg-tone-rose-fg bg-tone-sky-bg bg-tone-sky-fg bg-tone-slate-bg");
59
- @source inline("bg-tone-slate-fg bg-tone-teal-bg bg-tone-teal-fg bg-tone-violet-bg bg-tone-violet-fg");
60
- @source inline("bg-transparent bg-warning bg-warning/15 bg-warning/5 bg-warning/8 bg-white block blur border");
61
- @source inline("border-0 border-accent border-accent/40 border-accent/50 border-b border-b-0 border-b-2");
62
- @source inline("border-b-[length:var(--status-glyph-h)] border-b-current border-border border-border!");
63
- @source inline("border-border-strong border-border/60 border-collapse border-current border-destructive/30");
64
- @source inline("border-destructive/40 border-destructive/50 border-field-border border-rule border-success/30");
65
- @source inline("border-success/40 border-success/50 border-t border-tone-sky-fg/30 border-tone-slate-fg/30");
66
- @source inline("border-transparent border-warning/30 border-warning/40 border-warning/50 border-x-4");
67
- @source inline("border-x-transparent bot bottom bottom-0 break break-all break-words c ca cap capitalize co");
68
- @source inline("col-span-full com contain container content contents cursor cursor-col-resize cursor-default");
69
- @source inline("cursor-ew-resize cursor-not-allowed cursor-pointer cursor-row-resize d dark dark:bg-card-overlay");
70
- @source inline("dark:bg-card-raised dark:bg-gray-800 data data-[disabled]:hover:bg-border");
71
- @source inline("data-[disabled]:opacity-50 data-[disabled]:pointer-events-none");
72
- @source inline("data-[interactive=true]:duration-[var(--duration-base)]");
46
+ @source inline("aria-disabled:active:scale-100 aria-disabled:cursor-not-allowed");
47
+ @source inline("aria-disabled:hover:bg-transparent aria-disabled:opacity-30 aria-disabled:opacity-50");
48
+ @source inline("aria-disabled:pointer-events-none aria-pressed aria-pressed:bg-accent/10 aria-pressed:border");
49
+ @source inline("aria-pressed:border-accent aria-pressed:text-accent auto auto-cols-fr b back backdrop");
50
+ @source inline("backdrop-blur backdrop-blur-md backdrop-blur-sm bg bg-accent bg-accent-solid bg-accent/10");
51
+ @source inline("bg-accent/5 bg-background bg-background/80 bg-background/90 bg-background/95 bg-black/50");
52
+ @source inline("bg-border bg-border-strong bg-card bg-card-raised bg-current bg-destructive bg-destructive-solid");
53
+ @source inline("bg-destructive/15 bg-destructive/5 bg-destructive/8 bg-emerald-100 bg-field-bg bg-foreground/70");
54
+ @source inline("bg-muted bg-muted-foreground bg-muted-foreground/40 bg-muted-foreground/50");
55
+ @source inline("bg-muted-foreground/60 bg-muted/20 bg-muted/40 bg-popover bg-popover! bg-success");
56
+ @source inline("bg-success-solid bg-success/15 bg-success/5 bg-surface bg-surface-sunken bg-tone-amber-bg");
57
+ @source inline("bg-tone-amber-fg bg-tone-cyan-bg bg-tone-cyan-fg bg-tone-emerald-bg bg-tone-emerald-fg");
58
+ @source inline("bg-tone-fuchsia-bg bg-tone-fuchsia-fg bg-tone-lime-bg bg-tone-lime-fg bg-tone-orange-bg");
59
+ @source inline("bg-tone-orange-fg bg-tone-purple-bg bg-tone-purple-fg bg-tone-rose-bg bg-tone-rose-fg");
60
+ @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");
61
+ @source inline("bg-tone-violet-bg bg-tone-violet-fg bg-transparent bg-warning bg-warning/15 bg-warning/5");
62
+ @source inline("bg-warning/8 bg-white block blur border border-0 border-accent border-accent/40 border-accent/50");
63
+ @source inline("border-b border-b-0 border-b-2 border-b-[length:var(--status-glyph-h)] border-b-current");
64
+ @source inline("border-border border-border! border-border-strong border-border/60 border-collapse");
65
+ @source inline("border-current border-destructive/30 border-destructive/40 border-destructive/50");
66
+ @source inline("border-field-border border-rule border-success/30 border-success/40 border-success/50 border-t");
67
+ @source inline("border-tone-sky-fg/30 border-tone-slate-fg/30 border-transparent border-warning/30");
68
+ @source inline("border-warning/40 border-warning/50 border-x-4 border-x-transparent bot bottom bottom-0 break");
69
+ @source inline("break-all break-words c ca cap capitalize co col-span-full com contain container content");
70
+ @source inline("contents cursor cursor-col-resize cursor-default cursor-ew-resize cursor-not-allowed");
71
+ @source inline("cursor-pointer cursor-row-resize d dark dark:bg-card-overlay dark:bg-card-raised");
72
+ @source inline("dark:bg-gray-800 data data-[disabled]:hover:bg-border data-[disabled]:opacity-50");
73
+ @source inline("data-[disabled]:pointer-events-none data-[interactive=true]:duration-[var(--duration-base)]");
73
74
  @source inline("data-[interactive=true]:ease-[var(--ease-out)] data-[interactive=true]:hover:-translate-y-0.5");
74
75
  @source inline("data-[interactive=true]:hover:border-border-strong data-[interactive=true]:transition-all");
75
76
  @source inline("data-[interactive=true]:transition-colors data-[placeholder]:text-muted-foreground");
76
- @source inline("data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2");
77
- @source inline("data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2");
77
+ @source inline("data-[side=bottom]:slide-in-from-top-1 data-[side=bottom]:slide-in-from-top-2");
78
+ @source inline("data-[side=left]:slide-in-from-right-1 data-[side=left]:slide-in-from-right-2");
79
+ @source inline("data-[side=right]:slide-in-from-left-1 data-[side=right]:slide-in-from-left-2");
80
+ @source inline("data-[side=top]:slide-in-from-bottom-1 data-[side=top]:slide-in-from-bottom-2");
78
81
  @source inline("data-[state=active]:bg-background data-[state=active]:border-accent");
79
82
  @source inline("data-[state=active]:font-semibold data-[state=active]:shadow-raised");
80
83
  @source inline("data-[state=active]:text-accent data-[state=active]:text-foreground");
@@ -83,29 +86,33 @@
83
86
  @source inline("data-[state=checked]:font-medium data-[state=checked]:ring-1 data-[state=checked]:ring-2");
84
87
  @source inline("data-[state=checked]:ring-accent data-[state=checked]:text-white");
85
88
  @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");
89
+ @source inline("data-[state=closed]:animate-out data-[state=closed]:fade-out-0");
90
+ @source inline("data-[state=closed]:zoom-out-[0.985] data-[state=delayed-open]:animate-in");
91
+ @source inline("data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-[0.985]");
87
92
  @source inline("data-[state=indeterminate]:bg-accent-solid data-[state=indeterminate]:border-accent-solid");
88
93
  @source inline("data-[state=indeterminate]:text-white data-[state=open]:animate-collapsible-down");
89
- @source inline("data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95");
94
+ @source inline("data-[state=open]:animate-in data-[state=open]:fade-in-0");
95
+ @source inline("data-[state=open]:slide-in-from-bottom-2 data-[state=open]:zoom-in-[0.985]");
90
96
  @source inline("data-[state=unchecked]:bg-muted data-[state=unchecked]:translate-x-0 disable disabled");
91
- @source inline("disabled:bg-muted disabled:border-transparent disabled:cursor-not-allowed");
92
- @source inline("disabled:hover:bg-transparent disabled:hover:border-border disabled:hover:text-muted-foreground");
93
- @source inline("disabled:opacity-50 disabled:pointer-events-none disabled:text-muted-foreground div");
94
- @source inline("divide-border divide-y duration duration-200 duration-300 duration-[var(--duration-fast)] e");
95
- @source inline("ease-[var(--ease-out)] empty empty:hidden fade fade-out file file:bg-transparent file:border-0");
96
- @source inline("file:font-medium file:mr-3 file:text-foreground file:text-sm fill fill-[var(--color-popover)]");
97
- @source inline("fill-border fill-current filter fix fixed flex flex-1 flex-col flex-none flex-wrap focus");
98
- @source inline("focus-visible focus-visible:bg-destructive-solid focus-visible:bg-destructive/10");
99
- @source inline("focus-visible:bg-muted focus-visible:border-field-ring focus-visible:opacity-100");
100
- @source inline("focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent");
101
- @source inline("focus-visible:ring-accent-solid focus-visible:ring-destructive focus-visible:ring-field-ring/30");
102
- @source inline("focus-visible:ring-offset-1 focus-visible:ring-offset-2 focus-visible:ring-offset-background");
103
- @source inline("focus-visible:ring-ring focus-visible:ring-success focus-visible:text-destructive-foreground");
104
- @source inline("focus:bg-accent/10 focus:bg-destructive/10 focus:outline-none focus:ring-2 focus:ring-accent");
105
- @source inline("focus:text-accent focus:text-destructive font font-[inherit] font-bold font-medium font-mono");
106
- @source inline("font-normal font-sans font-semibold gap gap-0 gap-0.5 gap-1 gap-1.5 gap-12 gap-16 gap-2 gap-3");
107
- @source inline("gap-4 gap-6 gap-8 gap-px gap-x-0 gap-x-3 gap-x-4 gap-y-0 gap-y-1 gap-y-2 gap-y-4");
108
- @source inline("gap-y-[var(--col-gap)] grid grid-cols-2");
97
+ @source inline("disabled:active:scale-100 disabled:bg-muted disabled:border-transparent");
98
+ @source inline("disabled:cursor-not-allowed disabled:hover:bg-transparent disabled:hover:border-border");
99
+ @source inline("disabled:hover:text-muted-foreground disabled:opacity-50 disabled:pointer-events-none");
100
+ @source inline("disabled:text-muted-foreground div divide-border divide-y duration duration-200 duration-300");
101
+ @source inline("duration-[var(--duration-base)] duration-[var(--duration-fast)] duration-[var(--duration-slow)]");
102
+ @source inline("duration-[var(--duration-slow)]! e ease ease-[var(--ease-out)] ease-[var(--ease-out)]! empty");
103
+ @source inline("empty:hidden fade fade-out file file:bg-transparent file:border-0 file:font-medium file:mr-3");
104
+ @source inline("file:text-foreground file:text-sm fill fill-[var(--color-popover)] fill-border fill-current");
105
+ @source inline("filter fix fixed flex flex-1 flex-col flex-none flex-wrap focus focus-visible");
106
+ @source inline("focus-visible:bg-destructive-solid focus-visible:bg-destructive/10 focus-visible:bg-muted");
107
+ @source inline("focus-visible:border-field-ring focus-visible:opacity-100 focus-visible:outline-none");
108
+ @source inline("focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-accent-solid");
109
+ @source inline("focus-visible:ring-destructive focus-visible:ring-field-ring/30 focus-visible:ring-offset-1");
110
+ @source inline("focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-ring");
111
+ @source inline("focus-visible:ring-success focus-visible:text-destructive-foreground focus:bg-accent/10");
112
+ @source inline("focus:bg-destructive/10 focus:outline-none focus:ring-2 focus:ring-accent focus:text-accent");
113
+ @source inline("focus:text-destructive font font-[inherit] font-bold font-medium font-mono font-normal font-sans");
114
+ @source inline("font-semibold gap gap-0 gap-0.5 gap-1 gap-1.5 gap-12 gap-16 gap-2 gap-3 gap-4 gap-6 gap-8 gap-px");
115
+ @source inline("gap-x-0 gap-x-3 gap-x-4 gap-y-0 gap-y-1 gap-y-2 gap-y-4 gap-y-[var(--col-gap)] grid grid-cols-2");
109
116
  @source inline("grid-cols-[minmax(0,var(--property-label-w))_minmax(0,1fr)]");
110
117
  @source inline("grid-cols-[repeat(auto-fit,minmax(min(var(--cb-grid-min),100%),1fr))] grid-flow-col group");
111
118
  @source inline("group-active/sep:opacity-100 group-data-[density=compact]/properties:items-start");
@@ -125,7 +132,7 @@
125
132
  @source inline("hover:text-foreground! hover:underline i in inline inline-block inline-flex inline-grid inset");
126
133
  @source inline("inset-0 inset-x-0 inset-y-0 invisible is iso isolate it item items items-baseline items-center");
127
134
  @source inline("items-end items-start just justify-between justify-center justify-end justify-start l last");
128
- @source inline("last:border-b-0 lead leading leading-none leading-relaxed leading-snug leading-tight left");
135
+ @source inline("last:border-b-0 lead leading leading-none leading-relaxed leading-snug leading-tight left left-0");
129
136
  @source inline("left-1/2 left-2 lg lg:px-8 line line-clamp-2 low lower lowercase m m-0 max max-h max-h-[80vh]");
130
137
  @source inline("max-h-[calc(var(--radix-popper-available-height,100dvh)-1rem)]");
131
138
  @source inline("max-h-[var(--guide-popover-max-h)] max-h-[var(--radix-select-content-available-height)]");
@@ -140,7 +147,8 @@
140
147
  @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]");
141
148
  @source inline("min-h-[var(--control-h-lg)] min-h-[var(--control-h-md)] min-h-[var(--control-h-sm)] min-h-row");
142
149
  @source inline("min-w-0 min-w-11 min-w-32 min-w-[var(--radix-select-trigger-width)] ml-1 ml-auto motion");
143
- @source inline("motion-reduce:animate-none mt-0.5 mt-1 mt-2 mx-auto my my-1 object object-cover opacity");
150
+ @source inline("motion-reduce:active:scale-100 motion-reduce:animate-none motion-reduce:duration-0");
151
+ @source inline("motion-reduce:transition-none mt-0.5 mt-1 mt-2 mx-auto my my-1 object object-cover opacity");
144
152
  @source inline("opacity-0 opacity-30 opacity-40 opacity-50 opacity-60 opacity-70 out outline outline-none over");
145
153
  @source inline("overflow overflow-auto overflow-hidden overflow-x-auto overflow-x-clip overflow-y-auto");
146
154
  @source inline("overscroll-contain p p-0 p-0.5 p-1 p-1.5 p-2 p-3 p-4 p-6 p-[7px] p-[var(--panel-pad)] pause");
@@ -157,12 +165,12 @@
157
165
  @source inline("rounded-sm rounded-xl ru run running s select select-all select-none self-start shadow");
158
166
  @source inline("shadow-[var(--shadow-overlay)] shadow-[var(--shadow-popover)] shadow-none shadow-overlay");
159
167
  @source inline("shadow-raised shadow-sm shrink shrink-0 size size-0 size-1.5 size-10 size-12 size-14 size-2");
160
- @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");
161
- @source inline("sm:-translate-y-1/2 sm:block sm:data-[state=closed]:zoom-out-95 sm:data-[state=open]:zoom-in-95");
162
- @source inline("sm:grid-cols-4 sm:h-[var(--region-h-lg)] sm:h-[var(--region-h-md)] sm:h-[var(--region-h-sm)]");
163
- @source inline("sm:hidden sm:left-1/2 sm:max-h-[calc(100dvh-2rem)] sm:max-h-[min(90dvh,calc(100dvh-2rem))]");
164
- @source inline("sm:max-w-[calc(100vw-2rem)] sm:max-w-[var(--modal-w-lg)] sm:max-w-[var(--modal-w-md)]");
165
- @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");
168
+ @source inline("size-2.5 size-20 size-3 size-3.5 size-4 size-5 size-6 size-8 slid slide slide-in-from-left sm");
169
+ @source inline("sm:-translate-x-1/2 sm:-translate-y-1/2 sm:block sm:grid-cols-4 sm:h-[var(--region-h-lg)]");
170
+ @source inline("sm:h-[var(--region-h-md)] sm:h-[var(--region-h-sm)] sm:hidden sm:left-1/2");
171
+ @source inline("sm:max-h-[calc(100dvh-2rem)] sm:max-h-[min(90dvh,calc(100dvh-2rem))] sm:max-w-[calc(100vw-2rem)]");
172
+ @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");
173
+ @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");
166
174
  @source inline("sm:w-[calc(100vw-2rem)] space space-y-1 space-y-3 sr-only stat static sticky stroke");
167
175
  @source inline("stroke-accent-solid stroke-destructive stroke-muted stroke-warning t ta tab table tabular-nums");
168
176
  @source inline("text text-2xl text-[length:var(--text-glyph-relative)] text-[var(--foreground)]");
@@ -175,7 +183,8 @@
175
183
  @source inline("text-tone-sky-fg text-tone-slate-fg text-tone-teal-fg text-tone-violet-fg text-warning");
176
184
  @source inline("text-warning-strong text-white text-xs to top top-0 top-1/2 top-2 touch touch-manipulation");
177
185
  @source inline("touch-none track tracking tracking-tight tracking-wide tracking-wider transform transition");
178
- @source inline("transition-[stroke-dashoffset] transition-[width] transition-all transition-colors");
186
+ @source inline("transition-[color,background-color,border-color,box-shadow,scale] transition-[stroke-dashoffset]");
187
+ @source inline("transition-[transform,width] transition-[width] transition-all transition-colors");
179
188
  @source inline("transition-opacity transition-transform translate-x-1/2 translate-y-1/2 truncate under underline");
180
189
  @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");
181
190
  @source inline("w-3/4 w-4 w-6 w-7 w-8 w-9 w-[calc(100vw-2rem)] w-[var(--control-h-lg)] w-[var(--control-h-md)]");
@@ -186,11 +195,11 @@
186
195
  /*
187
196
  * Theme variables cursedbelt's components read BY NAME (`var(--color-card)` in a style prop).
188
197
  * Tailwind emits a theme variable only when the app's own pass sees it used, and a `var()` here is
189
- * that use — `@source inline` cannot mark one. 10 variable(s), derived by
198
+ * that use — `@source inline` cannot mark one. 13 variable(s), derived by
190
199
  * scripts/generateUtilityStyles.ts → themeVariablesReadByName(). Nothing reads this property.
191
200
  */
192
201
  @layer theme {
193
202
  :root, :host {
194
- --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);
203
+ --cb-theme-read-by-name: var(--color-accent) var(--color-border) var(--color-card) var(--color-muted) var(--color-popover) var(--duration-base) var(--duration-slow) var(--ease-out) var(--press-scale) var(--press-scale-surface) var(--spacing) var(--text-caption) var(--text-sm);
195
204
  }
196
205
  }
@@ -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
- * 162 candidate(s).
21
+ * 161 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
@@ -43,8 +43,8 @@
43
43
  @source inline("focus-visible:ring-field-ring/40 focus-within:border-field-ring focus-within:ring-2");
44
44
  @source inline("focus-within:ring-field-ring/30 from-card gap-x-6 h-105");
45
45
  @source inline("has-[[aria-invalid=true]]:border-field-error hover:bg-background hover:bg-muted/40");
46
- @source inline("hover:border-field-ring hover:text-warning justify-self-end last:border-0 left-0 left-11");
47
- @source inline("left-2.5 list-none max-h-64 max-h-88 max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)]");
46
+ @source inline("hover:border-field-ring hover:text-warning justify-self-end last:border-0 left-11 left-2.5");
47
+ @source inline("list-none max-h-64 max-h-88 max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)]");
48
48
  @source inline("max-h-[var(--sheet-h-sm)] max-sm:flex-1 max-sm:flex-wrap max-sm:min-w-0 max-sm:min-w-24");
49
49
  @source inline("max-sm:min-w-32 max-sm:ml-13.5 max-sm:w-auto max-w-32 max-w-36 max-w-45 max-w-48 max-w-60");
50
50
  @source inline("max-w-sm min-h-20 min-h-dvh min-w-0! min-w-24 min-w-52 min-w-[var(--anchor-width)] min-w-max");
@@ -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
- * 121 candidate(s).
21
+ * 120 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
@@ -40,7 +40,7 @@
40
40
  @source inline("focus-within:ring-2 focus-within:ring-field-ring/30 focus-within:ring-offset-1");
41
41
  @source inline("focus-within:ring-ring group-focus-within:opacity-100 h-105 h-12 h-3.5");
42
42
  @source inline("has-[[aria-invalid=true]]:border-field-error hover:bg-muted/50 hover:border-field-ring");
43
- @source inline("hover:scale-110 hover:text-warning italic leading-5 left-0 left-2.5 li list-none max-h-64");
43
+ @source inline("hover:scale-110 hover:text-warning italic leading-5 left-2.5 li list-none max-h-64");
44
44
  @source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-w-sm");
45
45
  @source inline("md:flex-col md:gap-0.5 md:justify-start md:overflow-visible md:text-left md:w-full min-h-20");
46
46
  @source inline("min-w-24 min-w-64 min-w-[var(--anchor-width)] min-w-full min-w-max mix-blend-difference mr-2");
@@ -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
- * 81 candidate(s).
21
+ * 80 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,9 +30,9 @@
30
30
  @source inline("bg-linear-to-t bg-white/90 border-2 border-accent-solid border-white/90 border-y-2 bottom-1");
31
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
- @source inline("hover:bg-black/75 hover:bg-destructive hover:bg-white/20 hover:border-accent-solid invert left-0");
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");
35
- @source inline("min-w-28 min-w-40 min-w-48 o op opacity-100 opacity-80 pr-9 pt-8 right-1 right-1.5 right-3 sh");
33
+ @source inline("hover:bg-black/75 hover:bg-destructive hover:bg-white/20 hover:border-accent-solid invert left-1");
34
+ @source inline("max-h-[40vh] max-h-[var(--media-max-h)] max-h-full max-w-50 min-h-64 min-h-dvh min-w-10 min-w-28");
35
+ @source inline("min-w-40 min-w-48 o op opacity-100 opacity-80 pr-9 pt-8 right-1 right-1.5 right-3 sh");
36
36
  @source inline("shadow-[0_0_0_1px_rgba(0,0,0,0.55)] size-7 size-9 sm:gap-3 sm:grid-cols-3");
37
37
  @source inline("text-[color:var(--accent)] text-xl to-transparent top-1 top-1.5 translate translate-x-px w-12");
38
38
  @source inline("w-3 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
- * 144 candidate(s).
21
+ * 142 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
@@ -37,20 +37,20 @@
37
37
  @source inline("data-[selected=true]:text-foreground data-[state=closed]:slide-out-to-bottom");
38
38
  @source inline("data-[state=closed]:slide-out-to-left data-[state=closed]:slide-out-to-right");
39
39
  @source inline("data-[state=open]:slide-in-from-bottom data-[state=open]:slide-in-from-left");
40
- @source inline("data-[state=open]:slide-in-from-right data-[state=open]:slide-in-from-top-2");
41
- @source inline("disabled:hover:scale-100 disabled:opacity-40 focus-within:opacity-100 g grid-cols-4");
42
- @source inline("group-hover/navitem:opacity-100 group-hover/tile:opacity-100 group/navitem group/tile h-12");
43
- @source inline("h-[var(--header-h)] h-[var(--header-h-dense)] h-[var(--header-h-roomy)] h-dvh");
44
- @source inline("hover:border-foreground/20 hover:decoration-border hover:scale-110 hover:underline-offset-4");
45
- @source inline("inset-x-2 inset-x-3 inset-y-1 inset-y-1.5 items-stretch justify-around leading-4 left-0 left-3");
46
- @source inline("lg:flex lg:flex-col lg:hidden lg:shrink-0 list-none max-h-72 max-h-[inherit]");
47
- @source inline("max-h-[var(--palette-max-h)] max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)]");
48
- @source inline("max-h-[var(--sheet-h-sm)] max-md:-right-0.5 max-md:-top-0.5 max-md:absolute max-md:hidden");
49
- @source inline("max-sm:flex-none max-sm:justify-center max-sm:px-0 max-sm:w-10 max-w max-w-48 max-w-64 max-w-80");
50
- @source inline("max-w-sm md:flex md:flex-col md:gap-4 md:hidden md:pointer-coarse:w-auto md:px-3 md:px-6");
51
- @source inline("md:shrink-0 min-h-10 min-h-12 min-h-dvh min-w-3.5 min-w-8 min-w-9 mix-blend-difference mt-auto");
52
- @source inline("mx-1 no-underline opacity-55 opacity-80 pb-[env(safe-area-inset-bottom,0px)] pl-11 pl-9");
53
- @source inline("place-items-center placeholder:text-muted-foreground pr-3 pr-9 pt-0 pt-1 px-0.5 py-8 right-1");
54
- @source inline("rotate-180 rounded-l-xl rounded-r-xl rounded-t-xl shadow-lg size-7 size-9 sm:inline");
55
- @source inline("sm:inline-block sm:inline-flex space-y-0.5 space-y-2 top-[var(--palette-top)] w-52 w-56 w-60");
56
- @source inline("w-[calc(100%-2rem)] w-[var(--rail-w)] w-[var(--rail-w-collapsed)] w-max");
40
+ @source inline("data-[state=open]:slide-in-from-right disabled:hover:scale-100 disabled:opacity-40");
41
+ @source inline("focus-within:opacity-100 g grid-cols-4 group-hover/navitem:opacity-100");
42
+ @source inline("group-hover/tile:opacity-100 group/navitem group/tile h-12 h-[var(--header-h)]");
43
+ @source inline("h-[var(--header-h-dense)] h-[var(--header-h-roomy)] h-dvh hover:border-foreground/20");
44
+ @source inline("hover:decoration-border hover:scale-110 hover:underline-offset-4 inset-x-2 inset-x-3 inset-y-1");
45
+ @source inline("inset-y-1.5 items-stretch justify-around leading-4 left-3 lg:flex lg:flex-col lg:hidden");
46
+ @source inline("lg:shrink-0 list-none max-h-72 max-h-[inherit] max-h-[var(--palette-max-h)]");
47
+ @source inline("max-h-[var(--sheet-h-lg)] max-h-[var(--sheet-h-md)] max-h-[var(--sheet-h-sm)] max-md:-right-0.5");
48
+ @source inline("max-md:-top-0.5 max-md:absolute max-md:hidden max-sm:flex-none max-sm:justify-center max-sm:px-0");
49
+ @source inline("max-sm:w-10 max-w max-w-48 max-w-64 max-w-80 max-w-sm md:flex md:flex-col md:gap-4 md:hidden");
50
+ @source inline("md:pointer-coarse:w-auto md:px-3 md:px-6 md:shrink-0 min-h-10 min-h-12 min-h-dvh min-w-3.5");
51
+ @source inline("min-w-8 min-w-9 mix-blend-difference mt-auto mx-1 no-underline opacity-55 opacity-80");
52
+ @source inline("pb-[env(safe-area-inset-bottom,0px)] pl-11 pl-9 place-items-center");
53
+ @source inline("placeholder:text-muted-foreground pr-3 pr-9 pt-0 pt-1 px-0.5 py-8 right-1 rotate-180");
54
+ @source inline("rounded-l-xl rounded-r-xl rounded-t-xl shadow-lg size-7 size-9 sm:inline sm:inline-block");
55
+ @source inline("sm:inline-flex space-y-0.5 space-y-2 top-[var(--palette-top)] w-52 w-56 w-60 w-[calc(100%-2rem)]");
56
+ @source inline("w-[var(--rail-w)] w-[var(--rail-w-collapsed)] w-max");
@@ -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
- * 24 candidate(s).
21
+ * 23 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("left-0 max-h-[var(--radix-popover-content-available-height)] max-h-[var(--sheet-h-lg)]");
31
+ @source inline("max-h-[var(--radix-popover-content-available-height)] max-h-[var(--sheet-h-lg)]");
32
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
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
- * 24 candidate(s).
21
+ * 23 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
@@ -29,7 +29,6 @@
29
29
  @source inline("[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:tracking-wide");
30
30
  @source inline("[&_[cmdk-group-heading]]:uppercase [&_svg]:size-3.5 bg-accent/15 border-dashed");
31
31
  @source inline("data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none");
32
- @source inline("data-[selected=true]:bg-muted data-[selected=true]:text-foreground");
33
- @source inline("data-[state=open]:slide-in-from-top-2 h-12 max-h-[var(--palette-max-h)] mx-1 place-items-center");
34
- @source inline("placeholder:text-muted-foreground py-8 sm:inline-block top-[var(--palette-top)]");
35
- @source inline("w-[calc(100%-2rem)]");
32
+ @source inline("data-[selected=true]:bg-muted data-[selected=true]:text-foreground h-12");
33
+ @source inline("max-h-[var(--palette-max-h)] mx-1 place-items-center placeholder:text-muted-foreground py-8");
34
+ @source inline("sm:inline-block top-[var(--palette-top)] w-[calc(100%-2rem)]");