@scattered-light/loomiere-mojave 0.7.1 → 0.9.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 (38) hide show
  1. package/dist/exports/AGENTS.md +8 -5
  2. package/dist/exports/catalog.json +10 -0
  3. package/dist/exports/design-system/README.md +8 -5
  4. package/dist/exports/design-system/components/AppBar/README.md +58 -0
  5. package/dist/exports/design-system/components/AppBar/preview.html +19 -0
  6. package/dist/exports/design-system/components/ContextMenu/README.md +1 -1
  7. package/dist/exports/design-system/components/ContextMenu/preview.html +1 -1
  8. package/dist/exports/design-system/components/DataList/README.md +1 -1
  9. package/dist/exports/design-system/components/DataList/preview.html +1 -1
  10. package/dist/exports/design-system/components/DataTable/README.md +1 -1
  11. package/dist/exports/design-system/components/DataTable/preview.html +38 -38
  12. package/dist/exports/design-system/components/DescriptionList/README.md +41 -0
  13. package/dist/exports/design-system/components/DescriptionList/preview.html +19 -0
  14. package/dist/exports/design-system/components/Drawer/README.md +1 -1
  15. package/dist/exports/design-system/components/PickerButton/README.md +56 -0
  16. package/dist/exports/design-system/components/PickerButton/preview.html +19 -0
  17. package/dist/exports/design-system/components/ScrollArea/preview.html +2 -2
  18. package/dist/exports/design-system/components/Sheet/README.md +46 -0
  19. package/dist/exports/design-system/components/Sheet/preview.html +19 -0
  20. package/dist/exports/design-system/components/StatFigure/README.md +38 -0
  21. package/dist/exports/design-system/components/StatFigure/preview.html +19 -0
  22. package/dist/exports/design-system/components/Table/README.md +2 -2
  23. package/dist/exports/design-system/components/Table/preview.html +2 -2
  24. package/dist/exports/design-system/components/ToggleGroup/README.md +2 -2
  25. package/dist/exports/design-system/components/ToggleGroup/preview.html +1 -1
  26. package/dist/exports/design-system/components/bundle.css +743 -85
  27. package/dist/exports/design-system/components/bundle.js +7 -7
  28. package/dist/exports/design-system/components/index.d.ts +1 -1
  29. package/dist/exports/design-system/tokens.json +35 -0
  30. package/dist/exports/figma.json +1 -1
  31. package/dist/exports/tailwind.css +105 -0
  32. package/dist/exports/tokens.dtcg.json +383 -26
  33. package/dist/tokens.css +182 -29
  34. package/dist/tokens.d.ts +98 -0
  35. package/dist/tokens.js +99 -1
  36. package/dist/tokens.json +707 -27
  37. package/dist/utilities.css +30 -0
  38. package/package.json +2 -2
@@ -94,6 +94,7 @@
94
94
  --sl-letter-spacing-normal: 0; /** Body text. */
95
95
  --sl-letter-spacing-wide: 0.025em; /** Small text that needs air. */
96
96
  --sl-letter-spacing-wider: 0.05em; /** Small caps and labels. */
97
+ --sl-letter-spacing-caps: 0.08em; /** Uppercase labels that sit beside figures, such as a column head or a working-paper caption. Between wider and widest. */
97
98
  --sl-letter-spacing-widest: 0.1em; /** Uppercase group labels. */
98
99
  --sl-font-family-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; /** Platform UI font. Fallback when a brand typeface is unavailable. */
99
100
  --sl-font-family-serif: ui-serif, Georgia, Cambria, 'Times New Roman', Times, serif; /** Platform serif stack. */
@@ -764,8 +765,12 @@
764
765
  --sl-popup-scale-closed: 0.95; /** Popups grow from just under full size as they open, so they seem to come from the trigger. */
765
766
  --sl-popup-list-max-height: 300px; /** A long list scrolls inside the popup after about seven rows. */
766
767
  --sl-popup-min-width: 200px; /** Narrowest a free-floating popup or menu gets, so short labels don't make a sliver. */
768
+ --sl-rule-width: 0px; /** Thickness of the top rule. 0 turns it off and leaves every top edge as it was. Point it at a stroke step (stroke.medium or stroke.thick) to turn it on. */
767
769
  --sl-color-scheme: light; /** Which way native browser parts (scrollbars, date pickers, autofill) draw: light, or dark wherever the dark theme is on. Set as color-scheme on the root and handed to AG Grid's browserColorScheme, so they follow data-theme as well as the system setting. */
770
+ --sl-font-figures-base-font-variant-numeric: tabular-nums; /** font-variant-numeric of font.figures-base. */
771
+ --sl-font-figures-condense-font-variant-numeric: tabular-nums; /** font-variant-numeric of font.figures-condense. */
768
772
  --sl-font-eyebrow-condense-text-transform: uppercase; /** text-transform of font.eyebrow-condense. */
773
+ --sl-font-caps-condense-text-transform: uppercase; /** text-transform of font.caps-condense. */
769
774
  --sl-font-eyebrow-minimize-text-transform: uppercase; /** text-transform of font.eyebrow-minimize. */
770
775
  --sl-emphasis-standard-bg: transparent; /** standard in default: outline in accent (primary) */
771
776
  --sl-emphasis-quiet-bg: transparent; /** quiet in default: outline in chrome (neutral) */
@@ -780,6 +785,7 @@
780
785
  --sl-status-level-error-standard-bg: transparent; /** standard in error: outline in error */
781
786
  --sl-status-level-error-quiet-bg: transparent; /** quiet in error: outline in error */
782
787
  --sl-button-opacity-disabled: 0.5; /** A disabled button fades as a whole, keeping its shape so the layout doesn't jump. */
788
+ --sl-description-list-label-width: minmax(8rem, 1fr); /** The label column in the default variant. The value column takes twice the room. */
783
789
  --sl-drawer-popup-size: min(420px, 90vw); /** Width of a side drawer. A bottom or top drawer sizes to its content up to max-size. */
784
790
  --sl-drawer-popup-max-size: 85vh; /** Tallest a bottom or top drawer gets, leaving the page visible above it. */
785
791
  --sl-list-detail-split-min-width: 720px; /** Side by side once this element, not the window, is this wide. Dryden used 1100px of the window. A container needs less: a list around 320px and a form around 400px still read at 720px. Narrower, the detail becomes a drawer or a page. */
@@ -788,6 +794,7 @@
788
794
  --sl-list-detail-detail-max-size: 65%; /** The detail cannot cover more than this, so the list stays usable. Dryden kept the detail between 35% and 65%. */
789
795
  --sl-navigation-menu-popup-min-width: 400px; /** Narrowest a navigation panel gets on wider screens, and the widest a single column of links grows. */
790
796
  --sl-navigation-menu-column-width: 12rem; /** Width of each column in a two-column link list. */
797
+ --sl-picker-button-max-width: 18rem; /** Widest the button grows. A longer choice is cut with an ellipsis; the label never is. */
791
798
  --sl-preview-card-popup-min-width: 300px; /** Narrowest a preview card gets, so a short title still has room for its image. */
792
799
  --sl-preview-card-popup-max-width: 450px; /** Widest a preview card gets, so its description keeps a comfortable line length. */
793
800
  --sl-slider-vertical-height: 200px; /** Default length of a vertical slider. */
@@ -1444,7 +1451,6 @@
1444
1451
  --sl-vision-achromatopsia-color-data-19: var(--sl-vision-achromatopsia-color-data-chartreuse); /** Data series 19: chartreuse. Categorical; use in order. */
1445
1452
  --sl-vision-achromatopsia-color-data-20: var(--sl-vision-achromatopsia-color-data-ivory); /** Data series 20: ivory. Categorical; use in order. */
1446
1453
  --sl-focus-ring-width: var(--sl-a11y-focus-outline-width); /** Alias for the focus outline width, kept for components that style rings with box-shadow. */
1447
- --sl-focus-outline: var(--sl-a11y-focus-outline-width) solid var(--sl-focus-ring); /** The one keyboard focus ring. Every control uses it, outside or inset. */
1448
1454
  --sl-focus-outline-offset: var(--sl-a11y-focus-outline-offset); /** Outside ring: a gap between the control and the ring so it never blends into the control border. The default. */
1449
1455
  --sl-focus-outline-offset-inset: calc(-1 * var(--sl-a11y-focus-outline-width)); /** Inset ring: drawn just inside the control's edge, for controls packed into a container (menus, tab lists, steppers) where an outside ring would be clipped or overlap a neighbor. */
1450
1456
  --sl-focus-halo-spread: calc(var(--sl-a11y-focus-outline-offset) + var(--sl-a11y-focus-outline-width) + 2px); /** A soft glow just outside the focus ring: the gap, the ring, then 2px of tint. The ring carries the contrast (WCAG 1.4.11), so the glow can stay pale. */
@@ -1549,6 +1555,7 @@
1549
1555
  --sl-spacing-stack-md: var(--sl-space-6);
1550
1556
  --sl-spacing-stack-sm: var(--sl-space-4);
1551
1557
  --sl-spacing-stack-xs: var(--sl-space-2);
1558
+ --sl-table-grand-total-rule-width: var(--sl-stroke-thick); /** The double line under a grand total row (tr data-total="grand"). It is drawn as a CSS double border, which needs at least 3px to show two strokes. */
1552
1559
  --sl-font-body-base-font-family: var(--sl-font-family-body); /** font-family of font.body-base. */
1553
1560
  --sl-font-body-base-font-size: var(--sl-font-size-md); /** font-size of font.body-base. */
1554
1561
  --sl-font-body-base-font-weight: var(--sl-font-weight-normal); /** font-weight of font.body-base. */
@@ -1584,11 +1591,21 @@
1584
1591
  --sl-font-title-base-font-weight: var(--sl-font-weight-semibold); /** font-weight of font.title-base. */
1585
1592
  --sl-font-title-base-line-height: var(--sl-line-height-md); /** line-height of font.title-base. */
1586
1593
  --sl-font-title-base-letter-spacing: var(--sl-letter-spacing-normal); /** letter-spacing of font.title-base. */
1594
+ --sl-font-figures-base-font-family: var(--sl-font-family-mono); /** font-family of font.figures-base. */
1595
+ --sl-font-figures-base-font-size: var(--sl-font-size-md); /** font-size of font.figures-base. */
1596
+ --sl-font-figures-base-font-weight: var(--sl-font-weight-normal); /** font-weight of font.figures-base. */
1597
+ --sl-font-figures-base-line-height: var(--sl-line-height-md); /** line-height of font.figures-base. */
1598
+ --sl-font-figures-base-letter-spacing: var(--sl-letter-spacing-normal); /** letter-spacing of font.figures-base. */
1587
1599
  --sl-font-code-condense-font-family: var(--sl-font-family-mono); /** font-family of font.code-condense. */
1588
1600
  --sl-font-code-condense-font-size: var(--sl-font-size-sm); /** font-size of font.code-condense. */
1589
1601
  --sl-font-code-condense-font-weight: var(--sl-font-weight-normal); /** font-weight of font.code-condense. */
1590
1602
  --sl-font-code-condense-line-height: var(--sl-line-height-sm); /** line-height of font.code-condense. */
1591
1603
  --sl-font-code-condense-letter-spacing: var(--sl-letter-spacing-normal); /** letter-spacing of font.code-condense. */
1604
+ --sl-font-figures-condense-font-family: var(--sl-font-family-mono); /** font-family of font.figures-condense. */
1605
+ --sl-font-figures-condense-font-size: var(--sl-font-size-sm); /** font-size of font.figures-condense. */
1606
+ --sl-font-figures-condense-font-weight: var(--sl-font-weight-normal); /** font-weight of font.figures-condense. */
1607
+ --sl-font-figures-condense-line-height: var(--sl-line-height-sm); /** line-height of font.figures-condense. */
1608
+ --sl-font-figures-condense-letter-spacing: var(--sl-letter-spacing-normal); /** letter-spacing of font.figures-condense. */
1592
1609
  --sl-font-body-condense-font-family: var(--sl-font-family-body); /** font-family of font.body-condense. */
1593
1610
  --sl-font-body-condense-font-size: var(--sl-font-size-sm); /** font-size of font.body-condense. */
1594
1611
  --sl-font-body-condense-font-weight: var(--sl-font-weight-normal); /** font-weight of font.body-condense. */
@@ -1619,6 +1636,11 @@
1619
1636
  --sl-font-eyebrow-condense-font-weight: var(--sl-font-weight-semibold); /** font-weight of font.eyebrow-condense. */
1620
1637
  --sl-font-eyebrow-condense-line-height: var(--sl-line-height-sm); /** line-height of font.eyebrow-condense. */
1621
1638
  --sl-font-eyebrow-condense-letter-spacing: var(--sl-letter-spacing-wider); /** letter-spacing of font.eyebrow-condense. */
1639
+ --sl-font-caps-condense-font-family: var(--sl-font-family-body); /** font-family of font.caps-condense. */
1640
+ --sl-font-caps-condense-font-size: var(--sl-font-size-sm); /** font-size of font.caps-condense. */
1641
+ --sl-font-caps-condense-font-weight: var(--sl-font-weight-semibold); /** font-weight of font.caps-condense. */
1642
+ --sl-font-caps-condense-line-height: var(--sl-line-height-sm); /** line-height of font.caps-condense. */
1643
+ --sl-font-caps-condense-letter-spacing: var(--sl-letter-spacing-caps); /** letter-spacing of font.caps-condense. */
1622
1644
  --sl-font-title-condense-font-family: var(--sl-font-family-display); /** font-family of font.title-condense. */
1623
1645
  --sl-font-title-condense-font-size: var(--sl-font-size-sm); /** font-size of font.title-condense. */
1624
1646
  --sl-font-title-condense-font-weight: var(--sl-font-weight-semibold); /** font-weight of font.title-condense. */
