@scattered-light/loomiere-mojave 0.8.0 → 0.10.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.
@@ -794,6 +794,7 @@
794
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%. */
795
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. */
796
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. */
797
798
  --sl-preview-card-popup-min-width: 300px; /** Narrowest a preview card gets, so a short title still has room for its image. */
798
799
  --sl-preview-card-popup-max-width: 450px; /** Widest a preview card gets, so its description keeps a comfortable line length. */
799
800
  --sl-slider-vertical-height: 200px; /** Default length of a vertical slider. */
@@ -1680,111 +1681,6 @@
1680
1681
  --sl-font-link-minimize-font-weight: var(--sl-font-weight-normal); /** font-weight of font.link-minimize. */
1681
1682
  --sl-font-link-minimize-line-height: var(--sl-line-height-xs); /** line-height of font.link-minimize. */
1682
1683
  --sl-font-link-minimize-letter-spacing: var(--sl-letter-spacing-normal); /** letter-spacing of font.link-minimize. */
1683
- --sl-a11y-focus-ring-radius: var(--sl-radius-focus); /** Rounds the focus ring to match the small control radius. */
1684
- --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. */
1685
- --sl-calendar-day-radius: var(--sl-radius-pill); /** Selected days are circles. The pill radius is the same full radius badges and switches use. */
1686
- --sl-check-border-width: var(--sl-stroke-default); /** Edge thickness. */
1687
- --sl-check-radius: var(--sl-radius-box); /** Checkbox corners. Radios are always round. */
1688
- --sl-check-transition: var(--sl-transition-input); /** Changes at the same speed as a field. */
1689
- --sl-status-error: var(--sl-scope-error-signal); /** Errors and destructive actions. */
1690
- --sl-status-error-dark: var(--sl-scope-error-fg); /** Error color for text or icons that need more contrast than the base color. */
1691
- --sl-status-error-light: var(--sl-scope-error-soft); /** Error tint for backgrounds behind error messages. */
1692
- --sl-status-info: var(--sl-scope-info-signal); /** Neutral notices and help. */
1693
- --sl-status-info-dark: var(--sl-scope-info-fg); /** Info color for text or icons that need more contrast. */
1694
- --sl-status-info-light: var(--sl-scope-info-soft); /** Info tint for notice backgrounds. */
1695
- --sl-status-success: var(--sl-scope-success-signal); /** Confirmations and completed states. */
1696
- --sl-status-success-dark: var(--sl-scope-success-fg); /** Success color for text or icons that need more contrast. */
1697
- --sl-status-success-light: var(--sl-scope-success-soft); /** Success tint for confirmation backgrounds. */
1698
- --sl-status-warning: var(--sl-scope-warning-signal); /** Warnings, and the required-field marker. */
1699
- --sl-status-warning-dark: var(--sl-scope-warning-fg); /** Warning color for text or icons that need more contrast. */
1700
- --sl-status-warning-light: var(--sl-scope-warning-soft); /** Warning tint for caution backgrounds. */
1701
- --sl-text-primary: var(--sl-scope-chrome-fg); /** Body text and headings. The highest-contrast neutral. */
1702
- --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. */
1703
- --sl-disclosure-indicator-width: var(--sl-stroke-emphasis); /** Selected tab line thickness. */
1704
- --sl-field-border-width: var(--sl-stroke-default); /** Field edge thickness. */
1705
- --sl-field-radius: var(--sl-radius-control); /** Field corners, the same as every other control. */
1706
- --sl-field-transition: var(--sl-transition-input); /** Border and halo ease in, never snap. */
1707
- --sl-gauge-radius: var(--sl-radius-pill); /** Round ends on the track and the fill. */
1708
- --sl-icon-button-radius: var(--sl-radius-item); /** Rounded like a menu item, since its hover fill reads as a highlighted item. */
1709
- --sl-icon-button-transition: var(--sl-transition-button); /** Responds as fast as a button. */
1710
- --sl-item-radius: var(--sl-radius-item); /** Row corners inside the popup. */
1711
- --sl-modal-border-width: var(--sl-stroke-default); /** Modal edge thickness. */
1712
- --sl-modal-radius: var(--sl-radius-modal); /** The largest radius, so a modal reads as its own layer. A drawer rounds only the edge facing the page. */
1713
- --sl-modal-shadow: var(--sl-elevation-xl); /** The deepest shadow, because a modal sits above everything but popups and toasts. */
1714
- --sl-modal-backdrop: color-mix(in srgb, var(--sl-overlay-base) 50%, transparent); /** Scrim that dims the page behind a modal. */
1715
- --sl-popup-border-width: var(--sl-stroke-default); /** Popup edge thickness. */
1716
- --sl-popup-radius: var(--sl-radius-surface); /** Corners of a free-floating popup. */
1717
- --sl-popup-radius-field: var(--sl-radius-control); /** Corners of a list that drops from a field, matching the field so the two read as one control. */
1718
- --sl-popup-shadow: var(--sl-elevation-lg); /** Lifts the popup above the page. */
1719
- --sl-popup-empty-padding-block: var(--sl-empty-padding-block-compact); /** Room around a plain 'No results' line. The same padding as a compact empty state, so a sentence and an EmptyState in that slot take the same space. An EmptyState drops this padding and uses its own. */
1720
- --sl-table-row-height: var(--sl-control-height-sm); /** Row height: the small control height, so a checkbox, input or button in a cell fits without growing the row. */
1721
- --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. */
1722
- --sl-table-cell-padding-inline: var(--sl-control-padding-inline-sm); /** Space either side of cell text, matching small controls. */
1723
- --sl-table-radius: var(--sl-radius-surface); /** Grid corners, like any card or panel. */
1724
- --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. */
1725
- --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. */
1726
- --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. */
1727
- --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. */
1728
- --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. */
1729
- --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. */
1730
- --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. */
1731
- --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. */
1732
- --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. */
1733
- --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. */
1734
- --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. */
1735
- --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. */
1736
- --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. */
1737
- --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. */
1738
- --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. */
1739
- --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. */
1740
- --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. */
1741
- --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. */
1742
- --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. */
1743
- --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. */
1744
- --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. */
1745
- --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. */
1746
- --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. */
1747
- --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. */
1748
- --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. */
1749
- --sl-focus-shadow-3px-error: 0 0 0 3px var(--sl-status-error); /** Focus halo for a field with an error. */
1750
- --sl-calendar-day-color: var(--sl-text-primary); /** A day in the month being shown. */
1751
- --sl-border-accent: var(--sl-scope-accent-border); /** Borders that signal selection or the active item. */
1752
- --sl-border-default: var(--sl-scope-chrome-divider); /** Everyday dividers and control outlines. Darkens under prefers-contrast: more. */
1753
- --sl-border-strong: var(--sl-scope-chrome-border-strong); /** Borders that identify a control, such as inputs and unchecked checkboxes. 3:1 against the canvas, as WCAG asks for control boundaries. */
1754
- --sl-border-subtle: var(--sl-scope-chrome-border-subtle); /** Hairlines inside a surface (table rows, list separators) that should barely register. */
1755
- --sl-border-control: var(--sl-scope-chrome-border); /** Edge of a small control (checkbox, radio, switch) that must be found before it is filled. */
1756
- --sl-border-control-hover: var(--sl-scope-chrome-border-hover); /** Control edge under the pointer: one clear step darker than border.control. */
1757
- --sl-interactive-active: var(--sl-scope-accent-solid-active); /** Pressed state of the main accent. Darker than hover so the press is felt. */
1758
- --sl-interactive-default: var(--sl-scope-accent-solid); /** Primary accent for buttons, links and selected states. Step 600 is 6.1:1 on paper; step 400 is 5.6:1 on the dark canvas. */
1759
- --sl-interactive-disabled: var(--sl-scope-chrome-soft-active); /** Fill for disabled accent controls. Low contrast on purpose, but never invisible. */
1760
- --sl-interactive-hover: var(--sl-scope-accent-solid-hover); /** Hover state of the main accent. One step away from default in the direction of more contrast. */
1761
- --sl-interactive-tint: var(--sl-scope-accent-soft); /** Faint accent wash behind a ghost or outline control on hover, or a selected row. */
1762
- --sl-interactive-tint-hover: var(--sl-scope-accent-soft-hover); /** Accent wash for a highlighted menu item or a pressed toggle. */
1763
- --sl-interactive-tint-active: var(--sl-scope-accent-soft-active); /** Accent wash for a selected or pressed item: one step past tint-hover. */
1764
- --sl-interactive-tint-strong: var(--sl-scope-accent-soft-strong); /** Strongest accent wash, for hovering an item that is already pressed. */
1765
- --sl-surface-canvas: var(--sl-scope-chrome-canvas); /** The page itself. Paper in light mode, the darkest neutral in dark mode. */
1766
- --sl-surface-overlay: var(--sl-scope-chrome-overlay); /** Popups, menus and code blocks that sit above raised surfaces. */
1767
- --sl-surface-raised: var(--sl-scope-chrome-raised); /** Cards and panels one level above the canvas. */
1768
- --sl-surface-modal: var(--sl-scope-chrome-modal); /** Dialogs and drawers. Paper in light mode; in dark mode one step lighter than the page, so a modal lifts off the dimmed page under it. */
1769
- --sl-surface-tray: var(--sl-scope-chrome-tray); /** The strip behind a row of controls (toolbars, toggle groups). A step off the page in both themes, so the controls sitting on it stand out, while secondary and accent text on it still pass AA. */
1770
- --sl-surface-inverse: var(--sl-scope-chrome-inverse); /** Dark-on-light flip for small floating things such as tooltips. Inside a brand pair it becomes the pair's text color. */
1771
- --sl-text-accent: var(--sl-scope-accent-fg); /** Accent text such as active tabs. One step darker than the interactive color so it stays AA as text. */
1772
- --sl-text-disabled: var(--sl-scope-chrome-fg-disabled); /** Text in disabled controls. Deliberately below AA, which WCAG allows for disabled UI. */
1773
- --sl-text-secondary: var(--sl-scope-chrome-fg-secondary); /** Supporting text such as descriptions and helper copy. Over 7:1 on every surface, and darker still under prefers-contrast: more. */
1774
- --sl-text-tertiary: var(--sl-scope-chrome-fg-tertiary); /** Placeholders, captions and metadata. The lightest text that still passes AA (4.5:1) on every surface. */
1775
- --sl-text-on-tint: var(--sl-scope-accent-on-soft); /** Text on an accent wash (interactive.tint*). Stays in the accent family. */
1776
- --sl-text-on-tint-strong: var(--sl-scope-accent-ink); /** Text on the selected accent wash, a step darker than on-tint. */
1777
- --sl-fill-subtle: var(--sl-scope-chrome-soft); /** Lightest fill: hovered rows, chips, empty tracks. */
1778
- --sl-fill-default: var(--sl-scope-chrome-soft-hover); /** Standard fill: slider and switch tracks, pressed rows. */
1779
- --sl-fill-strong: var(--sl-scope-chrome-soft-active); /** Heaviest fill: scroll thumbs, slider marks, hovered tracks. */
1780
- --sl-fill-inverse: var(--sl-scope-chrome-solid); /** A small solid chip in the chrome color that flips with the theme: dark on light pages, light on dark ones. Keyboard keys use it. */
1781
- --sl-fill-stronger: var(--sl-scope-chrome-soft-strong); /** One step past fill.strong, for the hover state of a strong fill such as a scrollbar thumb. */
1782
- --sl-fill-track: var(--sl-scope-chrome-track); /** The empty part of a meter or progress bar. Light like fill.subtle in light mode; near the page in dark mode, so any palette's fill reads 3:1 against it. */
1783
- --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. */
1784
- --sl-content-selection-text: var(--sl-text-primary); /** Selected text stays body text so it reads the same on the tint. */
1785
- --sl-field-border-color-error: var(--sl-status-error); /** Field edge when the value is invalid. */
1786
- --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". */
1787
- --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. */
1788
1684
  --sl-font-subtitle-minimize-font-family: var(--sl-font-family-body); /** font-family of font.subtitle-minimize. */