@@ -1826,6 +1848,10 @@
1826
1848
  --sl-scope-info-signal: var(--sl-color-info-500); /** info signal: 500 in light, 400 in dark */
1827
1849
  --sl-scope-info-focus: var(--sl-color-info-500); /** info focus: 500 in light, 400 in dark */
1828
1850
  --sl-scope-chrome-fg: var(--sl-color-primary-1000); /** chrome fg, picked in the brand file (roles.concepts). */
1851
+ --sl-app-bar-height: var(--sl-space-16); /** Least height of the bar. It grows if its contents wrap. */
1852
+ --sl-app-bar-padding-inline: var(--sl-space-6); /** Space at the bar's start and end. */
1853
+ --sl-app-bar-gap: var(--sl-space-2-5); /** Space between the things in the bar. */
1854
+ --sl-app-bar-divider-height: var(--sl-space-6); /** Height of a vertical Separator between groups of actions in the bar. */
1829
1855
  --sl-avatar-size-xs: var(--sl-space-8); /** 32px, inline with text and in dense lists. */
1830
1856
  --sl-avatar-size-sm: var(--sl-space-10); /** 40px, in list rows and comments. */
1831
1857
  --sl-avatar-size-md: var(--sl-space-12); /** 48px, the default. */
@@ -1856,6 +1882,10 @@
1856
1882
  --sl-collection-narrow-width: var(--sl-space-96); /** Below this, a table with narrow="list" becomes a list, and the toolbar's search takes the full width. A 360px pane is under it. */
1857
1883
  --sl-collection-editable-list-stack-width: var(--sl-space-80); /** Below this, editable rows stack and show their own labels. 320px matches. */
1858
1884
  --sl-collection-selection-column-width: var(--sl-space-10); /** The checkbox column. Wide enough for the control, no wider, so the data keeps the room. */
1885
+ --sl-description-list-row-padding-block: var(--sl-space-2); /** Space above and below each pair. */
1886
+ --sl-description-list-row-padding-inline: var(--sl-space-4); /** Space either side of each pair, so pairs inside a sheet line up with its tab label. */
1887
+ --sl-description-list-column-gap: var(--sl-space-4); /** Space between the label column and the value column in the default variant. */
1888
+ --sl-description-list-leader-gap: var(--sl-space-1-5); /** Space between the leader and the label or value either side of it. */
1859
1889
  --sl-drawer-handle-width: var(--sl-space-10); /** Grab bar length. */
1860
1890
  --sl-drawer-handle-height: var(--sl-space-1); /** Grab bar thickness. */
1861
1891
  --sl-list-detail-header-gap: var(--sl-space-3); /** Space between the title, the actions and Close. */
@@ -1863,9 +1893,22 @@
1863
1893
  --sl-money-field-picker-min-inline-size: var(--sl-space-56); /** The currency list shows a code, a name and a symbol, so the popup is wider than the code trigger inside the field. */
1864
1894
  --sl-popover-text-max-width: var(--sl-measure-narrow); /** Keeps the title and description to a readable line length. The popup itself has no fixed cap, so wider content such as a calendar or a form fits; it stops at the space Base UI reports beside the trigger. */
1865
1895
  --sl-popover-popup-min-width: var(--sl-popup-min-width); /** Narrow enough for a short note, wide enough that a title doesn't wrap word by word. */
1896
+ --sl-sheet-rule-width: var(--sl-stroke-medium); /** The top rule. A sheet always has one, so it is its own token rather than rule.width (which is 0 until a brand turns it on for tables and drawers). */
1897
+ --sl-sheet-padding: var(--sl-space-4); /** Space inside a sheet with inset set. Without it, rows and tables inside run edge to edge. */
1898
+ --sl-sheet-tab-height: var(--sl-space-7); /** Height of the tab label. */
1899
+ --sl-sheet-tab-padding-inline: var(--sl-space-3-5); /** Space either side of the tab label's text. */
1900
+ --sl-sheet-tab-radius: var(--sl-radius-sm); /** The tab label's top corners. Its bottom corners stay square where it meets the rule. */
1901
+ --sl-sheet-header-gap: var(--sl-space-3); /** Space between the tab label and an action at the end of the header row, such as an Edit link. */
1866
1902
  --sl-slider-thumb-size: var(--sl-space-5); /** Knob diameter, big enough to grab with a finger on a 4px track. */
1867
1903
  --sl-splitter-handle-hit-size: var(--sl-a11y-min-touch-target); /** The part a finger grabs. The line stays one stroke. A fine pointer uses a11y.min-target (24px) instead, so the grab area does not cover the panel's scrollbar. Coarse pointers keep this 44px. */
1868
1904
  --sl-splitter-grip-size: var(--sl-space-1); /** 4px. The diameter of one grip dot. Small enough to sit on the hairline without becoming a second control. */
1905
+ --sl-stat-figure-figure-font-size: var(--sl-font-size-4xl); /** Size of the figure. Large enough to lead the page, a step under the page title. */
1906
+ --sl-stat-figure-figure-font-size-sm: var(--sl-font-size-2xl); /** Size of the figure at size="sm", for a row of figures in a card or a sheet header. */
1907
+ --sl-stat-figure-figure-line-height: var(--sl-line-height-4xl); /** Line height paired with figure-font-size. */
1908
+ --sl-stat-figure-figure-line-height-sm: var(--sl-line-height-2xl); /** Line height paired with figure-font-size-sm. */
1909
+ --sl-stat-figure-figure-font-weight: var(--sl-font-weight-semibold); /** Weight of the figure. */
1910
+ --sl-stat-figure-underline-width: var(--sl-stroke-thick); /** The double underline at underline="double", the accountant's mark for a final total. A CSS double border, so at least 3px. */
1911
+ --sl-stat-figure-gap: var(--sl-space-1); /** Space between the label, the figure and the caption. */
1869
1912
  --sl-switch-track-text-font-size: var(--sl-font-size-xs); /** Sized to the track, not a text style: the ON/OFF label has to fit inside the switch at each size. The rest of the label uses condense-subtitle-label. */
1870
1913
  --sl-switch-track-text-font-size-sm: var(--sl-font-size-xxs); /** Sized to the track, not a text style: the ON/OFF label has to fit inside the switch at each size. The rest of the label uses condense-subtitle-label. */
1871
1914
  --sl-switch-track-text-font-size-lg: var(--sl-font-size-sm); /** Sized to the track, not a text style: the ON/OFF label has to fit inside the switch at each size. The rest of the label uses condense-subtitle-label. */
@@ -1897,7 +1940,6 @@
1897
1940
  --sl-color-chrome-on-1100: var(--sl-color-neutral-on-1100);
1898
1941
  --sl-color-chrome-on-1200: var(--sl-color-neutral-on-1200);
1899
1942
  --sl-a11y-focus-ring-radius: var(--sl-radius-focus); /** Rounds the focus ring to match the small control radius. */
1900
- --sl-bar-border-width: var(--sl-stroke-default); /** Strip edge thickness. */
1901
1943
  --sl-bar-radius: var(--sl-radius-surface); /** Strip corners. Controls inside a toggle group take radius.item, so the inner corners follow the outer ones. */
1902
1944
  --sl-calendar-day-radius: var(--sl-radius-pill); /** Selected days are circles. The pill radius is the same full radius badges and switches use. */
1903
1945
  --sl-check-border-width: var(--sl-stroke-default); /** Edge thickness. */
@@ -1916,6 +1958,7 @@
1916
1958
  --sl-status-warning-dark: var(--sl-scope-warning-fg); /** Warning color for text or icons that need more contrast. */
1917
1959
  --sl-status-warning-light: var(--sl-scope-warning-soft); /** Warning tint for caution backgrounds. */
1918
1960
  --sl-text-primary: var(--sl-scope-chrome-fg); /** Body text and headings. The highest-contrast neutral. */
1961
+ --sl-content-pre-radius: var(--sl-radius-surface); /** Code block corners, like any panel, so a brand that squares its surfaces squares code blocks too. */
1919
1962
  --sl-disclosure-indicator-width: var(--sl-stroke-emphasis); /** Selected tab line thickness. */
1920
1963
  --sl-field-border-width: var(--sl-stroke-default); /** Field edge thickness. */
1921
1964
  --sl-field-radius: var(--sl-radius-control); /** Field corners, the same as every other control. */
@@ -1937,32 +1980,36 @@
1937
1980
  --sl-table-header-height: var(--sl-control-height-md); /** Header row height: the regular control height, a little taller than rows so the header reads as its own band. */
1938
1981
  --sl-table-cell-padding-inline: var(--sl-control-padding-inline-sm); /** Space either side of cell text, matching small controls. */
1939
1982
  --sl-table-radius: var(--sl-radius-surface); /** Grid corners, like any card or panel. */