1789
1685
  --sl-font-subtitle-minimize-font-size: var(--sl-font-size-xs); /** font-size of font.subtitle-minimize. */
1790
1686
  --sl-font-subtitle-minimize-font-weight: var(--sl-font-weight-bold); /** font-weight of font.subtitle-minimize. */
@@ -1952,6 +1848,10 @@
1952
1848
  --sl-scope-info-signal: var(--sl-color-info-500); /** info signal: 500 in light, 400 in dark */
1953
1849
  --sl-scope-info-focus: var(--sl-color-info-500); /** info focus: 500 in light, 400 in dark */
1954
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. */
1955
1855
  --sl-avatar-size-xs: var(--sl-space-8); /** 32px, inline with text and in dense lists. */
1956
1856
  --sl-avatar-size-sm: var(--sl-space-10); /** 40px, in list rows and comments. */
1957
1857
  --sl-avatar-size-md: var(--sl-space-12); /** 48px, the default. */
@@ -1999,6 +1899,13 @@
1999
1899
  --sl-sheet-tab-padding-inline: var(--sl-space-3-5); /** Space either side of the tab label's text. */
2000
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. */
2001
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. */
1902
+ --sl-side-nav-item-padding-inline: var(--sl-space-5); /** Space at each end of a row. */
1903
+ --sl-side-nav-item-gap: var(--sl-space-2); /** Space between a row's label and its count. */
1904
+ --sl-side-nav-indicator-width: var(--sl-stroke-medium); /** The line under the current row. */
1905
+ --sl-side-nav-group-padding-top: var(--sl-space-5); /** Space above a group heading. */
1906
+ --sl-side-nav-toggle-size: var(--sl-space-6); /** The collapse button's width and height. It sits on the column's edge. */
1907
+ --sl-side-nav-toggle-offset: var(--sl-space-4); /** Distance of the collapse button from the top of the column. */
1908
+ --sl-side-nav-collapsed-width: var(--sl-space-11); /** Width of the column when it is collapsed, wide enough for the collapse button. */
2002
1909
  --sl-slider-thumb-size: var(--sl-space-5); /** Knob diameter, big enough to grab with a finger on a 4px track. */
2003
1910
  --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. */
2004
1911
  --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. */
@@ -2039,7 +1946,72 @@
2039
1946
  --sl-color-chrome-on-1000: var(--sl-color-neutral-on-1000);
2040
1947
  --sl-color-chrome-on-1100: var(--sl-color-neutral-on-1100);
2041
1948
  --sl-color-chrome-on-1200: var(--sl-color-neutral-on-1200);
2042
- --sl-bar-border-width: var(--sl-stroke-default); /** Strip edge thickness. */
1949
+ --sl-a11y-focus-ring-radius: var(--sl-radius-focus); /** Rounds the focus ring to match the small control radius. */
1950
+ --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. */
1951
+ --sl-calendar-day-radius: var(--sl-radius-pill); /** Selected days are circles. The pill radius is the same full radius badges and switches use. */
1952
+ --sl-check-border-width: var(--sl-stroke-default); /** Edge thickness. */
1953
+ --sl-check-radius: var(--sl-radius-box); /** Checkbox corners. Radios are always round. */
1954
+ --sl-check-transition: var(--sl-transition-input); /** Changes at the same speed as a field. */
1955
+ --sl-status-error: var(--sl-scope-error-signal); /** Errors and destructive actions. */
1956
+ --sl-status-error-dark: var(--sl-scope-error-fg); /** Error color for text or icons that need more contrast than the base color. */
1957
+ --sl-status-error-light: var(--sl-scope-error-soft); /** Error tint for backgrounds behind error messages. */
1958
+ --sl-status-info: var(--sl-scope-info-signal); /** Neutral notices and help. */
1959
+ --sl-status-info-dark: var(--sl-scope-info-fg); /** Info color for text or icons that need more contrast. */
1960
+ --sl-status-info-light: var(--sl-scope-info-soft); /** Info tint for notice backgrounds. */
1961
+ --sl-status-success: var(--sl-scope-success-signal); /** Confirmations and completed states. */
1962
+ --sl-status-success-dark: var(--sl-scope-success-fg); /** Success color for text or icons that need more contrast. */
1963
+ --sl-status-success-light: var(--sl-scope-success-soft); /** Success tint for confirmation backgrounds. */
1964
+ --sl-status-warning: var(--sl-scope-warning-signal); /** Warnings, and the required-field marker. */
1965
+ --sl-status-warning-dark: var(--sl-scope-warning-fg); /** Warning color for text or icons that need more contrast. */
1966
+ --sl-status-warning-light: var(--sl-scope-warning-soft); /** Warning tint for caution backgrounds. */
1967
+ --sl-text-primary: var(--sl-scope-chrome-fg); /** Body text and headings. The highest-contrast neutral. */
1968
+ --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. */
1969
+ --sl-disclosure-indicator-width: var(--sl-stroke-emphasis); /** Selected tab line thickness. */
1970
+ --sl-field-border-width: var(--sl-stroke-default); /** Field edge thickness. */
1971
+ --sl-field-radius: var(--sl-radius-control); /** Field corners, the same as every other control. */
1972
+ --sl-field-transition: var(--sl-transition-input); /** Border and halo ease in, never snap. */
1973
+ --sl-gauge-radius: var(--sl-radius-pill); /** Round ends on the track and the fill. */
1974
+ --sl-icon-button-radius: var(--sl-radius-item); /** Rounded like a menu item, since its hover fill reads as a highlighted item. */
1975
+ --sl-icon-button-transition: var(--sl-transition-button); /** Responds as fast as a button. */
1976
+ --sl-item-radius: var(--sl-radius-item); /** Row corners inside the popup. */
1977
+ --sl-modal-border-width: var(--sl-stroke-default); /** Modal edge thickness. */
1978
+ --sl-modal-radius: var(--sl-radius-modal); /** The largest radius, so a modal reads as its own layer. A drawer rounds only the edge facing the page. */
1979
+ --sl-modal-shadow: var(--sl-elevation-xl); /** The deepest shadow, because a modal sits above everything but popups and toasts. */
1980
+ --sl-modal-backdrop: color-mix(in srgb, var(--sl-overlay-base) 50%, transparent); /** Scrim that dims the page behind a modal. */
1981
+ --sl-popup-border-width: var(--sl-stroke-default); /** Popup edge thickness. */
1982
+ --sl-popup-radius: var(--sl-radius-surface); /** Corners of a free-floating popup. */
1983
+ --sl-popup-radius-field: var(--sl-radius-control); /** Corners of a list that drops from a field, matching the field so the two read as one control. */
1984
+ --sl-popup-shadow: var(--sl-elevation-lg); /** Lifts the popup above the page. */
1985
+ --sl-popup-empty-padding-block: var(--sl-empty-padding-block-compact); /** Room around a plain 'No results' line. The same padding as a compact empty state, so a sentence and an EmptyState in that slot take the same space. An EmptyState drops this padding and uses its own. */
1986
+ --sl-table-row-height: var(--sl-control-height-sm); /** Row height: the small control height, so a checkbox, input or button in a cell fits without growing the row. */
1987
+ --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. */
1988
+ --sl-table-cell-padding-inline: var(--sl-control-padding-inline-sm); /** Space either side of cell text, matching small controls. */
1989
+ --sl-table-radius: var(--sl-radius-surface); /** Grid corners, like any card or panel. */
1990
+ --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. */
1991
+ --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. */
1992
+ --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. */
1993
+ --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. */
1994
+ --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. */
1995
+ --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. */
1996
+ --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. */
1997
+ --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. */
1998
+ --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. */
1999
+ --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. */
2000
+ --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. */
2001
+ --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. */
2002
+ --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. */
2003
+ --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. */
2004
+ --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. */
2005
+ --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. */
2006
+ --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. */
2007
+ --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. */
2008
+ --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. */
2009
+ --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. */
2010
+ --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. */
2011
+ --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. */
2012
+ --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. */
2013
+ --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. */
2014
+ --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. */
2043
2015
  --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. */