1940
- --sl-font-body-base-font: var(--sl-font-body-base-font-weight) var(--sl-font-body-base-font-size) / var(--sl-font-body-base-line-height) var(--sl-font-body-base-font-family); /** Body copy in the base tier, the default UI and body text. As a font shorthand; letter-spacing and text-transform are separate. */
1941
- --sl-font-selected-base-font: var(--sl-font-selected-base-font-weight) var(--sl-font-selected-base-font-size) / var(--sl-font-selected-base-line-height) var(--sl-font-selected-base-font-family); /** The selected or current item in the base tier (the default UI and body text): selected tabs and toggles, the current nav item or page. Base body text at semibold, so selection reads without changing size. As a font shorthand; letter-spacing and text-transform are separate. */
1942
- --sl-font-label-base-font: var(--sl-font-label-base-font-weight) var(--sl-font-label-base-font-size) / var(--sl-font-label-base-line-height) var(--sl-font-label-base-font-family); /** Form labels in the base tier, the default UI and body text. As a font shorthand; letter-spacing and text-transform are separate. */
1943
- --sl-font-link-base-font: var(--sl-font-link-base-font-weight) var(--sl-font-link-base-font-size) / var(--sl-font-link-base-line-height) var(--sl-font-link-base-font-family); /** Links in the base tier. The same type as base body text: a link stands out by color and underline, not by its type. As a font shorthand; letter-spacing and text-transform are separate. */
1944
- --sl-font-subtitle-base-font: var(--sl-font-subtitle-base-font-weight) var(--sl-font-subtitle-base-font-size) / var(--sl-font-subtitle-base-line-height) var(--sl-font-subtitle-base-font-family); /** Subtitles in the base tier, the default UI and body text. As a font shorthand; letter-spacing and text-transform are separate. */
1945
- --sl-font-trigger-base-font: var(--sl-font-trigger-base-font-weight) var(--sl-font-trigger-base-font-size) / var(--sl-font-trigger-base-line-height) var(--sl-font-trigger-base-font-family); /** Buttons and triggers in the base tier, the default UI and body text. As a font shorthand; letter-spacing and text-transform are separate. */
1946
- --sl-font-title-base-font: var(--sl-font-title-base-font-weight) var(--sl-font-title-base-font-size) / var(--sl-font-title-base-line-height) var(--sl-font-title-base-font-family); /** Titles in the base tier: a toast, an accordion row, a list item heading. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing and text-transform are separate. */
1947
- --sl-font-code-condense-font: var(--sl-font-code-condense-font-weight) var(--sl-font-code-condense-font-size) / var(--sl-font-code-condense-line-height) var(--sl-font-code-condense-font-family); /** Code uses the mono family so characters line up. As a font shorthand; letter-spacing and text-transform are separate. */
1948
- --sl-font-body-condense-font: var(--sl-font-body-condense-font-weight) var(--sl-font-body-condense-font-size) / var(--sl-font-body-condense-line-height) var(--sl-font-body-condense-font-family); /** Body copy in the condense tier, dense UI text (tables, secondary labels). As a font shorthand; letter-spacing and text-transform are separate. */
1949
- --sl-font-trigger-condense-font: var(--sl-font-trigger-condense-font-weight) var(--sl-font-trigger-condense-font-size) / var(--sl-font-trigger-condense-line-height) var(--sl-font-trigger-condense-font-family); /** Buttons and triggers in the condense tier (dense UI): condense body text at medium, like base-trigger one tier down. As a font shorthand; letter-spacing and text-transform are separate. */
1950
- --sl-font-selected-condense-font: var(--sl-font-selected-condense-font-weight) var(--sl-font-selected-condense-font-size) / var(--sl-font-selected-condense-line-height) var(--sl-font-selected-condense-font-family); /** The selected or current item in the condense tier (dense UI text): selected tabs and toggles, the current nav item or page. Condense body text at semibold, so selection reads without changing size. As a font shorthand; letter-spacing and text-transform are separate. */
1951
- --sl-font-link-condense-font: var(--sl-font-link-condense-font-weight) var(--sl-font-link-condense-font-size) / var(--sl-font-link-condense-line-height) var(--sl-font-link-condense-font-family); /** Links in the condense tier. The same type as condense body text: a link stands out by color and underline, not by its type. As a font shorthand; letter-spacing and text-transform are separate. */
1952
- --sl-font-subtitle-condense-font: var(--sl-font-subtitle-condense-font-weight) var(--sl-font-subtitle-condense-font-size) / var(--sl-font-subtitle-condense-line-height) var(--sl-font-subtitle-condense-font-family); /** Subtitles in the condense tier, dense UI text (tables, secondary labels). As a font shorthand; letter-spacing and text-transform are separate. */
1953
- --sl-font-eyebrow-condense-font: var(--sl-font-eyebrow-condense-font-weight) var(--sl-font-eyebrow-condense-font-size) / var(--sl-font-eyebrow-condense-line-height) var(--sl-font-eyebrow-condense-font-family); /** Small uppercase eyebrow labels in the condense tier, dense UI text (tables, secondary labels). As a font shorthand; letter-spacing and text-transform are separate. */
1954
- --sl-font-title-condense-font: var(--sl-font-title-condense-font-weight) var(--sl-font-title-condense-font-size) / var(--sl-font-title-condense-line-height) var(--sl-font-title-condense-font-family); /** Titles in the condense tier: group headers in tables, menus and dense panels. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing and text-transform are separate. */
1955
- --sl-font-body-magnify-font: var(--sl-font-body-magnify-font-weight) var(--sl-font-body-magnify-font-size) / var(--sl-font-body-magnify-line-height) var(--sl-font-body-magnify-font-family); /** Body copy in the magnify tier, emphasized body text (lead paragraphs). As a font shorthand; letter-spacing and text-transform are separate. */
1956
- --sl-font-trigger-magnify-font: var(--sl-font-trigger-magnify-font-weight) var(--sl-font-trigger-magnify-font-size) / var(--sl-font-trigger-magnify-line-height) var(--sl-font-trigger-magnify-font-family); /** Buttons and triggers in the magnify tier (emphasized, larger UI): magnify body text at medium, like base-trigger one tier up. As a font shorthand; letter-spacing and text-transform are separate. */
1957
- --sl-font-title-magnify-font: var(--sl-font-title-magnify-font-weight) var(--sl-font-title-magnify-font-size) / var(--sl-font-title-magnify-line-height) var(--sl-font-title-magnify-font-family); /** Titles in the magnify tier: popovers, cards and fieldsets. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing and text-transform are separate. */
1958
- --sl-font-body-minimize-font: var(--sl-font-body-minimize-font-weight) var(--sl-font-body-minimize-font-size) / var(--sl-font-body-minimize-line-height) var(--sl-font-body-minimize-font-family); /** Body copy in the minimize tier, the smallest functional text (captions, fine print). As a font shorthand; letter-spacing and text-transform are separate. */
1959
- --sl-font-trigger-minimize-font: var(--sl-font-trigger-minimize-font-weight) var(--sl-font-trigger-minimize-font-size) / var(--sl-font-trigger-minimize-line-height) var(--sl-font-trigger-minimize-font-family); /** Buttons and triggers in the minimize tier (the smallest UI): minimize body text at medium, like base-trigger one tier down. As a font shorthand; letter-spacing and text-transform are separate. */
1960
- --sl-font-selected-minimize-font: var(--sl-font-selected-minimize-font-weight) var(--sl-font-selected-minimize-font-size) / var(--sl-font-selected-minimize-line-height) var(--sl-font-selected-minimize-font-family); /** The selected or current item in the minimize tier (the smallest functional text): selected tabs and toggles, the current nav item or page. Minimize body text at semibold, so selection reads without changing size. As a font shorthand; letter-spacing and text-transform are separate. */
1961
- --sl-font-link-minimize-font: var(--sl-font-link-minimize-font-weight) var(--sl-font-link-minimize-font-size) / var(--sl-font-link-minimize-line-height) var(--sl-font-link-minimize-font-family); /** Links in the minimize tier. The same type as minimize body text: a link stands out by color and underline, not by its type. As a font shorthand; letter-spacing and text-transform are separate. */
1962
- --sl-font-subtitle-minimize-font: var(--sl-font-subtitle-minimize-font-weight) var(--sl-font-subtitle-minimize-font-size) / var(--sl-font-subtitle-minimize-line-height) var(--sl-font-subtitle-minimize-font-family); /** Subtitles in the minimize tier, the smallest functional text (captions, fine print). As a font shorthand; letter-spacing and text-transform are separate. */
1963
- --sl-font-eyebrow-minimize-font: var(--sl-font-eyebrow-minimize-font-weight) var(--sl-font-eyebrow-minimize-font-size) / var(--sl-font-eyebrow-minimize-line-height) var(--sl-font-eyebrow-minimize-font-family); /** Small uppercase eyebrow labels in the minimize tier, the smallest functional text (captions, fine print). As a font shorthand; letter-spacing and text-transform are separate. */
1964
- --sl-font-title-amplify-font: var(--sl-font-title-amplify-font-weight) var(--sl-font-title-amplify-font-size) / var(--sl-font-title-amplify-line-height) var(--sl-font-title-amplify-font-family); /** Titles in the amplify tier: dialogs, drawers and page sections. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing and text-transform are separate. */
1965
- --sl-font-title-maximize-font: var(--sl-font-title-maximize-font-weight) var(--sl-font-title-maximize-font-size) / var(--sl-font-title-maximize-line-height) var(--sl-font-title-maximize-font-family); /** Titles in the maximize tier: the page head. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing and text-transform are separate. */
1983
+ --sl-table-subtotal-rule-width: var(--sl-stroke-default); /** The single line above a subtotal row (tr data-total="subtotal"), the line an accountant draws before adding a column. */
1984
+ --sl-font-body-base-font: var(--sl-font-body-base-font-weight) var(--sl-font-body-base-font-size) / var(--sl-font-body-base-line-height) var(--sl-font-body-base-font-family); /** Body copy in the base tier, the default UI and body text. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1985
+ --sl-font-selected-base-font: var(--sl-font-selected-base-font-weight) var(--sl-font-selected-base-font-size) / var(--sl-font-selected-base-line-height) var(--sl-font-selected-base-font-family); /** The selected or current item in the base tier (the default UI and body text): selected tabs and toggles, the current nav item or page. Base body text at semibold, so selection reads without changing size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1986
+ --sl-font-label-base-font: var(--sl-font-label-base-font-weight) var(--sl-font-label-base-font-size) / var(--sl-font-label-base-line-height) var(--sl-font-label-base-font-family); /** Form labels in the base tier, the default UI and body text. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1987
+ --sl-font-link-base-font: var(--sl-font-link-base-font-weight) var(--sl-font-link-base-font-size) / var(--sl-font-link-base-line-height) var(--sl-font-link-base-font-family); /** Links in the base tier. The same type as base body text: a link stands out by color and underline, not by its type. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1988
+ --sl-font-subtitle-base-font: var(--sl-font-subtitle-base-font-weight) var(--sl-font-subtitle-base-font-size) / var(--sl-font-subtitle-base-line-height) var(--sl-font-subtitle-base-font-family); /** Subtitles in the base tier, the default UI and body text. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1989
+ --sl-font-trigger-base-font: var(--sl-font-trigger-base-font-weight) var(--sl-font-trigger-base-font-size) / var(--sl-font-trigger-base-line-height) var(--sl-font-trigger-base-font-family); /** Buttons and triggers in the base tier, the default UI and body text. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1990
+ --sl-font-title-base-font: var(--sl-font-title-base-font-weight) var(--sl-font-title-base-font-size) / var(--sl-font-title-base-line-height) var(--sl-font-title-base-font-family); /** Titles in the base tier: a toast, an accordion row, a list item heading. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1991
+ --sl-font-figures-base-font: var(--sl-font-figures-base-font-weight) var(--sl-font-figures-base-font-size) / var(--sl-font-figures-base-line-height) var(--sl-font-figures-base-font-family); /** Figures in the base tier: an amount beside base text, a balance in a card. The mono family with tabular numbers, so digits line up. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1992
+ --sl-font-code-condense-font: var(--sl-font-code-condense-font-weight) var(--sl-font-code-condense-font-size) / var(--sl-font-code-condense-line-height) var(--sl-font-code-condense-font-family); /** Code uses the mono family so characters line up. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1993
+ --sl-font-figures-condense-font: var(--sl-font-figures-condense-font-weight) var(--sl-font-figures-condense-font-size) / var(--sl-font-figures-condense-line-height) var(--sl-font-figures-condense-font-family); /** Figures in the condense tier: amounts and counts in tables and dense rows. The mono family with tabular numbers, so digits line up down a column. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1994
+ --sl-font-body-condense-font: var(--sl-font-body-condense-font-weight) var(--sl-font-body-condense-font-size) / var(--sl-font-body-condense-line-height) var(--sl-font-body-condense-font-family); /** Body copy in the condense tier, dense UI text (tables, secondary labels). As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1995
+ --sl-font-trigger-condense-font: var(--sl-font-trigger-condense-font-weight) var(--sl-font-trigger-condense-font-size) / var(--sl-font-trigger-condense-line-height) var(--sl-font-trigger-condense-font-family); /** Buttons and triggers in the condense tier (dense UI): condense body text at medium, like base-trigger one tier down. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1996
+ --sl-font-selected-condense-font: var(--sl-font-selected-condense-font-weight) var(--sl-font-selected-condense-font-size) / var(--sl-font-selected-condense-line-height) var(--sl-font-selected-condense-font-family); /** The selected or current item in the condense tier (dense UI text): selected tabs and toggles, the current nav item or page. Condense body text at semibold, so selection reads without changing size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1997
+ --sl-font-link-condense-font: var(--sl-font-link-condense-font-weight) var(--sl-font-link-condense-font-size) / var(--sl-font-link-condense-line-height) var(--sl-font-link-condense-font-family); /** Links in the condense tier. The same type as condense body text: a link stands out by color and underline, not by its type. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1998
+ --sl-font-subtitle-condense-font: var(--sl-font-subtitle-condense-font-weight) var(--sl-font-subtitle-condense-font-size) / var(--sl-font-subtitle-condense-line-height) var(--sl-font-subtitle-condense-font-family); /** Subtitles in the condense tier, dense UI text (tables, secondary labels). As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1999
+ --sl-font-eyebrow-condense-font: var(--sl-font-eyebrow-condense-font-weight) var(--sl-font-eyebrow-condense-font-size) / var(--sl-font-eyebrow-condense-line-height) var(--sl-font-eyebrow-condense-font-family); /** Small uppercase eyebrow labels in the condense tier, dense UI text (tables, secondary labels). As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2000
+ --sl-font-caps-condense-font: var(--sl-font-caps-condense-font-weight) var(--sl-font-caps-condense-font-size) / var(--sl-font-caps-condense-line-height) var(--sl-font-caps-condense-font-family); /** Caps labels in the condense tier: a working-paper caption, a column head over figures, a sheet's tab label. Uppercase and tracked a little wider than an eyebrow, so it reads as a label and not a heading. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2001
+ --sl-font-title-condense-font: var(--sl-font-title-condense-font-weight) var(--sl-font-title-condense-font-size) / var(--sl-font-title-condense-line-height) var(--sl-font-title-condense-font-family); /** Titles in the condense tier: group headers in tables, menus and dense panels. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2002
+ --sl-font-body-magnify-font: var(--sl-font-body-magnify-font-weight) var(--sl-font-body-magnify-font-size) / var(--sl-font-body-magnify-line-height) var(--sl-font-body-magnify-font-family); /** Body copy in the magnify tier, emphasized body text (lead paragraphs). As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2003
+ --sl-font-trigger-magnify-font: var(--sl-font-trigger-magnify-font-weight) var(--sl-font-trigger-magnify-font-size) / var(--sl-font-trigger-magnify-line-height) var(--sl-font-trigger-magnify-font-family); /** Buttons and triggers in the magnify tier (emphasized, larger UI): magnify body text at medium, like base-trigger one tier up. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2004
+ --sl-font-title-magnify-font: var(--sl-font-title-magnify-font-weight) var(--sl-font-title-magnify-font-size) / var(--sl-font-title-magnify-line-height) var(--sl-font-title-magnify-font-family); /** Titles in the magnify tier: popovers, cards and fieldsets. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2005
+ --sl-font-body-minimize-font: var(--sl-font-body-minimize-font-weight) var(--sl-font-body-minimize-font-size) / var(--sl-font-body-minimize-line-height) var(--sl-font-body-minimize-font-family); /** Body copy in the minimize tier, the smallest functional text (captions, fine print). As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2006
+ --sl-font-trigger-minimize-font: var(--sl-font-trigger-minimize-font-weight) var(--sl-font-trigger-minimize-font-size) / var(--sl-font-trigger-minimize-line-height) var(--sl-font-trigger-minimize-font-family); /** Buttons and triggers in the minimize tier (the smallest UI): minimize body text at medium, like base-trigger one tier down. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2007
+ --sl-font-selected-minimize-font: var(--sl-font-selected-minimize-font-weight) var(--sl-font-selected-minimize-font-size) / var(--sl-font-selected-minimize-line-height) var(--sl-font-selected-minimize-font-family); /** The selected or current item in the minimize tier (the smallest functional text): selected tabs and toggles, the current nav item or page. Minimize body text at semibold, so selection reads without changing size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2008
+ --sl-font-link-minimize-font: var(--sl-font-link-minimize-font-weight) var(--sl-font-link-minimize-font-size) / var(--sl-font-link-minimize-line-height) var(--sl-font-link-minimize-font-family); /** Links in the minimize tier. The same type as minimize body text: a link stands out by color and underline, not by its type. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2009
+ --sl-font-subtitle-minimize-font: var(--sl-font-subtitle-minimize-font-weight) var(--sl-font-subtitle-minimize-font-size) / var(--sl-font-subtitle-minimize-line-height) var(--sl-font-subtitle-minimize-font-family); /** Subtitles in the minimize tier, the smallest functional text (captions, fine print). As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2010
+ --sl-font-eyebrow-minimize-font: var(--sl-font-eyebrow-minimize-font-weight) var(--sl-font-eyebrow-minimize-font-size) / var(--sl-font-eyebrow-minimize-line-height) var(--sl-font-eyebrow-minimize-font-family); /** Small uppercase eyebrow labels in the minimize tier, the smallest functional text (captions, fine print). As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2011
+ --sl-font-title-amplify-font: var(--sl-font-title-amplify-font-weight) var(--sl-font-title-amplify-font-size) / var(--sl-font-title-amplify-line-height) var(--sl-font-title-amplify-font-family); /** Titles in the amplify tier: dialogs, drawers and page sections. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
2012
+ --sl-font-title-maximize-font: var(--sl-font-title-maximize-font-weight) var(--sl-font-title-maximize-font-size) / var(--sl-font-title-maximize-line-height) var(--sl-font-title-maximize-font-family); /** Titles in the maximize tier: the page head. Titles use the display family; the tier sets the size. As a font shorthand; letter-spacing, text-transform and font-variant-numeric are separate. */
1966
2013
  --sl-emphasis-quiet-fg: var(--sl-scope-chrome-fg); /** quiet in default: outline in chrome (neutral) */
1967
2014
  --sl-pair-ember-dune-hover: color-mix(in oklab, var(--sl-pair-ember-dune-accent) 85%, var(--sl-pair-ember-dune-bg)); /** Accent on hover: accent moved 15% toward bg. 4.76:1 against bg, which is the button label. */
1968
2015
  --sl-pair-ember-dune-active: var(--sl-pair-ember-dune-accent); /** Accent while pressed: the accent itself, because moving it would drop the button label below AA. */
@@ -2115,11 +2162,15 @@
2115
2162
  --sl-status-level-error-quiet-fg: var(--sl-scope-error-fg); /** quiet in error: outline in error */
2116
2163
  --sl-status-level-error-quiet-border: var(--sl-scope-error-border); /** quiet in error: outline in error */
2117
2164
  --sl-status-level-error-quiet-border-hover: var(--sl-scope-error-solid-hover); /** quiet in error: outline in error */
2165
+ --sl-app-bar-border-width: var(--sl-stroke-default); /** The line under the bar while rule.width is 0. With rule.width on, the line takes the thicker of the two. */
2118
2166
  --sl-button-radius: var(--sl-radius-pill); /** Buttons are pills, so they read as actions and never as fields or cards. */
2119
2167
  --sl-collection-row-height-sm: var(--sl-control-height-sm); /** The dense row, the same height the plain table already uses, so a checkbox fits. */
2120
2168
  --sl-collection-row-height-md: var(--sl-control-height-md); /** A roomier row when the collection is the page rather than a dense register. */
2121
2169
  --sl-collection-header-height-sm: var(--sl-control-height-md); /** The dense header, a step above the dense row, matching today's table header. */
2122
2170
  --sl-collection-header-height-md: var(--sl-control-height-lg); /** The header for the roomier row. */
2171
+ --sl-description-list-leader-width: var(--sl-stroke-default); /** Thickness of the dotted leader. */
2172
+ --sl-sheet-border-width: var(--sl-stroke-default); /** Thickness of the sides and bottom. */
2173
+ --sl-sheet-radius: var(--sl-radius-surface); /** Corners, like any card or panel. The top corners stay square under a tab label, so the tab sits flush on the rule. */
2123
2174
  --sl-splitter-handle-size: var(--sl-stroke-default); /** The visible separator. One stroke, the same hairline as Separator, so a splitter reads as a divider you can grab. */
2124
2175
  --sl-focus-shadow-3px-error: 0 0 0 3px var(--sl-status-error); /** Focus halo for a field with an error. */
2125
2176
  --sl-calendar-day-color: var(--sl-text-primary); /** A day in the month being shown. */
@@ -2158,6 +2209,9 @@
2158
2209
  --sl-content-prose-color: var(--sl-text-primary); /** Long-form body text. The same as body text, so prose and UI read as one voice. */
2159
2210
  --sl-content-selection-text: var(--sl-text-primary); /** Selected text stays body text so it reads the same on the tint. */
2160
2211
  --sl-field-border-color-error: var(--sl-status-error); /** Field edge when the value is invalid. */
2212
+ --sl-focus-ring: var(--sl-interactive-default); /** Focus ring color. Uses the interactive accent so focus reads as "this is the thing you can act on". */
2213
+ --sl-focus-outline: var(--sl-a11y-focus-outline-width) solid var(--sl-focus-ring); /** The one keyboard focus ring. Every control uses it, outside or inset. */
2214
+ --sl-bar-border-width: var(--sl-stroke-default); /** Strip edge thickness. */
2161
2215
  --sl-field-color: var(--sl-text-primary); /** The value you typed. */
2162
2216
  --sl-gauge-label-color: var(--sl-text-primary); /** What is being measured. */
2163
2217
  --sl-icon-button-color-hover: var(--sl-text-primary); /** Darkens on hover to confirm it's the target. */
@@ -2215,7 +2269,8 @@
2215
2269
  --sl-status-level-success-bold-fg: var(--sl-scope-success-on-solid); /** bold in success: solid in success */
2216
2270
  --sl-status-level-warning-bold-fg: var(--sl-scope-warning-on-solid); /** bold in warning: solid in warning */
2217
2271
  --sl-status-level-error-bold-fg: var(--sl-scope-error-on-solid); /** bold in error: solid in error */
2218
- --sl-focus-ring: var(--sl-interactive-default); /** Focus ring color. Uses the interactive accent so focus reads as "this is the thing you can act on". */
2272
+ --sl-description-list-value-color: var(--sl-text-primary); /** Values. */
2273
+ --sl-stat-figure-figure-color: var(--sl-text-primary); /** The figure's color. */
2219
2274
  --sl-focus-shadow-3px-primary: 0 0 0 3px var(--sl-interactive-tint-hover); /** Soft focus halo for inputs. */
2220
2275
  --sl-focus-shadow-3px-primary-soft: 0 0 0 3px var(--sl-interactive-tint-active); /** Slightly stronger focus halo for inputs on tinted surfaces. */
2221
2276
  --sl-focus-halo-color: var(--sl-interactive-tint-hover); /** The pale tint of the focus glow. Components on a colored scope use that scope's soft-hover instead. */
@@ -2287,6 +2342,7 @@
2287
2342
  --sl-notice-description-color: var(--sl-text-secondary); /** Description on the plain surface. A tinted notice uses its palette's text color for both lines. */
2288
2343
  --sl-popup-border-color: var(--sl-border-default); /** Popup edge, a quiet line that separates it from the page under it. */
2289
2344
  --sl-popup-separator-color: var(--sl-border-subtle); /** Line between groups of rows, quieter than the popup edge. */
2345
+ --sl-rule-color: var(--sl-border-strong); /** Color of the top rule. The chrome's strong border, so the rule reads as structure, not as an accent or a selection. A brand can point it at text.primary for an ink rule. */
2290
2346
  --sl-table-background: var(--sl-surface-canvas); /** Cell area. The page color, so a grid sits on the page like body text. */
2291
2347
  --sl-table-subtle-color: var(--sl-text-secondary); /** Secondary text in cells and panels: counts, hints, group totals. */
2292
2348
  --sl-table-header-background: var(--sl-surface-tray); /** Header row, side bar and other grid chrome. The tray step, so it sits a step off the cells in both themes and secondary text on it still passes AA. */
@@ -2299,7 +2355,21 @@
2299
2355
  --sl-table-range-background: var(--sl-interactive-tint); /** Cells inside a dragged range selection. */
2300
2356
  --sl-emphasis-bold-fg: var(--sl-scope-accent-on-solid); /** bold in default: solid in accent (primary) */
2301
2357
  --sl-status-level-default-bold-fg: var(--sl-scope-accent-on-solid); /** bold in default: solid in accent (primary) */
2358
+ --sl-app-bar-background: var(--sl-surface-raised); /** The bar's fill: one step off the page, like a card, so the page reads as sitting under it. */
2359
+ --sl-app-bar-divider-color: var(--sl-border-strong); /** Color of a vertical Separator in the bar. */
2360
+ --sl-description-list-row-border-color: var(--sl-border-subtle); /** Hairline between pairs, as quiet as a table's row lines. */
2361
+ --sl-description-list-label-color: var(--sl-text-secondary); /** Labels. */
2362
+ --sl-description-list-leader-color: var(--sl-border-control); /** The dotted leader at variant="leader". The control edge color: dark enough to lead the eye, still lighter than the text. */
2302
2363
  --sl-drawer-handle-color: var(--sl-border-strong); /** The grab bar on bottom drawers. Strong border so it reads as something to drag. */
2364
+ --sl-picker-button-label-color: var(--sl-text-secondary); /** The caps label, quieter than the choice it names. */
2365
+ --sl-sheet-background: var(--sl-surface-raised); /** The sheet's fill: the raised surface, one level above the page like any card or panel. */
2366
+ --sl-sheet-border-color: var(--sl-border-default); /** The sheet's sides and bottom, the everyday divider. */
2367
+ --sl-sheet-tab-background: var(--sl-surface-inverse); /** The tab label's fill: the inverse surface, so the label reads as the sheet's name, and its text passes AA in every theme. */
2368
+ --sl-stat-figure-figure-color-accent: var(--sl-text-accent); /** The figure's color at tone="accent", for a figure that asks for action (open questions, items to review). */
2369
+ --sl-stat-figure-label-color: var(--sl-text-secondary); /** The caps label above the figure. */
2370
+ --sl-stat-figure-caption-color: var(--sl-text-secondary); /** The caption under the figure. */
2371
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised); /** Fill of a toggle that is not pressed. */
2372
+ --sl-toggle-group-segmented-pressed-background: var(--sl-fill-inverse); /** Fill of the pressed toggle: the solid chrome color, dark on light pages and light on dark ones. */
2303
2373
  --sl-shadow-outline: 0 0 0 3px color-mix(in oklab, var(--sl-focus-ring) 60%, transparent); /** Focus halo for controls that use box-shadow instead of outline: the focus ring color at 60% opacity, so it follows the accent and the theme. Becomes currentColor under prefers-contrast: more. */
2304
2374
  --sl-calendar-day-background-hover: var(--sl-item-background-hover); /** The same hover tint as a list item, so a day feels like a choice in a list. */
2305
2375
  --sl-check-mark-color: var(--sl-text-on-primary); /** Check mark, dash or dot on a ticked fill. */
@@ -2315,6 +2385,14 @@
2315
2385
  --sl-table-row-hover: var(--sl-item-background-hover); /** Row under the pointer. Same tint as a highlighted menu row. */
2316
2386
  --sl-table-row-selected: var(--sl-item-background-selected); /** Selected rows. Same tint as the chosen menu row. */
2317
2387
  --sl-table-range-border: var(--sl-focus-ring); /** Edge of a range selection and of the focused cell, the same color as every focus ring. */
2388
+ --sl-table-total-rule-color: var(--sl-rule-color); /** The line above a subtotal or total row and the double line under a grand total. The working-paper rule color, so totals and sheet tops are ruled in the same ink. */
2389
+ --sl-table-total-background: var(--sl-table-background); /** Fill of a subtotal or grand total row: the cell color, so the rules mark the total instead of a band. The footer's default totals row keeps the header tray. */
2390
+ --sl-app-bar-border-color: var(--sl-rule-color); /** The line under the bar, in the rule color, so an ink rule brand gets an ink line here too. */
2391
+ --sl-sheet-rule-color: var(--sl-rule-color); /** The top rule's color: the working-paper rule color, so sheets and ruled tables match. */
2392
+ --sl-sheet-tab-color: var(--sl-text-on-inverse-surface); /** Text on the tab label. */
2393
+ --sl-stat-figure-underline-color: var(--sl-rule-color); /** The double underline's color: the working-paper rule color, like a grand total's double rule. */
2394
+ --sl-toggle-group-segmented-border-color: var(--sl-rule-color); /** The outline around a segmented group and the line between its toggles. The rule color, so it is a control edge by default and ink with an ink rule. */
2395
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse); /** Text on the pressed toggle. */
2318
2396
  --sl-check-background: var(--sl-field-background); /** Empty box, the same fill as a field so it reads as something to fill in. */
2319
2397
  --sl-popup-arrow-fill: var(--sl-popup-background); /** The arrow is part of the popup, so it takes the popup's fill. */
2320
2398
  }
@@ -5780,6 +5858,7 @@
5780
5858
  --sl-popup-arrow-fill: var(--sl-popup-background);
5781
5859
  --sl-popup-arrow-stroke: var(--sl-popup-border-color);
5782
5860
  --sl-popup-separator-color: var(--sl-border-subtle);
5861
+ --sl-rule-color: var(--sl-border-strong);
5783
5862
  --sl-table-background: var(--sl-surface-canvas);
5784
5863
  --sl-table-color: var(--sl-text-primary);
5785
5864
  --sl-table-subtle-color: var(--sl-text-secondary);
@@ -5795,7 +5874,31 @@
5795
5874
  --sl-table-column-hover: var(--sl-fill-subtle);
5796
5875
  --sl-table-range-background: var(--sl-interactive-tint);
5797
5876
  --sl-table-range-border: var(--sl-focus-ring);
5877
+ --sl-table-total-rule-color: var(--sl-rule-color);
5878
+ --sl-table-total-background: var(--sl-table-background);
5879
+ --sl-app-bar-background: var(--sl-surface-raised);
5880
+ --sl-app-bar-border-color: var(--sl-rule-color);
5881
+ --sl-app-bar-divider-color: var(--sl-border-strong);
5882
+ --sl-description-list-row-border-color: var(--sl-border-subtle);
5883
+ --sl-description-list-label-color: var(--sl-text-secondary);
5884
+ --sl-description-list-value-color: var(--sl-text-primary);
5885
+ --sl-description-list-leader-color: var(--sl-border-control);
5798
5886
  --sl-drawer-handle-color: var(--sl-border-strong);
5887
+ --sl-picker-button-label-color: var(--sl-text-secondary);
5888
+ --sl-sheet-background: var(--sl-surface-raised);
5889
+ --sl-sheet-border-color: var(--sl-border-default);
5890
+ --sl-sheet-rule-color: var(--sl-rule-color);
5891
+ --sl-sheet-tab-background: var(--sl-surface-inverse);
5892
+ --sl-sheet-tab-color: var(--sl-text-on-inverse-surface);
5893
+ --sl-stat-figure-figure-color: var(--sl-text-primary);
5894
+ --sl-stat-figure-figure-color-accent: var(--sl-text-accent);
5895
+ --sl-stat-figure-underline-color: var(--sl-rule-color);
5896
+ --sl-stat-figure-label-color: var(--sl-text-secondary);
5897
+ --sl-stat-figure-caption-color: var(--sl-text-secondary);
5898
+ --sl-toggle-group-segmented-border-color: var(--sl-rule-color);
5899
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised);
5900
+ --sl-toggle-group-segmented-pressed-background: var(--sl-fill-inverse);
5901
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse);
5799
5902
  --sl-calendar-day-background-hover: var(--sl-item-background-hover);