2044
2016
  --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. */
2045
2017
  --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. */
@@ -2197,6 +2169,7 @@
2197
2169
  --sl-status-level-error-quiet-fg: var(--sl-scope-error-fg); /** quiet in error: outline in error */
2198
2170
  --sl-status-level-error-quiet-border: var(--sl-scope-error-border); /** quiet in error: outline in error */
2199
2171
  --sl-status-level-error-quiet-border-hover: var(--sl-scope-error-solid-hover); /** quiet in error: outline in error */
2172
+ --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. */
2200
2173
  --sl-button-radius: var(--sl-radius-pill); /** Buttons are pills, so they read as actions and never as fields or cards. */
2201
2174
  --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. */
2202
2175
  --sl-collection-row-height-md: var(--sl-control-height-md); /** A roomier row when the collection is the page rather than a dense register. */
@@ -2205,7 +2178,48 @@
2205
2178
  --sl-description-list-leader-width: var(--sl-stroke-default); /** Thickness of the dotted leader. */
2206
2179
  --sl-sheet-border-width: var(--sl-stroke-default); /** Thickness of the sides and bottom. */
2207
2180
  --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. */
2181
+ --sl-side-nav-item-height: var(--sl-control-height-md); /** Least height of a row: the regular control height, so a row is as tall as a button. */
2208
2182
  --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. */
2183
+ --sl-focus-shadow-3px-error: 0 0 0 3px var(--sl-status-error); /** Focus halo for a field with an error. */
2184
+ --sl-calendar-day-color: var(--sl-text-primary); /** A day in the month being shown. */
2185
+ --sl-border-accent: var(--sl-scope-accent-border); /** Borders that signal selection or the active item. */
2186
+ --sl-border-default: var(--sl-scope-chrome-divider); /** Everyday dividers and control outlines. Darkens under prefers-contrast: more. */
2187
+ --sl-border-strong: var(--sl-scope-chrome-border-strong); /** Borders that identify a control, such as inputs and unchecked checkboxes. 3:1 against the canvas, as WCAG asks for control boundaries. */
2188
+ --sl-border-subtle: var(--sl-scope-chrome-border-subtle); /** Hairlines inside a surface (table rows, list separators) that should barely register. */
2189
+ --sl-border-control: var(--sl-scope-chrome-border); /** Edge of a small control (checkbox, radio, switch) that must be found before it is filled. */
2190
+ --sl-border-control-hover: var(--sl-scope-chrome-border-hover); /** Control edge under the pointer: one clear step darker than border.control. */
2191
+ --sl-interactive-active: var(--sl-scope-accent-solid-active); /** Pressed state of the main accent. Darker than hover so the press is felt. */
2192
+ --sl-interactive-default: var(--sl-scope-accent-solid); /** Primary accent for buttons, links and selected states. Step 600 is 6.1:1 on paper; step 400 is 5.6:1 on the dark canvas. */
2193
+ --sl-interactive-disabled: var(--sl-scope-chrome-soft-active); /** Fill for disabled accent controls. Low contrast on purpose, but never invisible. */
2194
+ --sl-interactive-hover: var(--sl-scope-accent-solid-hover); /** Hover state of the main accent. One step away from default in the direction of more contrast. */
2195
+ --sl-interactive-tint: var(--sl-scope-accent-soft); /** Faint accent wash behind a ghost or outline control on hover, or a selected row. */
2196
+ --sl-interactive-tint-hover: var(--sl-scope-accent-soft-hover); /** Accent wash for a highlighted menu item or a pressed toggle. */
2197
+ --sl-interactive-tint-active: var(--sl-scope-accent-soft-active); /** Accent wash for a selected or pressed item: one step past tint-hover. */
2198
+ --sl-interactive-tint-strong: var(--sl-scope-accent-soft-strong); /** Strongest accent wash, for hovering an item that is already pressed. */
2199
+ --sl-surface-canvas: var(--sl-scope-chrome-canvas); /** The page itself. Paper in light mode, the darkest neutral in dark mode. */
2200
+ --sl-surface-overlay: var(--sl-scope-chrome-overlay); /** Popups, menus and code blocks that sit above raised surfaces. */
2201
+ --sl-surface-raised: var(--sl-scope-chrome-raised); /** Cards and panels one level above the canvas. */
2202
+ --sl-surface-modal: var(--sl-scope-chrome-modal); /** Dialogs and drawers. Paper in light mode; in dark mode one step lighter than the page, so a modal lifts off the dimmed page under it. */
2203
+ --sl-surface-tray: var(--sl-scope-chrome-tray); /** The strip behind a row of controls (toolbars, toggle groups). A step off the page in both themes, so the controls sitting on it stand out, while secondary and accent text on it still pass AA. */
2204
+ --sl-surface-inverse: var(--sl-scope-chrome-inverse); /** Dark-on-light flip for small floating things such as tooltips. Inside a brand pair it becomes the pair's text color. */
2205
+ --sl-text-accent: var(--sl-scope-accent-fg); /** Accent text such as active tabs. One step darker than the interactive color so it stays AA as text. */
2206
+ --sl-text-disabled: var(--sl-scope-chrome-fg-disabled); /** Text in disabled controls. Deliberately below AA, which WCAG allows for disabled UI. */
2207
+ --sl-text-secondary: var(--sl-scope-chrome-fg-secondary); /** Supporting text such as descriptions and helper copy. Over 7:1 on every surface, and darker still under prefers-contrast: more. */
2208
+ --sl-text-tertiary: var(--sl-scope-chrome-fg-tertiary); /** Placeholders, captions and metadata. The lightest text that still passes AA (4.5:1) on every surface. */
2209
+ --sl-text-on-tint: var(--sl-scope-accent-on-soft); /** Text on an accent wash (interactive.tint*). Stays in the accent family. */
2210
+ --sl-text-on-tint-strong: var(--sl-scope-accent-ink); /** Text on the selected accent wash, a step darker than on-tint. */
2211
+ --sl-fill-subtle: var(--sl-scope-chrome-soft); /** Lightest fill: hovered rows, chips, empty tracks. */
2212
+ --sl-fill-default: var(--sl-scope-chrome-soft-hover); /** Standard fill: slider and switch tracks, pressed rows. */
2213
+ --sl-fill-strong: var(--sl-scope-chrome-soft-active); /** Heaviest fill: scroll thumbs, slider marks, hovered tracks. */
2214
+ --sl-fill-inverse: var(--sl-scope-chrome-solid); /** A small solid chip in the chrome color that flips with the theme: dark on light pages, light on dark ones. Keyboard keys use it. */
2215
+ --sl-fill-stronger: var(--sl-scope-chrome-soft-strong); /** One step past fill.strong, for the hover state of a strong fill such as a scrollbar thumb. */
2216
+ --sl-fill-track: var(--sl-scope-chrome-track); /** The empty part of a meter or progress bar. Light like fill.subtle in light mode; near the page in dark mode, so any palette's fill reads 3:1 against it. */
2217
+ --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. */
2218
+ --sl-content-selection-text: var(--sl-text-primary); /** Selected text stays body text so it reads the same on the tint. */
2219
+ --sl-field-border-color-error: var(--sl-status-error); /** Field edge when the value is invalid. */
2220
+ --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". */
2221
+ --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. */
2222
+ --sl-bar-border-width: var(--sl-stroke-default); /** Strip edge thickness. */
2209
2223
  --sl-field-color: var(--sl-text-primary); /** The value you typed. */
2210
2224
  --sl-gauge-label-color: var(--sl-text-primary); /** What is being measured. */
2211
2225
  --sl-icon-button-color-hover: var(--sl-text-primary); /** Darkens on hover to confirm it's the target. */
@@ -2264,6 +2278,7 @@
2264
2278
  --sl-status-level-warning-bold-fg: var(--sl-scope-warning-on-solid); /** bold in warning: solid in warning */
2265
2279
  --sl-status-level-error-bold-fg: var(--sl-scope-error-on-solid); /** bold in error: solid in error */
2266
2280
  --sl-description-list-value-color: var(--sl-text-primary); /** Values. */
2281
+ --sl-side-nav-item-color: var(--sl-text-primary); /** A row's text. */
2267
2282
  --sl-stat-figure-figure-color: var(--sl-text-primary); /** The figure's color. */
2268
2283
  --sl-focus-shadow-3px-primary: 0 0 0 3px var(--sl-interactive-tint-hover); /** Soft focus halo for inputs. */
2269
2284
  --sl-focus-shadow-3px-primary-soft: 0 0 0 3px var(--sl-interactive-tint-active); /** Slightly stronger focus halo for inputs on tinted surfaces. */
@@ -2349,16 +2364,32 @@
2349
2364
  --sl-table-range-background: var(--sl-interactive-tint); /** Cells inside a dragged range selection. */
2350
2365
  --sl-emphasis-bold-fg: var(--sl-scope-accent-on-solid); /** bold in default: solid in accent (primary) */
2351
2366
  --sl-status-level-default-bold-fg: var(--sl-scope-accent-on-solid); /** bold in default: solid in accent (primary) */
2367
+ --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. */
2368
+ --sl-app-bar-divider-color: var(--sl-border-strong); /** Color of a vertical Separator in the bar. */
2352
2369
  --sl-description-list-row-border-color: var(--sl-border-subtle); /** Hairline between pairs, as quiet as a table's row lines. */
2353
2370
  --sl-description-list-label-color: var(--sl-text-secondary); /** Labels. */
2354
2371
  --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. */
2355
2372
  --sl-drawer-handle-color: var(--sl-border-strong); /** The grab bar on bottom drawers. Strong border so it reads as something to drag. */