5800
5903
  --sl-check-background: var(--sl-field-background);
5801
5904
  }
@@ -5926,6 +6029,7 @@
5926
6029
  --sl-popup-arrow-fill: var(--sl-popup-background);
5927
6030
  --sl-popup-arrow-stroke: var(--sl-popup-border-color);
5928
6031
  --sl-popup-separator-color: var(--sl-border-subtle);
6032
+ --sl-rule-color: var(--sl-border-strong);
5929
6033
  --sl-table-background: var(--sl-surface-canvas);
5930
6034
  --sl-table-color: var(--sl-text-primary);
5931
6035
  --sl-table-subtle-color: var(--sl-text-secondary);
@@ -5941,7 +6045,31 @@
5941
6045
  --sl-table-column-hover: var(--sl-fill-subtle);
5942
6046
  --sl-table-range-background: var(--sl-interactive-tint);
5943
6047
  --sl-table-range-border: var(--sl-focus-ring);
6048
+ --sl-table-total-rule-color: var(--sl-rule-color);
6049
+ --sl-table-total-background: var(--sl-table-background);
6050
+ --sl-app-bar-background: var(--sl-surface-raised);
6051
+ --sl-app-bar-border-color: var(--sl-rule-color);
6052
+ --sl-app-bar-divider-color: var(--sl-border-strong);
6053
+ --sl-description-list-row-border-color: var(--sl-border-subtle);
6054
+ --sl-description-list-label-color: var(--sl-text-secondary);
6055
+ --sl-description-list-value-color: var(--sl-text-primary);
6056
+ --sl-description-list-leader-color: var(--sl-border-control);
5944
6057
  --sl-drawer-handle-color: var(--sl-border-strong);
6058
+ --sl-picker-button-label-color: var(--sl-text-secondary);
6059
+ --sl-sheet-background: var(--sl-surface-raised);
6060
+ --sl-sheet-border-color: var(--sl-border-default);
6061
+ --sl-sheet-rule-color: var(--sl-rule-color);
6062
+ --sl-sheet-tab-background: var(--sl-surface-inverse);
6063
+ --sl-sheet-tab-color: var(--sl-text-on-inverse-surface);
6064
+ --sl-stat-figure-figure-color: var(--sl-text-primary);
6065
+ --sl-stat-figure-figure-color-accent: var(--sl-text-accent);
6066
+ --sl-stat-figure-underline-color: var(--sl-rule-color);
6067
+ --sl-stat-figure-label-color: var(--sl-text-secondary);
6068
+ --sl-stat-figure-caption-color: var(--sl-text-secondary);
6069
+ --sl-toggle-group-segmented-border-color: var(--sl-rule-color);
6070
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised);
6071
+ --sl-toggle-group-segmented-pressed-background: var(--sl-fill-inverse);
6072
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse);
5945
6073
  --sl-calendar-day-background-hover: var(--sl-item-background-hover);
5946
6074
  --sl-check-background: var(--sl-field-background);
5947
6075
  }
@@ -6072,6 +6200,7 @@
6072
6200
  --sl-popup-arrow-fill: var(--sl-popup-background);
6073
6201
  --sl-popup-arrow-stroke: var(--sl-popup-border-color);
6074
6202
  --sl-popup-separator-color: var(--sl-border-subtle);
6203
+ --sl-rule-color: var(--sl-border-strong);
6075
6204
  --sl-table-background: var(--sl-surface-canvas);
6076
6205
  --sl-table-color: var(--sl-text-primary);
6077
6206
  --sl-table-subtle-color: var(--sl-text-secondary);
@@ -6087,7 +6216,31 @@
6087
6216
  --sl-table-column-hover: var(--sl-fill-subtle);
6088
6217
  --sl-table-range-background: var(--sl-interactive-tint);
6089
6218
  --sl-table-range-border: var(--sl-focus-ring);
6219
+ --sl-table-total-rule-color: var(--sl-rule-color);
6220
+ --sl-table-total-background: var(--sl-table-background);
6221
+ --sl-app-bar-background: var(--sl-surface-raised);
6222
+ --sl-app-bar-border-color: var(--sl-rule-color);
6223
+ --sl-app-bar-divider-color: var(--sl-border-strong);
6224
+ --sl-description-list-row-border-color: var(--sl-border-subtle);
6225
+ --sl-description-list-label-color: var(--sl-text-secondary);
6226
+ --sl-description-list-value-color: var(--sl-text-primary);
6227
+ --sl-description-list-leader-color: var(--sl-border-control);
6090
6228
  --sl-drawer-handle-color: var(--sl-border-strong);
6229
+ --sl-picker-button-label-color: var(--sl-text-secondary);
6230
+ --sl-sheet-background: var(--sl-surface-raised);
6231
+ --sl-sheet-border-color: var(--sl-border-default);
6232
+ --sl-sheet-rule-color: var(--sl-rule-color);
6233
+ --sl-sheet-tab-background: var(--sl-surface-inverse);
6234
+ --sl-sheet-tab-color: var(--sl-text-on-inverse-surface);
6235
+ --sl-stat-figure-figure-color: var(--sl-text-primary);
6236
+ --sl-stat-figure-figure-color-accent: var(--sl-text-accent);
6237
+ --sl-stat-figure-underline-color: var(--sl-rule-color);
6238
+ --sl-stat-figure-label-color: var(--sl-text-secondary);
6239
+ --sl-stat-figure-caption-color: var(--sl-text-secondary);
6240
+ --sl-toggle-group-segmented-border-color: var(--sl-rule-color);
6241
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised);
6242
+ --sl-toggle-group-segmented-pressed-background: var(--sl-fill-inverse);
6243
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse);
6091
6244
  --sl-calendar-day-background-hover: var(--sl-item-background-hover);
6092
6245
  --sl-check-background: var(--sl-field-background);
6093
6246
  }
@@ -6160,6 +6313,16 @@
6160
6313
  letter-spacing: var(--sl-font-title-base-letter-spacing);
6161
6314
  }
6162
6315
 
6316
+ /* Figures in the base tier: an amount beside base text, a balance in a card. The mono family with tabular numbers, so digits line up. */
6317
+ .text-style-figures-base {
6318
+ font-family: var(--sl-font-figures-base-font-family);
6319
+ font-size: var(--sl-font-figures-base-font-size);
6320
+ font-weight: var(--sl-font-figures-base-font-weight);
6321
+ line-height: var(--sl-font-figures-base-line-height);
6322
+ letter-spacing: var(--sl-font-figures-base-letter-spacing);
6323
+ font-variant-numeric: var(--sl-font-figures-base-font-variant-numeric);
6324
+ }
6325
+
6163
6326
  /* Code uses the mono family so characters line up. */
6164
6327
  .text-style-code-condense {
6165
6328
  font-family: var(--sl-font-code-condense-font-family);
@@ -6169,6 +6332,16 @@
6169
6332
  letter-spacing: var(--sl-font-code-condense-letter-spacing);
6170
6333
  }
6171
6334
 
6335
+ /* Figures in the condense tier: amounts and counts in tables and dense rows. The mono family with tabular numbers, so digits line up down a column. */
6336
+ .text-style-figures-condense {
6337
+ font-family: var(--sl-font-figures-condense-font-family);
6338
+ font-size: var(--sl-font-figures-condense-font-size);
6339
+ font-weight: var(--sl-font-figures-condense-font-weight);
6340
+ line-height: var(--sl-font-figures-condense-line-height);
6341
+ letter-spacing: var(--sl-font-figures-condense-letter-spacing);
6342
+ font-variant-numeric: var(--sl-font-figures-condense-font-variant-numeric);
6343
+ }
6344
+
6172
6345
  /* Body copy in the condense tier, dense UI text (tables, secondary labels). */
6173
6346
  .text-style-body-condense {
6174
6347
  font-family: var(--sl-font-body-condense-font-family);
@@ -6224,6 +6397,16 @@
6224
6397
  text-transform: var(--sl-font-eyebrow-condense-text-transform);
6225
6398
  }
6226
6399
 
6400
+ /* Caps labels in the condense tier: a working-paper caption, a column head over figures, a sheet's tab label. Uppercase and tracked a little wider than an eyebrow, so it reads as a label and not a heading. */
6401
+ .text-style-caps-condense {
6402
+ font-family: var(--sl-font-caps-condense-font-family);
6403
+ font-size: var(--sl-font-caps-condense-font-size);
6404
+ font-weight: var(--sl-font-caps-condense-font-weight);
6405
+ line-height: var(--sl-font-caps-condense-line-height);
6406
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
6407
+ text-transform: var(--sl-font-caps-condense-text-transform);
6408
+ }
6409
+
6227
6410
  /* Titles in the condense tier: group headers in tables, menus and dense panels. Titles use the display family; the tier sets the size. */
6228
6411
  .text-style-title-condense {
6229
6412
  font-family: var(--sl-font-title-condense-font-family);
@@ -6414,7 +6597,7 @@
6414
6597
  }
6415
6598
 
6416
6599
 
6417
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
6600
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
6418
6601
  /* Loomiere for Base UI: component styles. Brand-free: every value is a --sl- variable from a
6419
6602
  Loomiere theme. Load the theme first:
6420
6603
  @import '<your theme>/tokens.css';
@@ -6424,7 +6607,7 @@
6424
6607
  /* Document defaults, in the reset layer so any unlayered rule wins over them, and so layered
6425
6608
  frameworks (Chakra's recipes, Tailwind's utilities) are not undone by them. */
6426
6609
  @layer reset {
6427
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
6610
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
6428
6611
  /* CSS Reset - Mojave Theme */
6429
6612
 
6430
6613
  /* ============================================
@@ -6698,7 +6881,7 @@ pre {
6698
6881
  background: var(--sl-content-pre-background);
6699
6882
  border: var(--sl-stroke-thin) solid var(--sl-content-pre-border);
6700
6883
  color: var(--sl-content-pre-text);
6701
- border-radius: var(--sl-space-2);
6884
+ border-radius: var(--sl-content-pre-radius);
6702
6885
  overflow-x: auto;
6703
6886
  margin-block: var(--sl-space-6);
6704
6887
  }
@@ -6868,7 +7051,7 @@ hr {
6868
7051
  }
6869
7052
  }
6870
7053
  @layer reset {
6871
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7054
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
6872
7055
  /* Accessibility — base rules (no theme color dependencies). Theme-specific focus/invalid: accessibility-theme.css */
6873
7056
 
6874
7057
  /* Remove default focus; keyboard focus styled in accessibility-theme.css */
@@ -6981,7 +7164,7 @@ main:focus {
6981
7164
 
6982
7165
  }
6983
7166
  @layer reset {
6984
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7167
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
6985
7168
  /* Focus, invalid, contrast — requires theme tokens (after theme-accessibility.css). */
6986
7169
 
6987
7170
  :focus-visible {
@@ -7049,7 +7232,7 @@ button,
7049
7232
 
7050
7233
  }
7051
7234
  /* Component styles */
7052
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7235
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7053
7236
  /* Accordion - Mojave Theme
7054
7237
  *
7055
7238
  * No component tokens. Hover, press, chevron, divider and motion are the disclosure
@@ -7170,7 +7353,7 @@ button,
7170
7353
  overflow: hidden;
7171
7354
  }
7172
7355
 
7173
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7356
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7174
7357
  /* Alert Dialog - Mojave Theme
7175
7358
  *
7176
7359
  * No component tokens and no rules of its own. An alert dialog looks exactly like a
@@ -7179,7 +7362,7 @@ button,
7179
7362
  * cancel quiet, and a destructive one bold with data-color="error".
7180
7363
  */
7181
7364
 
7182
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7365
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7183
7366
  /* Autocomplete - Mojave Theme
7184
7367
  *
7185
7368
  * No component tokens. The input is Input (Input.css), the clear button is an icon
@@ -7381,7 +7564,7 @@ button,
7381
7564
  (reset-accessibility.css).
7382
7565
  ============================================ */
7383
7566
 
7384
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7567
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7385
7568
  /* Avatar - Mojave Theme
7386
7569
  *
7387
7570
  * A round picture with a ring in the page color, so avatars in a group cut out of each other in
@@ -7489,7 +7672,7 @@ button,
7489
7672
  }
7490
7673
  }
7491
7674
 
7492
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7675
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7493
7676
  /* Button - Mojave Theme
7494
7677
  *
7495
7678
  * Colors are the brand's emphasis levels, sizes are control.*, text is the trigger
@@ -7639,7 +7822,7 @@ button,
7639
7822
  font-size: var(--sl-icon-size-maximize);
7640
7823
  }
7641
7824
 
7642
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7825
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7643
7826
  /* Checkbox - Mojave Theme
7644
7827
  * Sizes follow the label: the box is the icon size one tier above the label's text
7645
7828
  * tier (like a button's icon) and the check mark one tier below it.
@@ -7796,7 +7979,7 @@ button,
7796
7979
  border-radius: var(--sl-radius-pill);
7797
7980
  }
7798
7981
 
7799
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7982
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7800
7983
  /* Checkbox Group - Mojave Theme */
7801
7984
 
7802
7985
  /* Each checkbox row is already a full tap target tall, so the rows sit close. */
@@ -7812,7 +7995,7 @@ button,
7812
7995
  pointer-events: none;
7813
7996
  }
7814
7997
 
7815
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
7998
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7816
7999
  /* Collapsible - Mojave Theme
7817
8000
  *
7818
8001
  * No component tokens. Hover, press, chevron and motion are the disclosure concept
@@ -7928,7 +8111,7 @@ button,
7928
8111
  background: var(--sl-surface-raised);
7929
8112
  }
7930
8113
 
7931
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
8114
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
7932
8115
  /* Combobox - Mojave Theme
7933
8116
  *
7934
8117
  * No component tokens. The input is Input (Input.css); the chips box is a field; the
@@ -8413,7 +8596,7 @@ button,
8413
8596
  color: var(--sl-text-tertiary);
8414
8597
  }
8415
8598
 
8416
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
8599
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
8417
8600
  /* Context Menu - Mojave Theme
8418
8601
  *
8419
8602
  * No component tokens. Opens on right-click; the trigger area only sets the cursor. The popup is the popup concept, rows are item rows at the
@@ -8582,7 +8765,7 @@ button,
8582
8765
  stroke-width: var(--sl-stroke-default);
8583
8766
  }
8584
8767
 
8585
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
8768
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
8586
8769
  /* Dialog and Alert dialog - Mojave Theme
8587
8770
  *
8588
8771
  * Both are centered modals built from the modal concept (tokens/semantic/modal.json):
@@ -8728,12 +8911,14 @@ button,
8728
8911
  margin-top: var(--sl-modal-actions-spacing);
8729
8912
  }
8730
8913
 
8731
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
8914
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
8732
8915
  /* Drawer - a panel that slides in from an edge and can be swiped away.
8733
8916
  The surface, scrim, heading and motion are the modal concept's (--sl-modal-*), so a
8734
8917
  drawer reads as a dialog's sibling; only its size and grab bar are its own
8735
8918
  (--sl-drawer-*). Base UI supplies the swipe through
8736
- --drawer-swipe-movement-x/y and data-swipe-direction on the popup. */
8919
+ --drawer-swipe-movement-x/y and data-swipe-direction on the popup.
8920
+ The working-paper rule (rule.width, 0 by default) replaces the top border with a heavier
8921
+ line in rule.color. It is an inset shadow, so it stays put while the drawer scrolls. */
8737
8922
 
8738
8923
  .DrawerBackdrop {
8739
8924
  position: fixed;
@@ -8770,6 +8955,8 @@ button,
8770
8955
  overflow-y: auto;
8771
8956
  overscroll-behavior: contain;
8772
8957
  pointer-events: auto;
8958
+ border-top-width: max(0px, var(--sl-modal-border-width) - var(--sl-rule-width) * 1000);
8959
+ box-shadow: inset 0 var(--sl-rule-width) 0 0 var(--sl-rule-color), var(--sl-modal-shadow);
8773
8960
  transform: translate(var(--drawer-swipe-movement-x, 0px), var(--drawer-swipe-movement-y, 0px));
8774
8961
  transition: transform calc(var(--sl-modal-animation-duration) * var(--drawer-swipe-strength, 1)) var(--sl-modal-animation-easing);
8775
8962
  }
@@ -8800,6 +8987,8 @@ button,
8800
8987
  max-height: var(--sl-drawer-popup-max-size);
8801
8988
  border-top: 0;
8802
8989
  border-radius: 0 0 var(--sl-modal-radius) var(--sl-modal-radius);
8990
+ /* Its top edge is the screen's, so no rule. */
8991
+ box-shadow: var(--sl-modal-shadow);
8803
8992
  }