2373
+ --sl-picker-button-label-color: var(--sl-text-secondary); /** The caps label, quieter than the choice it names. */
2356
2374
  --sl-sheet-background: var(--sl-surface-raised); /** The sheet's fill: the raised surface, one level above the page like any card or panel. */
2357
2375
  --sl-sheet-border-color: var(--sl-border-default); /** The sheet's sides and bottom, the everyday divider. */
2358
2376
  --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. */
2377
+ --sl-side-nav-background: var(--sl-surface-tray); /** The column's fill: the tray surface, a step off the page, so the current row on the raised surface stands out from it. */
2378
+ --sl-side-nav-border-color: var(--sl-border-default); /** The line between the column and the page. */
2379
+ --sl-side-nav-item-divider-color: var(--sl-border-subtle); /** The hairline under each row. */
2380
+ --sl-side-nav-item-color-disabled: var(--sl-text-secondary); /** A row that is not available yet. Secondary text, not the faded disabled color, so its hint stays readable. */
2381
+ --sl-side-nav-item-background-hover: var(--sl-fill-subtle); /** A row under the pointer. */
2382
+ --sl-side-nav-item-background-current: var(--sl-surface-raised); /** The current row: the raised surface, so it reads as the open page. */
2383
+ --sl-side-nav-count-color: var(--sl-text-accent); /** A count at the end of a row, such as items open. Accent text so it asks for attention. */
2384
+ --sl-side-nav-count-color-quiet: var(--sl-text-secondary); /** A count that is only information (tone="quiet"), such as a total. */
2385
+ --sl-side-nav-group-label-color: var(--sl-text-secondary); /** A group heading's caps label. */
2386
+ --sl-side-nav-toggle-background: var(--sl-surface-raised); /** The collapse button's fill. */
2387
+ --sl-side-nav-toggle-border-color: var(--sl-border-strong); /** The collapse button's outline. */
2359
2388
  --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). */
2360
2389
  --sl-stat-figure-label-color: var(--sl-text-secondary); /** The caps label above the figure. */
2361
2390
  --sl-stat-figure-caption-color: var(--sl-text-secondary); /** The caption under the figure. */
2391
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised); /** Fill of a toggle that is not pressed. */
2392
+ --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. */
2362
2393
  --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. */
2363
2394
  --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. */
2364
2395
  --sl-check-mark-color: var(--sl-text-on-primary); /** Check mark, dash or dot on a ticked fill. */
@@ -2376,9 +2407,13 @@
2376
2407
  --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. */
2377
2408
  --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. */
2378
2409
  --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. */
2410
+ --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. */
2379
2411
  --sl-sheet-rule-color: var(--sl-rule-color); /** The top rule's color: the working-paper rule color, so sheets and ruled tables match. */
2380
2412
  --sl-sheet-tab-color: var(--sl-text-on-inverse-surface); /** Text on the tab label. */
2413
+ --sl-side-nav-indicator-color: var(--sl-rule-color); /** The current row's line: the working-paper rule color, so the nav and the sheets share one ink. */
2381
2414
  --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. */
2415
+ --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. */
2416
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse); /** Text on the pressed toggle. */
2382
2417
  --sl-check-background: var(--sl-field-background); /** Empty box, the same fill as a field so it reads as something to fill in. */
2383
2418
  --sl-popup-arrow-fill: var(--sl-popup-background); /** The arrow is part of the popup, so it takes the popup's fill. */
2384
2419
  }
@@ -5862,21 +5897,42 @@
5862
5897
  --sl-table-range-border: var(--sl-focus-ring);
5863
5898
  --sl-table-total-rule-color: var(--sl-rule-color);
5864
5899
  --sl-table-total-background: var(--sl-table-background);
5900
+ --sl-app-bar-background: var(--sl-surface-raised);
5901
+ --sl-app-bar-border-color: var(--sl-rule-color);
5902
+ --sl-app-bar-divider-color: var(--sl-border-strong);
5865
5903
  --sl-description-list-row-border-color: var(--sl-border-subtle);
5866
5904
  --sl-description-list-label-color: var(--sl-text-secondary);
5867
5905
  --sl-description-list-value-color: var(--sl-text-primary);
5868
5906
  --sl-description-list-leader-color: var(--sl-border-control);
5869
5907
  --sl-drawer-handle-color: var(--sl-border-strong);
5908
+ --sl-picker-button-label-color: var(--sl-text-secondary);
5870
5909
  --sl-sheet-background: var(--sl-surface-raised);
5871
5910
  --sl-sheet-border-color: var(--sl-border-default);
5872
5911
  --sl-sheet-rule-color: var(--sl-rule-color);
5873
5912
  --sl-sheet-tab-background: var(--sl-surface-inverse);
5874
5913
  --sl-sheet-tab-color: var(--sl-text-on-inverse-surface);
5914
+ --sl-side-nav-background: var(--sl-surface-tray);
5915
+ --sl-side-nav-border-color: var(--sl-border-default);
5916
+ --sl-side-nav-item-divider-color: var(--sl-border-subtle);
5917
+ --sl-side-nav-item-color: var(--sl-text-primary);
5918
+ --sl-side-nav-item-color-disabled: var(--sl-text-secondary);
5919
+ --sl-side-nav-item-background-hover: var(--sl-fill-subtle);
5920
+ --sl-side-nav-item-background-current: var(--sl-surface-raised);
5921
+ --sl-side-nav-indicator-color: var(--sl-rule-color);
5922
+ --sl-side-nav-count-color: var(--sl-text-accent);
5923
+ --sl-side-nav-count-color-quiet: var(--sl-text-secondary);
5924
+ --sl-side-nav-group-label-color: var(--sl-text-secondary);
5925
+ --sl-side-nav-toggle-background: var(--sl-surface-raised);
5926
+ --sl-side-nav-toggle-border-color: var(--sl-border-strong);
5875
5927
  --sl-stat-figure-figure-color: var(--sl-text-primary);
5876
5928
  --sl-stat-figure-figure-color-accent: var(--sl-text-accent);
5877
5929
  --sl-stat-figure-underline-color: var(--sl-rule-color);
5878
5930
  --sl-stat-figure-label-color: var(--sl-text-secondary);
5879
5931
  --sl-stat-figure-caption-color: var(--sl-text-secondary);
5932
+ --sl-toggle-group-segmented-border-color: var(--sl-rule-color);
5933
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised);
5934
+ --sl-toggle-group-segmented-pressed-background: var(--sl-fill-inverse);
5935
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse);
5880
5936
  --sl-calendar-day-background-hover: var(--sl-item-background-hover);
5881
5937
  --sl-check-background: var(--sl-field-background);
5882
5938
  }
@@ -6025,21 +6081,42 @@
6025
6081
  --sl-table-range-border: var(--sl-focus-ring);
6026
6082
  --sl-table-total-rule-color: var(--sl-rule-color);
6027
6083
  --sl-table-total-background: var(--sl-table-background);
6084
+ --sl-app-bar-background: var(--sl-surface-raised);
6085
+ --sl-app-bar-border-color: var(--sl-rule-color);
6086
+ --sl-app-bar-divider-color: var(--sl-border-strong);
6028
6087
  --sl-description-list-row-border-color: var(--sl-border-subtle);
6029
6088
  --sl-description-list-label-color: var(--sl-text-secondary);
6030
6089
  --sl-description-list-value-color: var(--sl-text-primary);
6031
6090
  --sl-description-list-leader-color: var(--sl-border-control);
6032
6091
  --sl-drawer-handle-color: var(--sl-border-strong);
6092
+ --sl-picker-button-label-color: var(--sl-text-secondary);
6033
6093
  --sl-sheet-background: var(--sl-surface-raised);
6034
6094
  --sl-sheet-border-color: var(--sl-border-default);
6035
6095
  --sl-sheet-rule-color: var(--sl-rule-color);
6036
6096
  --sl-sheet-tab-background: var(--sl-surface-inverse);
6037
6097
  --sl-sheet-tab-color: var(--sl-text-on-inverse-surface);
6098
+ --sl-side-nav-background: var(--sl-surface-tray);
6099
+ --sl-side-nav-border-color: var(--sl-border-default);
6100
+ --sl-side-nav-item-divider-color: var(--sl-border-subtle);
6101
+ --sl-side-nav-item-color: var(--sl-text-primary);
6102
+ --sl-side-nav-item-color-disabled: var(--sl-text-secondary);
6103
+ --sl-side-nav-item-background-hover: var(--sl-fill-subtle);
6104
+ --sl-side-nav-item-background-current: var(--sl-surface-raised);
6105
+ --sl-side-nav-indicator-color: var(--sl-rule-color);
6106
+ --sl-side-nav-count-color: var(--sl-text-accent);
6107
+ --sl-side-nav-count-color-quiet: var(--sl-text-secondary);
6108
+ --sl-side-nav-group-label-color: var(--sl-text-secondary);
6109
+ --sl-side-nav-toggle-background: var(--sl-surface-raised);
6110
+ --sl-side-nav-toggle-border-color: var(--sl-border-strong);
6038
6111
  --sl-stat-figure-figure-color: var(--sl-text-primary);
6039
6112
  --sl-stat-figure-figure-color-accent: var(--sl-text-accent);
6040
6113
  --sl-stat-figure-underline-color: var(--sl-rule-color);
6041
6114
  --sl-stat-figure-label-color: var(--sl-text-secondary);
6042
6115
  --sl-stat-figure-caption-color: var(--sl-text-secondary);
6116
+ --sl-toggle-group-segmented-border-color: var(--sl-rule-color);
6117
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised);
6118
+ --sl-toggle-group-segmented-pressed-background: var(--sl-fill-inverse);
6119
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse);
6043
6120
  --sl-calendar-day-background-hover: var(--sl-item-background-hover);
6044
6121
  --sl-check-background: var(--sl-field-background);
6045
6122
  }
@@ -6188,21 +6265,42 @@
6188
6265
  --sl-table-range-border: var(--sl-focus-ring);
6189
6266
  --sl-table-total-rule-color: var(--sl-rule-color);
6190
6267
  --sl-table-total-background: var(--sl-table-background);
6268
+ --sl-app-bar-background: var(--sl-surface-raised);
6269
+ --sl-app-bar-border-color: var(--sl-rule-color);
6270
+ --sl-app-bar-divider-color: var(--sl-border-strong);
6191
6271
  --sl-description-list-row-border-color: var(--sl-border-subtle);
6192
6272
  --sl-description-list-label-color: var(--sl-text-secondary);
6193
6273
  --sl-description-list-value-color: var(--sl-text-primary);
6194
6274
  --sl-description-list-leader-color: var(--sl-border-control);
6195
6275
  --sl-drawer-handle-color: var(--sl-border-strong);
6276
+ --sl-picker-button-label-color: var(--sl-text-secondary);
6196
6277
  --sl-sheet-background: var(--sl-surface-raised);
6197
6278
  --sl-sheet-border-color: var(--sl-border-default);
6198
6279
  --sl-sheet-rule-color: var(--sl-rule-color);
6199
6280
  --sl-sheet-tab-background: var(--sl-surface-inverse);
6200
6281
  --sl-sheet-tab-color: var(--sl-text-on-inverse-surface);
6282
+ --sl-side-nav-background: var(--sl-surface-tray);
6283
+ --sl-side-nav-border-color: var(--sl-border-default);
6284
+ --sl-side-nav-item-divider-color: var(--sl-border-subtle);
6285
+ --sl-side-nav-item-color: var(--sl-text-primary);
6286
+ --sl-side-nav-item-color-disabled: var(--sl-text-secondary);
6287
+ --sl-side-nav-item-background-hover: var(--sl-fill-subtle);
6288
+ --sl-side-nav-item-background-current: var(--sl-surface-raised);
6289
+ --sl-side-nav-indicator-color: var(--sl-rule-color);
6290
+ --sl-side-nav-count-color: var(--sl-text-accent);
6291
+ --sl-side-nav-count-color-quiet: var(--sl-text-secondary);
6292
+ --sl-side-nav-group-label-color: var(--sl-text-secondary);
6293
+ --sl-side-nav-toggle-background: var(--sl-surface-raised);
6294
+ --sl-side-nav-toggle-border-color: var(--sl-border-strong);
6201
6295
  --sl-stat-figure-figure-color: var(--sl-text-primary);
6202
6296
  --sl-stat-figure-figure-color-accent: var(--sl-text-accent);
6203
6297
  --sl-stat-figure-underline-color: var(--sl-rule-color);
6204
6298
  --sl-stat-figure-label-color: var(--sl-text-secondary);
6205
6299
  --sl-stat-figure-caption-color: var(--sl-text-secondary);
6300
+ --sl-toggle-group-segmented-border-color: var(--sl-rule-color);
6301
+ --sl-toggle-group-segmented-background: var(--sl-surface-raised);
6302
+ --sl-toggle-group-segmented-pressed-background: var(--sl-fill-inverse);
6303
+ --sl-toggle-group-segmented-pressed-color: var(--sl-text-on-inverse);
6206
6304
  --sl-calendar-day-background-hover: var(--sl-item-background-hover);
6207
6305
  --sl-check-background: var(--sl-field-background);
6208
6306
  }
@@ -6559,7 +6657,7 @@
6559
6657
  }
6560
6658
 
6561
6659
 
6562
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
6660
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
6563
6661
  /* Loomiere for Base UI: component styles. Brand-free: every value is a --sl- variable from a
6564
6662
  Loomiere theme. Load the theme first:
6565
6663
  @import '<your theme>/tokens.css';
@@ -6569,7 +6667,7 @@
6569
6667
  /* Document defaults, in the reset layer so any unlayered rule wins over them, and so layered
6570
6668
  frameworks (Chakra's recipes, Tailwind's utilities) are not undone by them. */