8804
8993
 
8805
8994
  .DrawerPopup[data-swipe-direction='right'] {
@@ -8855,7 +9044,7 @@ button,
8855
9044
  color: var(--sl-modal-description-color);
8856
9045
  }
8857
9046
 
8858
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9047
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
8859
9048
  /* Field - Mojave Theme
8860
9049
  *
8861
9050
  * Label, control, description and error. No component tokens: spacing is the field
@@ -8916,7 +9105,7 @@ textarea.FieldControl {
8916
9105
  height: auto;
8917
9106
  }
8918
9107
 
8919
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9108
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
8920
9109
  /* Fieldset - Mojave Theme
8921
9110
  *
8922
9111
  * No component tokens: a titled group of fields, spaced by the stack gaps, with
@@ -8958,7 +9147,7 @@ textarea.FieldControl {
8958
9147
  color: var(--sl-text-secondary);
8959
9148
  }
8960
9149
 
8961
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9150
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
8962
9151
  /* Form - Mojave Theme
8963
9152
  *
8964
9153
  * No component tokens: fields stack with the large block space, and the action
@@ -8978,7 +9167,7 @@ textarea.FieldControl {
8978
9167
  margin-top: var(--sl-space-block-md);
8979
9168
  }
8980
9169
 
8981
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9170
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
8982
9171
  /* Input - Mojave Theme
8983
9172
  *
8984
9173
  * No component tokens: the look is the field concept (tokens/semantic/field.json),
@@ -9115,7 +9304,7 @@ textarea.FieldControl {
9115
9304
  padding-inline: var(--sl-control-padding-inline-lg);
9116
9305
  }
9117
9306
 
9118
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9307
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
9119
9308
  /* Menu - Mojave Theme
9120
9309
  *
9121
9310
  * No component tokens. The trigger is a Button. The popup is the popup concept, rows are item rows at the
@@ -9264,7 +9453,7 @@ textarea.FieldControl {
9264
9453
  color: var(--sl-text-tertiary);
9265
9454
  }
9266
9455
 
9267
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9456
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
9268
9457
  /* Menubar - Mojave Theme
9269
9458
  *
9270
9459
  * No component tokens. A row of quiet triggers, each opening a menu. The popup is the popup concept, rows are item rows at the
@@ -9457,7 +9646,7 @@ textarea.FieldControl {
9457
9646
  color: var(--sl-text-tertiary);
9458
9647
  }
9459
9648
 
9460
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9649
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
9461
9650
  /* Meter - Mojave Theme
9462
9651
  *
9463
9652
  * A gauge (tokens/semantic/gauge.json). The fill is the solid color of the scope around it:
@@ -9520,7 +9709,7 @@ textarea.FieldControl {
9520
9709
  height: var(--sl-gauge-height-lg);
9521
9710
  }
9522
9711
 
9523
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
9712
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
9524
9713
  /* Navigation Menu - Mojave Theme
9525
9714
  *
9526
9715
  * The strip is the bar concept, the panel is the popup concept and each link is an item
@@ -9940,7 +10129,7 @@ textarea.FieldControl {
9940
10129
  width: 100%;
9941
10130
  }
9942
10131
 
9943
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10132
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
9944
10133
  /* Number Field - Mojave Theme
9945
10134
  *
9946
10135
  * No component tokens. The input is Input (Input.css) and the label, description and
@@ -10031,7 +10220,7 @@ textarea.FieldControl {
10031
10220
  user-select: none;
10032
10221
  }
10033
10222
 
10034
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10223
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10035
10224
  /* OTP Field - Mojave Theme
10036
10225
  *
10037
10226
  * One-time code entry: a row of single-character inputs. Each slot is the same control as Input
@@ -10094,7 +10283,7 @@ textarea.FieldControl {
10094
10283
  letter-spacing: var(--sl-font-body-magnify-letter-spacing);
10095
10284
  }
10096
10285
 
10097
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10286
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10098
10287
  /* Popover - Mojave Theme */
10099
10288
 
10100
10289
  /* ============================================
@@ -10259,7 +10448,7 @@ textarea.FieldControl {
10259
10448
  fill: var(--sl-popup-arrow-stroke);
10260
10449
  }
10261
10450
 
10262
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10451
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10263
10452
  /* Preview Card - Mojave Theme
10264
10453
  *
10265
10454
  * The popup concept (surface, arrow, motion) with a title-magnify title and condense
@@ -10376,7 +10565,7 @@ textarea.FieldControl {
10376
10565
  fill: var(--sl-popup-arrow-stroke);
10377
10566
  }
10378
10567
 
10379
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10568
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10380
10569
  /* Progress - Mojave Theme
10381
10570
  *
10382
10571
  * A gauge (tokens/semantic/gauge.json), the same bar as Meter. The fill is the solid color of
@@ -10453,7 +10642,7 @@ textarea.FieldControl {
10453
10642
  height: var(--sl-gauge-height-lg);
10454
10643
  }
10455
10644
 
10456
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10645
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10457
10646
  /* Radio - Mojave Theme
10458
10647
  * Same box as Checkbox, always round. Sizes follow the label the same way, and the
10459
10648
  * dot is a share of the circle (check.dot-scale).
@@ -10605,7 +10794,7 @@ textarea.FieldControl {
10605
10794
  gap: var(--sl-gap-stack-sm);
10606
10795
  }
10607
10796
 
10608
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10797
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10609
10798
  /* Scroll Area - Mojave Theme
10610
10799
  *
10611
10800
  * The scrollbar is the content scrollbar (content.scrollbar-*): a track that stays clear until
@@ -10687,7 +10876,7 @@ textarea.FieldControl {
10687
10876
  background: transparent;
10688
10877
  }
10689
10878
 
10690
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
10879
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10691
10880
  /* Select - Mojave Theme
10692
10881
  *
10693
10882
  * The trigger is a field (the field pattern, control sizes, the base text style); the
@@ -10972,7 +11161,7 @@ textarea.FieldControl {
10972
11161
  stroke-width: var(--sl-stroke-default);
10973
11162
  }
10974
11163
 
10975
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
11164
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
10976
11165
  /* Separator - Mojave Theme
10977
11166
  *
10978
11167
  * A hairline in the everyday divider color (border.default), one stroke thick, with a step of
@@ -11000,7 +11189,7 @@ textarea.FieldControl {
11000
11189
  margin-inline: var(--sl-space-4);
11001
11190
  }
11002
11191
 
11003
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
11192
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11004
11193
  /* Slider - Mojave Theme
11005
11194
  *
11006
11195
  * A slider is a gauge you can drag: the track, fill and label row are gauge.* (the same bar as
@@ -11166,7 +11355,7 @@ textarea.FieldControl {
11166
11355
  transform: translate(-50%, 50%);
11167
11356
  }
11168
11357
 
11169
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
11358
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11170
11359
  /* Switch - Mojave Theme
11171
11360
  * Switch keeps its track sizes. The thumb, its travel and the ON/OFF text are
11172
11361
  * worked out from them: the thumb fills the track's height inside the padding,
@@ -11332,7 +11521,7 @@ textarea.FieldControl {
11332
11521
  color: var(--sl-text-disabled);
11333
11522
  }
11334
11523
 
11335
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
11524
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11336
11525
  /* Tabs - Mojave Theme
11337
11526
  *
11338
11527
  * No component tokens. The divider, the selected line and color, hover and the disabled
@@ -11468,7 +11657,7 @@ textarea.FieldControl {
11468
11657
  padding: var(--sl-space-6);
11469
11658
  }
11470
11659
 
11471
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
11660
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11472
11661
  /* Toast - Mojave Theme
11473
11662
  *
11474
11663
  * A toast is a notice (tokens/semantic/notice.json) on the popup surface. A toast whose type
@@ -11704,7 +11893,7 @@ textarea.FieldControl {
11704
11893
  flex-shrink: 0;
11705
11894
  }
11706
11895
 
11707
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
11896
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11708
11897
  /* Toggle - Mojave Theme
11709
11898
  * A toggle is a button that stays pressed: the same heights, padding, gap and
11710
11899
  * trigger text style as a button of the same size. Pressed, it takes its emphasis level's
@@ -11816,7 +12005,7 @@ textarea.FieldControl {
11816
12005
  height: var(--sl-icon-size-maximize);
11817
12006
  }
11818
12007
 
11819
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
12008
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11820
12009
  /* Toggle Group - Mojave Theme
11821
12010
  *
11822
12011
  * No component tokens. The strip is the bar concept (tokens/semantic/bar.json); the
@@ -11837,7 +12026,48 @@ textarea.FieldControl {
11837
12026
  border-radius: var(--sl-radius-item);
11838
12027
  }
11839
12028
 
11840
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
12029
+ /* ============================================
12030
+ SEGMENTED (data-variant="segmented")
12031
+ Joined toggles in one outline, the pressed one filled solid: a switch between a few
12032
+ views or modules. Tokens: toggle-group.segmented-* (tokens/component/toggle-group.json).
12033
+ ============================================ */
12034
+
12035
+ .ToggleGroup[data-variant='segmented'] {
12036
+ padding: 0;
12037
+ gap: 0;
12038
+ background: var(--sl-toggle-group-segmented-background);
12039
+ border: var(--sl-stroke-default) solid var(--sl-toggle-group-segmented-border-color);
12040
+ border-radius: var(--sl-radius-chrome);
12041
+ overflow: hidden;
12042
+ }
12043
+
12044
+ .ToggleGroup[data-variant='segmented'] .Toggle {
12045
+ height: calc(var(--sl-control-height-md) - 2 * var(--sl-stroke-default));
12046
+ border: 0;
12047
+ border-radius: 0;
12048
+ background: transparent;
12049
+ color: var(--sl-text-primary);
12050
+ }
12051
+
12052
+ .ToggleGroup[data-variant='segmented'] .Toggle + .Toggle {
12053
+ border-inline-start: var(--sl-stroke-default) solid var(--sl-toggle-group-segmented-border-color);
12054
+ }
12055
+
12056
+ .ToggleGroup[data-variant='segmented'] .Toggle:hover:not([data-disabled]):not(:disabled) {
12057
+ background: var(--sl-fill-subtle);
12058
+ }
12059
+
12060
+ .ToggleGroup[data-variant='segmented'] .Toggle[data-pressed],
12061
+ .ToggleGroup[data-variant='segmented'] .Toggle[data-pressed]:hover:not([data-disabled]):not(:disabled) {
12062
+ background: var(--sl-toggle-group-segmented-pressed-background);
12063
+ color: var(--sl-toggle-group-segmented-pressed-color);
12064
+ }
12065
+
12066
+ .ToggleGroup[data-variant='segmented'] .Toggle:focus-visible {
12067
+ outline-offset: var(--sl-focus-outline-offset-inset);
12068
+ }
12069
+
12070
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11841
12071
  /* Toolbar - Mojave Theme
11842
12072
  *
11843
12073
  * The strip is the bar concept (tokens/semantic/bar.json). Buttons, toggles, selects
@@ -11899,7 +12129,7 @@ textarea.FieldControl {
11899
12129
  max-width: var(--sl-toolbar-input-max-width);
11900
12130
  }
11901
12131
 
11902
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
12132
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11903
12133
  /* Tooltip - Mojave Theme
11904
12134
  *
11905
12135
  * The inverse surface (surface.inverse, text.on-inverse-surface) with condense text, so a tooltip
@@ -11960,7 +12190,7 @@ textarea.FieldControl {
11960
12190
  }
11961
12191
 
11962
12192
  /* Custom components: not Base UI parts. Built from existing concepts and tokens. */