6571
6669
  @layer reset {
6572
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
6670
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
6573
6671
  /* CSS Reset - Mojave Theme */
6574
6672
 
6575
6673
  /* ============================================
@@ -7013,7 +7111,7 @@ hr {
7013
7111
  }
7014
7112
  }
7015
7113
  @layer reset {
7016
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7114
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7017
7115
  /* Accessibility — base rules (no theme color dependencies). Theme-specific focus/invalid: accessibility-theme.css */
7018
7116
 
7019
7117
  /* Remove default focus; keyboard focus styled in accessibility-theme.css */
@@ -7126,7 +7224,7 @@ main:focus {
7126
7224
 
7127
7225
  }
7128
7226
  @layer reset {
7129
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7227
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7130
7228
  /* Focus, invalid, contrast — requires theme tokens (after theme-accessibility.css). */
7131
7229
 
7132
7230
  :focus-visible {
@@ -7194,7 +7292,7 @@ button,
7194
7292
 
7195
7293
  }
7196
7294
  /* Component styles */
7197
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7295
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7198
7296
  /* Accordion - Mojave Theme
7199
7297
  *
7200
7298
  * No component tokens. Hover, press, chevron, divider and motion are the disclosure
@@ -7315,7 +7413,7 @@ button,
7315
7413
  overflow: hidden;
7316
7414
  }
7317
7415
 
7318
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7416
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7319
7417
  /* Alert Dialog - Mojave Theme
7320
7418
  *
7321
7419
  * No component tokens and no rules of its own. An alert dialog looks exactly like a
@@ -7324,7 +7422,7 @@ button,
7324
7422
  * cancel quiet, and a destructive one bold with data-color="error".
7325
7423
  */
7326
7424
 
7327
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7425
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7328
7426
  /* Autocomplete - Mojave Theme
7329
7427
  *
7330
7428
  * No component tokens. The input is Input (Input.css), the clear button is an icon
@@ -7526,7 +7624,7 @@ button,
7526
7624
  (reset-accessibility.css).
7527
7625
  ============================================ */
7528
7626
 
7529
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7627
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7530
7628
  /* Avatar - Mojave Theme
7531
7629
  *
7532
7630
  * A round picture with a ring in the page color, so avatars in a group cut out of each other in
@@ -7634,7 +7732,7 @@ button,
7634
7732
  }
7635
7733
  }
7636
7734
 
7637
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7735
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7638
7736
  /* Button - Mojave Theme
7639
7737
  *
7640
7738
  * Colors are the brand's emphasis levels, sizes are control.*, text is the trigger
@@ -7784,7 +7882,7 @@ button,
7784
7882
  font-size: var(--sl-icon-size-maximize);
7785
7883
  }
7786
7884
 
7787
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
7885
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7788
7886
  /* Checkbox - Mojave Theme
7789
7887
  * Sizes follow the label: the box is the icon size one tier above the label's text
7790
7888
  * tier (like a button's icon) and the check mark one tier below it.
@@ -7941,7 +8039,7 @@ button,
7941
8039
  border-radius: var(--sl-radius-pill);
7942
8040
  }
7943
8041
 
7944
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
8042
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7945
8043
  /* Checkbox Group - Mojave Theme */
7946
8044
 
7947
8045
  /* Each checkbox row is already a full tap target tall, so the rows sit close. */
@@ -7957,7 +8055,7 @@ button,
7957
8055
  pointer-events: none;
7958
8056
  }
7959
8057
 
7960
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
8058
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
7961
8059
  /* Collapsible - Mojave Theme
7962
8060
  *
7963
8061
  * No component tokens. Hover, press, chevron and motion are the disclosure concept
@@ -8073,7 +8171,7 @@ button,
8073
8171
  background: var(--sl-surface-raised);
8074
8172
  }
8075
8173
 
8076
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
8174
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
8077
8175
  /* Combobox - Mojave Theme
8078
8176
  *
8079
8177
  * No component tokens. The input is Input (Input.css); the chips box is a field; the
@@ -8558,7 +8656,7 @@ button,
8558
8656
  color: var(--sl-text-tertiary);
8559
8657
  }
8560
8658
 
8561
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
8659
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
8562
8660
  /* Context Menu - Mojave Theme
8563
8661
  *
8564
8662
  * 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
@@ -8727,7 +8825,7 @@ button,
8727
8825
  stroke-width: var(--sl-stroke-default);
8728
8826
  }
8729
8827
 
8730
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
8828
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
8731
8829
  /* Dialog and Alert dialog - Mojave Theme
8732
8830
  *
8733
8831
  * Both are centered modals built from the modal concept (tokens/semantic/modal.json):
@@ -8873,7 +8971,7 @@ button,
8873
8971
  margin-top: var(--sl-modal-actions-spacing);
8874
8972
  }
8875
8973
 
8876
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
8974
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
8877
8975
  /* Drawer - a panel that slides in from an edge and can be swiped away.
8878
8976
  The surface, scrim, heading and motion are the modal concept's (--sl-modal-*), so a
8879
8977
  drawer reads as a dialog's sibling; only its size and grab bar are its own
@@ -9006,7 +9104,7 @@ button,
9006
9104
  color: var(--sl-modal-description-color);
9007
9105
  }
9008
9106
 
9009
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9107
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9010
9108
  /* Field - Mojave Theme
9011
9109
  *
9012
9110
  * Label, control, description and error. No component tokens: spacing is the field
@@ -9067,7 +9165,7 @@ textarea.FieldControl {
9067
9165
  height: auto;
9068
9166
  }
9069
9167
 
9070
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9168
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9071
9169
  /* Fieldset - Mojave Theme
9072
9170
  *
9073
9171
  * No component tokens: a titled group of fields, spaced by the stack gaps, with
@@ -9109,7 +9207,7 @@ textarea.FieldControl {
9109
9207
  color: var(--sl-text-secondary);
9110
9208
  }
9111
9209
 
9112
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9210
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9113
9211
  /* Form - Mojave Theme
9114
9212
  *
9115
9213
  * No component tokens: fields stack with the large block space, and the action
@@ -9129,7 +9227,7 @@ textarea.FieldControl {
9129
9227
  margin-top: var(--sl-space-block-md);
9130
9228
  }
9131
9229
 
9132
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9230
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9133
9231
  /* Input - Mojave Theme
9134
9232
  *
9135
9233
  * No component tokens: the look is the field concept (tokens/semantic/field.json),
@@ -9266,7 +9364,7 @@ textarea.FieldControl {
9266
9364
  padding-inline: var(--sl-control-padding-inline-lg);
9267
9365
  }
9268
9366
 
9269
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9367
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9270
9368
  /* Menu - Mojave Theme
9271
9369
  *
9272
9370
  * No component tokens. The trigger is a Button. The popup is the popup concept, rows are item rows at the
@@ -9415,7 +9513,7 @@ textarea.FieldControl {
9415
9513
  color: var(--sl-text-tertiary);
9416
9514
  }
9417
9515
 
9418
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9516
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9419
9517
  /* Menubar - Mojave Theme
9420
9518
  *
9421
9519
  * No component tokens. A row of quiet triggers, each opening a menu. The popup is the popup concept, rows are item rows at the
@@ -9608,7 +9706,7 @@ textarea.FieldControl {
9608
9706
  color: var(--sl-text-tertiary);
9609
9707
  }
9610
9708
 
9611
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9709
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9612
9710
  /* Meter - Mojave Theme
9613
9711
  *
9614
9712
  * A gauge (tokens/semantic/gauge.json). The fill is the solid color of the scope around it:
@@ -9671,7 +9769,7 @@ textarea.FieldControl {
9671
9769
  height: var(--sl-gauge-height-lg);
9672
9770
  }
9673
9771
 
9674
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
9772
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
9675
9773
  /* Navigation Menu - Mojave Theme
9676
9774
  *
9677
9775
  * The strip is the bar concept, the panel is the popup concept and each link is an item
@@ -10091,7 +10189,7 @@ textarea.FieldControl {
10091
10189
  width: 100%;
10092
10190
  }
10093
10191
 
10094
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10192
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10095
10193
  /* Number Field - Mojave Theme
10096
10194
  *
10097
10195
  * No component tokens. The input is Input (Input.css) and the label, description and
@@ -10182,7 +10280,7 @@ textarea.FieldControl {
10182
10280
  user-select: none;
10183
10281
  }
10184
10282
 
10185
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10283
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10186
10284
  /* OTP Field - Mojave Theme
10187
10285
  *
10188
10286
  * One-time code entry: a row of single-character inputs. Each slot is the same control as Input
@@ -10245,7 +10343,7 @@ textarea.FieldControl {
10245
10343
  letter-spacing: var(--sl-font-body-magnify-letter-spacing);
10246
10344
  }
10247
10345
 
10248
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10346
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10249
10347
  /* Popover - Mojave Theme */
10250
10348
 
10251
10349
  /* ============================================
@@ -10410,7 +10508,7 @@ textarea.FieldControl {
10410
10508
  fill: var(--sl-popup-arrow-stroke);
10411
10509
  }
10412
10510
 
10413
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10511
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10414
10512
  /* Preview Card - Mojave Theme
10415
10513
  *
10416
10514
  * The popup concept (surface, arrow, motion) with a title-magnify title and condense
@@ -10527,7 +10625,7 @@ textarea.FieldControl {
10527
10625
  fill: var(--sl-popup-arrow-stroke);
10528
10626
  }
10529
10627
 
10530
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10628
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10531
10629
  /* Progress - Mojave Theme
10532
10630
  *
10533
10631
  * A gauge (tokens/semantic/gauge.json), the same bar as Meter. The fill is the solid color of
@@ -10604,7 +10702,7 @@ textarea.FieldControl {
10604
10702
  height: var(--sl-gauge-height-lg);
10605
10703
  }
10606
10704
 
10607
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10705
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10608
10706
  /* Radio - Mojave Theme
10609
10707
  * Same box as Checkbox, always round. Sizes follow the label the same way, and the
10610
10708
  * dot is a share of the circle (check.dot-scale).
@@ -10756,7 +10854,7 @@ textarea.FieldControl {
10756
10854
  gap: var(--sl-gap-stack-sm);
10757
10855
  }
10758
10856
 
10759
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10857
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10760
10858
  /* Scroll Area - Mojave Theme
10761
10859
  *
10762
10860
  * The scrollbar is the content scrollbar (content.scrollbar-*): a track that stays clear until
@@ -10838,7 +10936,7 @@ textarea.FieldControl {
10838
10936
  background: transparent;
10839
10937
  }
10840
10938
 
10841
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
10939
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
10842
10940
  /* Select - Mojave Theme
10843
10941
  *
10844
10942
  * The trigger is a field (the field pattern, control sizes, the base text style); the
@@ -11123,7 +11221,7 @@ textarea.FieldControl {
11123
11221
  stroke-width: var(--sl-stroke-default);
11124
11222
  }
11125
11223
 
11126
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
11224
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11127
11225
  /* Separator - Mojave Theme
11128
11226
  *
11129
11227
  * A hairline in the everyday divider color (border.default), one stroke thick, with a step of
@@ -11151,7 +11249,7 @@ textarea.FieldControl {
11151
11249
  margin-inline: var(--sl-space-4);
11152
11250
  }
11153
11251
 
11154
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
11252
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11155
11253
  /* Slider - Mojave Theme
11156
11254
  *
11157
11255
  * A slider is a gauge you can drag: the track, fill and label row are gauge.* (the same bar as
@@ -11317,7 +11415,7 @@ textarea.FieldControl {
11317
11415
  transform: translate(-50%, 50%);
11318
11416
  }
11319
11417
 
11320
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
11418
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11321
11419
  /* Switch - Mojave Theme
11322
11420
  * Switch keeps its track sizes. The thumb, its travel and the ON/OFF text are
11323
11421
  * worked out from them: the thumb fills the track's height inside the padding,
@@ -11483,7 +11581,7 @@ textarea.FieldControl {
11483
11581
  color: var(--sl-text-disabled);
11484
11582
  }
11485
11583
 
11486
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
11584
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11487
11585
  /* Tabs - Mojave Theme
11488
11586
  *
11489
11587
  * No component tokens. The divider, the selected line and color, hover and the disabled
@@ -11619,7 +11717,7 @@ textarea.FieldControl {
11619
11717
  padding: var(--sl-space-6);
11620
11718
  }
11621
11719
 
11622
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
11720
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11623
11721
  /* Toast - Mojave Theme
11624
11722
  *
11625
11723
  * A toast is a notice (tokens/semantic/notice.json) on the popup surface. A toast whose type
@@ -11855,7 +11953,7 @@ textarea.FieldControl {
11855
11953
  flex-shrink: 0;
11856
11954
  }
11857
11955
 
11858
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
11956
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11859
11957
  /* Toggle - Mojave Theme
11860
11958
  * A toggle is a button that stays pressed: the same heights, padding, gap and
11861
11959
  * trigger text style as a button of the same size. Pressed, it takes its emphasis level's
@@ -11967,7 +12065,7 @@ textarea.FieldControl {
11967
12065
  height: var(--sl-icon-size-maximize);
11968
12066
  }
11969
12067
 
11970
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
12068
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11971
12069
  /* Toggle Group - Mojave Theme
11972
12070
  *
11973
12071
  * No component tokens. The strip is the bar concept (tokens/semantic/bar.json); the
@@ -11988,7 +12086,48 @@ textarea.FieldControl {
11988
12086
  border-radius: var(--sl-radius-item);
11989
12087
  }
11990
12088
 
11991
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
12089
+ /* ============================================
12090
+ SEGMENTED (data-variant="segmented")
12091
+ Joined toggles in one outline, the pressed one filled solid: a switch between a few
12092
+ views or modules. Tokens: toggle-group.segmented-* (tokens/component/toggle-group.json).
12093
+ ============================================ */
12094
+
12095
+ .ToggleGroup[data-variant='segmented'] {
12096
+ padding: 0;
12097
+ gap: 0;
12098
+ background: var(--sl-toggle-group-segmented-background);
12099
+ border: var(--sl-stroke-default) solid var(--sl-toggle-group-segmented-border-color);
12100
+ border-radius: var(--sl-radius-chrome);
12101
+ overflow: hidden;
12102
+ }
12103
+
12104
+ .ToggleGroup[data-variant='segmented'] .Toggle {
12105
+ height: calc(var(--sl-control-height-md) - 2 * var(--sl-stroke-default));
12106
+ border: 0;
12107
+ border-radius: 0;
12108
+ background: transparent;
12109
+ color: var(--sl-text-primary);
12110
+ }
12111
+
12112
+ .ToggleGroup[data-variant='segmented'] .Toggle + .Toggle {
12113
+ border-inline-start: var(--sl-stroke-default) solid var(--sl-toggle-group-segmented-border-color);
12114
+ }
12115
+
12116
+ .ToggleGroup[data-variant='segmented'] .Toggle:hover:not([data-disabled]):not(:disabled) {
12117
+ background: var(--sl-fill-subtle);
12118
+ }
12119
+
12120
+ .ToggleGroup[data-variant='segmented'] .Toggle[data-pressed],
12121
+ .ToggleGroup[data-variant='segmented'] .Toggle[data-pressed]:hover:not([data-disabled]):not(:disabled) {
12122
+ background: var(--sl-toggle-group-segmented-pressed-background);
12123
+ color: var(--sl-toggle-group-segmented-pressed-color);
12124
+ }
12125
+
12126
+ .ToggleGroup[data-variant='segmented'] .Toggle:focus-visible {
12127
+ outline-offset: var(--sl-focus-outline-offset-inset);
12128
+ }
12129
+
12130
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
11992
12131
  /* Toolbar - Mojave Theme
11993
12132
  *
11994
12133
  * The strip is the bar concept (tokens/semantic/bar.json). Buttons, toggles, selects
@@ -12050,7 +12189,7 @@ textarea.FieldControl {
12050
12189
  max-width: var(--sl-toolbar-input-max-width);
12051
12190
  }
12052
12191
 
12053
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
12192
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
12054
12193
  /* Tooltip - Mojave Theme
12055
12194
  *
12056
12195
  * The inverse surface (surface.inverse, text.on-inverse-surface) with condense text, so a tooltip
@@ -12111,7 +12250,7 @@ textarea.FieldControl {
12111
12250
  }
12112
12251
 
12113
12252
  /* Custom components: not Base UI parts. Built from existing concepts and tokens. */
12114
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
12253
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
12115
12254
  /* Badge
12116
12255
  *
12117
12256
  * A status or count label. Not a Base UI part, and not interactive: no hover or focus.
@@ -12216,7 +12355,7 @@ textarea.FieldControl {
12216
12355
  height: var(--sl-badge-dot-base);
12217
12356
  }
12218
12357
 
12219
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
12358
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
12220
12359
  /*
12221
12360
  * DatePicker: a field that opens a calendar for one date or a period.
12222
12361
  * Not a Base UI part. The popup is Popover on a wide viewport and Drawer
@@ -12789,7 +12928,7 @@ textarea.FieldControl {
12789
12928
  flex-basis: 100%;
12790
12929
  }
12791
12930
 
12792
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
12931
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
12793
12932
  /* Money field
12794
12933
  *
12795
12934
  * An amount of money, built on Number field. The value is an integer in minor units
@@ -13134,7 +13273,7 @@ textarea.FieldControl {
13134
13273
  letter-spacing: var(--sl-font-body-base-letter-spacing);
13135
13274
  }
13136
13275
 
13137
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
13276
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
13138
13277
  /* ListDetail
13139
13278
  *
13140
13279
  * The detail of one item, next to its list. Not a Base UI part. It is a Splitter
@@ -13261,7 +13400,7 @@ textarea.FieldControl {
13261
13400
  background: transparent;
13262
13401
  }
13263
13402
 
13264
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
13403
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
13265
13404
  /* Splitter
13266
13405
  *
13267
13406
  * Two or more panels and a handle between them. Not a Base UI part. It follows the
@@ -13469,7 +13608,7 @@ textarea.FieldControl {
13469
13608
  background: var(--sl-border-default);
13470
13609
  }
13471
13610
 
13472
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
13611
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
13473
13612
  /* EmptyState
13474
13613
  *
13475
13614
  * The block a page, pane, table, list or popup shows when it has nothing to show.
@@ -13725,7 +13864,7 @@ textarea.FieldControl {
13725
13864
  color: inherit;
13726
13865
  }
13727
13866
 
13728
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
13867
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
13729
13868
  /* Table - Mojave Theme
13730
13869
  *
13731
13870
  * Base UI has no table, so this styles the native <table class="Table"> elements with the
@@ -13959,7 +14098,7 @@ textarea.FieldControl {
13959
14098
  color: inherit;
13960
14099
  }
13961
14100
 
13962
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14101
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
13963
14102
  /* Collection
13964
14103
  *
13965
14104
  * DataTable, DataList, the toolbar and the pagination, in one place so the two views
@@ -13970,7 +14109,7 @@ textarea.FieldControl {
13970
14109
  * the tabs and the search where they are, so selecting rows does not grow the toolbar.
13971
14110
  */
13972
14111
 
13973
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14112
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
13974
14113
  /* Collection toolbar
13975
14114
  *
13976
14115
  * The wrap follows the toolbar's own width, not the window: a table in a narrow pane wraps
@@ -14111,7 +14250,7 @@ textarea.FieldControl {
14111
14250
  letter-spacing: var(--sl-font-body-condense-letter-spacing);
14112
14251
  }
14113
14252
 
14114
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14253
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14115
14254
  /* DataTable additions on top of .Table.
14116
14255
  *
14117
14256
  * Sort buttons fill the header cell and inherit its hover, so old aria-sort markup keeps
@@ -14232,7 +14371,7 @@ textarea.FieldControl {
14232
14371
  color: var(--sl-table-subtle-color);
14233
14372
  }
14234
14373
 
14235
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14374
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14236
14375
  /* DataList
14237
14376
  *
14238
14377
  * The same rows as the table, in one container with the table's borders, hover, selected
@@ -14374,7 +14513,7 @@ textarea.FieldControl {
14374
14513
  transition: opacity var(--sl-duration-fast) var(--sl-easing-default);
14375
14514
  }
14376
14515
 
14377
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14516
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14378
14517
  /* Pagination
14379
14518
  *
14380
14519
  * Not tied to a collection. Anything with a page, a page count and a total can use it.
@@ -14399,7 +14538,7 @@ textarea.FieldControl {
14399
14538
  margin: 0;
14400
14539
  }
14401
14540
 
14402
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14541
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14403
14542
  /* EditableList
14404
14543
  *
14405
14544
  * One table at every width, so a field is not submitted twice. Under the stack width each
@@ -14498,7 +14637,7 @@ textarea.FieldControl {
14498
14637
  }
14499
14638
  }
14500
14639
 
14501
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14640
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14502
14641
  /* Sheet
14503
14642
  *
14504
14643
  * A working-paper surface: the raised surface with a heavier rule across its top
@@ -14589,7 +14728,7 @@ textarea.FieldControl {
14589
14728
  border-top: 0;
14590
14729
  }
14591
14730
 
14592
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14731
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14593
14732
  /* StatFigure
14594
14733
  *
14595
14734
  * One large figure with a caps label above and a caption under it. The label is
@@ -14650,7 +14789,7 @@ textarea.FieldControl {
14650
14789
  color: var(--sl-stat-figure-caption-color);
14651
14790
  }
14652
14791
 
14653
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
14792
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14654
14793
  /* DescriptionList
14655
14794
  *
14656
14795
  * Label and value pairs in a native dl, one DescriptionItem (a div holding a dt and a dd)
@@ -14725,3 +14864,305 @@ textarea.FieldControl {
14725
14864
  max-width: 60%;
14726
14865
  text-align: end;
14727
14866
  }
14867
+
14868
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14869
+ /* AppBar
14870
+ *
14871
+ * The bar across the top of an app window, one row on a line in the rule color. The line is
14872
+ * app-bar.border-width while rule.width is 0, and the thicker of the two once a brand turns the
14873
+ * rule on, so an ink-rule brand gets the working-paper rule under its app bar.
14874
+ * AppBarSpacer pushes what follows it to the end. A vertical Separator inside is a short
14875
+ * divider between groups of icon actions. Tokens: app-bar.* (tokens/component/app-bar.json).
14876
+ */
14877
+
14878
+ .AppBar {
14879
+ box-sizing: border-box;
14880
+ display: flex;
14881
+ align-items: center;
14882
+ gap: var(--sl-app-bar-gap);
14883
+ min-height: var(--sl-app-bar-height);
14884
+ padding-inline: var(--sl-app-bar-padding-inline);
14885
+ padding-block: var(--sl-space-2);
14886
+ background: var(--sl-app-bar-background);
14887
+ border-bottom: max(var(--sl-app-bar-border-width), var(--sl-rule-width)) solid var(--sl-app-bar-border-color);
14888
+ min-width: 0;
14889
+ }
14890
+
14891
+ .AppBarSpacer {
14892
+ flex: 1 1 var(--sl-space-4);
14893
+ min-width: 0;
14894
+ }
14895
+
14896
+ .AppBar .Separator[data-orientation='vertical'] {
14897
+ height: var(--sl-app-bar-divider-height);
14898
+ margin-inline: var(--sl-space-1);
14899
+ background: var(--sl-app-bar-divider-color);
14900
+ }
14901
+
14902
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14903
+ /* PickerButton
14904
+ *
14905
+ * A trigger with a caps label before the current choice: CLIENT Alpha Services. The field
14906
+ * look and states of a Select trigger; the label is caps-condense in picker-button.label-color,
14907
+ * the choice is cut with an ellipsis at picker-button.max-width and the chevron turns while
14908
+ * its popup is open. Tokens: picker-button.* (tokens/component/picker-button.json) and field.*.
14909
+ */
14910
+
14911
+ .PickerButton {
14912
+ box-sizing: border-box;
14913
+ color: var(--sl-field-color);
14914
+ background: var(--sl-field-background);
14915
+ border: var(--sl-field-border-width) solid var(--sl-field-border-color);
14916
+ border-radius: var(--sl-field-radius);
14917
+ transition: var(--sl-field-transition);
14918
+ outline: none;
14919
+ font-family: var(--sl-font-body-base-font-family);
14920
+ font-size: var(--sl-font-body-base-font-size);
14921
+ font-weight: var(--sl-font-body-base-font-weight);
14922
+ line-height: var(--sl-font-body-base-line-height);
14923
+ letter-spacing: var(--sl-font-body-base-letter-spacing);
14924
+ display: inline-flex;
14925
+ align-items: center;
14926
+ gap: var(--sl-gap-control);
14927
+ max-width: var(--sl-picker-button-max-width);
14928
+ min-width: 0;
14929
+ height: var(--sl-control-height-md);
14930
+ margin: 0;
14931
+ padding-block: var(--sl-control-padding-block);
14932
+ padding-inline: var(--sl-control-padding-inline);
14933
+ cursor: pointer;
14934
+ white-space: nowrap;
14935
+ }
14936
+
14937
+ .PickerButton:hover:not(:disabled) {
14938
+ border-color: var(--sl-field-border-color-hover);
14939
+ }
14940
+
14941
+ .PickerButton:focus-visible {
14942
+ border-color: var(--sl-field-border-color-focus);
14943
+ box-shadow: var(--sl-field-shadow-focus);
14944
+ }
14945
+
14946
+ .PickerButton:disabled {
14947
+ background: var(--sl-field-background-disabled);
14948
+ color: var(--sl-field-color-disabled);
14949
+ cursor: not-allowed;
14950
+ }
14951
+
14952
+ .PickerButtonLabel {
14953
+ font-family: var(--sl-font-caps-condense-font-family);
14954
+ font-size: var(--sl-font-caps-condense-font-size);
14955
+ font-weight: var(--sl-font-caps-condense-font-weight);
14956
+ line-height: var(--sl-font-caps-condense-line-height);
14957
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
14958
+ text-transform: var(--sl-font-caps-condense-text-transform);
14959
+ flex: none;
14960
+ color: var(--sl-picker-button-label-color);
14961
+ }
14962
+
14963
+ .PickerButtonValue {
14964
+ flex: 0 1 auto;
14965
+ min-width: 0;
14966
+ overflow: hidden;
14967
+ text-overflow: ellipsis;
14968
+ color: var(--sl-field-color);
14969
+ }
14970
+
14971
+ .PickerButtonValue[data-placeholder] {
14972
+ color: var(--sl-field-placeholder-color);
14973
+ }
14974
+
14975
+ .PickerButtonIcon {
14976
+ flex: none;
14977
+ width: var(--sl-icon-size-base);
14978
+ height: var(--sl-icon-size-base);
14979
+ color: var(--sl-text-tertiary);
14980
+ transition: transform var(--sl-duration-normal) var(--sl-easing-default);
14981
+ }
14982
+
14983
+ .PickerButton[aria-expanded='true'] .PickerButtonIcon,
14984
+ .PickerButton[data-popup-open] .PickerButtonIcon {
14985
+ transform: rotate(180deg);
14986
+ }
14987
+
14988
+ /* @scattered-light/loomiere-base-ui 0.10.0 · styles for @base-ui/react 1.9.0 */
14989
+ /* SideNav
14990
+ *
14991
+ * The column of links down the side of a workspace. Rows are ruled apart with a hairline; the
14992
+ * current row (aria-current="page") sits on the raised surface with a rule under it in the
14993
+ * working-paper ink; counts are figures; group headings are caps labels. SideNavToggle is a
14994
+ * small round button on the column's edge, whose chevron turns with the state. The parent
14995
+ * sets the width and must not clip the toggle (overflow: visible), since it hangs over the edge.
14996
+ * Tokens: side-nav.* (tokens/component/side-nav.json).
14997
+ */
14998
+
14999
+ .SideNav {
15000
+ position: relative;
15001
+ box-sizing: border-box;
15002
+ display: flex;
15003
+ flex-direction: column;
15004
+ height: 100%;
15005
+ min-width: 0;
15006
+ padding-block: var(--sl-space-4);
15007
+ background: var(--sl-side-nav-background);
15008
+ border-inline-end: var(--sl-stroke-default) solid var(--sl-side-nav-border-color);
15009
+ }
15010
+
15011
+ .SideNav[data-collapsed] {
15012
+ min-width: var(--sl-side-nav-collapsed-width);
15013
+ }
15014
+
15015
+ /* Collapsed: only the toggle stays. */
15016
+ .SideNav[data-collapsed] > :not(.SideNavToggle) {
15017
+ display: none;
15018
+ }
15019
+
15020
+ .SideNavItem {
15021
+ font-family: var(--sl-font-body-base-font-family);
15022
+ font-size: var(--sl-font-body-base-font-size);
15023
+ font-weight: var(--sl-font-body-base-font-weight);
15024
+ line-height: var(--sl-font-body-base-line-height);
15025
+ letter-spacing: var(--sl-font-body-base-letter-spacing);
15026
+ box-sizing: border-box;
15027
+ display: flex;
15028
+ align-items: center;
15029
+ justify-content: space-between;
15030
+ gap: var(--sl-side-nav-item-gap);
15031
+ min-height: var(--sl-side-nav-item-height);
15032
+ padding-inline: var(--sl-side-nav-item-padding-inline);
15033
+ color: var(--sl-side-nav-item-color);
15034
+ text-decoration: none;
15035
+ border-bottom: var(--sl-stroke-default) solid var(--sl-side-nav-item-divider-color);
15036
+ cursor: pointer;
15037
+ transition: background var(--sl-duration-fast) var(--sl-easing-default);
15038
+ }
15039
+
15040
+ .SideNavItemText {
15041
+ display: flex;
15042
+ flex-direction: column;
15043
+ min-width: 0;
15044
+ }
15045
+
15046
+ .SideNavItemLabel {
15047
+ overflow: hidden;
15048
+ text-overflow: ellipsis;
15049
+ white-space: nowrap;
15050
+ }
15051
+
15052
+ .SideNavItemHint {
15053
+ font-family: var(--sl-font-body-minimize-font-family);
15054
+ font-size: var(--sl-font-body-minimize-font-size);
15055
+ font-weight: var(--sl-font-body-minimize-font-weight);
15056
+ line-height: var(--sl-font-body-minimize-line-height);
15057
+ letter-spacing: var(--sl-font-body-minimize-letter-spacing);
15058
+ color: var(--sl-side-nav-item-color-disabled);
15059
+ }
15060
+
15061
+ .SideNavItem:hover:not([data-current]):not([data-disabled]) {
15062
+ background: var(--sl-side-nav-item-background-hover);
15063
+ }
15064
+
15065
+ .SideNavItem:focus-visible {
15066
+ outline: var(--sl-focus-outline);
15067
+ outline-offset: var(--sl-focus-outline-offset-inset);
15068
+ }
15069
+
15070
+ .SideNavItem[data-current] {
15071
+ background: var(--sl-side-nav-item-background-current);
15072
+ font-weight: var(--sl-font-weight-semibold);
15073
+ box-shadow: inset 0 calc(-1 * var(--sl-side-nav-indicator-width)) 0 var(--sl-side-nav-indicator-color);
15074
+ }
15075
+
15076
+ .SideNavItem[data-disabled] {
15077
+ color: var(--sl-side-nav-item-color-disabled);
15078
+ cursor: default;
15079
+ }
15080
+
15081
+ .SideNavItemCount {
15082
+ flex: none;
15083
+ font-family: var(--sl-font-figures-condense-font-family);
15084
+ font-variant-numeric: var(--sl-font-figures-condense-font-variant-numeric);
15085
+ font-size: var(--sl-font-figures-condense-font-size);
15086
+ font-weight: var(--sl-font-weight-semibold);
15087
+ line-height: var(--sl-font-figures-condense-line-height);
15088
+ color: var(--sl-side-nav-count-color);
15089
+ }
15090
+
15091
+ .SideNavItemCount[data-tone='quiet'] {
15092
+ color: var(--sl-side-nav-count-color-quiet);
15093
+ }
15094
+
15095
+ .SideNavGroupLabel {
15096
+ font-family: var(--sl-font-caps-condense-font-family);
15097
+ font-size: var(--sl-font-caps-condense-font-size);
15098
+ font-weight: var(--sl-font-caps-condense-font-weight);
15099
+ line-height: var(--sl-font-caps-condense-line-height);
15100
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
15101
+ text-transform: var(--sl-font-caps-condense-text-transform);
15102
+ padding-top: var(--sl-side-nav-group-padding-top);
15103
+ padding-bottom: var(--sl-space-1-5);
15104
+ padding-inline: var(--sl-side-nav-item-padding-inline);
15105
+ color: var(--sl-side-nav-group-label-color);
15106
+ }
15107
+
15108
+ /* ============================================
15109
+ COLLAPSE BUTTON
15110
+ ============================================ */
15111
+
15112
+ .SideNavToggle {
15113
+ all: unset;
15114
+ box-sizing: border-box;
15115
+ position: absolute;
15116
+ z-index: 1;
15117
+ top: var(--sl-side-nav-toggle-offset);
15118
+ inset-inline-end: calc(-0.5 * var(--sl-side-nav-toggle-size));
15119
+ display: inline-flex;
15120
+ align-items: center;
15121
+ justify-content: center;
15122
+ width: var(--sl-side-nav-toggle-size);
15123
+ height: var(--sl-side-nav-toggle-size);
15124
+ border-radius: var(--sl-radius-pill);
15125
+ background: var(--sl-side-nav-toggle-background);
15126
+ border: var(--sl-stroke-default) solid var(--sl-side-nav-toggle-border-color);
15127
+ color: var(--sl-text-secondary);
15128
+ cursor: pointer;
15129
+ transition: color var(--sl-duration-fast) var(--sl-easing-default),
15130
+ border-color var(--sl-duration-fast) var(--sl-easing-default);
15131
+ }
15132
+
15133
+ .SideNavToggle:hover {
15134
+ color: var(--sl-text-primary);
15135
+ border-color: var(--sl-text-primary);
15136
+ }
15137
+
15138
+ .SideNavToggle:focus-visible {
15139
+ outline: var(--sl-focus-outline);
15140
+ outline-offset: var(--sl-focus-outline-offset);
15141
+ }
15142
+
15143
+ .SideNavToggleIcon {
15144
+ width: var(--sl-icon-size-minimize);
15145
+ height: var(--sl-icon-size-minimize);
15146
+ transition: transform var(--sl-duration-normal) var(--sl-easing-default);
15147
+ }
15148
+
15149
+ /* The chevron points the way the column will go: left to collapse, right to expand. */
15150
+ .SideNavToggle[aria-expanded='false'] .SideNavToggleIcon {
15151
+ transform: rotate(180deg);
15152
+ }
15153
+
15154
+ [dir='rtl'] .SideNavToggleIcon {
15155
+ transform: scaleX(-1);
15156
+ }
15157
+
15158
+ [dir='rtl'] .SideNavToggle[aria-expanded='false'] .SideNavToggleIcon {
15159
+ transform: scaleX(-1) rotate(180deg);
15160
+ }
15161
+
15162
+ @media (prefers-reduced-motion: reduce) {
15163
+ .SideNavToggleIcon,
15164
+ .SideNavItem,
15165
+ .SideNavToggle {
15166
+ transition: none;
15167
+ }
15168
+ }