11963
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
12193
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
11964
12194
  /* Badge
11965
12195
  *
11966
12196
  * A status or count label. Not a Base UI part, and not interactive: no hover or focus.
@@ -12065,7 +12295,7 @@ textarea.FieldControl {
12065
12295
  height: var(--sl-badge-dot-base);
12066
12296
  }
12067
12297
 
12068
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
12298
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
12069
12299
  /*
12070
12300
  * DatePicker: a field that opens a calendar for one date or a period.
12071
12301
  * Not a Base UI part. The popup is Popover on a wide viewport and Drawer
@@ -12638,7 +12868,7 @@ textarea.FieldControl {
12638
12868
  flex-basis: 100%;
12639
12869
  }
12640
12870
 
12641
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
12871
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
12642
12872
  /* Money field
12643
12873
  *
12644
12874
  * An amount of money, built on Number field. The value is an integer in minor units
@@ -12983,7 +13213,7 @@ textarea.FieldControl {
12983
13213
  letter-spacing: var(--sl-font-body-base-letter-spacing);
12984
13214
  }
12985
13215
 
12986
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
13216
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
12987
13217
  /* ListDetail
12988
13218
  *
12989
13219
  * The detail of one item, next to its list. Not a Base UI part. It is a Splitter
@@ -13110,7 +13340,7 @@ textarea.FieldControl {
13110
13340
  background: transparent;
13111
13341
  }
13112
13342
 
13113
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
13343
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
13114
13344
  /* Splitter
13115
13345
  *
13116
13346
  * Two or more panels and a handle between them. Not a Base UI part. It follows the
@@ -13318,7 +13548,7 @@ textarea.FieldControl {
13318
13548
  background: var(--sl-border-default);
13319
13549
  }
13320
13550
 
13321
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
13551
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
13322
13552
  /* EmptyState
13323
13553
  *
13324
13554
  * The block a page, pane, table, list or popup shows when it has nothing to show.
@@ -13574,7 +13804,7 @@ textarea.FieldControl {
13574
13804
  color: inherit;
13575
13805
  }
13576
13806
 
13577
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
13807
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
13578
13808
  /* Table - Mojave Theme
13579
13809
  *
13580
13810
  * Base UI has no table, so this styles the native <table class="Table"> elements with the
@@ -13587,6 +13817,13 @@ textarea.FieldControl {
13587
13817
  * `<tr><td data-empty colSpan={n}><EmptyState size="compact" … /></td></tr>`. A cell with
13588
13818
  * only text still uses this rule's padding. A cell whose child is an EmptyState lets the
13589
13819
  * empty state pad itself. The empty row does not take the row hover.
13820
+ *
13821
+ * Totals: tr data-total="subtotal" draws a single rule above the row, and data-total="grand"
13822
+ * a rule above and a double rule under, as on a working paper (table.total-*). They work in
13823
+ * tbody or tfoot. A tfoot row without data-total keeps the header tray band.
13824
+ *
13825
+ * The working-paper rule (rule.width, 0 by default) replaces the table's top border with a
13826
+ * heavier line in rule.color, drawn on the first row's cells so it stays with a sticky header.
13590
13827
  */
13591
13828
 
13592
13829
  .Table {
@@ -13605,6 +13842,15 @@ textarea.FieldControl {
13605
13842
  border-radius: var(--sl-table-radius);
13606
13843
  overflow: hidden;
13607
13844
  font-variant-numeric: tabular-nums;
13845
+ /* The top border steps aside while the working-paper rule is on (any rule.width above 0). */
13846
+ border-top-width: max(0px, var(--sl-stroke-default) - var(--sl-rule-width) * 1000);
13847
+ }
13848
+
13849
+ /* The working-paper rule, on the first row: the header, or the body when there is none.
13850
+ At rule.width 0 this is no border at all. */
13851
+ .Table > thead > tr:first-child > *,
13852
+ .Table:not(:has(> thead)) > tbody:first-of-type > tr:first-child > * {
13853
+ border-top: var(--sl-rule-width) solid var(--sl-rule-color);
13608
13854
  }
13609
13855
 
13610
13856
  .Table caption {
@@ -13716,6 +13962,52 @@ textarea.FieldControl {
13716
13962
  border-bottom: none;
13717
13963
  }
13718
13964
 
13965
+ /* Subtotal and grand total rows: rules instead of a band, in the subtitle weight.
13966
+ Hover and selection don't apply: a total is not a record. */
13967
+ .Table tr[data-total] > * {
13968
+ font-family: var(--sl-font-subtitle-condense-font-family);
13969
+ font-size: var(--sl-font-subtitle-condense-font-size);
13970
+ font-weight: var(--sl-font-subtitle-condense-font-weight);
13971
+ line-height: var(--sl-font-subtitle-condense-line-height);
13972
+ letter-spacing: var(--sl-font-subtitle-condense-letter-spacing);
13973
+ background: var(--sl-table-total-background);
13974
+ color: var(--sl-table-color);
13975
+ border-top: var(--sl-table-subtotal-rule-width) solid var(--sl-table-total-rule-color);
13976
+ }
13977
+
13978
+ .Table tbody tr[data-total] > * {
13979
+ border-bottom: var(--sl-stroke-default) solid var(--sl-table-row-border-color);
13980
+ }
13981
+
13982
+ .Table tbody tr[data-total]:last-child:not([data-total='grand']) > * {
13983
+ border-bottom: none;
13984
+ }
13985
+
13986
+ /* The grand total: a double rule under the figures. */
13987
+ .Table :is(tbody, tfoot) tr[data-total='grand'] > * {
13988
+ border-bottom: var(--sl-table-grand-total-rule-width) double var(--sl-table-total-rule-color);
13989
+ }
13990
+
13991
+ /* A label or blank cell in a total row can leave the rules off, so they only run under the
13992
+ figures: data-rule="none" on the cell. */
13993
+ .Table :is(tbody, tfoot) tr[data-total] > [data-rule='none'] {
13994
+ border-top-color: transparent;
13995
+ border-bottom-color: transparent;
13996
+ }
13997
+
13998
+ /* In the footer the body's last row has no line under it, so those cells keep the footer's
13999
+ usual line on top. */
14000
+ .Table tfoot tr[data-total] > [data-rule='none'] {
14001
+ border-top: var(--sl-stroke-default) solid var(--sl-table-border-color);
14002
+ }
14003
+
14004
+ @media (hover: hover) {
14005
+ .Table tbody tr[data-total]:hover > * {
14006
+ background: var(--sl-table-total-background);
14007
+ color: var(--sl-table-color);
14008
+ }
14009
+ }
14010
+
13719
14011
  /* A header that stays put while the body scrolls (the table's wrapper scrolls) */
13720
14012
  .Table[data-sticky-header] thead th {
13721
14013
  position: sticky;
@@ -13746,7 +14038,7 @@ textarea.FieldControl {
13746
14038
  color: inherit;
13747
14039
  }
13748
14040
 
13749
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
14041
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
13750
14042
  /* Collection
13751
14043
  *
13752
14044
  * DataTable, DataList, the toolbar and the pagination, in one place so the two views
@@ -13757,7 +14049,7 @@ textarea.FieldControl {
13757
14049
  * the tabs and the search where they are, so selecting rows does not grow the toolbar.
13758
14050
  */
13759
14051
 
13760
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
14052
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
13761
14053
  /* Collection toolbar
13762
14054
  *
13763
14055
  * The wrap follows the toolbar's own width, not the window: a table in a narrow pane wraps
@@ -13898,7 +14190,7 @@ textarea.FieldControl {
13898
14190
  letter-spacing: var(--sl-font-body-condense-letter-spacing);
13899
14191
  }
13900
14192
 
13901
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
14193
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
13902
14194
  /* DataTable additions on top of .Table.
13903
14195
  *
13904
14196
  * Sort buttons fill the header cell and inherit its hover, so old aria-sort markup keeps
@@ -14019,12 +14311,15 @@ textarea.FieldControl {
14019
14311
  color: var(--sl-table-subtle-color);
14020
14312
  }
14021
14313
 
14022
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
14314
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14023
14315
  /* DataList
14024
14316
  *
14025
14317
  * The same rows as the table, in one container with the table's borders, hover, selected
14026
14318
  * and current states. Not a stack of floating cards: the two views should read as one family.
14027
14319
  * variant=cards adds the surface radius and a gap when a queue should read as separate items.
14320
+ *
14321
+ * The working-paper rule (rule.width, 0 by default) replaces the top border with a heavier
14322
+ * line in rule.color: on the first row, or on each card's top edge.
14028
14323
  */
14029
14324
 
14030
14325
  .DataList {
@@ -14043,6 +14338,13 @@ textarea.FieldControl {
14043
14338
  background: var(--sl-table-background);
14044
14339
  border: var(--sl-stroke-default) solid var(--sl-table-border-color);
14045
14340
  border-radius: var(--sl-table-radius);
14341
+ /* The top border steps aside while the working-paper rule is on (any rule.width above 0). */
14342
+ border-top-width: max(0px, var(--sl-stroke-default) - var(--sl-rule-width) * 1000);
14343
+ }
14344
+
14345
+ /* The working-paper rule on the first row. At rule.width 0 this is no border at all. */
14346
+ .DataList ul > li:first-child {
14347
+ border-top: var(--sl-rule-width) solid var(--sl-rule-color);
14046
14348
  }
14047
14349
 
14048
14350
  .DataList li {
@@ -14136,6 +14438,14 @@ textarea.FieldControl {
14136
14438
  background: var(--sl-table-background);
14137
14439
  border: var(--sl-stroke-default) solid var(--sl-table-border-color);
14138
14440
  border-radius: var(--sl-table-radius);
14441
+ border-top-width: max(0px, var(--sl-stroke-default) - var(--sl-rule-width) * 1000);
14442
+ box-shadow: inset 0 var(--sl-rule-width) 0 0 var(--sl-rule-color);
14443
+ }
14444
+
14445
+ .DataList[data-variant='cards'] li[aria-current='true'] {
14446
+ box-shadow:
14447
+ inset var(--sl-stroke-strong) 0 0 0 var(--sl-border-accent),
14448
+ inset 0 var(--sl-rule-width) 0 0 var(--sl-rule-color);
14139
14449
  }
14140
14450
 
14141
14451
  .DataList[data-loading] ul {
@@ -14143,7 +14453,7 @@ textarea.FieldControl {
14143
14453
  transition: opacity var(--sl-duration-fast) var(--sl-easing-default);
14144
14454
  }
14145
14455
 
14146
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
14456
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14147
14457
  /* Pagination
14148
14458
  *
14149
14459
  * Not tied to a collection. Anything with a page, a page count and a total can use it.
@@ -14168,7 +14478,7 @@ textarea.FieldControl {
14168
14478
  margin: 0;
14169
14479
  }
14170
14480
 
14171
- /* @scattered-light/loomiere-base-ui 0.7.1 · styles for @base-ui/react 1.9.0 */
14481
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14172
14482
  /* EditableList
14173
14483
  *
14174
14484
  * One table at every width, so a field is not submitted twice. Under the stack width each
@@ -14266,3 +14576,351 @@ textarea.FieldControl {
14266
14576
  letter-spacing: var(--sl-font-subtitle-condense-letter-spacing);
14267
14577
  }
14268
14578
  }
14579
+
14580
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14581
+ /* Sheet
14582
+ *
14583
+ * A working-paper surface: the raised surface with a heavier rule across its top
14584
+ * (sheet.rule-width in sheet.rule-color) instead of its top border, and an optional tab
14585
+ * label that sits on the rule like the tab of a ledger page. The tab is caps-condense on
14586
+ * the inverse surface. An action (an Edit link, a count) sits at the end of the header row.
14587
+ * Tokens: sheet.* (tokens/component/sheet.json).
14588
+ *
14589
+ * Content runs edge to edge, so a Table, DataList or leader DescriptionList inside lines up
14590
+ * with the sheet's sides; data-inset on SheetBody pads it by sheet.padding instead. A Table
14591
+ * inside drops its own outer border and corners, since the sheet is its frame.
14592
+ */
14593
+
14594
+ .Sheet {
14595
+ box-sizing: border-box;
14596
+ display: flex;
14597
+ flex-direction: column;
14598
+ min-width: 0;
14599
+ }
14600
+
14601
+ .SheetHeader {
14602
+ display: flex;
14603
+ align-items: flex-end;
14604
+ gap: var(--sl-sheet-header-gap);
14605
+ min-height: var(--sl-sheet-tab-height);
14606
+ }
14607
+
14608
+ .SheetTab {
14609
+ font-family: var(--sl-font-caps-condense-font-family);
14610
+ font-size: var(--sl-font-caps-condense-font-size);
14611
+ font-weight: var(--sl-font-caps-condense-font-weight);
14612
+ line-height: var(--sl-font-caps-condense-line-height);
14613
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
14614
+ text-transform: var(--sl-font-caps-condense-text-transform);
14615
+ display: inline-flex;
14616
+ align-items: center;
14617
+ height: var(--sl-sheet-tab-height);
14618
+ padding-inline: var(--sl-sheet-tab-padding-inline);
14619
+ background: var(--sl-sheet-tab-background);
14620
+ color: var(--sl-sheet-tab-color);
14621
+ border-radius: var(--sl-sheet-tab-radius) var(--sl-sheet-tab-radius) 0 0;
14622
+ white-space: nowrap;
14623
+ }
14624
+
14625
+ .SheetAction {
14626
+ font-family: var(--sl-font-subtitle-condense-font-family);
14627
+ font-size: var(--sl-font-subtitle-condense-font-size);
14628
+ font-weight: var(--sl-font-subtitle-condense-font-weight);
14629
+ line-height: var(--sl-font-subtitle-condense-line-height);
14630
+ letter-spacing: var(--sl-font-subtitle-condense-letter-spacing);
14631
+ margin-inline-start: auto;
14632
+ padding-block-end: var(--sl-space-1);
14633
+ }
14634
+
14635
+ .SheetBody {
14636
+ box-sizing: border-box;
14637
+ flex: 1;
14638
+ min-width: 0;
14639
+ background: var(--sl-sheet-background);
14640
+ border: var(--sl-sheet-border-width) solid var(--sl-sheet-border-color);
14641
+ border-top: var(--sl-sheet-rule-width) solid var(--sl-sheet-rule-color);
14642
+ border-radius: var(--sl-sheet-radius);
14643
+ /* Rows inside keep to the rounded corners. clip, not hidden, so a sticky header still sticks. */
14644
+ overflow: clip;
14645
+ }
14646
+
14647
+ /* Under a tab the top corners stay square, so the tab sits flush on the rule. */
14648
+ .Sheet[data-tab] > .SheetBody {
14649
+ border-start-start-radius: 0;
14650
+ border-start-end-radius: 0;
14651
+ }
14652
+
14653
+ .SheetBody[data-inset] {
14654
+ padding: var(--sl-sheet-padding);
14655
+ }
14656
+
14657
+ /* The sheet is the frame: a table or list inside drops its own outer edge. */
14658
+ .SheetBody > .Table,
14659
+ .SheetBody > .CollectionView .Table,
14660
+ .SheetBody > .DataList ul {
14661
+ border: 0;
14662
+ border-radius: 0;
14663
+ }
14664
+
14665
+ .SheetBody > .Table > thead > tr:first-child > *,
14666
+ .SheetBody > .Table:not(:has(> thead)) > tbody:first-of-type > tr:first-child > *,
14667
+ .SheetBody > .DataList ul > li:first-child {
14668
+ border-top: 0;
14669
+ }
14670
+
14671
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14672
+ /* StatFigure
14673
+ *
14674
+ * One large figure with a caps label above and a caption under it. The label is
14675
+ * caps-condense, the figure uses the figures text family (mono, tabular numbers) at
14676
+ * stat-figure.figure-font-size, the caption is body-condense. data-underline="double"
14677
+ * draws a double rule under the figure only, the accountant's mark for a final total;
14678
+ * data-tone="accent" colors the figure; data-size="sm" makes it smaller for a row of figures.
14679
+ * Tokens: stat-figure.* (tokens/component/stat-figure.json).
14680
+ */
14681
+
14682
+ .StatFigure {
14683
+ display: inline-flex;
14684
+ flex-direction: column;
14685
+ align-items: flex-start;
14686
+ gap: var(--sl-stat-figure-gap);
14687
+ min-width: 0;
14688
+ }
14689
+
14690
+ .StatFigureLabel {
14691
+ font-family: var(--sl-font-caps-condense-font-family);
14692
+ font-size: var(--sl-font-caps-condense-font-size);
14693
+ font-weight: var(--sl-font-caps-condense-font-weight);
14694
+ line-height: var(--sl-font-caps-condense-line-height);
14695
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
14696
+ text-transform: var(--sl-font-caps-condense-text-transform);
14697
+ color: var(--sl-stat-figure-label-color);
14698
+ }
14699
+
14700
+ .StatFigureValue {
14701
+ font-family: var(--sl-font-figures-base-font-family);
14702
+ font-variant-numeric: var(--sl-font-figures-base-font-variant-numeric);
14703
+ font-size: var(--sl-stat-figure-figure-font-size);
14704
+ font-weight: var(--sl-stat-figure-figure-font-weight);
14705
+ line-height: var(--sl-stat-figure-figure-line-height);
14706
+ color: var(--sl-stat-figure-figure-color);
14707
+ white-space: nowrap;
14708
+ }
14709
+
14710
+ .StatFigure[data-size='sm'] .StatFigureValue {
14711
+ font-size: var(--sl-stat-figure-figure-font-size-sm);
14712
+ line-height: var(--sl-stat-figure-figure-line-height-sm);
14713
+ }
14714
+
14715
+ .StatFigure[data-tone='accent'] .StatFigureValue {
14716
+ color: var(--sl-stat-figure-figure-color-accent);
14717
+ }
14718
+
14719
+ .StatFigure[data-underline='double'] .StatFigureValue {
14720
+ border-bottom: var(--sl-stat-figure-underline-width) double var(--sl-stat-figure-underline-color);
14721
+ }
14722
+
14723
+ .StatFigureCaption {
14724
+ font-family: var(--sl-font-body-condense-font-family);
14725
+ font-size: var(--sl-font-body-condense-font-size);
14726
+ font-weight: var(--sl-font-body-condense-font-weight);
14727
+ line-height: var(--sl-font-body-condense-line-height);
14728
+ letter-spacing: var(--sl-font-body-condense-letter-spacing);
14729
+ color: var(--sl-stat-figure-caption-color);
14730
+ }
14731
+
14732
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14733
+ /* DescriptionList
14734
+ *
14735
+ * Label and value pairs in a native dl, one DescriptionItem (a div holding a dt and a dd)
14736
+ * per pair, with a hairline between pairs. The default variant sets labels in a column
14737
+ * beside their values. data-variant="leader" runs a dotted leader from each label to its
14738
+ * value, which sits at the end of the row, as on a working paper. Labels are body text
14739
+ * in the secondary color, values primary text with tabular numbers.
14740
+ * Tokens: description-list.* (tokens/component/description-list.json).
14741
+ */
14742
+
14743
+ .DescriptionList {
14744
+ font-family: var(--sl-font-body-base-font-family);
14745
+ font-size: var(--sl-font-body-base-font-size);
14746
+ font-weight: var(--sl-font-body-base-font-weight);
14747
+ line-height: var(--sl-font-body-base-line-height);
14748
+ letter-spacing: var(--sl-font-body-base-letter-spacing);
14749
+ margin: 0;
14750
+ padding: 0;
14751
+ font-variant-numeric: tabular-nums;
14752
+ }
14753
+
14754
+ .DescriptionItem {
14755
+ display: grid;
14756
+ grid-template-columns: var(--sl-description-list-label-width) 2fr;
14757
+ align-items: baseline;
14758
+ column-gap: var(--sl-description-list-column-gap);
14759
+ padding-block: var(--sl-description-list-row-padding-block);
14760
+ padding-inline: var(--sl-description-list-row-padding-inline);
14761
+ border-bottom: var(--sl-stroke-default) solid var(--sl-description-list-row-border-color);
14762
+ }
14763
+
14764
+ .DescriptionItem:last-child {
14765
+ border-bottom: none;
14766
+ }
14767
+
14768
+ .DescriptionTerm {
14769
+ margin: 0;
14770
+ color: var(--sl-description-list-label-color);
14771
+ }
14772
+
14773
+ .DescriptionDetails {
14774
+ margin: 0;
14775
+ min-width: 0;
14776
+ color: var(--sl-description-list-value-color);
14777
+ overflow-wrap: anywhere;
14778
+ }
14779
+
14780
+ /* Leader: the label grows to fill the row, and its ::after is the dotted line that leads
14781
+ to the value. The line sits on the text's baseline. */
14782
+ .DescriptionList[data-variant='leader'] .DescriptionItem {
14783
+ display: flex;
14784
+ column-gap: var(--sl-description-list-leader-gap);
14785
+ }
14786
+
14787
+ .DescriptionList[data-variant='leader'] .DescriptionTerm {
14788
+ display: flex;
14789
+ flex: 1 1 auto;
14790
+ align-items: baseline;
14791
+ gap: var(--sl-description-list-leader-gap);
14792
+ min-width: 0;
14793
+ }
14794
+
14795
+ .DescriptionList[data-variant='leader'] .DescriptionTerm::after {
14796
+ content: '';
14797
+ flex: 1 1 var(--sl-space-6);
14798
+ min-width: var(--sl-space-6);
14799
+ border-bottom: var(--sl-description-list-leader-width) dotted var(--sl-description-list-leader-color);
14800
+ }
14801
+
14802
+ .DescriptionList[data-variant='leader'] .DescriptionDetails {
14803
+ flex: 0 1 auto;
14804
+ max-width: 60%;
14805
+ text-align: end;
14806
+ }
14807
+
14808
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14809
+ /* AppBar
14810
+ *
14811
+ * The bar across the top of an app window, one row on a line in the rule color. The line is
14812
+ * app-bar.border-width while rule.width is 0, and the thicker of the two once a brand turns the
14813
+ * rule on, so an ink-rule brand gets the working-paper rule under its app bar.
14814
+ * AppBarSpacer pushes what follows it to the end. A vertical Separator inside is a short
14815
+ * divider between groups of icon actions. Tokens: app-bar.* (tokens/component/app-bar.json).
14816
+ */
14817
+
14818
+ .AppBar {
14819
+ box-sizing: border-box;
14820
+ display: flex;
14821
+ align-items: center;
14822
+ gap: var(--sl-app-bar-gap);
14823
+ min-height: var(--sl-app-bar-height);
14824
+ padding-inline: var(--sl-app-bar-padding-inline);
14825
+ padding-block: var(--sl-space-2);
14826
+ background: var(--sl-app-bar-background);
14827
+ border-bottom: max(var(--sl-app-bar-border-width), var(--sl-rule-width)) solid var(--sl-app-bar-border-color);
14828
+ min-width: 0;
14829
+ }
14830
+
14831
+ .AppBarSpacer {
14832
+ flex: 1 1 var(--sl-space-4);
14833
+ min-width: 0;
14834
+ }
14835
+
14836
+ .AppBar .Separator[data-orientation='vertical'] {
14837
+ height: var(--sl-app-bar-divider-height);
14838
+ margin-inline: var(--sl-space-1);
14839
+ background: var(--sl-app-bar-divider-color);
14840
+ }
14841
+
14842
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
14843
+ /* PickerButton
14844
+ *
14845
+ * A trigger with a caps label before the current choice: CLIENT Alpha Services. The field
14846
+ * look and states of a Select trigger; the label is caps-condense in picker-button.label-color,
14847
+ * the choice is cut with an ellipsis at picker-button.max-width and the chevron turns while
14848
+ * its popup is open. Tokens: picker-button.* (tokens/component/picker-button.json) and field.*.
14849
+ */
14850
+
14851
+ .PickerButton {
14852
+ box-sizing: border-box;
14853
+ color: var(--sl-field-color);
14854
+ background: var(--sl-field-background);
14855
+ border: var(--sl-field-border-width) solid var(--sl-field-border-color);
14856
+ border-radius: var(--sl-field-radius);
14857
+ transition: var(--sl-field-transition);
14858
+ outline: none;
14859
+ font-family: var(--sl-font-body-base-font-family);
14860
+ font-size: var(--sl-font-body-base-font-size);
14861
+ font-weight: var(--sl-font-body-base-font-weight);
14862
+ line-height: var(--sl-font-body-base-line-height);
14863
+ letter-spacing: var(--sl-font-body-base-letter-spacing);
14864
+ display: inline-flex;
14865
+ align-items: center;
14866
+ gap: var(--sl-gap-control);
14867
+ max-width: var(--sl-picker-button-max-width);
14868
+ min-width: 0;
14869
+ height: var(--sl-control-height-md);
14870
+ margin: 0;
14871
+ padding-block: var(--sl-control-padding-block);
14872
+ padding-inline: var(--sl-control-padding-inline);
14873
+ cursor: pointer;
14874
+ white-space: nowrap;
14875
+ }
14876
+
14877
+ .PickerButton:hover:not(:disabled) {
14878
+ border-color: var(--sl-field-border-color-hover);
14879
+ }
14880
+
14881
+ .PickerButton:focus-visible {
14882
+ border-color: var(--sl-field-border-color-focus);
14883
+ box-shadow: var(--sl-field-shadow-focus);
14884
+ }
14885
+
14886
+ .PickerButton:disabled {
14887
+ background: var(--sl-field-background-disabled);
14888
+ color: var(--sl-field-color-disabled);
14889
+ cursor: not-allowed;
14890
+ }
14891
+
14892
+ .PickerButtonLabel {
14893
+ font-family: var(--sl-font-caps-condense-font-family);
14894
+ font-size: var(--sl-font-caps-condense-font-size);
14895
+ font-weight: var(--sl-font-caps-condense-font-weight);
14896
+ line-height: var(--sl-font-caps-condense-line-height);
14897
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
14898
+ text-transform: var(--sl-font-caps-condense-text-transform);
14899
+ flex: none;
14900
+ color: var(--sl-picker-button-label-color);
14901
+ }
14902
+
14903
+ .PickerButtonValue {
14904
+ flex: 0 1 auto;
14905
+ min-width: 0;
14906
+ overflow: hidden;
14907
+ text-overflow: ellipsis;
14908
+ color: var(--sl-field-color);
14909
+ }
14910
+
14911
+ .PickerButtonValue[data-placeholder] {
14912
+ color: var(--sl-field-placeholder-color);
14913
+ }
14914
+
14915
+ .PickerButtonIcon {
14916
+ flex: none;
14917
+ width: var(--sl-icon-size-base);
14918
+ height: var(--sl-icon-size-base);
14919
+ color: var(--sl-text-tertiary);
14920
+ transition: transform var(--sl-duration-normal) var(--sl-easing-default);
14921
+ }
14922
+
14923
+ .PickerButton[aria-expanded='true'] .PickerButtonIcon,
14924
+ .PickerButton[data-popup-open] .PickerButtonIcon {
14925
+ transform: rotate(180deg);
14926
+ }