diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f6803f8b..ace7b52b 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -27,6 +27,21 @@ jobs: with: languages: ${{ matrix.language }} queries: security-extended + # Compiled/minified bundles committed for distribution, not hand-written + # source. Scanning them is both unhelpful (GitHub can't even render a + # code preview for minified JS) and unstable: their line numbers shift + # on every rebuild, so CodeQL's alert fingerprinting can't match an + # alert here across commits — every push reports the same handful of + # flagged patterns as "new", even after the underlying source (already + # scanned separately, since these directories are 100% build output) is + # fixed. The real source lives in admin-app/src/ and + # integrations/bricks/editor-app/src/, both still fully scanned. + # `paths-ignore` is not a direct action input on this codeql-action + # version — it must go inside the inline `config` YAML. + config: | + paths-ignore: + - SLASHED-for-WP/assets/admin-app/** + - SLASHED-for-WP/integrations/bricks/assets/editor-app/** - uses: github/codeql-action/analyze@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fdf83ca9..39048a1d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -68,9 +68,15 @@ jobs: git config user.email "github-actions[bot]@users.noreply.github.com" git fetch origin "$DEFAULT_BRANCH" - # Preserve the files updated by update-framework before we switch - # branches -- git checkout resets tracked files to the branch state. - mkdir -p /tmp/fw-dist /tmp/fw-data /tmp/fw-bricks-data + # Preserve the files updated by update-framework and build:admin-app + # before we switch branches -- git checkout resets tracked files to + # the branch state. This must include everything npm run sync (run + # as build:admin-app's prebuild hook) vendors from the configurator + # -- admin-app/src/, its manifest, and framework-css/ -- otherwise + # the configurator changes synced for this release are built into + # the zip but never committed back to the default branch. + mkdir -p /tmp/fw-dist /tmp/fw-data /tmp/fw-bricks-data \ + /tmp/fw-admin-app-src /tmp/fw-admin-app-framework-css /tmp/fw-assets-admin-app cp -a SLASHED-for-WP/dist/. /tmp/fw-dist/ cp -a SLASHED-for-WP/data/. /tmp/fw-data/ cp -a SLASHED-for-WP/integrations/bricks/data/. /tmp/fw-bricks-data/ @@ -80,6 +86,10 @@ jobs: cp scripts/registry-sources.js /tmp/fw-registry-sources.js cp package.json /tmp/fw-package.json cp package-lock.json /tmp/fw-package-lock.json + cp -a SLASHED-for-WP/admin-app/src/. /tmp/fw-admin-app-src/ + cp SLASHED-for-WP/admin-app/.vendored-manifest.json /tmp/fw-admin-app-manifest.json + cp -a SLASHED-for-WP/admin-app/framework-css/. /tmp/fw-admin-app-framework-css/ + cp -a SLASHED-for-WP/assets/admin-app/. /tmp/fw-assets-admin-app/ git checkout "$DEFAULT_BRANCH" @@ -93,6 +103,14 @@ jobs: cp /tmp/fw-registry-sources.js scripts/registry-sources.js cp /tmp/fw-package.json package.json cp /tmp/fw-package-lock.json package-lock.json + rm -rf SLASHED-for-WP/admin-app/src + mkdir -p SLASHED-for-WP/admin-app/src + cp -a /tmp/fw-admin-app-src/. SLASHED-for-WP/admin-app/src/ + cp /tmp/fw-admin-app-manifest.json SLASHED-for-WP/admin-app/.vendored-manifest.json + rm -rf SLASHED-for-WP/admin-app/framework-css SLASHED-for-WP/assets/admin-app + mkdir -p SLASHED-for-WP/admin-app/framework-css SLASHED-for-WP/assets/admin-app + cp -a /tmp/fw-admin-app-framework-css/. SLASHED-for-WP/admin-app/framework-css/ + cp -a /tmp/fw-assets-admin-app/. SLASHED-for-WP/assets/admin-app/ # Re-run changelog-release on the default branch so it picks up the # committed tag (the release workflow checks out the tag ref above). @@ -107,7 +125,11 @@ jobs: SLASHED-for-WP/integrations/gutenberg/slashed-gutenberg.php \ scripts/registry-sources.js \ package.json \ - package-lock.json + package-lock.json \ + SLASHED-for-WP/admin-app/src/ \ + SLASHED-for-WP/admin-app/.vendored-manifest.json \ + SLASHED-for-WP/admin-app/framework-css/ \ + SLASHED-for-WP/assets/admin-app/ git diff --staged --quiet && echo "nothing to commit" && exit 0 git commit -m "chore: sync framework + update docs for $TAG" git push origin "$DEFAULT_BRANCH" diff --git a/CHANGELOG.md b/CHANGELOG.md index 287233ce..78ba9351 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,12 @@ framework version is tracked separately via the `SLASHED_*_CSS_REF` constants. ## [Unreleased] +### Fixed + +- Sync vendored configurator (`admin-app/src/`) with framework PRs #460/#461 — saved themes, motion panel overhaul, base color palette and live semantic preview — which had silently failed to land. +- `release.yml` now commits the configurator sync (`admin-app/src/`, `.vendored-manifest.json`, `framework-css/`, `assets/admin-app/`) back to the default branch instead of discarding it after each release build. +- Remove `.syncignore` entries for files no longer divergent from upstream `SLASHED#443`. + ## [0.4.16] - 2026-06-30 ## [0.4.16] - 2026-06-30 ## [0.4.16] - 2026-06-30 diff --git a/SLASHED-for-WP/admin-app/.syncignore b/SLASHED-for-WP/admin-app/.syncignore index 9649f5d1..3fef6930 100644 --- a/SLASHED-for-WP/admin-app/.syncignore +++ b/SLASHED-for-WP/admin-app/.syncignore @@ -3,25 +3,11 @@ # Plugin-specific build wiring lives OUTSIDE src/ (vite.config.js, package.json, # svelte.config.js, tsconfig.json) and is never touched by the sync. -# The following files are part of codeslash-dev/slashed#443 (the companion -# upstream PR that adds @framework-css aliases + the WP persistence seam). -# Those changes live on the feature branch and have not yet merged to main. -# -# Modified files: the CI prebuild sync fetches from main and would overwrite -# these with pre-alias / pre-persistence versions, breaking the build and runtime. -# New files: the sync now wipes src/ before fetching, so any file that doesn't -# exist on main would be deleted unless listed here. -# Remove all five lines once slashed#443 merges to main. -src/main.ts -src/App.svelte -src/components/shell/PreviewPanel.svelte -src/vite-env.d.ts -src/lib/persistence.ts +# codeslash-dev/slashed#443 (the companion upstream PR that added @framework-css +# aliases + the WP persistence seam) merged to main on 2026-06-28. main.ts, +# App.svelte, PreviewPanel.svelte, vite-env.d.ts, lib/persistence.ts, and +# StudioHeader.svelte are no longer plugin-divergent — they sync normally now. # Plugin-specific: frontend overlay (not in upstream configurator). src/plugin-main.ts src/AppOverlay.svelte - -# StudioHeader has WP-specific Save button additions (hasPendingChanges/saveState/onSave) -# that live on the feature branch in upstream; keep until the companion PR merges to main. -src/components/shell/StudioHeader.svelte diff --git a/SLASHED-for-WP/admin-app/.vendored-manifest.json b/SLASHED-for-WP/admin-app/.vendored-manifest.json index d60ac41b..7bc294c7 100644 --- a/SLASHED-for-WP/admin-app/.vendored-manifest.json +++ b/SLASHED-for-WP/admin-app/.vendored-manifest.json @@ -3,14 +3,18 @@ "description": "Files vendored from the SLASHED framework configurator. DO NOT edit directly — make changes in codeslash-dev/SLASHED → configurator/src/ and re-run npm run sync.", "frameworkRepo": "https://github.com/codeslash-dev/SLASHED", "configuratorSrc": "configurator/src/", - "source": "local:/home/user/SLASHED/configurator/src", - "syncedAt": "2026-06-30T09:21:41.107Z" + "source": "local", + "syncedAt": "2026-06-30T21:51:15.209Z" }, "vendoredFiles": [ { "file": "src/app.css", "source": "local:configurator/src/app.css" }, + { + "file": "src/App.svelte", + "source": "local:configurator/src/App.svelte" + }, { "file": "src/components/CommandPalette.svelte", "source": "local:configurator/src/components/CommandPalette.svelte" @@ -43,10 +47,6 @@ "file": "src/components/inputs/SliderRow.svelte", "source": "local:configurator/src/components/inputs/SliderRow.svelte" }, - { - "file": "src/components/inputs/StylePresetCards.svelte", - "source": "local:configurator/src/components/inputs/StylePresetCards.svelte" - }, { "file": "src/components/inputs/TokenRow.svelte", "source": "local:configurator/src/components/inputs/TokenRow.svelte" @@ -119,6 +119,10 @@ "file": "src/components/panels/WcagPanel.svelte", "source": "local:configurator/src/components/panels/WcagPanel.svelte" }, + { + "file": "src/components/shell/PreviewPanel.svelte", + "source": "local:configurator/src/components/shell/PreviewPanel.svelte" + }, { "file": "src/components/shell/SidebarNav.svelte", "source": "local:configurator/src/components/shell/SidebarNav.svelte" @@ -127,6 +131,10 @@ "file": "src/components/shell/StatusBar.svelte", "source": "local:configurator/src/components/shell/StatusBar.svelte" }, + { + "file": "src/components/shell/StudioHeader.svelte", + "source": "local:configurator/src/components/shell/StudioHeader.svelte" + }, { "file": "src/data/api-index.generated.json", "source": "local:configurator/src/data/api-index.generated.json" @@ -167,6 +175,10 @@ "file": "src/lib/lumlockerPreview.svelte.ts", "source": "local:configurator/src/lib/lumlockerPreview.svelte.ts" }, + { + "file": "src/lib/persistence.ts", + "source": "local:configurator/src/lib/persistence.ts" + }, { "file": "src/lib/powerKnobs.ts", "source": "local:configurator/src/lib/powerKnobs.ts" @@ -176,16 +188,20 @@ "source": "local:configurator/src/lib/previewResolver.svelte.ts" }, { - "file": "src/lib/stylePresets.ts", - "source": "local:configurator/src/lib/stylePresets.ts" + "file": "src/lib/savedThemes.ts", + "source": "local:configurator/src/lib/savedThemes.ts" }, { - "file": "src/lib/themes.ts", - "source": "local:configurator/src/lib/themes.ts" + "file": "src/main.ts", + "source": "local:configurator/src/main.ts" }, { "file": "src/types.ts", "source": "local:configurator/src/types.ts" + }, + { + "file": "src/vite-env.d.ts", + "source": "local:configurator/src/vite-env.d.ts" } ] } diff --git a/SLASHED-for-WP/admin-app/framework-css/badges/slashed.full.css b/SLASHED-for-WP/admin-app/framework-css/badges/slashed.full.css index 166168d1..b8ad4e7e 100644 --- a/SLASHED-for-WP/admin-app/framework-css/badges/slashed.full.css +++ b/SLASHED-for-WP/admin-app/framework-css/badges/slashed.full.css @@ -1,4 +1,4 @@ -/* SLASHED v0.6.25 — slashed.full.css */ +/* SLASHED v0.6.29 — slashed.full.css */ /* ─── core/layers.css ─── */ /* SLASHED — core/layers.css @@ -859,56 +859,43 @@ /* ---------------------------------------------------------- - base — V-shaped ramp (inverted tint direction) + base — fixed-lightness ramp (mode-independent, monotonic) ──────────────────────────────────────────────────────── - Unlike every other family, base is a near-white (light mode) - or near-black (dark mode) surface token, not a mid-lightness - brand colour. There is nowhere "lighter" to go from near-white, - so the tint direction is inverted: steps 50-400 mix --sf-color-text - INTO base (progressively darker in light mode, progressively - lighter in dark mode). Steps 600-950 mix base INTO text in both - modes (the same direction as other families' shades). - - Approximate OKLCH L values — default palette, light mode: - base-50 ≈ 0.946 barely off-surface (dividers, zebra rows) - base-100 ≈ 0.931 subtle surface variant - base-200 ≈ 0.900 light gray (well / inset areas) - base-300 ≈ 0.840 medium-light gray - base-400 ≈ 0.748 medium gray (secondary UI elements) - base-500 ≈ 0.960 base itself (source token) - base-600 ≈ 0.850 medium-light (toward text, from 500) - base-700 ≈ 0.762 - base-800 ≈ 0.630 - base-900 ≈ 0.337 - base-950 ≈ 0.170 near-black - - Dark mode reverses the visual: base-50 becomes near-white-ish, - base-950 becomes near-black-ish, base-500 is the dark surface. - - SEMANTIC ALIAS MAPPING (consistent position in ramp, not absolute L): - superlight = base-50 (closest to surface — barely distinguishable) - xlight = base-200 (light gray) - lighter = base-400 (medium gray — "lighter contrast" toward text) - darker = base-600 (one step past base toward text from shade side) - xdark = base-800 - superdark = base-950 (near ink color) - - When you need surface-level differentiation, prefer - --sf-color-inset / --sf-color-raised / --sf-color-bg over the - numbered scale. For overlays, prefer the alpha variants (-a10…-a80) - which are mode-safe by transparency and compose cleanly on any bg. + base is a surface-elevation family, not a mid-lightness brand + colour. The ramp uses oklch() relative syntax with fixed L steps + spanning 0.97 → 0.06, preserving the base source's hue and chroma. + 50 is always near-white; 950 is always near-black regardless of + light/dark mode or the source colour's position. + + OKLCH L values (fixed, mode-independent): + base-50 = 0.97 near-white + base-100 = 0.94 very light gray + base-200 = 0.88 light gray + base-300 = 0.78 medium-light gray + base-400 = 0.65 medium gray + base-500 = 0.50 mid gray + base-600 = 0.37 medium-dark gray + base-700 = 0.27 dark gray + base-800 = 0.17 very dark gray + base-900 = 0.11 near-black + base-950 = 0.06 near-black + + For mode-adaptive surface differentiation use the surface tokens + (--sf-color-inset / --sf-color-raised / --sf-color-bg) which derive + from --sf-color-base via relative oklch and adapt to light/dark mode. + For overlays use alpha variants (-a10…-a80). ---------------------------------------------------------- */ - --sf-color-base-50: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-50), var(--sf-color-base)); - --sf-color-base-100: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-100), var(--sf-color-base)); - --sf-color-base-200: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-200), var(--sf-color-base)); - --sf-color-base-300: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-300), var(--sf-color-base)); - --sf-color-base-400: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-400), var(--sf-color-base)); - --sf-color-base-500: var(--sf-color-base); - --sf-color-base-600: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-600), var(--sf-color-text)); - --sf-color-base-700: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-700), var(--sf-color-text)); - --sf-color-base-800: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-800), var(--sf-color-text)); - --sf-color-base-900: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-900), var(--sf-color-text)); - --sf-color-base-950: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-950), var(--sf-color-text)); + --sf-color-base-50: oklch(from var(--sf-color-base) 0.97 c h); + --sf-color-base-100: oklch(from var(--sf-color-base) 0.94 c h); + --sf-color-base-200: oklch(from var(--sf-color-base) 0.88 c h); + --sf-color-base-300: oklch(from var(--sf-color-base) 0.78 c h); + --sf-color-base-400: oklch(from var(--sf-color-base) 0.65 c h); + --sf-color-base-500: oklch(from var(--sf-color-base) 0.50 c h); + --sf-color-base-600: oklch(from var(--sf-color-base) 0.37 c h); + --sf-color-base-700: oklch(from var(--sf-color-base) 0.27 c h); + --sf-color-base-800: oklch(from var(--sf-color-base) 0.17 c h); + --sf-color-base-900: oklch(from var(--sf-color-base) 0.11 c h); + --sf-color-base-950: oklch(from var(--sf-color-base) 0.06 c h); --sf-color-base-a5: oklch(from var(--sf-color-base) l c h / 0.05); --sf-color-base-a10: oklch(from var(--sf-color-base) l c h / 0.10); @@ -916,14 +903,13 @@ --sf-color-base-a50: oklch(from var(--sf-color-base) l c h / 0.50); --sf-color-base-a80: oklch(from var(--sf-color-base) l c h / 0.80); - --sf-color-base-superlight: var(--sf-color-base-50); - --sf-color-base-xlight: var(--sf-color-base-200); - --sf-color-base-lighter: var(--sf-color-base-400); - --sf-color-base-darker: var(--sf-color-base-600); - --sf-color-base-xdark: var(--sf-color-base-800); - --sf-color-base-superdark: var(--sf-color-base-950); - --sf-color-base--hover: var(--sf-color-base-darker); - --sf-color-base--active: var(--sf-color-base-xdark); + /* No relative aliases (lighter/darker/xlight/…) on base: it is an + absolute scale, so a step's name would lie depending on where the + source sits (e.g. "lighter" would be darker than a near-white base + in light mode). For relative, mode-adaptive surface elevation use + --sf-color-bg / --sf-color-inset / --sf-color-raised instead. */ + --sf-color-base--hover: oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.04 + var(--sf-is-dark) * 0.08), 0.99) c h); + --sf-color-base--active: oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.08 + var(--sf-is-dark) * 0.16), 0.99) c h); --sf-color-base-subtle: var(--sf-color-base-a10); --sf-color-base-muted: var(--sf-color-base-a30); --sf-color-base-ghost: var(--sf-color-base-a5); diff --git a/SLASHED-for-WP/admin-app/framework-css/core/tokens.css b/SLASHED-for-WP/admin-app/framework-css/core/tokens.css index 3c87633f..4bc09994 100644 --- a/SLASHED-for-WP/admin-app/framework-css/core/tokens.css +++ b/SLASHED-for-WP/admin-app/framework-css/core/tokens.css @@ -834,56 +834,43 @@ /* ---------------------------------------------------------- - base — V-shaped ramp (inverted tint direction) + base — fixed-lightness ramp (mode-independent, monotonic) ──────────────────────────────────────────────────────── - Unlike every other family, base is a near-white (light mode) - or near-black (dark mode) surface token, not a mid-lightness - brand colour. There is nowhere "lighter" to go from near-white, - so the tint direction is inverted: steps 50-400 mix --sf-color-text - INTO base (progressively darker in light mode, progressively - lighter in dark mode). Steps 600-950 mix base INTO text in both - modes (the same direction as other families' shades). - - Approximate OKLCH L values — default palette, light mode: - base-50 ≈ 0.946 barely off-surface (dividers, zebra rows) - base-100 ≈ 0.931 subtle surface variant - base-200 ≈ 0.900 light gray (well / inset areas) - base-300 ≈ 0.840 medium-light gray - base-400 ≈ 0.748 medium gray (secondary UI elements) - base-500 ≈ 0.960 base itself (source token) - base-600 ≈ 0.850 medium-light (toward text, from 500) - base-700 ≈ 0.762 - base-800 ≈ 0.630 - base-900 ≈ 0.337 - base-950 ≈ 0.170 near-black - - Dark mode reverses the visual: base-50 becomes near-white-ish, - base-950 becomes near-black-ish, base-500 is the dark surface. - - SEMANTIC ALIAS MAPPING (consistent position in ramp, not absolute L): - superlight = base-50 (closest to surface — barely distinguishable) - xlight = base-200 (light gray) - lighter = base-400 (medium gray — "lighter contrast" toward text) - darker = base-600 (one step past base toward text from shade side) - xdark = base-800 - superdark = base-950 (near ink color) - - When you need surface-level differentiation, prefer - --sf-color-inset / --sf-color-raised / --sf-color-bg over the - numbered scale. For overlays, prefer the alpha variants (-a10…-a80) - which are mode-safe by transparency and compose cleanly on any bg. + base is a surface-elevation family, not a mid-lightness brand + colour. The ramp uses oklch() relative syntax with fixed L steps + spanning 0.97 → 0.06, preserving the base source's hue and chroma. + 50 is always near-white; 950 is always near-black regardless of + light/dark mode or the source colour's position. + + OKLCH L values (fixed, mode-independent): + base-50 = 0.97 near-white + base-100 = 0.94 very light gray + base-200 = 0.88 light gray + base-300 = 0.78 medium-light gray + base-400 = 0.65 medium gray + base-500 = 0.50 mid gray + base-600 = 0.37 medium-dark gray + base-700 = 0.27 dark gray + base-800 = 0.17 very dark gray + base-900 = 0.11 near-black + base-950 = 0.06 near-black + + For mode-adaptive surface differentiation use the surface tokens + (--sf-color-inset / --sf-color-raised / --sf-color-bg) which derive + from --sf-color-base via relative oklch and adapt to light/dark mode. + For overlays use alpha variants (-a10…-a80). ---------------------------------------------------------- */ - --sf-color-base-50: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-50), var(--sf-color-base)); - --sf-color-base-100: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-100), var(--sf-color-base)); - --sf-color-base-200: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-200), var(--sf-color-base)); - --sf-color-base-300: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-300), var(--sf-color-base)); - --sf-color-base-400: color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-400), var(--sf-color-base)); - --sf-color-base-500: var(--sf-color-base); - --sf-color-base-600: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-600), var(--sf-color-text)); - --sf-color-base-700: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-700), var(--sf-color-text)); - --sf-color-base-800: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-800), var(--sf-color-text)); - --sf-color-base-900: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-900), var(--sf-color-text)); - --sf-color-base-950: color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-950), var(--sf-color-text)); + --sf-color-base-50: oklch(from var(--sf-color-base) 0.97 c h); + --sf-color-base-100: oklch(from var(--sf-color-base) 0.94 c h); + --sf-color-base-200: oklch(from var(--sf-color-base) 0.88 c h); + --sf-color-base-300: oklch(from var(--sf-color-base) 0.78 c h); + --sf-color-base-400: oklch(from var(--sf-color-base) 0.65 c h); + --sf-color-base-500: oklch(from var(--sf-color-base) 0.50 c h); + --sf-color-base-600: oklch(from var(--sf-color-base) 0.37 c h); + --sf-color-base-700: oklch(from var(--sf-color-base) 0.27 c h); + --sf-color-base-800: oklch(from var(--sf-color-base) 0.17 c h); + --sf-color-base-900: oklch(from var(--sf-color-base) 0.11 c h); + --sf-color-base-950: oklch(from var(--sf-color-base) 0.06 c h); --sf-color-base-a5: oklch(from var(--sf-color-base) l c h / 0.05); --sf-color-base-a10: oklch(from var(--sf-color-base) l c h / 0.10); @@ -891,14 +878,13 @@ --sf-color-base-a50: oklch(from var(--sf-color-base) l c h / 0.50); --sf-color-base-a80: oklch(from var(--sf-color-base) l c h / 0.80); - --sf-color-base-superlight: var(--sf-color-base-50); - --sf-color-base-xlight: var(--sf-color-base-200); - --sf-color-base-lighter: var(--sf-color-base-400); - --sf-color-base-darker: var(--sf-color-base-600); - --sf-color-base-xdark: var(--sf-color-base-800); - --sf-color-base-superdark: var(--sf-color-base-950); - --sf-color-base--hover: var(--sf-color-base-darker); - --sf-color-base--active: var(--sf-color-base-xdark); + /* No relative aliases (lighter/darker/xlight/…) on base: it is an + absolute scale, so a step's name would lie depending on where the + source sits (e.g. "lighter" would be darker than a near-white base + in light mode). For relative, mode-adaptive surface elevation use + --sf-color-bg / --sf-color-inset / --sf-color-raised instead. */ + --sf-color-base--hover: oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.04 + var(--sf-is-dark) * 0.08), 0.99) c h); + --sf-color-base--active: oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.08 + var(--sf-is-dark) * 0.16), 0.99) c h); --sf-color-base-subtle: var(--sf-color-base-a10); --sf-color-base-muted: var(--sf-color-base-a30); --sf-color-base-ghost: var(--sf-color-base-a5); diff --git a/SLASHED-for-WP/admin-app/src/App.svelte b/SLASHED-for-WP/admin-app/src/App.svelte index 9fed0039..e855442f 100644 --- a/SLASHED-for-WP/admin-app/src/App.svelte +++ b/SLASHED-for-WP/admin-app/src/App.svelte @@ -1,6 +1,7 @@ - -
-
{label}
-
- {#each presets as p (p.id)} - - {/each} -
-
diff --git a/SLASHED-for-WP/admin-app/src/components/inputs/TokenRow.svelte b/SLASHED-for-WP/admin-app/src/components/inputs/TokenRow.svelte index fb90767d..9807e872 100644 --- a/SLASHED-for-WP/admin-app/src/components/inputs/TokenRow.svelte +++ b/SLASHED-for-WP/admin-app/src/components/inputs/TokenRow.svelte @@ -39,7 +39,7 @@ {#if type === "color"}
{:else}
diff --git a/SLASHED-for-WP/admin-app/src/components/panels/BordersPanel.svelte b/SLASHED-for-WP/admin-app/src/components/panels/BordersPanel.svelte index 292efcb9..67be49da 100644 --- a/SLASHED-for-WP/admin-app/src/components/panels/BordersPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/panels/BordersPanel.svelte @@ -1,16 +1,13 @@
@@ -34,7 +76,7 @@ {#if overridesCount > 0} You have {overridesCount} active override{overridesCount !== 1 ? "s" : ""}. {:else} - Start by picking a theme preset below, or dive into any domain. + Pick any domain below to get started. {/if}

{#if overridesCount > 0} @@ -47,57 +89,99 @@ {/if}
- +
-
Theme presets
-
- {#each THEME_PRESETS.slice(0, 6) as theme (theme.id)} +
Token domains
+
+ {#each TOKEN_DOMAINS as d (d.id)} + {@const count = domainCount(d.id)} + {@const DomainIcon = d.icon} {/each}
-
- +
-
Token domains
+
Tools
- {#each DOMAIN_CARDS as d (d.id)} - {@const domainOverrides = Object.keys(overrides).filter((k) => k.includes(d.id.slice(0, 5))).length} - {@const DomainIcon = d.icon} + {#each TOOLS as t (t.id)} + {@const ToolIcon = t.icon} {/each}
+ + +
+
+
Saved themes
+ +
+ +
+ { if (e.key === "Enter") handleQuickSave(); }} + class="flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg px-2 py-1.5 text-[11px] text-slate-200 placeholder:text-slate-600 focus:outline-none focus:border-indigo-500" + /> + +
+ + {#if savedThemes.length === 0} +

No saved themes yet. Configure tokens, then save.

+ {:else} +
+ {#each savedThemes.slice(0, 6) as theme (theme.id)} + + {/each} +
+ {/if} +
diff --git a/SLASHED-for-WP/admin-app/src/components/panels/MacrosPanel.svelte b/SLASHED-for-WP/admin-app/src/components/panels/MacrosPanel.svelte index c656af51..62203918 100644 --- a/SLASHED-for-WP/admin-app/src/components/panels/MacrosPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/panels/MacrosPanel.svelte @@ -35,13 +35,13 @@ // Prose spacing knobs. Defaults reference space tokens — the numbers below are // the approximate resolved rem values, used only as the slider's idle position. const PROSE_SPACE = [ - { label: "Heading gap", token: "--sf-prose-heading-gap", def: 0.75, max: 3 }, - { label: "List gap", token: "--sf-prose-list-gap", def: 0.5, max: 2 }, - { label: "Block margin", token: "--sf-prose-block-margin", def: 1, max: 4 }, - { label: "Media margin", token: "--sf-prose-media-margin", def: 1, max: 4 }, - { label: "Figure margin", token: "--sf-prose-figure-margin", def: 1.5, max: 4 }, - { label: "Blockquote padding",token: "--sf-prose-blockquote-padding",def: 1, max: 3 }, - { label: "HR margin", token: "--sf-prose-hr-margin", def: 1.5, max: 4 }, + { label: "Heading gap", token: "--sf-prose-heading-gap", def: 0.75, max: 3, raw: "var(--sf-space-s)" }, + { label: "List gap", token: "--sf-prose-list-gap", def: 0.5, max: 2, raw: "var(--sf-space-xs)" }, + { label: "Block margin", token: "--sf-prose-block-margin", def: 1, max: 4, raw: "var(--sf-space-m)" }, + { label: "Media margin", token: "--sf-prose-media-margin", def: 1, max: 4, raw: "var(--sf-space-m)" }, + { label: "Figure margin", token: "--sf-prose-figure-margin", def: 1.5, max: 4, raw: "var(--sf-space-l)" }, + { label: "Blockquote padding",token: "--sf-prose-blockquote-padding",def: 1, max: 3, raw: "var(--sf-space-m)" }, + { label: "HR margin", token: "--sf-prose-hr-margin", def: 1.5, max: 4, raw: "var(--sf-space-l)" }, ]; let showFlow = $state(false); @@ -94,6 +94,9 @@ overridden={"--sf-flow-space" in overrides} onChange={(v) => onSet("--sf-flow-space", `${v}rem`)} onReset={() => onReset("--sf-flow-space")} + rawDefault="var(--sf-content-gap)" + currentRaw={overrides["--sf-flow-space"]} + onRawSet={(v) => onSet("--sf-flow-space", v)} />
{#each [0, 1, 2] as i (i)} @@ -191,6 +194,9 @@ overridden={"--sf-scroll-shadow-size" in overrides} onChange={(v) => onSet("--sf-scroll-shadow-size", `${v}rem`)} onReset={() => onReset("--sf-scroll-shadow-size")} + rawDefault="2rem" + currentRaw={overrides["--sf-scroll-shadow-size"]} + onRawSet={(v) => onSet("--sf-scroll-shadow-size", v)} />
onSet(t.token, `${v}rem`)} onReset={() => onReset(t.token)} + rawDefault={t.raw} + currentRaw={overrides[t.token]} + onRawSet={(v) => onSet(t.token, v)} /> {/each} onSet("--sf-prose-media-radius", `${v}px`)} onReset={() => onReset("--sf-prose-media-radius")} + rawDefault="var(--sf-radius-m)" + currentRaw={overrides["--sf-prose-media-radius"]} + onRawSet={(v) => onSet("--sf-prose-media-radius", v)} />
Marker color
diff --git a/SLASHED-for-WP/admin-app/src/components/panels/MotionPanel.svelte b/SLASHED-for-WP/admin-app/src/components/panels/MotionPanel.svelte index ccdffd5a..1157fea3 100644 --- a/SLASHED-for-WP/admin-app/src/components/panels/MotionPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/panels/MotionPanel.svelte @@ -19,54 +19,59 @@ ]; const EASINGS = [ - { label: "Linear", token: "--sf-ease-linear", value: "linear", preview: "M0,40 L40,0" }, - { label: "Ease out", token: "--sf-ease-out", value: "cubic-bezier(0.25, 0, 0.15, 1)", preview: "M0,40 C8,40 28,0 40,0" }, - { label: "Ease in", token: "--sf-ease-in", value: "cubic-bezier(0.5, 0, 0.75, 0.25)", preview: "M0,40 C12,40 32,32 40,0" }, - { label: "Ease in-out",token: "--sf-ease-in-out", value: "cubic-bezier(0.4, 0, 0.2, 1)", preview: "M0,40 C8,40 32,0 40,0" }, - { label: "Spring", token: "--sf-ease-spring", value: "linear(0, 0.5, 1.1, 0.95, 1.02, 1)", preview: "M0,40 C10,20 20,-4 28,-2 S38,2 40,0" }, + { label: "Linear", token: "--sf-ease-linear", value: "linear", preview: "M0,40 L40,0" }, + { label: "Ease out", token: "--sf-ease-out", value: "cubic-bezier(0.25, 0, 0.15, 1)", preview: "M0,40 C8,40 28,0 40,0" }, + { label: "Ease in", token: "--sf-ease-in", value: "cubic-bezier(0.5, 0, 0.75, 0.25)", preview: "M0,40 C12,40 32,32 40,0" }, + { label: "Ease in-out",token: "--sf-ease-in-out", value: "cubic-bezier(0.4, 0, 0.2, 1)", preview: "M0,40 C8,40 32,0 40,0" }, + { label: "Spring", token: "--sf-ease-spring", value: "linear(0, 0.5, 1.1, 0.95, 1.02, 1)", preview: "M0,40 C10,20 20,-4 28,-2 S38,2 40,0" }, { label: "Bounce", token: "--sf-ease-bounce", value: "linear(0, 0.35 18%, 1 32%, 0.86 42%, 1.02 56%, 0.98 72%, 1)", preview: "M0,40 L12,16 L20,0 L26,6 L32,-1 L36,1 L40,0" }, - { label: "Elastic", token: "--sf-ease-elastic", value: "linear(0, 0.3, 1.2, 0.9, 1.05, 1)", preview: "M0,40 C8,40 16,-10 24,-2 S36,2 40,0" }, - { label: "Overshoot", token: "--sf-ease-overshoot", value: "cubic-bezier(0.34, 1.56, 0.64, 1)", preview: "M0,40 C8,40 20,-10 40,0" }, + { label: "Elastic", token: "--sf-ease-elastic", value: "linear(0, 0.3, 1.2, 0.9, 1.05, 1)", preview: "M0,40 C8,40 16,-10 24,-2 S36,2 40,0" }, + { label: "Overshoot", token: "--sf-ease-overshoot", value: "linear(0, 0.6 30%, 1.08 55%, 0.98 75%, 1)", preview: "M0,40 C8,40 20,-10 40,0" }, ]; - // animation-delay-N base is 75ms * N; stagger base is 75ms const STAGGER_TOKENS = ["--sf-animation-delay-1","--sf-animation-delay-2","--sf-animation-delay-3","--sf-animation-delay-4","--sf-animation-delay-5"]; const knobs = KNOBS_BY_DOMAIN["motion"] ?? []; - let scale = $derived(parseFloat(overrides["--sf-motion-scale"] ?? "1")); + let scale = $derived((() => { const v = parseFloat(overrides["--sf-motion-scale"] ?? "1"); return isFinite(v) ? v : 1; })()); let motionDisabled = $derived(overrides["--sf-motion-scale"] === "0"); - let themeTransition = $derived(parseFloat(overrides["--sf-theme-transition-duration"]?.replace("ms","") ?? String(300 * scale))); - let staggerBase = $derived(() => { + let themeTransition = $derived((() => { const v = parseFloat(overrides["--sf-theme-transition-duration"]?.replace("ms","") ?? String(300 * scale)); return isFinite(v) ? v : Math.round(300 * scale); })()); + let staggerBase = $derived.by(() => { const raw = overrides[STAGGER_TOKENS[0]]; if (raw) return parseFloat(raw.replace("ms","")); return 75 * scale; }); - // Animation demo state + // Animation demo — user picks which easing + duration to feel. let animating = $state(false); let animOffsetX = $state(0); + let demoEase = $state("--sf-ease-out"); + let demoDuration = $state("--sf-duration-normal"); - let showGlobalScale = $state(false); - let showThemeTransition = $state(false); - let showDurationOverrides = $state(false); - let showStaggerBase = $state(false); - let showEasingCurves = $state(false); - let showAnimationDemo = $state(false); - let showDurationPreview = $state(false); - let showScrollTimeline = $state(false); + let showDurations = $state(false); + let showEasing = $state(false); + let showStagger = $state(false); + let showAdvanced = $state(false); function getDuration(token: string, base: number): number { const raw = overrides[token]; - if (raw) return parseFloat(raw); + if (raw) { + const parsed = parseFloat(raw); + if (isFinite(parsed)) return parsed; + } return Math.round(base * scale); } + function easeValue(token: string): string { + return overrides[token] ?? EASINGS.find((e) => e.token === token)?.value ?? "ease"; + } + function playDemo() { if (animating) return; + const base = DURATIONS.find((d) => d.token === demoDuration)?.base ?? 250; + const dur = getDuration(demoDuration, base); animating = true; animOffsetX = 180; - const dur = getDuration("--sf-duration-normal", 250); setTimeout(() => { animOffsetX = 0; setTimeout(() => { animating = false; }, dur); @@ -75,9 +80,7 @@ function setStaggerBase(baseMs: number) { const patch: Record = {}; - for (let i = 1; i <= 5; i++) { - patch[`--sf-animation-delay-${i}`] = `${Math.round(baseMs * i)}ms`; - } + for (let i = 1; i <= 5; i++) patch[`--sf-animation-delay-${i}`] = `${Math.round(baseMs * i)}ms`; onBulkChange(patch); } @@ -114,71 +117,66 @@ {#if motionDisabled}
-

Motion is disabled — duration sliders have no effect while scale is 0.

+

Motion is disabled — duration & easing have no effect while scale is 0.

{/if} - -
- - {#if showGlobalScale} -
- {#each knobs as k (k.name)} - val === null ? onReset(name) : onSet(name, val)} - /> - {/each} -
- {/if} -
- -
- - +
- - {#if showThemeTransition} - onSet("--sf-theme-transition-duration", `${v}ms`)} - onReset={() => onReset("--sf-theme-transition-duration")} - /> - {/if} +
Live preview
+
+
+
d.token === demoDuration)?.base ?? 250)}ms ${easeValue(demoEase)}`} + >
+
+
+ + + +
+
- -
+ +
- {#if showDurationOverrides} + {#if showDurations}

- Set absolute ms values to override the fluid scale calculation. + Named duration tokens. Drag to set an absolute ms value, overriding the global scale. {#if motionDisabled} (No effect while motion is disabled.){/if}

{#each DURATIONS as d (d.token)} @@ -195,22 +193,94 @@ onReset={() => onReset(d.token)} /> {/each} + +
+ {#each DURATIONS as d (d.label)} + {@const actual = getDuration(d.token, d.base)} +
+ {d.label} +
+
+
+ {actual}ms +
+ {/each} +
+ {/if} +
+ +
+ + +
+ + {#if showEasing} +

+ Edit the named easing tokens. Accepts any CSS timing function — + cubic-bezier(…) or + linear(…). Use “Live preview” above to feel a curve. +

+
+ {#each EASINGS as e (e.token)} + {@const isOverridden = e.token in overrides} +
+
+ + + +
+
+ {e.label} +
+ + {#if isOverridden} + + {/if} +
+
+ { + const v = (ev.target as HTMLInputElement).value.trim(); + v ? onSet(e.token, v) : onReset(e.token); + }} + class="w-full bg-white/5 border border-white/10 rounded px-1.5 py-1 text-[9px] font-mono text-slate-300 placeholder:text-slate-600 focus:outline-none focus:border-indigo-500" + /> +
+
+
+ {/each} +
{/if}
- +
- {#if showStaggerBase} + {#if showStagger}

One slider sets all five stagger delays (delay-1 through delay-5 are multiples of this base).

@@ -222,17 +292,16 @@ {/if}
t in overrides)} onChange={(v) => setStaggerBase(v)} onReset={resetStagger} />
-
{#each [1,2,3,4,5] as n (n)} - {@const delayMs = Math.round(staggerBase() * n)} + {@const delayMs = Math.round(staggerBase * n)}
–{n}
@@ -247,146 +316,65 @@
- -
+ +
- {#if showEasingCurves} -

- Customize the named easing tokens used throughout the design system. -

-
- {#each EASINGS as e (e.token)} - {@const isOverridden = e.token in overrides} -
-
- {e.label} - {#if isOverridden} - - {/if} -
- - - -
{e.token.replace("--sf-ease-", "")}
-
+ {#if showAdvanced} + +
+ {#each knobs as k (k.name)} + val === null ? onReset(name) : onSet(name, val)} + /> {/each}
- {/if} -
- -
- - -
- - {#if showAnimationDemo} -
-
-
-
- -
- {/if} -
-
- - -
- - {#if showScrollTimeline} -

- Default animation-range for scroll-driven animations using the .sf-scroll-timeline utility. -

- {#each [ - { label: "Range start", token: "--sf-scroll-timeline-range-start", placeholder: "entry 0%" }, - { label: "Range end", token: "--sf-scroll-timeline-range-end", placeholder: "cover 30%" }, - ] as r (r.token)} -
-
{r.label}
- { - const v = (e.target as HTMLInputElement).value.trim(); - v ? onSet(r.token, v) : onReset(r.token); - }} - class="flex-1 min-w-0 bg-white/5 border border-white/10 rounded px-1.5 py-1 text-[9px] font-mono text-slate-300 placeholder:text-slate-600 focus:outline-none focus:border-indigo-500" - /> - {#if r.token in overrides} - - {/if} -
- {/each} - {/if} -
- -
+ + onSet("--sf-theme-transition-duration", `${v}ms`)} + onReset={() => onReset("--sf-theme-transition-duration")} + /> - -
- - {#if showDurationPreview} -
- {#each DURATIONS as d (d.label)} - {@const actual = getDuration(d.token, d.base)} -
- {d.label} -
-
-
- {actual}ms + +
+

+ Default animation-range for scroll-driven animations using the + .sf-scroll-timeline utility. +

+ {#each [ + { label: "Range start", token: "--sf-scroll-timeline-range-start", placeholder: "entry 0%" }, + { label: "Range end", token: "--sf-scroll-timeline-range-end", placeholder: "cover 30%" }, + ] as r (r.token)} +
+
{r.label}
+ { + const v = (e.target as HTMLInputElement).value.trim(); + v ? onSet(r.token, v) : onReset(r.token); + }} + class="flex-1 min-w-0 bg-white/5 border border-white/10 rounded px-1.5 py-1 text-[9px] font-mono text-slate-300 placeholder:text-slate-600 focus:outline-none focus:border-indigo-500" + /> + {#if r.token in overrides} + + {/if}
{/each}
{/if} -
+
diff --git a/SLASHED-for-WP/admin-app/src/components/panels/ShadowsPanel.svelte b/SLASHED-for-WP/admin-app/src/components/panels/ShadowsPanel.svelte index 0f3da6ad..145d62bf 100644 --- a/SLASHED-for-WP/admin-app/src/components/panels/ShadowsPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/panels/ShadowsPanel.svelte @@ -1,75 +1,54 @@
- - + +
+ {#each SHADOW_STEPS as step, i (step)} +
+
+ {step} +
+ {/each} +
- -
- - {#if showShadowAppearance} -
- {#each knobs as k (k.name)} - val === null ? onReset(name) : onSet(name, val)} - /> - {/each} -
- - onSet("--sf-shadow-lightness", String(v))} - onReset={() => onReset("--sf-shadow-lightness")} - /> - {/if} -
+ + onSet("--sf-shadow-lightness", String(v))} + onReset={() => onReset("--sf-shadow-lightness")} + />
@@ -148,33 +127,42 @@

Which brand color radiates the glow. Defaults to primary.

{/if} + + +
+
+
+ {#if glowDisabled} +

Glow disabled.

+ {/if} {/if}
- -
+ +
- {#if showElevationPreview} -
- {#each SHADOW_STEPS as step, i (step)} -
-
- {step} -
+ {#if showAdvanced} +
+ {#each knobs as k (k.name)} + val === null ? onReset(name) : onSet(name, val)} + /> {/each}
{/if} -
+
diff --git a/SLASHED-for-WP/admin-app/src/components/panels/SpacingPanel.svelte b/SLASHED-for-WP/admin-app/src/components/panels/SpacingPanel.svelte index 8a2945f1..1f988581 100644 --- a/SLASHED-for-WP/admin-app/src/components/panels/SpacingPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/panels/SpacingPanel.svelte @@ -5,12 +5,11 @@ import SliderRow from '../inputs/SliderRow.svelte'; import ClampField from '../inputs/ClampField.svelte'; - let { overrides, onSet, onReset, onBulkChange }: { + let { overrides, onSet, onReset }: { tokens: SlashedToken[]; overrides: Record; onSet: (name: string, value: string) => void; onReset: (name: string) => void; - onBulkChange: (patch: Record) => void; } = $props(); const RATIO_PRESETS = [ @@ -21,12 +20,6 @@ { label: "Golden — 1.618", value: 1.618 }, ]; - const DENSITY_PRESETS = [ - { label: "Compact", desc: "Tight UI, data-heavy", patch: { "--sf-space-scale": "0.75", "--sf-section-scale": "0.7", "--sf-space-base-min": "0.75", "--sf-space-base-max": "1.25" } }, - { label: "Comfortable", desc: "Balanced — default", patch: { "--sf-space-scale": null as null, "--sf-section-scale": null as null, "--sf-space-base-min": null as null, "--sf-space-base-max": null as null } }, - { label: "Spacious", desc: "Generous, editorial", patch: { "--sf-space-scale": "1.3", "--sf-section-scale": "1.4", "--sf-space-base-min": "1.25", "--sf-space-base-max": "2.75" } }, - ]; - const SPACE_STEPS = ["2xs", "xs", "s", "m", "l", "xl", "2xl", "3xl", "4xl"]; const knobs = KNOBS_BY_DOMAIN["spacing"] ?? []; @@ -48,20 +41,35 @@ let vwMin = $derived(num("--sf-fluid-min-vw", 22.5)); let vwMax = $derived(num("--sf-fluid-max-vw", 90)); - let activeDensity = $derived(DENSITY_PRESETS.find((d) => - Object.entries(d.patch).every(([k, v]) => - v === null ? !(k in overrides) : overrides[k] === v - ) - )); - let showLayoutGap = $state(false); - let showDensityPresets = $state(false); let showModularScale = $state(false); - let showSpacePreview = $state(false); + let showAdvanced = $state(false);
+ +
+
Space scale preview
+
+ {#each SPACE_STEPS as step, i (step)} + {@const midBase = (baseMin + baseMax) / 2} + {@const ratio = (ratioMin + ratioMax) / 2} + {@const offset = i - 3} + {@const rawRem = offset >= 0 ? midBase * Math.pow(ratio, offset) : midBase / Math.pow(ratio, -offset)} + {@const scaled = rawRem * spaceScale} + {@const barWidth = Math.min(scaled * 28, 240)} +
+ {step} +
+ {scaled.toFixed(2)}rem +
+ {/each} +
+
+ +
+
- -
- - {#if showDensityPresets} -
- {#each DENSITY_PRESETS as d (d.label)} - - {/each} -
- {/if} -
- -
-
- -
+ +
- {#if showSpacePreview} -
- {#each SPACE_STEPS as step, i (step)} - {@const midBase = (baseMin + baseMax) / 2} - {@const ratio = (ratioMin + ratioMax) / 2} - {@const offset = i - 4} - {@const rawRem = offset >= 0 ? midBase * Math.pow(ratio, offset) : midBase / Math.pow(ratio, -offset)} - {@const scaled = rawRem * spaceScale} - {@const barWidth = Math.min(scaled * 28, 240)} -
- {step} -
- {scaled.toFixed(2)}rem -
+ {#if showAdvanced} +
+ {#each knobs as k (k.name)} + val === null ? onReset(name) : onSet(name, val)} + /> {/each}
{/if} diff --git a/SLASHED-for-WP/admin-app/src/components/panels/ThemesPanel.svelte b/SLASHED-for-WP/admin-app/src/components/panels/ThemesPanel.svelte index ae9c4548..f972e078 100644 --- a/SLASHED-for-WP/admin-app/src/components/panels/ThemesPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/panels/ThemesPanel.svelte @@ -1,71 +1,139 @@
-
Theme presets
+
Themes

- Apply a curated set of overrides with one click. Existing overrides outside the theme's scope are preserved. + Save your current configuration as a named theme, then re-apply it any time. + Themes are stored in this browser.

-
- {#each THEME_PRESETS as theme (theme.id)} - {@const tokenCount = Object.keys(theme.overrides).length} -
-
- {theme.icon} -
-
{theme.name}
-
{theme.blurb}
-
- {#if theme.tags} - {#each theme.tags as tag (tag)} - {tag} - {/each} - {/if} - {#if tokenCount > 0} - {tokenCount} overrides - {/if} -
-
- -
+ +
+
Save current
+
+ { if (e.key === "Enter") handleSave(); }} + class="flex-1 min-w-0 bg-white/5 border border-white/10 rounded-lg px-2 py-1.5 text-[11px] text-slate-200 placeholder:text-slate-600 focus:outline-none focus:border-indigo-500" + /> + +
+

+ {#if overridesCount === 0} + No active overrides yet — adjust some tokens first. + {:else} + Captures all {overridesCount} active override{overridesCount === 1 ? "" : "s"}. + {/if} +

+
- {#if tokenCount > 0} -
- {#each Object.entries(theme.overrides).slice(0, 5) as [k, v] (k)} -
- {#if k.includes("color") || k.includes("source")} -
+ +
+ {#if themes.length === 0} +
+

No saved themes yet.

+

Configure your tokens, then save them above.

+
+ {:else} + {#each themes as theme (theme.id)} + {@const tokenCount = Object.keys(theme.overrides).length} +
+
+ {theme.icon} +
+
+ {theme.name} + {#if activeId === theme.id} + {/if} - {k.replace("--sf-", "")}
- {/each} - {#if tokenCount > 5} - +{tokenCount - 5} more - {/if} +
{tokenCount} override{tokenCount === 1 ? "" : "s"}
+
+
+ + +
- {/if} -
- {/each} + + {#if tokenCount > 0} +
+ {#each Object.entries(theme.overrides).slice(0, 5) as [k, v] (k)} +
+ {#if k.includes("color") || k.includes("source")} +
+ {/if} + {k.replace("--sf-", "")} +
+ {/each} + {#if tokenCount > 5} + +{tokenCount - 5} more + {/if} +
+ {/if} +
+ {/each} + {/if}
+ + + {#if overridesCount > 0} + + {/if}
diff --git a/SLASHED-for-WP/admin-app/src/components/panels/TypographyPanel.svelte b/SLASHED-for-WP/admin-app/src/components/panels/TypographyPanel.svelte index 8d1fe2da..81870107 100644 --- a/SLASHED-for-WP/admin-app/src/components/panels/TypographyPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/panels/TypographyPanel.svelte @@ -66,7 +66,7 @@ { label: "normal", value: "normal" }, ]; - const WEIGHT_OPTIONS = ["300","400","500","600","700","800"]; + const WEIGHT_OPTIONS = ["100","200","300","400","500","600","700","800","900"]; const WEIGHT_DEFAULTS: Record = { "--sf-font-weight-body": "400", "--sf-font-weight-heading": "600", @@ -166,6 +166,7 @@ let showBodyText = $state(false); let showDisplayType = $state(false); let showModularScale = $state(false); + let showScaleAdvanced = $state(false); let showScalePreview = $state(false); let showAdvancedType = $state(false); let showLineLengths = $state(false); @@ -195,7 +196,7 @@ const link = document.createElement("link"); link.id = id; link.rel = "stylesheet"; - link.href = `https://fonts.googleapis.com/css2?family=${encodeURIComponent(fontName)}:wght@300;400;500;600;700&display=swap`; + link.href = `https://fonts.googleapis.com/css2?family=${encodeURIComponent(fontName)}:wght@100;200;300;400;500;600;700;800;900&display=swap`; document.head.appendChild(link); } } @@ -759,17 +760,6 @@ onRatioMaxChange={(v) => onSet("--sf-text-ratio-max", String(v))} /> - -
- {#each knobs as k (k.name)} - val === null ? onReset(name) : onSet(name, val)} - /> - {/each} -
-
Line height scale
@@ -818,6 +808,29 @@ {/each}
+ + +
+ + {#if showScaleAdvanced} +
+ {#each knobs as k (k.name)} + val === null ? onReset(name) : onSet(name, val)} + /> + {/each} +
+ {/if} +
{/if}
diff --git a/SLASHED-for-WP/admin-app/src/components/shell/PreviewPanel.svelte b/SLASHED-for-WP/admin-app/src/components/shell/PreviewPanel.svelte index cba7c2f0..378c0bb1 100644 --- a/SLASHED-for-WP/admin-app/src/components/shell/PreviewPanel.svelte +++ b/SLASHED-for-WP/admin-app/src/components/shell/PreviewPanel.svelte @@ -22,16 +22,14 @@ onTemplateChange: (t: PreviewTemplate) => void; } = $props(); - function withDerivedOverrides(ov: Record): Record { - const derived = computeDerivedOverrides(ov); + const reduceMotion = typeof window !== "undefined" && window.matchMedia?.("(prefers-reduced-motion: reduce)").matches; + const derived = computeDerivedOverrides(ov, { reduceMotion }); return Object.keys(derived).length > 0 ? { ...derived, ...ov } : ov; } const TEMPLATES: { id: PreviewTemplate; label: string }[] = [ { id: "marketing", label: "Marketing" }, - { id: "docs", label: "Docs" }, - { id: "dashboard", label: "Dashboard" }, { id: "components", label: "Components" }, { id: "stylescape", label: "Stylescape" }, ]; @@ -83,378 +81,336 @@ } } + // Preview "skin": presentational classes for the demo templates. SLASHED is + // BEM-first and ships no utility classes, so the demos lean on real framework + // classes (.pv-btn, .pv-card, .sf-container, …) plus this thin skin for the + // bits the framework has no class for (token swatch grids, the type-scale + // ramp, demo chrome). EVERY value here references a live --sf-* token, so the + // configurator panels drive these classes exactly like the framework's own — + // and there is not a single inline style left in the template bodies. + const RAMP_STEPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950]; + const RADII = ["xs", "s", "m", "l", "xl", "2xl", "full"]; + const SHADOWS = ["xs", "s", "m", "l", "xl", "2xl"]; + const SPACES = ["3xs", "2xs", "xs", "s", "m", "l", "xl", "2xl", "3xl", "4xl"]; + const TYPE_STEPS = ["display-l", "display-m", "display-s", "2xl", "xl", "l", "m", "s", "xs"]; + + function previewSkinCSS(): string { + const ramp = (cls: string, token: string, fallback?: string) => + RAMP_STEPS.map( + (s) => + `.pv-sw--${cls}-${s}{background:var(--sf-color-${token}-${s}${ + fallback ? `,var(--sf-color-${fallback}-${s})` : "" + });}` + ).join(""); + return ` + /* Text roles (core ships no utility classes — these mirror semantic tokens) */ + .pv-eyebrow{font-size:var(--sf-text-xs);font-weight:var(--sf-font-weight-heading);text-transform:uppercase;letter-spacing:0.08em;color:var(--sf-color-text--muted);} + .pv-lead{font-size:var(--sf-text-l);color:var(--sf-color-text--secondary);} + .pv-muted{color:var(--sf-color-text--muted);} + .pv-secondary{color:var(--sf-color-text--secondary);} + .pv-accent{color:var(--sf-color-primary-600);} + .pv-on-primary{color:var(--sf-color-text--on-primary);} + .pv-center-text{text-align:center;} + .pv-emoji{font-size:2rem;line-height:1;} + .pv-brand{font-weight:700;font-size:var(--sf-text-l);color:var(--sf-color-primary-600);} + .pv-measure{max-inline-size:34rem;} + /* BEM components — .sf-btn / .sf-card / .sf-tag / .sf-field are staged off in + core until v0.8, so the preview ships its own token-driven equivalents. + These mirror the framework's reserved definitions one-to-one. */ + .pv-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sf-space-2xs);padding-block:var(--sf-space-xs);padding-inline:var(--sf-space-m);min-block-size:var(--sf-touch-target);font-family:inherit;font-size:var(--sf-text-m);font-weight:var(--sf-font-weight-interactive);line-height:var(--sf-leading-tight);white-space:nowrap;text-decoration:none;border:var(--sf-border-width-1) solid var(--sf-color-action);border-radius:var(--sf-radius-m);cursor:pointer;background:var(--sf-color-action);color:var(--sf-color-text--on-action);transition:var(--sf-transition-form-field);} + .pv-btn--primary{background:var(--sf-color-primary);color:var(--sf-color-text--on-primary);border-color:var(--sf-color-primary);} + .pv-btn--secondary{background:transparent;color:var(--sf-color-action);border-color:var(--sf-color-action);} + .pv-btn--ghost{background:transparent;color:var(--sf-color-action);border-color:transparent;} + .pv-btn--neutral{background:var(--sf-color-neutral);color:var(--sf-color-text--on-neutral);border-color:var(--sf-color-neutral);} + .pv-btn--danger{background:var(--sf-color-danger);color:var(--sf-color-text--on-danger);border-color:var(--sf-color-danger);} + .pv-btn--block{inline-size:100%;} + .pv-btn:disabled{opacity:var(--sf-opacity-disabled);cursor:not-allowed;} + /* No 'display' here: .pv-card is unlayered and would beat .sf-stack's + layered flex, breaking 'pv-card sf-stack' combos. Default block is fine. */ + .pv-card{padding:var(--sf-space-l);background:var(--sf-color-surface);border:var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border);border-radius:var(--sf-radius-l);box-shadow:var(--sf-shadow-s);} + .pv-tag{display:inline-flex;align-items:center;gap:var(--sf-space-2xs);padding-block:var(--sf-space-3xs,0.125rem);padding-inline:var(--sf-space-xs);font-size:var(--sf-text-xs);line-height:var(--sf-leading-tight);white-space:nowrap;background:var(--sf-color-inset);border:var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border);border-radius:var(--sf-radius-s);color:var(--sf-color-text);} + .pv-tag--primary{color:var(--sf-color-action);border-color:var(--sf-color-action);background:color-mix(in oklab,var(--sf-color-action) 8%,var(--sf-color-surface));} + .pv-tag--info{color:var(--sf-color-info);border-color:var(--sf-color-info);background:color-mix(in oklab,var(--sf-color-info) 8%,var(--sf-color-surface));} + .pv-field{display:grid;gap:var(--sf-space-2xs);align-content:start;} + .pv-field__label{font-size:var(--sf-text-s);font-weight:var(--sf-font-weight-interactive);color:var(--sf-color-text);} + /* Demo chrome */ + .pv-header{padding-block:var(--sf-space-s);border-block-end:var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border);background:var(--sf-color-surface);} + .pv-panel{background:var(--sf-color-surface);border-inline-end:var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border);} + .pv-cta{background:var(--sf-gradient-primary);border-radius:var(--sf-radius-xl);} + .pv-code-block{font-family:var(--sf-font-mono);font-size:var(--sf-text-s);background:var(--sf-color-inset);border:var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border);border-radius:var(--sf-radius-m);padding:var(--sf-space-m) var(--sf-space-l);color:var(--sf-color-text);} + /* Sidebar nav */ + .pv-nav{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:2px;} + .pv-nav__item{padding:var(--sf-space-2xs) var(--sf-space-xs);border-radius:var(--sf-radius-s);font-size:var(--sf-text-s);color:var(--sf-color-text--secondary);cursor:pointer;} + .pv-nav__item.is-active{background:var(--sf-color-primary-100);color:var(--sf-color-primary-700);font-weight:600;} + /* Stat blocks */ + .pv-stat{font-size:var(--sf-text-2xl);font-weight:800;line-height:var(--sf-leading-tight);color:var(--sf-color-heading);} + .pv-stat-label{font-size:var(--sf-text-xs);font-weight:600;text-transform:uppercase;letter-spacing:0.06em;color:var(--sf-color-text--muted);} + .pv-delta{font-size:var(--sf-text-xs);} + .pv-delta--up{color:var(--sf-color-success);} + .pv-delta--down{color:var(--sf-color-danger);} + .pv-delta--flat{color:var(--sf-color-warning);} + /* Type-scale ramp — one class per scale step, all token-driven */ + ${TYPE_STEPS.map((t) => `.pv-type--${t}{font-size:var(--sf-text-${t});line-height:var(--sf-leading-tight);}`).join("")} + /* Colour ramps */ + .pv-ramp{display:flex;gap:2px;block-size:36px;border-radius:var(--sf-radius-m);overflow:hidden;} + .pv-ramp>*{flex:1;} + ${ramp("primary", "primary")} + ${ramp("base", "base")} + ${ramp("action", "action", "primary")} + .pv-chip{display:block;inline-size:28px;block-size:28px;border-radius:var(--sf-radius-s);} + .pv-chip--success{background:var(--sf-color-success);} + .pv-chip--warning{background:var(--sf-color-warning);} + .pv-chip--danger{background:var(--sf-color-danger);} + .pv-chip--info{background:var(--sf-color-info);} + /* Gradients */ + .pv-grad{block-size:44px;border-radius:var(--sf-radius-m);border:var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border);} + .pv-grad--primary{background:var(--sf-gradient-primary);} + .pv-grad--brand{background:var(--sf-gradient-brand);} + .pv-grad--tertiary{background:var(--sf-gradient-tertiary);} + .pv-grad--surface{background:var(--sf-gradient-surface);} + /* Radius + shadow demo boxes */ + .pv-demo-box{inline-size:52px;block-size:52px;background:var(--sf-color-primary-100);border:2px solid var(--sf-color-primary-300);} + ${RADII.map((r) => `.pv-radius--${r}{border-radius:var(--sf-radius-${r});}`).join("")} + .pv-shadow-box{inline-size:52px;block-size:52px;background:var(--sf-color-surface);border-radius:var(--sf-radius-m);} + ${SHADOWS.map((s) => `.pv-shadow--${s}{box-shadow:var(--sf-shadow-${s});}`).join("")} + /* Spacing scale bars */ + .pv-space-bar{background:var(--sf-color-primary-400);border-radius:2px;min-inline-size:3px;min-block-size:3px;} + ${SPACES.map((s) => { + // --sf-space-3xs is not a defined core token (core starts at 2xs); give it + // the same fallback the framework uses elsewhere so the bar still renders. + const size = s === "3xs" ? "var(--sf-space-3xs,0.125rem)" : `var(--sf-space-${s})`; + return `.pv-space--${s}{inline-size:${size};block-size:${size};}`; + }).join("")} + .pv-swatch-label{font-size:var(--sf-text-2xs);font-family:var(--sf-font-mono);color:var(--sf-color-text--muted);} + /* Stylescape demo layout */ + .pv-heading{font-family:var(--sf-font-heading);color:var(--sf-color-heading);} + .pv-strong{font-weight:var(--sf-font-weight-heading);} + .pv-ramp-row{display:grid;grid-template-columns:4rem 1fr;gap:var(--sf-space-s);align-items:center;} + .pv-spacing-track{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--sf-space-xs);} + /* Tinted card variants — unlayered, so they reliably override .pv-card's bg */ + .pv-card--primary{background:var(--sf-color-primary);color:var(--sf-color-text--on-primary);} + .pv-card--soft{background:var(--sf-color-primary-100);color:var(--sf-color-primary-700);}`; + } + const MARKETING_BODY = ` -
-
-
SlashedUI
-
+
`; - const STYLESCAPE_BODY = ` -
+ const swatchRow = (label: string, cls: string) => + `
${label}
${RAMP_STEPS.map((s) => ``).join("")}
`; - -
- Design System - Stylescape -
+ const STYLESCAPE_BODY = ` +
- -
-
Color palette
- -
- Primary -
-
-
-
-
-
-
-
-
-
-
-
-
- Action -
-
-
-
-
-
-
-
-
-
-
-
-
- Neutral -
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ Design System + Stylescape
- -
-
-
-
Success
-
-
-
-
Warning
-
-
-
-
Danger
-
-
-
-
Info
-
+
+
+ +
+
Color palette
+ ${swatchRow("Primary", "primary")} + ${swatchRow("Action", "action")} + ${swatchRow("Neutral", "base")} +
+ ${[["success", "Success"], ["warning", "Warning"], ["danger", "Danger"], ["info", "Info"]] + .map(([cls, label]) => `
${label}
`) + .join("")}
- - -
Gradients
-
-
primary
-
brand
-
tertiary
-
surface
+
Gradients
+
+ ${["primary", "brand", "tertiary", "surface"] + .map((g) => `
${g}
`) + .join("")}
- -
-
Typography
- -
-
The quick brown fox
-
jumps over the lazy dog
-
Display S — heading family
+
+
Typography
+
+ The quick brown fox + jumps over the lazy dog + Display S — heading family
- -
-
-
Heading 2XL / 700
-
Heading XL / 600
-
Heading L / 600
-
Heading M / 600
-
Heading S / 600
-
LABEL / OVERLINE
+
+
+ Heading 2XL + Heading XL + Heading L + Heading M + Heading S + Label / overline
-
-

Body — The quick brown fox jumps over the lazy dog. Good typography establishes hierarchy and builds trust with readers.

-

Secondary — supporting text, descriptions, and metadata that help without competing with the primary content.

-

Micro / caption text for timestamps, tags, and helper copy.

- const tokens = design() -
Bolditalicunderlinestrikethrough
+
+

Body — The quick brown fox jumps over the lazy dog. Good typography establishes hierarchy and builds trust with readers.

+

Secondary — supporting text, descriptions, and metadata that help without competing with the primary content.

+

Micro / caption text for timestamps, tags, and helper copy.

+

const tokens = design()

+

Bolditalicunderlinestrikethrough

- -
-
-
Border radius
-
-
xs
-
s
-
m
-
l
-
xl
-
2xl
-
full
+
+
+
Border radius
+
+ ${RADII.map((r) => `
${r}
`).join("")}
- -
-
Shadows
-
-
xs
-
s
-
m
-
l
-
xl
-
2xl
+
+
Shadows
+
+ ${SHADOWS.map((s) => `
${s}
`).join("")}
- -
-
Components
- -
- - - - - +
+
Components
+
+ + + + +
- -
-
-
🎨
-
Feature card
-
Design tokens that adapt to your brand and context automatically.
-
-
-
Active users
-
12,431
-
↑ 8.4% this week
- -
-
- - - -
+
+
+
🎨
+ Feature card +

Design tokens that adapt to your brand and context automatically.

+
+
+ Active users + 12,431 + ↑ 8.4% this week + +
+
+ + +
- -
-
Layouts & macros
- - -

.sf-text-gradient heading

-
- - -
.sf-cluster
-
- Tag - Another - Ghost - Wraps nicely +
+
Layouts & macros
+

.sf-text-gradient heading

+
+ + .sf-cluster +
+ Tag + Another + Ghost + Wraps nicely
- -
.sf-grid
-
-
Grid item 1
-
Grid item 2
-
Grid item 3
+ .sf-grid +
+
Grid item 1
+
Grid item 2
+
Grid item 3
- -
.sf-sidebar + .sf-stack
+ .sf-sidebar + .sf-stack
-
-
- Sidebar - Stacked - items -
-
-
- Main content area — the sidebar holds its width while this region fills the rest, collapsing to a single column when space runs out. +
+ Sidebar + Stacked + items
+
Main content area — the sidebar holds its width while this region fills the rest, collapsing to a single column when space runs out.
- -
-
Spacing scale
-
-
3xs
-
2xs
-
xs
-
s
-
m
-
l
-
xl
-
2xl
-
3xl
-
4xl
+
+
Spacing scale
+
+ ${SPACES.map((s) => `
${s}
`).join("")}
@@ -462,8 +418,6 @@ const BODIES: Record = { marketing: MARKETING_BODY, - docs: DOCS_BODY, - dashboard: DASHBOARD_BODY, components: COMPONENTS_BODY, stylescape: STYLESCAPE_BODY, }; @@ -475,7 +429,7 @@ template: PreviewTemplate, frameworkCSS: string, ): string { - const css = fa(ov, { mode: "root", banner: false }); + const css = fa(withDerivedOverrides(ov), { mode: "root", banner: false }); const motionCSS = motion === "slow" ? "*, *::before, *::after { transition-duration: 200% !important; animation-duration: 200% !important; }" @@ -488,35 +442,19 @@ .join("\n"); return ` - + SLASHED Preview ${fontLinks ? fontLinks + "\n" : ""} - @@ -621,13 +559,13 @@ ${BODIES[template]}
-
+
-
+
{#each TEMPLATES as t (t.id)}
-
+
');function iu(a,e){Qt(e,!0);function o(ne){const fe=Pi(ne);return Object.keys(fe).length>0?{...fe,...ne}:ne}const n=[{id:"marketing",label:"Marketing"},{id:"docs",label:"Docs"},{id:"dashboard",label:"Dashboard"},{id:"components",label:"Components"},{id:"stylescape",label:"Stylescape"}],l=new Set(["system-ui","-apple-system","BlinkMacSystemFont","ui-monospace","ui-serif","ui-sans-serif","sans-serif","serif","monospace","cursive","fantasy","Georgia","Times New Roman","Times","Impact","Arial Narrow","Arial","Helvetica","Helvetica Neue","Courier New","Courier","Fira Code","Verdana"]);function i(ne){if(!ne?.trim())return null;const fe=ne.trim().match(/^['"]([^'"]+)['"]/),De=(fe?fe[1]:ne.split(",")[0]).trim();return De&&!l.has(De)?De:null}function c(ne){const fe=new Set,Pe=[];for(const De of["--sf-font-body","--sf-font-heading","--sf-font-mono"]){const ze=i(ne[De]??"");!ze||fe.has(ze)||(fe.add(ze),Pe.push({name:ze,url:`https://fonts.googleapis.com/css2?family=${encodeURIComponent(ze)}:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&display=swap`}))}return Pe}function d(ne,fe){for(const{name:Pe,url:De}of c(fe)){const ze=`gf-${Pe.replace(/\s+/g,"-").toLowerCase()}`;if(!ne.getElementById(ze)){const Le=ne.createElement("link");Le.id=ze,Le.rel="stylesheet",Le.href=De,ne.head.appendChild(Le)}}}const k={marketing:` -
-
-
SlashedUI
-
+
+
Form & links
+ +

Read the documentation link to learn more.

+
+
+
+
Typography ramp
+
+ Display M + Heading 2XL + Heading XL + Body text. The quick brown fox jumps over the lazy dog. + Small caption text for metadata and secondary info.
-
-
`,stylescape:` -
- - -
- Design System - Stylescape -
+
+
`,P=(te,N)=>`
${te}
${p.map(V=>``).join("")}
`,A=` +
- -
-
Color palette
- -
- Primary -
-
-
-
-
-
-
-
-
-
-
-
-
- Action -
-
-
-
-
-
-
-
-
-
-
-
-
- Neutral -
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ Design System + Stylescape
- -
-
-
-
Success
-
-
-
-
Warning
-
-
-
-
Danger
-
-
-
-
Info
-
+
+
+ +
+
Color palette
+ ${P("Primary","primary")} + ${P("Action","action")} + ${P("Neutral","base")} +
+ ${[["success","Success"],["warning","Warning"],["danger","Danger"],["info","Info"]].map(([te,N])=>`
${N}
`).join("")}
- - -
Gradients
-
-
primary
-
brand
-
tertiary
-
surface
+
Gradients
+
+ ${["primary","brand","tertiary","surface"].map(te=>`
${te}
`).join("")}
- -
-
Typography
- -
-
The quick brown fox
-
jumps over the lazy dog
-
Display S — heading family
+
+
Typography
+
+ The quick brown fox + jumps over the lazy dog + Display S — heading family
- -
-
-
Heading 2XL / 700
-
Heading XL / 600
-
Heading L / 600
-
Heading M / 600
-
Heading S / 600
-
LABEL / OVERLINE
+
+
+ Heading 2XL + Heading XL + Heading L + Heading M + Heading S + Label / overline
-
-

Body — The quick brown fox jumps over the lazy dog. Good typography establishes hierarchy and builds trust with readers.

-

Secondary — supporting text, descriptions, and metadata that help without competing with the primary content.

-

Micro / caption text for timestamps, tags, and helper copy.

- const tokens = design() -
Bolditalicunderlinestrikethrough
+
+

Body — The quick brown fox jumps over the lazy dog. Good typography establishes hierarchy and builds trust with readers.

+

Secondary — supporting text, descriptions, and metadata that help without competing with the primary content.

+

Micro / caption text for timestamps, tags, and helper copy.

+

const tokens = design()

+

Bolditalicunderlinestrikethrough

- -
-
-
Border radius
-
-
xs
-
s
-
m
-
l
-
xl
-
2xl
-
full
+
+
+
Border radius
+
+ ${m.map(te=>`
${te}
`).join("")}
- -
-
Shadows
-
-
xs
-
s
-
m
-
l
-
xl
-
2xl
+
+
Shadows
+
+ ${h.map(te=>`
${te}
`).join("")}
- -
-
Components
- -
- - - - - +
+
Components
+
+ + + + +
- -
-
-
🎨
-
Feature card
-
Design tokens that adapt to your brand and context automatically.
-
-
-
Active users
-
12,431
-
↑ 8.4% this week
- -
-
- - - -
+
+
+
🎨
+ Feature card +

Design tokens that adapt to your brand and context automatically.

+
+
+ Active users + 12,431 + ↑ 8.4% this week + +
+
+ + +
- -
-
Layouts & macros
- - -

.sf-text-gradient heading

-
- - -
.sf-cluster
-
- Tag - Another - Ghost - Wraps nicely +
+
Layouts & macros
+

.sf-text-gradient heading

+
+ + .sf-cluster +
+ Tag + Another + Ghost + Wraps nicely
- -
.sf-grid
-
-
Grid item 1
-
Grid item 2
-
Grid item 3
+ .sf-grid +
+
Grid item 1
+
Grid item 2
+
Grid item 3
- -
.sf-sidebar + .sf-stack
+ .sf-sidebar + .sf-stack
-
-
- Sidebar - Stacked - items -
-
-
- Main content area — the sidebar holds its width while this region fills the rest, collapsing to a single column when space runs out. +
+ Sidebar + Stacked + items
+
Main content area — the sidebar holds its width while this region fills the rest, collapsing to a single column when space runs out.
- -
-
Spacing scale
-
-
3xs
-
2xs
-
xs
-
s
-
m
-
l
-
xl
-
2xl
-
3xl
-
4xl
+
+
Spacing scale
+
+ ${v.map(te=>`
${te}
`).join("")}
-
`};function _(ne,fe,Pe,De,ze){const Le=Mo(ne,{mode:"root",banner:!1}),qe=Pe==="slow"?"*, *::before, *::after { transition-duration: 200% !important; animation-duration: 200% !important; }":Pe==="none"?"*, *::before, *::after { transition: none !important; animation: none !important; }":"",je=c(ne).map(({url:lt})=>` `).join(` +
`,B={marketing:S,components:R,stylescape:A};function q(te,N,V,ue,ye){const st=Go(o(te),{mode:"root",banner:!1}),Ke=V==="slow"?"*, *::before, *::after { transition-duration: 200% !important; animation-duration: 200% !important; }":V==="none"?"*, *::before, *::after { transition: none !important; animation: none !important; }":"",I=c(te).map(({url:X})=>` `).join(` `);return` - + SLASHED Preview -${je?je+` -`:""} - - + + + -${k[De]} +${B[ue]} -`}let E=j(!1),B=j(null),U=j(null),S=j(null),z=j(0),L=j(0),P=j(0),w=j(0),R=u(()=>_({},e.previewTheme,e.previewMotion,e.previewTemplate,Ds)),D=u(()=>_({},"light",e.previewMotion,e.previewTemplate,Ds)),A=u(()=>_({},"dark",e.previewMotion,e.previewTemplate,Ds));ha(()=>{const ne=e.overrides,fe=e.previewTheme,Pe=t(z),De=Wo.value,ze=t(B);if(Pe===0||!ze)return;const Le=ze.contentDocument;if(!Le)return;const qe=Le.getElementById("slashed-overrides");qe&&(qe.textContent=Mo(o(ne),{mode:"root",banner:!1})),d(Le,ne),Le.documentElement.setAttribute("data-theme",fe),De?Le.documentElement.setAttribute("data-lumlocker",""):Le.documentElement.removeAttribute("data-lumlocker"),Fn(Le),er()}),ha(()=>{const ne=e.overrides,fe=t(L),Pe=t(P),De=Wo.value,ze=Mo(o(ne),{mode:"root",banner:!1}),Le=qe=>{De?qe.documentElement.setAttribute("data-lumlocker",""):qe.documentElement.removeAttribute("data-lumlocker")};if(t(U)&&fe>0){const qe=t(U).contentDocument;if(qe){const je=qe.getElementById("slashed-overrides");je&&(je.textContent=ze),d(qe,ne),Le(qe),Fn(qe)}}if(t(S)&&Pe>0){const qe=t(S).contentDocument;if(qe){const je=qe.getElementById("slashed-overrides");je&&(je.textContent=ze),d(qe,ne),Le(qe)}}er()});let T=u(()=>e.previewWidth!=="fluid");function M(){return e.previewWidth==="fluid"?"width:100%;height:100%":e.previewWidth==="mobile"?"width:390px;height:750px;border:1px solid rgba(255,255,255,0.12);border-radius:28px;overflow:hidden;background:#fff;box-shadow:0 32px 80px rgba(0,0,0,0.5)":e.previewWidth==="tablet"?"width:768px;height:900px;border:1px solid rgba(255,255,255,0.12);border-radius:24px;overflow:hidden;background:#fff;box-shadow:0 32px 80px rgba(0,0,0,0.5)":"width:1024px;height:720px;border:1px solid rgba(255,255,255,0.12);border-radius:16px;overflow:hidden;background:#fff;box-shadow:0 32px 80px rgba(0,0,0,0.5)"}var Q=lu(),He=s(Q),ee=s(He);re(ee,21,()=>n,ne=>ne.id,(ne,fe)=>{var Pe=eu(),De=s(Pe);O(()=>{Ye(Pe,1,`px-2.5 py-0.5 rounded-md text-[10px] font-bold transition-all cursor-pointer ${e.previewTemplate===t(fe).id?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(De,t(fe).label)}),x("click",Pe,()=>e.onTemplateChange(t(fe).id)),f(ne,Pe)});var be=r(ee,4);re(be,20,()=>["fluid","desktop","tablet","mobile"],ne=>ne,(ne,fe)=>{var Pe=tu(),De=s(Pe);{var ze=je=>{Yd(je,{class:"w-3 h-3"})},Le=je=>{Jd(je,{class:"w-3 h-3"})},qe=je=>{Fd(je,{class:"w-3 h-3"})};I(De,je=>{fe==="mobile"?je(ze):fe==="tablet"?je(Le,1):je(qe,-1)})}O(()=>{Y(Pe,"title",fe==="fluid"?"Full width":fe==="desktop"?"Desktop (1024px)":fe==="tablet"?"Tablet (768px)":"Mobile (390px)"),Ye(Pe,1,`p-1 rounded-md transition-all cursor-pointer ${e.previewWidth===fe?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`)}),x("click",Pe,()=>e.onWidthChange(fe)),f(ne,Pe)});var Ie=r(be,2),pe=s(Ie),he=s(pe);zn(he,{class:"w-3 h-3"});var Ne=r(pe,2),at=s(Ne);Un(at,{class:"w-3 h-3"});var et=r(Ne,2),N=s(et);Rd(N,{class:"w-3 h-3"});var W=r(Ie,4),ye=s(W);ye.value=ye.__value="normal";var ge=r(ye);ge.value=ge.__value="slow";var Z=r(ge);Z.value=Z.__value="none";var we;Fa(W);var Ge=r(W,2),nt=s(Ge);qd(nt,{class:"w-3 h-3"});var Oe=r(Ge,2),Be=s(Oe);Td(Be,{class:"w-3 h-3"});var te=r(He,2),q=s(te);{var ke=ne=>{var fe=su(),Pe=s(fe),De=s(Pe),ze=s(De),Le=s(ze);zn(Le,{class:"w-2.5 h-2.5"});var qe=r(De,2);pr(qe,()=>t(w),oe=>{var xe=au();Do(xe,Ee=>C(U,Ee),()=>t(U)),O(()=>Y(xe,"srcdoc",t(D))),co("load",xe,()=>{C(L,t(L)+1)}),f(oe,xe)});var je=r(Pe,2),lt=s(je),dt=s(lt),Ot=s(dt);Un(Ot,{class:"w-2.5 h-2.5"});var vt=r(lt,2);pr(vt,()=>t(w),oe=>{var xe=ou();Do(xe,Ee=>C(S,Ee),()=>t(S)),O(()=>Y(xe,"srcdoc",t(A))),co("load",xe,()=>{C(P,t(P)+1)}),f(oe,xe)}),f(ne,fe)},Ze=ne=>{var fe=nu(),Pe=s(fe);pr(Pe,()=>t(w),De=>{var ze=ru();Do(ze,Le=>C(B,Le),()=>t(B)),O(()=>Y(ze,"srcdoc",t(R))),co("load",ze,()=>{C(z,t(z)+1)}),f(De,ze)}),O(De=>{it(fe,De),Ye(fe,1,lo(t(T)?"":"w-full h-full"))},[()=>M()]),f(ne,fe)};I(q,ne=>{t(E)?ne(ke):ne(Ze,-1)})}O(()=>{Ye(pe,1,`p-1 rounded-md transition-all cursor-pointer ${!t(E)&&e.previewTheme==="light"?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),Ye(Ne,1,`p-1 rounded-md transition-all cursor-pointer ${!t(E)&&e.previewTheme==="dark"?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),Ye(et,1,`p-1 rounded-md transition-all cursor-pointer ${t(E)?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),we!==(we=e.previewMotion)&&(W.value=(W.__value=e.previewMotion)??"",Ba(W,e.previewMotion)),Ye(te,1,`flex-1 min-h-0 flex overflow-auto ${t(T)&&!t(E)?"items-center justify-center bg-[#06060a]":""}`)}),x("click",pe,()=>{C(E,!1),e.onThemeChange("light")}),x("click",Ne,()=>{C(E,!1),e.onThemeChange("dark")}),x("click",et,()=>{C(E,!t(E))}),x("change",W,ne=>e.onMotionChange(ne.target.value)),x("click",Ge,()=>{C(z,0),C(L,0),C(P,0),C(w,t(w)+1)}),x("click",Oe,()=>{const ne=new Blob([_(e.overrides,e.previewTheme,e.previewMotion,e.previewTemplate,Ds)],{type:"text/html"}),fe=URL.createObjectURL(ne);window.open(fe,"_blank")}),f(a,Q),$t()}aa(["click","change"]);const cu=["prose","flow-space","line-clamp","aspect","scroll-shadow","scrim","surface-color","content-intrinsic"],du=["color","contrast","palette-mix","lumlocker","gradient"],fu=["font","--sf-text","leading","tracking","weight","body-font","heading-font","body-em","body-text","heading-text","display-l-","display-m-","-h1-","-h2-","-h3-","-h4-","-h5-","-h6-","link-","optical-sizing","fluid-min-vw","fluid-max-vw"],uu=["space","section","gutter","content-gap","component-pad"],pu=["container","layout","grid","breakpoint","measure","column","header-height","touch-target","bento","cluster","cover-min","equal-min","frame","ratio-","reel","safe-","sidebar","switcher","-bg-"],mu=["radius","border-width","border-scale","border-style","divider"],vu=["shadow"],hu=["motion","duration","easing","ease","scroll-timeline"],gu=["filter","blur","backdrop","opacity","effect"],bu=["z-","cursor","ring","focus","outline","selection","icon","is-active","is-current","is-open","is-pressed","field-required","object-fit","object-position","print-","scrollbar","size-"],yu={macros:cu,colors:du,typography:fu,spacing:uu,layout:pu,borders:mu,shadows:vu,motion:hu,effects:gu,misc:bu},Ei=yu;function fn(a){for(const[e,o]of Object.entries(Ei))if(e!=="misc"&&o.some(n=>a.includes(n)))return e;return"misc"}const Ri=[{id:"default",name:"Framework default",icon:"⚪",blurb:"Clear every override and let the framework defaults take over.",tags:["minimal"],overrides:{}},{id:"bold",name:"Bold",icon:"🔥",blurb:"Saturated brand colors, larger type, snappier motion, stronger elevation.",tags:["bold"],overrides:{"--sf-color-primary-source-light":"oklch(0.55 0.28 264)","--sf-color-action-source-light":"oklch(0.62 0.23 18)","--sf-text-scale":"1.08","--sf-text-display-scale":"1.15","--sf-shadow-strength":"calc(0.18 + var(--sf-is-dark) * 0.22)","--sf-radius-scale":"1.1","--sf-motion-scale":"0.85"}},{id:"editorial",name:"Editorial",icon:"📰",blurb:"Generous spacing, narrower prose, restrained shadows — long-form reading.",tags:["editorial"],overrides:{"--sf-font-body":"Georgia, 'Times New Roman', serif","--sf-font-heading":"Georgia, 'Times New Roman', serif","--sf-text-scale":"1.05","--sf-space-scale":"1.15","--sf-section-scale":"1.2","--sf-shadow-strength":"calc(0.04 + var(--sf-is-dark) * 0.08)","--sf-radius-scale":"0.5"}},{id:"soft",name:"Soft Cloud",icon:"🫧",blurb:"Lower chroma, larger radii, diffuse shadows — a calmer marketing look.",tags:["minimal"],overrides:{"--sf-color-primary-source-light":"oklch(0.62 0.12 250)","--sf-color-secondary-source-light":"oklch(0.7 0.06 200)","--sf-radius-scale":"1.6","--sf-shadow-strength":"calc(0.06 + var(--sf-is-dark) * 0.1)","--sf-space-scale":"1.05","--sf-motion-scale":"1.1"}},{id:"high-contrast",name:"High Contrast",icon:"⚫",blurb:"Maximum contrast for accessibility; reduced motion respected.",tags:["accessible"],overrides:{"--sf-contrast-bias":"0.15","--sf-contrast-threshold":"0.5","--sf-color-primary-source-light":"oklch(0.45 0.28 264)","--sf-color-action-source-light":"oklch(0.4 0.25 18)","--sf-shadow-strength":"calc(0.22 + var(--sf-is-dark) * 0.28)","--sf-motion-scale":"0","--sf-focus-ring-width":"3px"}},{id:"brutalist",name:"Neo-Brutalist",icon:"🧱",blurb:"Sharp corners, heavy borders, no shadows — utilitarian and uncompromising.",tags:["bold"],overrides:{"--sf-radius-scale":"0","--sf-shadow-strength":"0","--sf-border-width-1":"2px","--sf-border-width-2":"3px","--sf-text-scale":"0.95","--sf-motion-scale":"0.6"}},{id:"midnight",name:"Midnight",icon:"🌙",blurb:"Deep navy base palette with vibrant violet primary — dark-first.",tags:["dark-first"],overrides:{"--sf-color-base-source-dark":"oklch(0.14 0.04 265)","--sf-color-primary-source-light":"oklch(0.6 0.22 270)","--sf-color-primary-source-dark":"oklch(0.72 0.2 270)","--sf-color-action-source-light":"oklch(0.65 0.2 290)","--sf-shadow-strength":"calc(0.05 + var(--sf-is-dark) * 0.3)","--sf-radius-scale":"1.2"}},{id:"sand",name:"Sand & Clay",icon:"🏺",blurb:"Warm neutrals, earthy action color — organic and grounded.",tags:["editorial"],overrides:{"--sf-color-primary-source-light":"oklch(0.58 0.08 60)","--sf-color-action-source-light":"oklch(0.55 0.14 35)","--sf-color-neutral-source-light":"oklch(0.5 0.02 70)","--sf-radius-scale":"0.6","--sf-shadow-strength":"calc(0.06 + var(--sf-is-dark) * 0.1)","--sf-font-body":"'Georgia', serif"}}];var xu=g('You have .',1),ku=g(''),wu=g(''),_u=g(' '),Cu=g(''),Ou=g('
SLASHED Studio

Configure every SLASHED design token visually. Changes appear live in the preview.

Theme presets
Token domains
');function Su(a,e){Qt(e,!0);const o=[{id:"colors",icon:li,label:"Colors",desc:"Brand, semantic & neutral palettes"},{id:"typography",icon:mi,label:"Typography",desc:"Font families & fluid type scale"},{id:"spacing",icon:ci,label:"Spacing",desc:"Space scale & section rhythm"},{id:"borders",icon:ui,label:"Borders",desc:"Corner radius & border widths"},{id:"shadows",icon:ri,label:"Shadows",desc:"Elevation & depth control"},{id:"motion",icon:hi,label:"Motion",desc:"Duration & easing curves"}];let n=u(()=>Object.keys(e.overrides).length);var l=Ou(),i=s(l),c=s(i),d=s(c);fi(d,{class:"w-4 h-4 text-indigo-400"});var p=r(c,2),m=r(s(p));{var h=z=>{var L=xu(),P=r(de(L)),w=s(P);O(()=>y(w,`${t(n)??""} active override${t(n)!==1?"s":""}`)),f(z,L)},v=z=>{var L=lr("Start by picking a theme preset below, or dive into any domain.");f(z,L)};I(m,z=>{t(n)>0?z(h):z(v,-1)})}var b=r(p,2);{var k=z=>{var L=ku();x("click",L,function(...P){e.onResetAll?.apply(this,P)}),f(z,L)};I(b,z=>{t(n)>0&&z(k)})}var _=r(i,2),E=r(s(_),2);re(E,21,()=>Ri.slice(0,6),z=>z.id,(z,L)=>{var P=wu(),w=s(P),R=s(w),D=r(w,2),A=s(D),T=s(A),M=r(A,2),Q=s(M);O(()=>{y(R,t(L).icon),y(T,t(L).name),y(Q,t(L).blurb)}),x("click",P,()=>e.onApplyTheme(t(L))),f(z,P)});var B=r(E,2),U=r(_,2),S=r(s(U),2);re(S,21,()=>o,z=>z.id,(z,L)=>{const P=u(()=>Object.keys(e.overrides).filter(pe=>pe.includes(t(L).id.slice(0,5))).length),w=u(()=>t(L).icon);var R=Cu(),D=s(R),A=s(D);Fr(A,()=>t(w),(pe,he)=>{he(pe,{class:"w-4 h-4"})});var T=r(D,2),M=s(T),Q=s(M),He=r(M,2),ee=s(He),be=r(T,2);{var Ie=pe=>{var he=_u(),Ne=s(he);O(()=>y(Ne,t(P))),f(pe,he)};I(be,pe=>{t(P)>0&&pe(Ie)})}O(()=>{y(Q,t(L).label),y(ee,t(L).desc)}),x("click",R,()=>e.onSelect(t(L).id)),f(z,R)}),x("click",B,()=>e.onSelect("themes")),f(a,l),$t()}aa(["click"]);const jo={colors:[{name:"--sf-contrast-bias",label:"Contrast bias",help:"Shifts the lightness threshold used by text-on-color pairing toward darker (negative) or lighter (positive) text.",default:0,min:-1,max:1,step:.05,driving:3},{name:"--sf-contrast-threshold",label:"Contrast threshold",help:"OKLCH lightness above which a swatch is considered 'light' (gets dark text). Below = light text.",default:.6,min:0,max:1,step:.01,driving:11},{name:"--sf-focus-ring-width",label:"Focus ring width",help:"Thickness of the focus ring on every interactive element.",default:2,min:0,max:6,step:.5,unit:"px",driving:1}],typography:[{name:"--sf-text-scale",label:"Text scale",help:"Multiplier applied to the entire fluid text ramp (2xs … 2xl).",default:1,min:.5,max:2,step:.05,driving:9},{name:"--sf-text-display-scale",label:"Display scale",help:"Multiplier applied to the display ramp (display-s, display-m, display-l).",default:1,min:.5,max:2,step:.05,driving:3}],spacing:[{name:"--sf-space-scale",label:"Space scale",help:"Multiplier applied to every fluid spacing step. One drag moves 45 tokens.",default:1,min:.5,max:2,step:.05,driving:45},{name:"--sf-section-scale",label:"Section scale",help:"Multiplier applied to section paddings only.",default:1,min:.5,max:2,step:.05,driving:6}],borders:[{name:"--sf-radius-scale",label:"Radius scale",help:"Multiplier applied to every radius step (set to 0 for sharp brutalist corners).",default:1,min:0,max:2,step:.05,driving:8}],shadows:[{name:"--sf-shadow-strength",label:"Shadow strength",help:"Base shadow opacity. Auto-boosted +0.17 in dark mode. Slider sets the light-mode base.",default:.08,min:0,max:.5,step:.01,driving:14,encode:a=>`calc(${a} + var(--sf-is-dark) * 0.17)`,decode:a=>{const e=/^calc\(\s*([\d.e+-]+)/.exec(String(a));return e?parseFloat(e[1]):NaN}}],motion:[{name:"--sf-motion-scale",label:"Motion scale",help:"Speed multiplier on every duration. Set to 0 to effectively disable motion.",default:1,min:0,max:2,step:.05,driving:13}]};/** +`}let T=K(!1),E=K(null),C=K(null),z=K(null),G=K(0),O=K(0),j=K(0),M=K(0),Y=u(()=>q({},e.previewTheme,e.previewMotion,e.previewTemplate,Ns)),Oe=u(()=>q({},"light",e.previewMotion,e.previewTemplate,Ns)),De=u(()=>q({},"dark",e.previewMotion,e.previewTemplate,Ns));ba(()=>{const te=e.overrides,N=e.previewTheme,V=t(G),ue=Xo.value,ye=t(E);if(V===0||!ye)return;const st=ye.contentDocument;if(!st)return;const Ke=st.getElementById("slashed-overrides");Ke&&(Ke.textContent=Go(o(te),{mode:"root",banner:!1})),f(st,te),st.documentElement.setAttribute("data-theme",N),ue?st.documentElement.setAttribute("data-lumlocker",""):st.documentElement.removeAttribute("data-lumlocker"),Kn(st),or()}),ba(()=>{const te=e.overrides,N=t(O),V=t(j),ue=Xo.value,ye=Go(o(te),{mode:"root",banner:!1}),st=Ke=>{ue?Ke.documentElement.setAttribute("data-lumlocker",""):Ke.documentElement.removeAttribute("data-lumlocker")};if(t(C)&&N>0){const Ke=t(C).contentDocument;if(Ke){const I=Ke.getElementById("slashed-overrides");I&&(I.textContent=ye),f(Ke,te),st(Ke),Kn(Ke)}}if(t(z)&&V>0){const Ke=t(z).contentDocument;if(Ke){const I=Ke.getElementById("slashed-overrides");I&&(I.textContent=ye),f(Ke,te),st(Ke)}}or()});let Me=u(()=>e.previewWidth!=="fluid");function xe(){return e.previewWidth==="fluid"?"width:100%;height:100%":e.previewWidth==="mobile"?"width:390px;height:750px;border:1px solid rgba(255,255,255,0.12);border-radius:28px;overflow:hidden;background:#fff;box-shadow:0 32px 80px rgba(0,0,0,0.5)":e.previewWidth==="tablet"?"width:768px;height:900px;border:1px solid rgba(255,255,255,0.12);border-radius:24px;overflow:hidden;background:#fff;box-shadow:0 32px 80px rgba(0,0,0,0.5)":"width:1024px;height:720px;border:1px solid rgba(255,255,255,0.12);border-radius:16px;overflow:hidden;background:#fff;box-shadow:0 32px 80px rgba(0,0,0,0.5)"}var be=vu(),Q=s(be),se=s(Q);oe(se,21,()=>n,te=>te.id,(te,N)=>{var V=iu(),ue=s(V);_(()=>{Ve(V,1,`shrink-0 px-2.5 py-0.5 rounded-md text-[10px] font-bold transition-all cursor-pointer ${e.previewTemplate===t(N).id?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(ue,t(N).label)}),x("click",V,()=>e.onTemplateChange(t(N).id)),d(te,V)});var Se=r(se,4);oe(Se,20,()=>["fluid","desktop","tablet","mobile"],te=>te,(te,N)=>{var V=cu(),ue=s(V);{var ye=I=>{af(I,{class:"w-3 h-3"})},st=I=>{of(I,{class:"w-3 h-3"})},Ke=I=>{$d(I,{class:"w-3 h-3"})};L(ue,I=>{N==="mobile"?I(ye):N==="tablet"?I(st,1):I(Ke,-1)})}_(()=>{$(V,"title",N==="fluid"?"Full width":N==="desktop"?"Desktop (1024px)":N==="tablet"?"Tablet (768px)":"Mobile (390px)"),Ve(V,1,`p-1 rounded-md transition-all cursor-pointer ${e.previewWidth===N?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`)}),x("click",V,()=>e.onWidthChange(N)),d(te,V)});var Ce=r(Se,2),H=s(Ce),D=s(H);Mn(D,{class:"w-3 h-3"});var ee=r(H,2),le=s(ee);Dn(le,{class:"w-3 h-3"});var W=r(ee,2),me=s(W);Wd(me,{class:"w-3 h-3"});var ke=r(Ce,4),he=s(ke);he.value=he.__value="normal";var ie=r(he);ie.value=ie.__value="slow";var Ue=r(ie);Ue.value=Ue.__value="none";var Ne;Da(ke);var Xe=r(ke,2),We=s(Xe);ef(We,{class:"w-3 h-3"});var Qe=r(Xe,2),dt=s(Qe);Yd(dt,{class:"w-3 h-3"});var gt=r(Q,2),kt=s(gt);{var wt=te=>{var N=uu(),V=s(N),ue=s(V),ye=s(ue),st=s(ye);Mn(st,{class:"w-2.5 h-2.5"});var Ke=r(ue,2);yr(Ke,()=>t(M),ut=>{var je=du();bo(je,it=>w(C,it),()=>t(C)),_(()=>$(je,"srcdoc",t(Oe))),go("load",je,()=>{w(O,t(O)+1)}),d(ut,je)});var I=r(V,2),X=s(I),ae=s(X),Pe=s(ae);Dn(Pe,{class:"w-2.5 h-2.5"});var Te=r(X,2);yr(Te,()=>t(M),ut=>{var je=fu();bo(je,it=>w(z,it),()=>t(z)),_(()=>$(je,"srcdoc",t(De))),go("load",je,()=>{w(j,t(j)+1)}),d(ut,je)}),d(te,N)},mt=te=>{var N=mu(),V=s(N);yr(V,()=>t(M),ue=>{var ye=pu();bo(ye,st=>w(E,st),()=>t(E)),_(()=>$(ye,"srcdoc",t(Y))),go("load",ye,()=>{w(G,t(G)+1)}),d(ue,ye)}),_(ue=>{lt(N,ue),Ve(N,1,mo(t(Me)?"":"w-full h-full"))},[()=>xe()]),d(te,N)};L(kt,te=>{t(T)?te(wt):te(mt,-1)})}_(()=>{Ve(H,1,`p-1 rounded-md transition-all cursor-pointer ${!t(T)&&e.previewTheme==="light"?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),Ve(ee,1,`p-1 rounded-md transition-all cursor-pointer ${!t(T)&&e.previewTheme==="dark"?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),Ve(W,1,`p-1 rounded-md transition-all cursor-pointer ${t(T)?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),Ne!==(Ne=e.previewMotion)&&(ke.value=(ke.__value=e.previewMotion)??"",Ia(ke,e.previewMotion)),Ve(gt,1,`flex-1 min-h-0 flex overflow-auto ${t(Me)&&!t(T)?"items-center justify-center bg-[#06060a]":""}`)}),x("click",H,()=>{w(T,!1),e.onThemeChange("light")}),x("click",ee,()=>{w(T,!1),e.onThemeChange("dark")}),x("click",W,()=>{w(T,!t(T))}),x("change",ke,te=>e.onMotionChange(te.target.value)),x("click",Xe,()=>{w(G,0),w(O,0),w(j,0),w(M,t(M)+1)}),x("click",Qe,()=>{const te=new Blob([q(e.overrides,e.previewTheme,e.previewMotion,e.previewTemplate,Ns)],{type:"text/html"}),N=URL.createObjectURL(te);window.open(N,"_blank")}),d(a,be),ea()}oa(["click","change"]);const gu=["prose","flow-space","line-clamp","aspect","scroll-shadow","scrim","surface-color","content-intrinsic"],bu=["color","contrast","palette-mix","lumlocker","gradient"],yu=["font","--sf-text","leading","tracking","weight","body-font","heading-font","body-em","body-text","heading-text","display-l-","display-m-","-h1-","-h2-","-h3-","-h4-","-h5-","-h6-","link-","optical-sizing","fluid-min-vw","fluid-max-vw"],xu=["space","section","gutter","content-gap","component-pad"],ku=["container","layout","grid","breakpoint","measure","column","header-height","touch-target","bento","cluster","cover-min","equal-min","frame","ratio-","reel","safe-","sidebar","switcher","-bg-"],wu=["radius","border-width","border-scale","border-style","divider"],_u=["shadow"],Cu=["motion","duration","easing","ease","scroll-timeline"],Ou=["filter","blur","backdrop","opacity","effect"],Su=["z-","cursor","ring","focus","outline","selection","icon","is-active","is-current","is-open","is-pressed","field-required","object-fit","object-position","print-","scrollbar","size-"],Lu={macros:gu,colors:bu,typography:yu,spacing:xu,layout:ku,borders:wu,shadows:_u,motion:Cu,effects:Ou,misc:Su},Vi=Lu;function hn(a){for(const[e,o]of Object.entries(Vi))if(e!=="misc"&&o.some(n=>a.includes(n)))return e;return"misc"}const Ki="slashed-studio/themes/v1";function Pu(a){return!!a&&typeof a=="object"&&!Array.isArray(a)&&Object.values(a).every(e=>typeof e=="string")}function Iu(a){if(!a||typeof a!="object"||Array.isArray(a))return!1;const e=a;return typeof e.id=="string"&&typeof e.name=="string"&&typeof e.icon=="string"&&typeof e.blurb=="string"&&Pu(e.overrides)}function sr(){if(typeof window>"u")return[];try{const a=localStorage.getItem(Ki);if(!a)return[];const e=JSON.parse(a);return Array.isArray(e)?e.filter(Iu):[]}catch{return[]}}function Wi(a){if(typeof window>"u")return!1;try{return localStorage.setItem(Ki,JSON.stringify(a)),!0}catch{return!1}}function Yi(){return sr()}function Zi(a,e){const o=sr(),n=a.trim()||"Untitled theme",l={id:`theme-${Date.now()}-${Math.random().toString(36).slice(2,7)}`,name:n,icon:"🎨",blurb:`${Object.keys(e).length} override${Object.keys(e).length===1?"":"s"}`,overrides:{...e}},i=[...o,l];return Wi(i)?i:o}function Bu(a){const e=sr().filter(o=>o.id!==a);return Wi(e)?e:sr()}var Uu=g('You have .',1),Au=g(''),zu=g(' '),Eu=g(''),Ru=g(''),Tu=g('

No saved themes yet. Configure tokens, then save.

'),Du=g(''),Mu=g('
'),Nu=g('
SLASHED Studio

Configure every SLASHED design token visually. Changes appear live in the preview.

Token domains
Tools
Saved themes
');function Fu(a,e){$t(e,!0);const o=[{id:"colors",icon:hi,label:"Colors",desc:"Brand, semantic & neutral palettes"},{id:"typography",icon:Oi,label:"Typography",desc:"Font families & fluid type scale"},{id:"spacing",icon:xi,label:"Spacing",desc:"Space scale & section rhythm"},{id:"layout",icon:gi,label:"Layout",desc:"Containers, grids & primitives"},{id:"borders",icon:_i,label:"Borders",desc:"Corner radius & border widths"},{id:"shadows",icon:pi,label:"Shadows",desc:"Elevation & depth control"},{id:"motion",icon:Li,label:"Motion",desc:"Duration & easing curves"},{id:"effects",icon:Wr,label:"Effects",desc:"Blur, opacity & scrollbars"},{id:"macros",icon:di,label:"Macros",desc:"Flow, prose, aspect & scrim"},{id:"misc",icon:bi,label:"Misc",desc:"Z-index & remaining tokens"}],n=[{id:"themes",icon:Ci,label:"Themes",desc:"Save & re-apply configurations"},{id:"wcag",icon:ki,label:"WCAG",desc:"Contrast checker & fixes"},{id:"setup",icon:vi,label:"Install",desc:"Export overrides & setup"},{id:"cheatsheet",icon:fi,label:"Classes",desc:"Utility class reference"}],l={colors:["color","contrast","focus-ring"],typography:["text","font","leading","tracking","h1","h2","h3","h4","h5","h6","body"],spacing:["space","gap","gutter","section"],layout:["container","grid","sidebar","bento","reel","cluster","stack","frame"],borders:["radius","border","divider","btn-","field-"],shadows:["shadow"],motion:["motion","duration","ease","animation","transition"],effects:["blur","opacity","scrollbar","scrim","backdrop"],macros:["flow","prose","aspect","scroll-shadow","line-clamp"],misc:["z-"]};function i(Q){const se=l[Q];return se?Object.keys(e.overrides).filter(Se=>se.some(Ce=>Se.includes(Ce))).length:0}let c=u(()=>Object.keys(e.overrides).length),f=K(ma(Yi())),p=K("");function m(){t(c)!==0&&(w(f,Zi(t(p),e.overrides),!0),w(p,""))}var h=Nu(),v=s(h),b=s(v),k=s(b);Wr(k,{class:"w-4 h-4 text-indigo-400"});var S=r(b,2),R=r(s(S));{var P=Q=>{var se=Uu(),Se=r(fe(se)),Ce=s(Se);_(()=>y(Ce,`${t(c)??""} active override${t(c)!==1?"s":""}`)),d(Q,se)},A=Q=>{var se=ns("Pick any domain below to get started.");d(Q,se)};L(R,Q=>{t(c)>0?Q(P):Q(A,-1)})}var B=r(S,2);{var q=Q=>{var se=Au();x("click",se,function(...Se){e.onResetAll?.apply(this,Se)}),d(Q,se)};L(B,Q=>{t(c)>0&&Q(q)})}var T=r(v,2),E=r(s(T),2);oe(E,21,()=>o,Q=>Q.id,(Q,se)=>{const Se=u(()=>i(t(se).id)),Ce=u(()=>t(se).icon);var H=Eu(),D=s(H),ee=s(D);tr(ee,()=>t(Ce),(Ne,Xe)=>{Xe(Ne,{class:"w-4 h-4"})});var le=r(D,2),W=s(le),me=s(W),ke=r(W,2),he=s(ke),ie=r(le,2);{var Ue=Ne=>{var Xe=zu(),We=s(Xe);_(()=>y(We,t(Se))),d(Ne,Xe)};L(ie,Ne=>{t(Se)>0&&Ne(Ue)})}_(()=>{y(me,t(se).label),y(he,t(se).desc)}),x("click",H,()=>e.onSelect(t(se).id)),d(Q,H)});var C=r(T,2),z=r(s(C),2);oe(z,21,()=>n,Q=>Q.id,(Q,se)=>{const Se=u(()=>t(se).icon);var Ce=Ru(),H=s(Ce),D=s(H);tr(D,()=>t(Se),(he,ie)=>{ie(he,{class:"w-4 h-4"})});var ee=r(H,2),le=s(ee),W=s(le),me=r(le,2),ke=s(me);_(()=>{y(W,t(se).label),y(ke,t(se).desc)}),x("click",Ce,()=>e.onSelect(t(se).id)),d(Q,Ce)});var G=r(C,2),O=s(G),j=r(s(O),2),M=r(O,2),Y=s(M),Oe=r(Y,2),De=s(Oe);mr(De,{class:"w-3 h-3"});var Me=r(M,2);{var xe=Q=>{var se=Tu();d(Q,se)},be=Q=>{var se=Mu();oe(se,21,()=>t(f).slice(0,6),Se=>Se.id,(Se,Ce)=>{var H=Du(),D=s(H),ee=s(D),le=r(D,2),W=s(le),me=s(W),ke=r(W,2),he=s(ke);_(()=>{y(ee,t(Ce).icon),y(me,t(Ce).name),y(he,t(Ce).blurb)}),x("click",H,()=>e.onApplyTheme(t(Ce).overrides)),d(Se,H)}),d(Q,se)};L(Me,Q=>{t(f).length===0?Q(xe):Q(be,-1)})}_(()=>Oe.disabled=t(c)===0),x("click",j,()=>e.onSelect("themes")),x("keydown",Y,Q=>{Q.key==="Enter"&&m()}),pr(Y,()=>t(p),Q=>w(p,Q)),x("click",Oe,m),d(a,h),ea()}oa(["click","keydown"]);const qo={colors:[{name:"--sf-contrast-bias",label:"Contrast bias",help:"Shifts the lightness threshold used by text-on-color pairing toward darker (negative) or lighter (positive) text.",default:0,min:-1,max:1,step:.05,driving:3},{name:"--sf-contrast-threshold",label:"Contrast threshold",help:"OKLCH lightness above which a swatch is considered 'light' (gets dark text). Below = light text.",default:.6,min:0,max:1,step:.01,driving:11},{name:"--sf-focus-ring-width",label:"Focus ring width",help:"Thickness of the focus ring on every interactive element.",default:2,min:0,max:6,step:.5,unit:"px",driving:1}],typography:[{name:"--sf-text-scale",label:"Text scale",help:"Multiplier applied to the entire fluid text ramp (2xs … 2xl).",default:1,min:.5,max:2,step:.05,driving:9},{name:"--sf-text-display-scale",label:"Display scale",help:"Multiplier applied to the display ramp (display-s, display-m, display-l).",default:1,min:.5,max:2,step:.05,driving:3}],spacing:[{name:"--sf-space-scale",label:"Space scale",help:"Multiplier applied to every fluid spacing step. One drag moves 45 tokens.",default:1,min:.5,max:2,step:.05,driving:45},{name:"--sf-section-scale",label:"Section scale",help:"Multiplier applied to section paddings only.",default:1,min:.5,max:2,step:.05,driving:6}],borders:[{name:"--sf-radius-scale",label:"Radius scale",help:"Multiplier applied to every radius step (set to 0 for sharp brutalist corners).",default:1,min:0,max:2,step:.05,driving:8}],shadows:[{name:"--sf-shadow-strength",label:"Shadow strength",help:"Base shadow opacity. Auto-boosted +0.17 in dark mode. Slider sets the light-mode base.",default:.08,min:0,max:.5,step:.01,driving:14,encode:a=>`calc(${a} + var(--sf-is-dark) * 0.17)`,decode:a=>{const e=/^calc\(\s*([\d.e+-]+)/.exec(String(a));return e?parseFloat(e[1]):NaN}}],motion:[{name:"--sf-motion-scale",label:"Motion scale",help:"Speed multiplier on every duration. Set to 0 to effectively disable motion.",default:1,min:0,max:2,step:.05,driving:13}]};/** * @license * SPDX-License-Identifier: Apache-2.0 - */function Gn(a,e,o){const n=o*Math.PI/180,l=a,i=e*Math.cos(n),c=e*Math.sin(n),d=l+.3963377774*i+.2158037573*c,p=l-.1055613458*i-.0638541728*c,m=l-.0894841775*i-1.291485548*c,h=d*d*d,v=p*p*p,b=m*m*m,k=4.0767416621*h-3.3077115913*v+.2309699292*b,_=-1.2684380046*h+2.6097574011*v-.3413193965*b,E=-.0041960863*h-.7034186147*v+1.707614701*b,B=L=>L<=.0031308?12.92*L:1.055*Math.pow(L,1/2.4)-.055,U=Math.max(0,Math.min(255,Math.round(B(k)*255))),S=Math.max(0,Math.min(255,Math.round(B(_)*255))),z=Math.max(0,Math.min(255,Math.round(B(E)*255)));return[U,S,z]}function Uo(a,e,o){const n=l=>{const i=l/255;return i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)};return .2126*n(a)+.7152*n(e)+.0722*n(o)}function qs(a,e){const o=Math.max(a,e),n=Math.min(a,e);return(o+.05)/(n+.05)}function Vs(a){const e=a.match(/oklch\(\s*([\d.%]+)\s+([\d.]+)\s+([\d.]+)/i);if(e){const o=e[1],n=o.endsWith("%")?parseFloat(o)/100:parseFloat(o),l=parseFloat(e[2]),i=parseFloat(e[3]);return{l:n,c:l,h:i,valid:!0}}return{l:.5,c:.15,h:200,valid:!1}}function Ks(a,e,o){return`oklch(${a.toFixed(3)} ${e.toFixed(3)} ${Math.round(o)})`}var Lu=g(' '),Pu=g('
');function Zo(a,e){Qt(e,!0);let o=wa(e,"disabled",3,!1);function n(_){return Math.min(e.max,Math.max(e.min,_))}let l=u(()=>(e.value-e.min)/(e.max-e.min)*100);var i=Pu(),c=s(i),d=r(s(c),2),p=r(d,2),m=r(p,2),h=r(c,2),v=s(h),b=r(v,2);{var k=_=>{var E=Lu(),B=s(E);O(()=>y(B,e.unit)),f(_,E)};I(b,_=>{e.unit&&_(k)})}O(()=>{it(d,`width: ${t(l)}%`),Y(p,"min",e.min),Y(p,"max",e.max),Y(p,"step",e.step),Xt(p,e.value),p.disabled=o(),it(m,`left: calc(${t(l)}% - 6px)`),Y(v,"min",e.min),Y(v,"max",e.max),Y(v,"step",e.step),Xt(v,e.value),v.disabled=o()}),x("input",p,_=>e.onChange(n(parseFloat(_.target.value)))),x("change",v,_=>e.onChange(n(parseFloat(_.target.value)||0))),f(a,i),$t()}aa(["input","change"]);var Iu=g('
'),Bu=g(''),Uu=g('
Lightness (L)
Chroma (C)
Hue (H)
Raw value
'),zu=g('
');function Ms(a,e){Qt(e,!0);function o(T){const M=/oklch\(\s*([\d.]+)\s+([\d.]+)\s+([\d.]+)\s*\)/.exec(T);return M?{l:parseFloat(M[1]),c:parseFloat(M[2]),h:parseFloat(M[3])}:null}function n(T,M,Q){return`oklch(${T.toFixed(3)} ${M.toFixed(3)} ${Q.toFixed(1)})`}function l(T,M,Q){const He=Q*Math.PI/180,ee=M*Math.cos(He),be=M*Math.sin(He),Ie=T+.3963377774*ee+.2158037573*be,pe=T-.1055613458*ee-.0638541728*be,he=T-.0894841775*ee-1.291485548*be,Ne=Ie*Ie*Ie,at=pe*pe*pe,et=he*he*he;let N=4.0767416621*Ne-3.3077115913*at+.2309699292*et,W=-1.2684380046*Ne+2.6097574011*at-.3413193965*et,ye=-.0041960863*Ne-.7034186147*at+1.707614701*et;const ge=Z=>Z<=0?0:Z>=1?255:Math.round(Math.pow(Z,1/2.2)*255);return`rgb(${ge(N)},${ge(W)},${ge(ye)})`}let i=u(()=>o(e.value)??{l:.6,c:.15,h:264}),c=j(!1),d=j(""),p=u(()=>l(t(i).l,t(i).c,t(i).h)),m=u(()=>e.tokenName.replace("--sf-",""));function h(T,M,Q){e.onChange(n(T,M,Q))}var v=zu(),b=s(v),k=s(b),_=r(k,2),E=s(_),B=s(E),U=r(E,2),S=s(U),z=r(U,2),L=s(z),P=r(_,2);{var w=T=>{var M=Iu();f(T,M)};I(P,T=>{e.overridden&&T(w)})}var R=r(P,2),D=r(b,2);{var A=T=>{var M=Uu(),Q=s(M),He=s(Q),ee=r(s(He),2),be=s(ee),Ie=r(He,2),pe=r(Ie,2);Zo(pe,{get value(){return t(i).l},min:0,max:1,step:.005,onChange:ke=>h(ke,t(i).c,t(i).h)});var he=r(Q,2),Ne=s(he),at=r(s(Ne),2),et=s(at),N=r(Ne,2);Zo(N,{get value(){return t(i).c},min:0,max:.4,step:.005,onChange:ke=>h(t(i).l,ke,t(i).h)});var W=r(he,2),ye=s(W),ge=r(s(ye),2),Z=s(ge),we=r(ye,2),Ge=r(we,2);Zo(Ge,{get value(){return t(i).h},min:0,max:360,step:1,unit:"°",onChange:ke=>h(t(i).l,t(i).c,ke)});var nt=r(W,2),Oe=r(s(nt),2),Be=s(Oe),te=r(Be,2);{var q=ke=>{var Ze=Bu();x("click",Ze,function(...ne){e.onReset?.apply(this,ne)}),f(ke,Ze)};I(te,ke=>{e.overridden&&ke(q)})}O((ke,Ze,ne,fe,Pe)=>{y(be,ke),it(Ie,Ze),y(et,ne),y(Z,`${fe??""}°`),it(we,Pe),Xt(Be,t(d)||e.value)},[()=>t(i).l.toFixed(3),()=>`background: linear-gradient(to right, oklch(0 ${t(i).c.toFixed(3)} ${t(i).h.toFixed(1)}), oklch(1 ${t(i).c.toFixed(3)} ${t(i).h.toFixed(1)}))`,()=>t(i).c.toFixed(3),()=>t(i).h.toFixed(1),()=>`background: linear-gradient(to right, oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 0), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 60), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 120), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 180), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 240), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 300), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 360))`]),x("input",Be,ke=>{C(d,ke.target.value,!0)}),co("blur",Be,()=>{t(d).trim()&&(e.onChange(t(d).trim()),C(d,""))}),x("keydown",Be,ke=>{ke.key==="Enter"&&(t(d).trim()&&(e.onChange(t(d).trim()),C(d,"")),ke.currentTarget.blur())}),f(T,M)};I(D,T=>{t(c)&&T(A)})}O(()=>{Ye(v,1,`rounded-xl border transition-all ${e.overridden?"bg-indigo-500/8 border-indigo-500/20":"bg-white/4 border-white/8 hover:border-white/12"}`),it(k,`background: ${t(p)}`),y(B,e.label),y(S,t(m)),y(L,e.value),Ye(R,1,`text-slate-500 text-[10px] transition-transform ${t(c)?"rotate-180":""}`)}),x("click",b,()=>{C(c,!t(c))}),f(a,v),$t()}aa(["click","input","keydown"]);var Au=g(' '),Eu=g(''),Ru=g('

'),Tu=g('
');function Go(a,e){Qt(e,!0);let o=u(()=>e.overrides[e.knob.name]),n=u(()=>t(o)!==void 0?e.knob.decode?e.knob.decode(t(o)):parseFloat(t(o)):e.knob.default),l=u(()=>isNaN(t(n))?e.knob.default:t(n)),i=u(()=>e.knob.name in e.overrides);function c(L){const P=e.knob.encode?e.knob.encode(L):String(L);e.onChange(e.knob.name,P)}function d(){e.onChange(e.knob.name,null)}var p=Tu(),m=s(p),h=s(m),v=r(s(h),2),b=s(v),k=r(v,2);{var _=L=>{var P=Au(),w=s(P);O(()=>y(w,`→ ${e.knob.driving??""} tokens`)),f(L,P)};I(k,L=>{e.knob.driving!==void 0&&L(_)})}var E=r(h,2);{var B=L=>{var P=Eu();x("click",P,d),f(L,P)};I(E,L=>{t(i)&&L(B)})}var U=r(m,2);Zo(U,{get value(){return t(l)},get min(){return e.knob.min},get max(){return e.knob.max},get step(){return e.knob.step},get unit(){return e.knob.unit},onChange:c});var S=r(U,2);{var z=L=>{var P=Ru(),w=s(P);O(()=>y(w,e.knob.help)),f(L,P)};I(S,L=>{e.knob.help&&L(z)})}O(()=>y(b,e.knob.label)),f(a,p),$t()}aa(["click"]);var Du=g(' '),Mu=g(""),Nu=g(""),Fu=g(''),ju=g(''),Gu=g('

'),Hu=g(" ",1),qu=g('

'),Vu=g('
');function pt(a,e){Qt(e,!0);let o=j(!1),n=j(""),l=j(!1),i=u(()=>!!e.currentRaw&&/^(var|calc|clamp|min|max|env)\(/.test(e.currentRaw.trim())),c=u(()=>!!(e.rawDefault&&e.onRawSet&&(t(o)||t(i)||t(l))));ha(()=>{t(l)||C(n,e.currentRaw??"",!0)});var d=Vu(),p=s(d),m=s(p);{var h=w=>{var R=Du(),D=s(R);O(()=>y(D,e.label)),f(w,R)},v=w=>{var R=Mu();f(w,R)};I(m,w=>{e.label?w(h):w(v,-1)})}var b=r(m,2),k=s(b);{var _=w=>{var R=Nu();O(()=>{Y(R,"title",t(c)?"Switch to slider":"Enter raw CSS value"),Ye(R,1,`text-[9px] font-mono cursor-pointer transition-all px-0.5 ${t(c)?"text-indigo-400":"opacity-0 group-hover:opacity-100 text-slate-500 hover:text-indigo-400"}`)}),x("click",R,()=>{C(o,!t(o))}),f(w,R)};I(k,w=>{e.rawDefault&&e.onRawSet&&w(_)})}var E=r(k,2);{var B=w=>{var R=Fu();x("click",R,function(...D){e.onReset?.apply(this,D)}),f(w,R)};I(E,w=>{e.overridden&&w(B)})}var U=r(p,2);{var S=w=>{var R=ju();O(()=>{Xt(R,t(n)),Y(R,"placeholder",e.rawDefault)}),co("focus",R,()=>{C(l,!0)}),co("blur",R,()=>{C(l,!1),t(n).trim()||e.onReset()}),x("input",R,D=>{C(n,D.target.value,!0);const A=t(n).trim();A&&e.onRawSet&&e.onRawSet(A)}),f(w,R)},z=w=>{var R=Hu(),D=de(R);Zo(D,{get value(){return e.value},get min(){return e.min},get max(){return e.max},get step(){return e.step},get unit(){return e.unit},get onChange(){return e.onChange}});var A=r(D,2);{var T=M=>{var Q=Gu(),He=s(Q);O(()=>y(He,`default: ${e.rawDefault??""}`)),f(M,Q)};I(A,M=>{e.rawDefault&&!e.overridden&&M(T)})}f(w,R)};I(U,w=>{t(c)&&e.rawDefault?w(S):w(z,-1)})}var L=r(U,2);{var P=w=>{var R=qu(),D=s(R);O(()=>y(D,e.help)),f(w,R)};I(L,w=>{e.help&&w(P)})}f(a,d),$t()}aa(["click","input"]);var Ku=g(''),Wu=g(''),Yu=g(' '),Zu=g(''),Ju=g(''),Xu=g('
');function Va(a,e){Qt(e,!0);let o=j(!1),n=j(!1),l=j(null);ha(()=>{t(o)&&rn().then(()=>t(l)?.focus())});function i(L){const P=L.trim();return P.startsWith("--")&&!P.startsWith("var(")?`var(${P})`:P}function c(L){ja.value;const P=i(L);return bo(P)||P||"transparent"}let d=u(()=>c(e.value||`var(${e.token})`)),p=u(()=>e.value.trim().startsWith("var(")||e.value.trim().startsWith("--"));function m(L){if(L.match(/^#([0-9a-fA-F]{6})$/))return L.toLowerCase();const w=L.match(/^#([0-9a-fA-F]{3})$/);if(w)return"#"+w[1].split("").map(D=>D+D).join("");const R=L.match(/rgb\w*\((\d+)[,\s]+(\d+)[,\s]+(\d+)/);return R?"#"+[R[1],R[2],R[3]].map(D=>parseInt(D).toString(16).padStart(2,"0")).join(""):"#6366f1"}var h=Xu(),v=s(h),b=s(v),k=r(b,2);{var _=L=>{var P=Ku();O(w=>Xt(P,w),[()=>m(t(d))]),x("input",P,w=>e.onSet(w.target.value)),f(L,P)};I(k,L=>{t(p)||L(_)})}var E=r(v,2);{var B=L=>{var P=Wu();Do(P,w=>C(l,w),()=>t(l)),O(()=>{Xt(P,e.value),Y(P,"placeholder",e.placeholder??"default")}),co("blur",P,w=>{if(t(n)){C(n,!1),C(o,!1);return}const R=i(w.target.value);R?e.onSet(R):e.onReset(),C(o,!1)}),x("keydown",P,w=>{w.key==="Enter"&&w.currentTarget.blur(),w.key==="Escape"&&(C(n,!0),C(o,!1))}),f(L,P)},U=L=>{var P=Zu(),w=s(P);{var R=A=>{var T=Yu(),M=s(T);O(()=>y(M,e.value)),f(A,T)},D=A=>{var T=lr();O(()=>y(T,e.placeholder??"default")),f(A,T)};I(w,A=>{e.isOverridden?A(R):A(D,-1)})}x("click",P,()=>{C(o,!0)}),f(L,P)};I(E,L=>{t(o)?L(B):L(U,-1)})}var S=r(E,2);{var z=L=>{var P=Ju();x("click",P,function(...w){e.onReset?.apply(this,w)}),f(L,P)};I(S,L=>{e.isOverridden&&L(z)})}O(()=>it(b,`background: ${t(d)}`)),f(a,h),$t()}aa(["input","keydown","click"]);var ms=g(""),Qu=g('
'),$u=g('
'),ep=g('
L
D
'),tp=g('
'),ap=g('
'),op=g('

OKLCH source values — all 200+ derived color steps are computed automatically.

',1),sp=g('
'),rp=g(`

Pins brand colors (primary, secondary, tertiary, action) to a fixed OKLCH - lightness — useful for always-stable sections. Enable on canvas to preview.

Color Current Locked
`,1),np=g('
'),lp=g('
'),ip=g('
'),cp=g('
'),dp=g('
Aa
'),fp=g(''),up=g('

Controls whether text on brand-coloured surfaces is light or dark.

',1),pp=g(''),mp=g('
'),vp=g('
'),hp=g('
'),gp=g('

Controls how much color is mixed into each palette step. Step 500 is always the source color.

Tints (50–400) — mixed toward surface
Shades (600–950) — mixed toward text
Palette & curve preview

Bar height = mix amount · fill = the resolved primary palette swatch at each step

Mini palettes — all brand colors
',1),bp=g(''),yp=g('
Dir
'),xp=g('
Angle
'),kp=g('
Stops
default:
'),wp=g('
',1),_p=g(`

Auto-derived from your brand colors. Use the angle/direction and stop - controls, or edit the raw value for full control.

`,1),Cp=g('

--sf-color-scheme — sets the CSS color-scheme property on the root, controlling browser UI (scrollbars, inputs) and default background.

',1),Op=g('
'),Sp=g('

Direct color overrides for tokens the framework auto-derives. Use for edge cases.

',1),Lp=g('

All tokens tab — override individual color steps (50–950), semantic aliases, or surface tokens directly.

');function Pp(a,e){Qt(e,!0);function o(se,V){return ja.value,bo(se)||V}function n(se,V){ja.value;const F=$f(se);return F&&F!=="none"?F:V}function l(se,V,F){return ja.value,Xf(se,V)||F}const i=[{name:"--sf-gradient-primary",label:"Primary",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-primary)",stop2:"oklch(from var(--sf-color-primary) calc(l - 0.08) c h)",formula:"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) calc(l - 0.08) c h))"},{name:"--sf-gradient-secondary",label:"Secondary",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-secondary)",stop2:"oklch(from var(--sf-color-secondary) calc(l - 0.08) c h)",formula:"linear-gradient(in oklch 135deg, var(--sf-color-secondary), oklch(from var(--sf-color-secondary) calc(l - 0.08) c h))"},{name:"--sf-gradient-tertiary",label:"Tertiary",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-tertiary)",stop2:"oklch(from var(--sf-color-tertiary) calc(l - 0.08) c h)",formula:"linear-gradient(in oklch 135deg, var(--sf-color-tertiary), oklch(from var(--sf-color-tertiary) calc(l - 0.08) c h))"},{name:"--sf-gradient-brand",label:"Brand",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-primary)",stop2:"oklch(from var(--sf-color-primary) l c calc(h + 30))",formula:"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) l c calc(h + 30)))"},{name:"--sf-gradient-surface",label:"Surface",group:"brand",kind:"angle",space:"oklab",angle:180,dir:"bottom",stop1:"var(--sf-color-surface)",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklab 180deg, var(--sf-color-surface), var(--sf-color-bg))"},{name:"--sf-gradient-fade--r",label:"Fade →",group:"fade",kind:"dir",space:"oklch",angle:90,dir:"right",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to right, transparent, var(--sf-color-bg))"},{name:"--sf-gradient-fade--l",label:"Fade ←",group:"fade",kind:"dir",space:"oklch",angle:270,dir:"left",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to left, transparent, var(--sf-color-bg))"},{name:"--sf-gradient-fade--t",label:"Fade ↑",group:"fade",kind:"dir",space:"oklch",angle:0,dir:"top",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to top, transparent, var(--sf-color-bg))"},{name:"--sf-gradient-fade--b",label:"Fade ↓",group:"fade",kind:"dir",space:"oklch",angle:180,dir:"bottom",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to bottom, transparent, var(--sf-color-bg))"}],c=[{key:"primary",label:"Primary"},{key:"secondary",label:"Secondary"},{key:"tertiary",label:"Tertiary"},{key:"action",label:"Action"}],d=[{name:"--sf-color-primary-source-light",label:"Primary",side:"light",default:"oklch(0.47 0.27 264)",colorKey:"primary"},{name:"--sf-color-primary-source-dark",label:"Primary",side:"dark",default:"oklch(0.715 0.243 264)",colorKey:"primary"},{name:"--sf-color-secondary-source-light",label:"Secondary",side:"light",default:"oklch(0.22 0.04 264)",colorKey:"secondary"},{name:"--sf-color-secondary-source-dark",label:"Secondary",side:"dark",default:"oklch(0.84 0.036 264)",colorKey:"secondary"},{name:"--sf-color-tertiary-source-light",label:"Tertiary",side:"light",default:"oklch(0.42 0.22 295)",colorKey:"tertiary"},{name:"--sf-color-tertiary-source-dark",label:"Tertiary",side:"dark",default:"oklch(0.74 0.198 295)",colorKey:"tertiary"},{name:"--sf-color-action-source-light",label:"Action",side:"light",default:"oklch(0.50 0.22 235)",colorKey:"action"},{name:"--sf-color-action-source-dark",label:"Action",side:"dark",default:"oklch(0.70 0.198 235)",colorKey:"action"},{name:"--sf-color-neutral-source-light",label:"Neutral",side:"light",default:"oklch(0.52 0.025 260)",colorKey:"neutral"},{name:"--sf-color-neutral-source-dark",label:"Neutral",side:"dark",default:"oklch(0.69 0.0225 260)",colorKey:"neutral"},{name:"--sf-color-base-source-light",label:"Base",side:"light",default:"oklch(0.96 0.006 250)",colorKey:"base"},{name:"--sf-color-base-source-dark",label:"Base",side:"dark",default:"oklch(0.22 0.003 250)",colorKey:"base"}],p=[{name:"--sf-color-success-source-light",label:"Success",side:"light",default:"oklch(0.50 0.16 145)",colorKey:"success"},{name:"--sf-color-success-source-dark",label:"Success",side:"dark",default:"oklch(0.70 0.144 145)",colorKey:"success"},{name:"--sf-color-warning-source-light",label:"Warning",side:"light",default:"oklch(0.75 0.17 80)",colorKey:"warning"},{name:"--sf-color-warning-source-dark",label:"Warning",side:"dark",default:"oklch(0.65 0.153 80)",colorKey:"warning"},{name:"--sf-color-info-source-light",label:"Info",side:"light",default:"oklch(0.48 0.18 235)",colorKey:"info"},{name:"--sf-color-info-source-dark",label:"Info",side:"dark",default:"oklch(0.71 0.162 235)",colorKey:"info"},{name:"--sf-color-danger-source-light",label:"Danger",side:"light",default:"oklch(0.48 0.22 12)",colorKey:"danger"},{name:"--sf-color-danger-source-dark",label:"Danger",side:"dark",default:"oklch(0.73 0.198 12)",colorKey:"danger"}],m=[{name:"--sf-palette-mix-50",label:"50",step:"tint",default:4},{name:"--sf-palette-mix-100",label:"100",step:"tint",default:8},{name:"--sf-palette-mix-200",label:"200",step:"tint",default:20},{name:"--sf-palette-mix-300",label:"300",step:"tint",default:40},{name:"--sf-palette-mix-400",label:"400",step:"tint",default:65},{name:"--sf-palette-mix-600",label:"600",step:"shade",default:82},{name:"--sf-palette-mix-700",label:"700",step:"shade",default:62},{name:"--sf-palette-mix-800",label:"800",step:"shade",default:38},{name:"--sf-palette-mix-900",label:"900",step:"shade",default:18},{name:"--sf-palette-mix-950",label:"950",step:"shade",default:8}],h=[{label:"Softer",desc:"Low contrast palette",patch:{"--sf-palette-mix-50":"3%","--sf-palette-mix-100":"6%","--sf-palette-mix-200":"14%","--sf-palette-mix-300":"30%","--sf-palette-mix-400":"55%","--sf-palette-mix-600":"72%","--sf-palette-mix-700":"52%","--sf-palette-mix-800":"28%","--sf-palette-mix-900":"12%","--sf-palette-mix-950":"5%"}},{label:"Default",desc:"Balanced contrast",patch:Object.fromEntries(m.map(se=>[se.name,null]))},{label:"Punchy",desc:"High contrast palette",patch:{"--sf-palette-mix-50":"6%","--sf-palette-mix-100":"12%","--sf-palette-mix-200":"28%","--sf-palette-mix-300":"52%","--sf-palette-mix-400":"78%","--sf-palette-mix-600":"90%","--sf-palette-mix-700":"72%","--sf-palette-mix-800":"50%","--sf-palette-mix-900":"26%","--sf-palette-mix-950":"12%"}}],v=[{name:"--sf-color-link",label:"Link"},{name:"--sf-color-link--visited",label:"Link visited"},{name:"--sf-color-mark-bg",label:"Mark background"},{name:"--sf-color-mark-text",label:"Mark text"},{name:"--sf-color-code-bg",label:"Code background"},{name:"--sf-color-code-text",label:"Code text"},{name:"--sf-color-overlay",label:"Overlay"},{name:"--sf-color-black",label:"Black"},{name:"--sf-color-white",label:"White"},{name:"--sf-color-dim",label:"Dim (translucent black)"}],b=["50","100","200","300","400","500","600","700","800","900","950"],k=["primary","secondary","tertiary","action","neutral"],_=(jo.colors??[]).filter(se=>se.name==="--sf-contrast-bias"||se.name==="--sf-contrast-threshold"),E=(jo.colors??[]).filter(se=>se.name==="--sf-focus-ring-width");let B=j(!1),U=j(!1),S=j(!1),z=j(!1),L=j(!1),P=j(!1),w=j(!1),R=j(!1),D=j("light"),A=da({}),T=u(()=>parseFloat(e.overrides["--sf-lumlocker"]??"0.65"));function M(se){const V=se.match(/^linear-gradient\(\s*in\s+(\S+)\s+(to\s+\w+|\d+deg)\s*,(.+)\)$/i);if(!V)return null;const F=V[1],$=V[2].trim(),ve=$.startsWith("to "),J=ve?$.slice(3).trim():"right",G=ve?0:parseInt($);let ie=0,ue=0;const K=[],le=V[3];for(let Me=0;Meve.name===F)?.default??"";return $?`oklch(from ${$} ${t(T)} c h)`:""}let pe=j(da(new Set(d.filter(se=>se.side==="light"&&!((d.find(V=>V.colorKey===se.colorKey&&V.side==="dark")?.name??"")in e.overrides)).map(se=>se.colorKey)))),he=u(()=>{const se={},V=[...d,...p];for(const F of e.tokens)V.some($=>$.name===F.name)&&(se[F.name]=F);return se}),Ne=u(()=>h.find(se=>Object.entries(se.patch).every(([V,F])=>F===null?!(V in e.overrides):e.overrides[V]===F)));function at(se){const V=e.overrides[se.name];return V?parseFloat(V):se.default}const et=[];for(let se=0;seK.label===V);if(!J)return se;const G=at(J),ue=`color-mix(in oklab, ${se} ${G}%, ${ve?F:$})`;return bo(ue)||ue}function nt(se,V,F){e.onSet(se.name,F)}function Oe(se,V,F){const $=!!(V&&V.name in e.overrides);if(t(pe).has(se)&&!$){const J=e.overrides[F]??d.find(G=>G.name===F)?.default??"";V&&e.onSet(V.name,W(J,se)),C(pe,new Set([...t(pe)].filter(G=>G!==se)),!0)}else V&&e.onBulkChange({[V.name]:null}),C(pe,new Set([...t(pe),se]),!0)}const Be=[{label:"Body text on surface",fg:"var(--sf-color-text)",bg:"var(--sf-color-surface)"},{label:"White on primary",fg:"#ffffff",bg:"var(--sf-color-primary)"},{label:"Primary on surface",fg:"var(--sf-color-primary)",bg:"var(--sf-color-surface)"}];function te(se,V){ja.value;const F=Cs(se),$=Cs(V);return!F||!$?null:qs(Uo(...F),Uo(...$))}var q=Lp(),ke=s(q),Ze=s(ke),ne=r(s(Ze),2),fe=s(ne),Pe=r(Ze,2);{var De=se=>{var V=op(),F=r(de(V),2);re(F,21,()=>et,([$,ve])=>$.name,($,ve)=>{var J=u(()=>Pa(t(ve),2));let G=()=>t(J)[0],ie=()=>t(J)[1];const ue=u(()=>!!(ie()&&ie().name in e.overrides)),K=u(()=>t(pe).has(G().colorKey)&&!t(ue));var le=ap(),Me=s(le),H=s(Me),_e=s(H),ce=r(H,2);{var Se=X=>{var ae=ms(),Re=s(ae);O(()=>{Ye(ae,1,`text-[8px] px-1.5 py-0.5 rounded border transition-all cursor-pointer ${t(K)?"border-indigo-500/40 bg-indigo-500/15 text-indigo-300":"border-white/10 text-slate-500 hover:text-slate-300"}`),y(Re,t(K)?"Auto dark":"Manual dark")}),x("click",ae,()=>Oe(G().colorKey,ie(),G().name)),f(X,ae)};I(ce,X=>{ie()&&X(Se)})}var Fe=r(Me,2);{let X=u(()=>`${G().label} (light)`),ae=u(()=>e.overrides[G().name]??t(he)[G().name]?.value??G().default),Re=u(()=>G().name in e.overrides);Ms(Fe,{get label(){return t(X)},get tokenName(){return G().name},get value(){return t(ae)},get overridden(){return t(Re)},onChange:Ke=>nt(G(),ie(),Ke),onReset:()=>e.onReset(G().name)})}var $e=r(Fe,2);{var Qe=X=>{const ae=u(()=>e.overrides[G().name]??t(he)[G().name]?.value??G().default),Re=u(()=>t(K)?W(t(ae),G().colorKey):ie()?e.overrides[ie().name]??t(he)[ie().name]?.value??ie().default:t(ae)),Ke=u(ye),We=u(ge),gt=u(Z),yt=u(we);var ht=ep(),Te=s(ht),Ce=r(s(Te),2);re(Ce,20,()=>b,Vt=>Vt,(Vt,Zt)=>{const pa=u(()=>Ge(t(ae),Zt,t(Ke),t(gt)));var Ca=Qu();O(()=>{it(Ca,`background: ${t(pa)}`),Y(Ca,"title",`${G().colorKey}-${Zt} (light) — ${t(pa)}`)}),f(Vt,Ca)});var At=r(Te,2),oa=r(s(At),2);re(oa,20,()=>b,Vt=>Vt,(Vt,Zt)=>{const pa=u(()=>Ge(t(Re),Zt,t(We),t(yt)));var Ca=$u();O(()=>{it(Ca,`background: ${t(pa)}`),Y(Ca,"title",`${G().colorKey}-${Zt} (dark) — ${t(pa)}`)}),f(Vt,Ca)}),f(X,ht)},bt=u(()=>k.includes(G().colorKey));I($e,X=>{t(bt)&&X(Qe)})}var kt=r($e,2);{var Pt=X=>{{let ae=u(()=>`${ie().label} (dark mode)`),Re=u(()=>e.overrides[ie().name]??t(he)[ie().name]?.value??ie().default),Ke=u(()=>ie().name in e.overrides);Ms(X,{get label(){return t(ae)},get tokenName(){return ie().name},get value(){return t(Re)},get overridden(){return t(Ke)},onChange:We=>e.onSet(ie().name,We),onReset:()=>e.onReset(ie().name)})}},wt=X=>{const ae=u(()=>W(e.overrides[G().name]??G().default,G().colorKey));var Re=tp(),Ke=s(Re),We=r(Ke);O(gt=>{it(Ke,gt),Y(Ke,"title",t(ae)),y(We,` Dark: auto-derived (${t(ae)??""})`)},[()=>`background: ${o(t(ae),t(ae))}`]),f(X,Re)};I(kt,X=>{ie()&&!t(K)?X(Pt):ie()&&t(K)&&X(wt,1)})}O(()=>y(_e,G().label)),f($,le)}),f(se,V)};I(Pe,se=>{t(B)&&se(De)})}var ze=r(ke,4),Le=s(ze),qe=r(s(Le),2),je=s(qe),lt=r(Le,2);{var dt=se=>{var V=rp(),F=r(de(V),2);{let ie=u(()=>"--sf-lumlocker"in e.overrides);pt(F,{label:"LumLocker lightness (L)",get value(){return t(T)},min:0,max:1,step:.01,help:"--sf-lumlocker — fixed OKLCH L applied to lockable brand colors under [data-lumlocker]",get overridden(){return t(ie)},onChange:ue=>e.onSet("--sf-lumlocker",String(ue)),onReset:()=>e.onReset("--sf-lumlocker")})}var $=r(F,2),ve=r(s($),2);re(ve,17,()=>c,ie=>ie.key,(ie,ue)=>{var K=Bt(),le=de(K);re(le,16,()=>["light","dark"],Me=>Me,(Me,H)=>{const _e=u(()=>l(`var(--sf-color-${t(ue).key}-source-${H})`,H,"")),ce=u(()=>Ie(t(ue).key,H));var Se=sp(),Fe=s(Se),$e=s(Fe),Qe=r($e),bt=s(Qe),kt=r(Fe,2),Pt=r(kt,4);O(wt=>{y($e,`${t(ue).label??""} `),y(bt,H==="light"?"L":"D"),it(kt,`background:${t(_e)||`var(--sf-color-${t(ue).key})`}`),it(Pt,wt),Y(Pt,"title",t(ce))},[()=>`background:${o(t(ce),t(ce))}`]),f(Me,Se)}),f(ie,K)});var J=r($,2),G=s(J);O(()=>{Ye(J,1,`w-full py-2 rounded-lg text-[10px] font-bold border transition-all cursor-pointer ${Wo.value?"bg-indigo-600/25 border-indigo-500/40 text-indigo-200":"border-white/10 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(G,Wo.value?"✓ LumLocker active on canvas — click to disable":"Preview LumLocker on live canvas")}),x("click",J,()=>{Wo.value=!Wo.value}),f(se,V)};I(lt,se=>{t(R)&&se(dt)})}var Ot=r(ze,4),vt=s(Ot),oe=r(s(vt),2),xe=s(oe),Ee=r(vt,2);{var ot=se=>{var V=cp();re(V,21,()=>N,([F,$])=>F.name,(F,$)=>{var ve=u(()=>Pa(t($),2));let J=()=>t(ve)[0],G=()=>t(ve)[1];var ie=ip(),ue=s(ie),K=s(ue),le=r(ue,2);{let ce=u(()=>`${J().label} light`),Se=u(()=>e.overrides[J().name]??t(he)[J().name]?.value??J().default),Fe=u(()=>J().name in e.overrides);Ms(le,{get label(){return t(ce)},get tokenName(){return J().name},get value(){return t(Se)},get overridden(){return t(Fe)},onChange:$e=>e.onSet(J().name,$e),onReset:()=>e.onReset(J().name)})}var Me=r(le,2);{var H=ce=>{{let Se=u(()=>`${G().label} dark`),Fe=u(()=>e.overrides[G().name]??t(he)[G().name]?.value??G().default),$e=u(()=>G().name in e.overrides);Ms(ce,{get label(){return t(Se)},get tokenName(){return G().name},get value(){return t(Fe)},get overridden(){return t($e)},onChange:Qe=>e.onSet(G().name,Qe),onReset:()=>e.onReset(G().name)})}};I(Me,ce=>{G()&&ce(H)})}var _e=r(Me,2);re(_e,21,()=>[["L","light",e.overrides[J().name]??J().default,ye(),Z()],["D","dark",G()?e.overrides[G().name]??G().default:e.overrides[J().name]??J().default,ge(),we()]],([ce,Se,Fe,$e,Qe])=>ce,(ce,Se)=>{var Fe=u(()=>Pa(t(Se),5));let $e=()=>t(Fe)[0],Qe=()=>t(Fe)[1],bt=()=>t(Fe)[2],kt=()=>t(Fe)[3],Pt=()=>t(Fe)[4];var wt=lp(),X=s(wt),ae=s(X),Re=r(X,2);re(Re,20,()=>b,Ke=>Ke,(Ke,We)=>{const gt=u(()=>Ge(bt(),We,kt(),Pt()));var yt=np();O(()=>{it(yt,`background: ${t(gt)}`),Y(yt,"title",`${J().colorKey}-${We} (${Qe()}) — ${t(gt)}`)}),f(Ke,yt)}),O(()=>y(ae,$e())),f(ce,wt)}),O(()=>y(K,J().label)),f(F,ie)}),f(se,V)};I(Ee,se=>{t(z)&&se(ot)})}var ft=r(Ot,4),_t=s(ft),xt=r(s(_t),2),Nt=s(xt),St=r(_t,2);{var Et=se=>{var V=up(),F=r(de(V),2);re(F,17,()=>_,ue=>ue.name,(ue,K)=>{Go(ue,{get knob(){return t(K)},get overrides(){return e.overrides},onChange:(le,Me)=>Me===null?e.onReset(le):e.onSet(le,Me)})});var $=r(F,2),ve=s($);re(ve,17,()=>Be,ue=>ue.label,(ue,K)=>{const le=u(()=>te(t(K).fg,t(K).bg));var Me=Bt(),H=de(Me);{var _e=ce=>{var Se=dp(),Fe=s(Se),$e=r(Fe,2),Qe=s($e),bt=r($e,2),kt=s(bt),Pt=r(bt,2),wt=s(Pt);O((X,ae)=>{it(Fe,X),y(Qe,t(K).label),y(kt,`${ae??""}:1`),Ye(Pt,1,`text-[9px] font-bold px-1.5 py-0.5 rounded ${t(le)>=4.5?"bg-emerald-500/20 text-emerald-300":"bg-amber-500/20 text-amber-300"}`),y(wt,t(le)>=4.5?"AA":t(le)>=3?"AA-L":"✗")},[()=>`background:${o(t(K).bg,t(K).bg)}; color:${o(t(K).fg,t(K).fg)}`,()=>t(le).toFixed(2)]),f(ce,Se)};I(H,ce=>{t(le)!==null&&ce(_e)})}f(ue,Me)});var J=r(ve,2);{var G=ue=>{var K=fp();x("click",K,()=>e.onSelectDomain?.("wcag")),f(ue,K)};I(J,ue=>{e.onSelectDomain&&ue(G)})}var ie=r($,2);re(ie,17,()=>E,ue=>ue.name,(ue,K)=>{Go(ue,{get knob(){return t(K)},get overrides(){return e.overrides},onChange:(le,Me)=>Me===null?e.onReset(le):e.onSet(le,Me)})}),f(se,V)};I(St,se=>{t(U)&&se(Et)})}var ct=r(ft,4),Gt=s(ct),ea=r(s(Gt),2),ia=s(ea),Xe=r(Gt,2);{var ut=se=>{const V=u(()=>e.overrides["--sf-color-primary-source-light"]??d.find(X=>X.name==="--sf-color-primary-source-light")?.default??"oklch(0.47 0.27 264)"),F=u(()=>e.overrides["--sf-color-primary-source-dark"]),$=u(()=>t(F)??(!t(pe).has("primary")||t(F)?d.find(X=>X.name==="--sf-color-primary-source-dark")?.default??W(t(V),"primary"):W(t(V),"primary"))),ve=u(()=>t(D)==="light"?t(V):t($)),J=u(()=>t(D)==="light"?ye():ge()),G=u(()=>t(D)==="light"?Z():we()),ie=u(()=>t(D)==="light"?ye():ge()),ue=u(()=>t(D)==="light"?Z():we());var K=gp(),le=r(de(K),2);re(le,21,()=>h,X=>X.label,(X,ae)=>{var Re=pp(),Ke=s(Re),We=s(Ke),gt=r(Ke,2),yt=s(gt);O(()=>{Ye(Re,1,`flex flex-col items-center gap-0.5 p-2.5 rounded-xl border transition-all cursor-pointer ${t(Ne)?.label===t(ae).label?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(We,t(ae).label),y(yt,t(ae).desc)}),x("click",Re,()=>e.onBulkChange(t(ae).patch)),f(X,Re)});var Me=r(le,2),H=r(s(Me),2);re(H,21,()=>m.filter(X=>X.step==="tint"),X=>X.name,(X,ae)=>{{let Re=u(()=>at(t(ae))),Ke=u(()=>t(ae).name in e.overrides);pt(X,{get label(){return t(ae).label},get value(){return t(Re)},min:0,max:100,step:1,unit:"%",get overridden(){return t(Ke)},onChange:We=>e.onSet(t(ae).name,`${We}%`),onReset:()=>e.onReset(t(ae).name)})}});var _e=r(Me,2),ce=r(s(_e),2);re(ce,21,()=>m.filter(X=>X.step==="shade"),X=>X.name,(X,ae)=>{{let Re=u(()=>at(t(ae))),Ke=u(()=>t(ae).name in e.overrides);pt(X,{get label(){return t(ae).label},get value(){return t(Re)},min:0,max:100,step:1,unit:"%",get overridden(){return t(Ke)},onChange:We=>e.onSet(t(ae).name,`${We}%`),onReset:()=>e.onReset(t(ae).name)})}});var Se=r(_e,2),Fe=s(Se),$e=r(s(Fe),2);re($e,20,()=>["light","dark"],X=>X,(X,ae)=>{var Re=ms(),Ke=s(Re);O(()=>{Ye(Re,1,`px-1.5 py-0.5 rounded text-[8px] font-bold cursor-pointer transition-all ${t(D)===ae?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(Ke,ae==="light"?"Light":"Dark")}),x("click",Re,()=>{C(D,ae,!0)}),f(X,Re)});var Qe=r(Fe,2);re(Qe,21,()=>m,X=>X.name,(X,ae)=>{const Re=u(()=>at(t(ae))),Ke=u(()=>t(ae).label),We=u(()=>Ge(t(ve),t(Ke),t(J),t(G)));var gt=mp(),yt=s(gt),ht=s(yt),Te=r(yt,2),Ce=r(Te,2),At=s(Ce);O((oa,Vt,Zt)=>{y(ht,oa),it(Te,Vt),Y(Te,"title",Zt),y(At,t(Ke))},[()=>Math.round(t(Re)),()=>`background:${t(We)}; height: ${Math.max(t(Re)/100*56,6)}px`,()=>`primary-${t(Ke)} (${t(D)}) · mix ${Math.round(t(Re))}%`]),f(X,gt)});var bt=r(Se,2),kt=s(bt),Pt=r(s(kt),2);re(Pt,20,()=>["light","dark"],X=>X,(X,ae)=>{var Re=ms(),Ke=s(Re);O(()=>{Ye(Re,1,`px-1.5 py-0.5 rounded text-[8px] font-bold cursor-pointer transition-all ${t(D)===ae?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(Ke,ae==="light"?"Light":"Dark")}),x("click",Re,()=>{C(D,ae,!0)}),f(X,Re)});var wt=r(kt,2);re(wt,16,()=>k,X=>X,(X,ae)=>{const Re=u(()=>e.overrides[`--sf-color-${ae}-source-light`]??d.find(At=>At.name===`--sf-color-${ae}-source-light`)?.default??"oklch(0.5 0.15 264)"),Ke=u(()=>`--sf-color-${ae}-source-dark`),We=u(()=>e.overrides[t(Ke)]??(t(pe).has(ae)&&!e.overrides[t(Ke)]?W(t(Re),ae):d.find(At=>At.name===t(Ke))?.default??W(t(Re),ae))),gt=u(()=>t(D)==="light"?t(Re):t(We));var yt=hp(),ht=s(yt),Te=s(ht),Ce=r(ht,2);re(Ce,20,()=>b,At=>At,(At,oa)=>{const Vt=u(()=>Ge(t(gt),oa,t(ie),t(ue)));var Zt=vp();O(()=>{it(Zt,`background:${t(Vt)}`),Y(Zt,"title",`${ae}-${oa} (${t(D)})`)}),f(At,Zt)}),O(()=>y(Te,ae)),f(X,yt)}),f(se,K)};I(Xe,se=>{t(S)&&se(ut)})}var Lt=r(ct,4),Dt=s(Lt),Rt=r(s(Dt),2),me=s(Rt),Je=r(Dt,2);{var mt=se=>{var V=_p(),F=r(de(V),2);re(F,16,()=>["brand","fade"],$=>$,($,ve)=>{var J=wp(),G=de(J),ie=s(G),ue=r(G,2);re(ue,21,()=>i.filter(K=>K.group===ve),K=>K.name,(K,le)=>{const Me=u(()=>`var(${t(le).name})`),H=u(()=>He(t(le)));var _e=kp(),ce=s(_e),Se=r(ce,2),Fe=s(Se),$e=s(Fe),Qe=s($e),bt=r($e,2);{var kt=ht=>{var Te=bp();x("click",Te,()=>{delete A[t(le).name],e.onReset(t(le).name)}),f(ht,Te)};I(bt,ht=>{t(le).name in e.overrides&&ht(kt)})}var Pt=r(Fe,2);{var wt=ht=>{var Te=yp(),Ce=r(s(Te),2);re(Ce,16,()=>["top","right","bottom","left"],At=>At,(At,oa)=>{var Vt=ms(),Zt=s(Vt);O(()=>{Ye(Vt,1,`flex-1 py-0.5 rounded text-[9px] border transition-all cursor-pointer capitalize ${t(H).dir===oa?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5"}`),y(Zt,oa)}),x("click",Vt,()=>be(t(le),"dir",oa)),f(At,Vt)}),f(ht,Te)},X=ht=>{var Te=xp(),Ce=r(s(Te),2),At=r(Ce,2),oa=s(At);O(()=>{Xt(Ce,t(H).angle),y(oa,`${t(H).angle??""}°`)}),x("input",Ce,Vt=>be(t(le),"angle",parseInt(Vt.target.value))),f(ht,Te)};I(Pt,ht=>{t(le).kind==="dir"&&t(le).group!=="fade"?ht(wt):t(le).kind!=="dir"&&ht(X,1)})}var ae=r(Pt,2),Re=r(s(ae),2),Ke=r(Re,2),We=r(ae,2),gt=r(s(We)),yt=r(We,2);O(ht=>{it(ce,ht),y(Qe,t(le).label),Xt(Re,t(H).stop1),Xt(Ke,t(H).stop2),y(gt,` ${t(le).formula??""}`),Xt(yt,e.overrides[t(le).name]??"")},[()=>`background:${n(t(Me),t(Me))}`]),x("change",Re,ht=>be(t(le),"stop1",ht.target.value.trim())),x("change",Ke,ht=>be(t(le),"stop2",ht.target.value.trim())),x("change",yt,ht=>{const Te=ht.target.value.trim();delete A[t(le).name],Te?e.onSet(t(le).name,Te):e.onReset(t(le).name)}),f(K,_e)}),O(()=>y(ie,ve==="brand"?"Brand & surface":"Edge fades")),f($,J)}),f(se,V)};I(Je,se=>{t(w)&&se(mt)})}var Ut=r(Lt,4),Ue=s(Ut),Ae=r(s(Ue),2),Ve=s(Ae),tt=r(Ue,2);{var Ct=se=>{var V=Cp(),F=r(de(V),2);re(F,20,()=>[["light dark","light dark (default)"],["light","Light only"],["dark","Dark only"]],([$,ve])=>$,($,ve)=>{var J=u(()=>Pa(ve,2));let G=()=>t(J)[0],ie=()=>t(J)[1];const ue=u(()=>e.overrides["--sf-color-scheme"]??"light dark");var K=ms(),le=s(K);O(()=>{Ye(K,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer ${t(ue)===G()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(le,ie())}),x("click",K,()=>G()==="light dark"?e.onReset("--sf-color-scheme"):e.onSet("--sf-color-scheme",G())),f($,K)}),f(se,V)};I(tt,se=>{t(P)&&se(Ct)})}var ta=r(Ut,4),zt=s(ta),It=r(s(zt),2),Ft=s(It),la=r(zt,2);{var ka=se=>{var V=Sp(),F=r(de(V),2);re(F,21,()=>v,$=>$.name,($,ve)=>{const J=u(()=>o(`var(${t(ve).name})`,""));var G=Op(),ie=s(G),ue=s(ie),K=r(ie,2);{let le=u(()=>e.overrides[t(ve).name]??""),Me=u(()=>t(J)?`auto-derived · ${t(J)}`:"auto-derived"),H=u(()=>t(ve).name in e.overrides);Va(K,{get token(){return t(ve).name},get value(){return t(le)},get placeholder(){return t(Me)},get isOverridden(){return t(H)},onSet:_e=>e.onSet(t(ve).name,_e),onReset:()=>e.onReset(t(ve).name)})}O(()=>y(ue,t(ve).label)),f($,G)}),f(se,V)};I(la,se=>{t(L)&&se(ka)})}O(()=>{Y(Ze,"aria-expanded",t(B)),y(fe,t(B)?"▲":"▼"),Y(Le,"aria-expanded",t(R)),y(je,t(R)?"▲":"▼"),Y(vt,"aria-expanded",t(z)),y(xe,t(z)?"▲":"▼"),Y(_t,"aria-expanded",t(U)),y(Nt,t(U)?"▲":"▼"),Y(Gt,"aria-expanded",t(S)),y(ia,t(S)?"▲":"▼"),Y(Dt,"aria-expanded",t(w)),y(me,t(w)?"▲":"▼"),Y(Ue,"aria-expanded",t(P)),y(Ve,t(P)?"▲":"▼"),Y(zt,"aria-expanded",t(L)),y(Ft,t(L)?"▲":"▼")}),x("click",Ze,()=>{C(B,!t(B))}),x("click",Le,()=>{C(R,!t(R))}),x("click",vt,()=>{C(z,!t(z))}),x("click",_t,()=>{C(U,!t(U))}),x("click",Gt,()=>{C(S,!t(S))}),x("click",Dt,()=>{C(w,!t(w))}),x("click",Ue,()=>{C(P,!t(P))}),x("click",zt,()=>{C(L,!t(L))}),f(a,q),$t()}aa(["click","input","change"]);var Ip=g('
Aa Aa
'),Bp=g('
min
max
'),Up=g(''),zp=g(''),Ap=g('
'),Ep=g('
Modular scale ratio
'),Rp=g('
'),Tp=g('
clamp( )
');function Os(a,e){Qt(e,!0);let o=wa(e,"unit",3,"rem"),n=wa(e,"minLabel",3,"Min"),l=wa(e,"maxLabel",3,"Max"),i=wa(e,"overridden",3,!1),c=wa(e,"ratioMin_bound",3,1.05),d=wa(e,"ratioMax_bound",3,1.8),p=wa(e,"previewKind",3,"none");function m(Oe){return Math.min(e.max,Math.max(e.min,Oe))}let h=u(()=>(e.minValue-e.min)/(e.max-e.min)*100),v=u(()=>(e.maxValue-e.min)/(e.max-e.min)*100);function b(Oe){return Math.min(d(),Math.max(c(),Oe))}let k=u(()=>e.ratioPresets?.find(Oe=>e.ratioMin!==void 0&&Math.abs(Oe.value-e.ratioMin)<.0015)?.value),_=u(()=>e.ratioPresets?.find(Oe=>e.ratioMax!==void 0&&Math.abs(Oe.value-e.ratioMax)<.0015)?.value);var E=Tp(),B=s(E),U=s(B),S=s(U),z=r(U,2),L=r(s(z)),P=s(L),w=r(L,2),R=s(w),D=r(B,2),A=r(s(D),2),T=r(A,2),M=r(T,2),Q=r(M,2),He=r(Q,2),ee=r(D,2),be=s(ee),Ie=s(be),pe=s(Ie),he=r(Ie,2),Ne=r(be,2),at=s(Ne),et=s(at),N=r(at,2),W=r(ee,2);{var ye=Oe=>{var Be=Ip(),te=s(Be),q=r(s(te)),ke=s(q),Ze=r(te,2),ne=r(s(Ze)),fe=s(ne);O((Pe,De,ze,Le)=>{it(te,Pe),y(ke,De),it(Ze,ze),y(fe,Le)},[()=>`font-size:${Math.min(e.minValue,2)}rem`,()=>n().toLowerCase(),()=>`font-size:${Math.min(e.maxValue,2.6)}rem`,()=>l().toLowerCase()]),f(Oe,Be)},ge=Oe=>{var Be=Bp(),te=s(Be),q=r(te,4);O((ke,Ze)=>{it(te,ke),it(q,Ze)},[()=>`width:${Math.min(e.minValue*28,120)}px`,()=>`width:${Math.min(e.maxValue*28,200)}px`]),f(Oe,Be)};I(W,Oe=>{p()==="type"?Oe(ye):p()==="space"&&Oe(ge,1)})}var Z=r(W,2);{var we=Oe=>{var Be=Ep(),te=r(s(Be),2);re(te,21,()=>[{side:n(),value:e.ratioMin,active:t(k),onChange:e.onRatioMinChange},{side:l(),value:e.ratioMax,active:t(_),onChange:e.onRatioMaxChange}],q=>q.side,(q,ke)=>{var Ze=Ap(),ne=s(Ze),fe=s(ne),Pe=r(ne,2),De=s(Pe);{var ze=lt=>{var dt=Up();dt.value=dt.__value="",f(lt,dt)};I(De,lt=>{t(ke).active===void 0&<(ze)})}var Le=r(De);re(Le,17,()=>e.ratioPresets,lt=>lt.value,(lt,dt)=>{var Ot=zp(),vt=s(Ot),oe={};O(xe=>{y(vt,t(dt).label),oe!==(oe=xe)&&(Ot.value=(Ot.__value=xe)??"")},[()=>String(t(dt).value)]),f(lt,Ot)});var qe;Fa(Pe);var je=r(Pe,2);Y(je,"step",.001),O(lt=>{y(fe,t(ke).side),Y(Pe,"aria-label",`${t(ke).side} modular scale ratio preset`),qe!==(qe=lt)&&(Pe.value=(Pe.__value=lt)??"",Ba(Pe,lt)),Y(je,"aria-label",`${t(ke).side} modular scale custom ratio`),Y(je,"min",c()),Y(je,"max",d()),Xt(je,t(ke).value)},[()=>t(ke).active!==void 0?String(t(ke).active):""]),x("change",Pe,lt=>{const dt=parseFloat(lt.target.value);Number.isFinite(dt)&&t(ke).onChange?.(b(dt))}),x("change",je,lt=>{const dt=parseFloat(lt.target.value);Number.isFinite(dt)&&t(ke).onChange?.(b(dt))}),f(q,Ze)}),f(Oe,Be)};I(Z,Oe=>{e.ratioPresets&&Oe(we)})}var Ge=r(Z,2);{var nt=Oe=>{var Be=Rp(),te=s(Be);x("click",te,function(...q){e.onReset?.apply(this,q)}),f(Oe,Be)};I(Ge,Oe=>{i()&&e.onReset&&Oe(nt)})}O(Oe=>{Ye(E,1,`rounded-xl border p-3 ${i()?"bg-indigo-500/8 border-indigo-500/25":"bg-white/4 border-white/8"}`,"svelte-iy59wr"),y(S,e.title),y(P,`${e.minValue??""}${o()??""}`),y(R,`${e.maxValue??""}${o()??""}`),it(A,Oe),Y(T,"min",e.min),Y(T,"max",e.max),Y(T,"step",e.step),Xt(T,e.minValue),Y(T,"aria-label",`${e.title} min`),Y(M,"min",e.min),Y(M,"max",e.max),Y(M,"step",e.step),Xt(M,e.maxValue),Y(M,"aria-label",`${e.title} max`),it(Q,`left: calc(${t(h)}% - 6px)`),it(He,`left: calc(${t(v)}% - 6px)`),y(pe,n()),Y(he,"min",e.min),Y(he,"max",e.max),Y(he,"step",e.step),Xt(he,e.minValue),y(et,l()),Y(N,"min",e.min),Y(N,"max",e.max),Y(N,"step",e.step),Xt(N,e.maxValue)},[()=>`left:${Math.min(t(h),t(v))}%; right:${100-Math.max(t(h),t(v))}%`]),x("input",T,Oe=>e.onMinChange(Math.min(m(parseFloat(Oe.target.value)),e.maxValue))),x("input",M,Oe=>e.onMaxChange(Math.max(m(parseFloat(Oe.target.value)),e.minValue))),x("change",he,Oe=>e.onMinChange(m(parseFloat(Oe.target.value)||e.min))),x("change",N,Oe=>e.onMaxChange(m(parseFloat(Oe.target.value)||e.max))),f(a,E),$t()}aa(["input","change","click"]);var Dp=g(''),vs=g(''),Cr=g(''),Mp=g('
'),Np=g('
Google Font
',1),Fp=g(''),jp=g(""),Or=g(''),Po=g(""),Gp=g('
Tracking
'),Hp=g('
Max width
'),qp=g(''),Vp=g('
The quick brown fox
Size
Line height
Weight
',1),Hn=g(''),qn=g('
'),Kp=g(""),Wp=g('
'),Yp=g('
Emphasis style
External marker
',1),Vn=g(''),Zp=g('
'),Jp=g('

Named weight tokens. Override if your font uses non-standard axis values.

',1),Xp=g('
'),Qp=g('
',1),$p=g('
'),em=g(`

Utopia-style fluid scale. Each endpoint has three values — viewport width, - base size, and modular ratio. Sizes interpolate fluidly between mobile and desktop.

Line height scale
Letter-spacing scale

Overriding these propagates to heading sizes that reference them.

`,1),tm=g('
Aa
'),am=g('
'),Sr=g(''),om=g('
'),sm=g('

Per-text-size max-width caps on .sf-text-* elements. Set to none to remove the constraint; use ch units for character-based measures.

',1),rm=g('

Advanced OpenType and variable-font axes. Leave as normal unless your font supports these features.

Numeric figures
Optical sizing
Font features
Variation
',1),nm=g('
');function lm(a,e){Qt(e,!0);const o=[{label:"Minor Second — 1.067",value:1.067},{label:"Major Second — 1.125",value:1.125},{label:"Minor Third — 1.200",value:1.2},{label:"Major Third — 1.250",value:1.25},{label:"Perfect Fourth — 1.333",value:1.333},{label:"Aug. Fourth — 1.414",value:1.414},{label:"Golden — 1.618",value:1.618}],n=[{label:"System sans-serif",value:""},{label:"Geometric (Avenir, Montserrat…)",value:"var(--sf-font-geometric)"},{label:"Humanist (Seravek, Gill Sans…)",value:"var(--sf-font-humanist)"},{label:"Slab serif (Rockwell, Roboto Slab…)",value:"var(--sf-font-slab)"},{label:"Inter",value:"Inter, system-ui, sans-serif"},{label:"Georgia (serif)",value:"Georgia, 'Times New Roman', serif"},{label:"Merriweather (serif)",value:"'Merriweather', Georgia, serif"},{label:"JetBrains Mono",value:"'JetBrains Mono', 'Fira Code', monospace"}],l=[{label:"Same as body",value:""},{label:"Geometric (Avenir, Montserrat…)",value:"var(--sf-font-geometric)"},{label:"Humanist (Seravek, Gill Sans…)",value:"var(--sf-font-humanist)"},{label:"Slab serif (Rockwell, Roboto Slab…)",value:"var(--sf-font-slab)"},{label:"Inter",value:"Inter, system-ui, sans-serif"},{label:"Georgia (serif)",value:"Georgia, 'Times New Roman', serif"},{label:"Impact / condensed",value:"Impact, 'Arial Narrow', sans-serif"}],i=[{label:"System mono",value:"ui-monospace, monospace"},{label:"JetBrains Mono",value:"'JetBrains Mono', 'Fira Code', monospace"},{label:"Source Code Pro",value:"'Source Code Pro', 'Courier New', monospace"}],c=["Inter","Roboto","Open Sans","Lato","Montserrat","Poppins","Source Sans 3","Raleway","Nunito","Work Sans","Manrope","DM Sans","Outfit","Plus Jakarta Sans","Geist","Space Grotesk","Figtree","Merriweather","Playfair Display","Lora","Source Serif 4","Roboto Slab","IBM Plex Sans","IBM Plex Mono","JetBrains Mono","Fira Code","Space Mono"],d=[{label:"balance",value:"balance"},{label:"pretty",value:"pretty"},{label:"normal",value:"normal"}],p=["300","400","500","600","700","800"],m={"--sf-font-weight-body":"400","--sf-font-weight-heading":"600","--sf-font-weight-display":"700","--sf-font-weight-interactive":"600"},h=[{label:"2xs",factor:.64},{label:"xs",factor:.75},{label:"s",factor:.875},{label:"m",factor:1},{label:"l",factor:1.125},{label:"xl",factor:1.25},{label:"2xl",factor:1.5},{label:"3xl",factor:1.875},{label:"4xl",factor:2.25}],v=[{label:"Tight",token:"--sf-tracking-tight",default:-.025},{label:"Normal",token:"--sf-tracking-normal",default:0},{label:"Wide",token:"--sf-tracking-wide",default:.025},{label:"Wider",token:"--sf-tracking-wider",default:.05},{label:"Widest",token:"--sf-tracking-widest",default:.1}],b=[{label:"Tight",token:"--sf-leading-tight",default:1.1},{label:"Snug",token:"--sf-leading-snug",default:1.3},{label:"Normal",token:"--sf-leading-normal",default:1.5},{label:"Relaxed",token:"--sf-leading-relaxed",default:1.625}],k=[{label:"2xs",value:"var(--sf-text-2xs)",approx:.64},{label:"xs",value:"var(--sf-text-xs)",approx:.75},{label:"s",value:"var(--sf-text-s)",approx:.875},{label:"m",value:"var(--sf-text-m)",approx:1},{label:"l",value:"var(--sf-text-l)",approx:1.125},{label:"xl",value:"var(--sf-text-xl)",approx:1.25},{label:"2xl",value:"var(--sf-text-2xl)",approx:1.5},{label:"3xl",value:"var(--sf-text-3xl)",approx:1.875},{label:"4xl",value:"var(--sf-text-4xl)",approx:2.25},{label:"display-s",value:"var(--sf-text-display-s)",approx:2.6},{label:"display-m",value:"var(--sf-text-display-m)",approx:3.2},{label:"display-l",value:"var(--sf-text-display-l)",approx:3.8}],_=b.map(H=>({label:H.label,value:`var(${H.token})`,num:H.default})),E=v.map(H=>({label:H.label,value:`var(${H.token})`,em:H.default})),B=[{id:"body",label:"Body",size:"--sf-body-font-size",lh:"--sf-body-line-height",wt:"--sf-body-font-weight",ls:null,dSize:"var(--sf-text-m)",dLh:"var(--sf-leading-normal)",dWt:"400",dLs:""},{id:"h1",label:"H1",size:"--sf-h1-size",lh:"--sf-h1-line-height",wt:"--sf-h1-font-weight",ls:"--sf-h1-letter-spacing",dSize:"var(--sf-text-4xl)",dLh:"var(--sf-leading-tight)",dWt:"600",dLs:"var(--sf-tracking-tight)"},{id:"h2",label:"H2",size:"--sf-h2-size",lh:"--sf-h2-line-height",wt:"--sf-h2-font-weight",ls:"--sf-h2-letter-spacing",dSize:"var(--sf-text-3xl)",dLh:"var(--sf-leading-tight)",dWt:"600",dLs:"var(--sf-tracking-tight)"},{id:"h3",label:"H3",size:"--sf-h3-size",lh:"--sf-h3-line-height",wt:"--sf-h3-font-weight",ls:"--sf-h3-letter-spacing",dSize:"var(--sf-text-2xl)",dLh:"var(--sf-leading-snug)",dWt:"600",dLs:"var(--sf-tracking-normal)"},{id:"h4",label:"H4",size:"--sf-h4-size",lh:"--sf-h4-line-height",wt:"--sf-h4-font-weight",ls:"--sf-h4-letter-spacing",dSize:"var(--sf-text-xl)",dLh:"var(--sf-leading-snug)",dWt:"600",dLs:"var(--sf-tracking-normal)"},{id:"h5",label:"H5",size:"--sf-h5-size",lh:"--sf-h5-line-height",wt:"--sf-h5-font-weight",ls:"--sf-h5-letter-spacing",dSize:"var(--sf-text-l)",dLh:"var(--sf-leading-normal)",dWt:"600",dLs:"var(--sf-tracking-normal)"},{id:"h6",label:"H6",size:"--sf-h6-size",lh:"--sf-h6-line-height",wt:"--sf-h6-font-weight",ls:"--sf-h6-letter-spacing",dSize:"var(--sf-text-m)",dLh:"var(--sf-leading-normal)",dWt:"600",dLs:"var(--sf-tracking-wide)"}];let U=j("h1"),S=u(()=>B.find(H=>H.id===t(U)));const z=jo.typography??[];function L(H,_e){const ce=parseFloat(e.overrides[H]??"");return isNaN(ce)?_e:ce}let P=u(()=>L("--sf-text-ratio-min",1.25)),w=u(()=>L("--sf-text-ratio-max",1.333)),R=u(()=>L("--sf-text-base-min",1)),D=u(()=>L("--sf-text-base-max",1.25)),A=u(()=>L("--sf-text-display-base-min",2.4)),T=u(()=>L("--sf-text-display-base-max",3)),M=u(()=>L("--sf-leading-taper",0)),Q=u(()=>L("--sf-text-scale",1)),He=u(()=>L("--sf-fluid-min-vw",22.5)),ee=u(()=>L("--sf-fluid-max-vw",90)),be=j(!1),Ie=j(!1),pe=j(!1),he=j(!1),Ne=j(!1),at=j(!1),et=j(!1),N=j(!1),W=j(!1),ye=u(()=>e.overrides["--sf-font-body"]??""),ge=u(()=>e.overrides["--sf-font-heading"]??""),Z=u(()=>e.overrides["--sf-font-mono"]??"ui-monospace, monospace"),we=j(""),Ge=j("body");function nt(H){const _e=e.overrides[H.token];return _e?parseFloat(_e.replace("em","")):H.default}function Oe(H){return L(H.token,H.default)}function Be(H){if(!H.trim())return;const _e=`gf-${H.replace(/\s+/g,"-")}`;if(!document.getElementById(_e)){const ce=document.createElement("link");ce.id=_e,ce.rel="stylesheet",ce.href=`https://fonts.googleapis.com/css2?family=${encodeURIComponent(H)}:wght@300;400;500;600;700&display=swap`,document.head.appendChild(ce)}}function te(H,_e){if(!H.trim())return;Be(H);const ce=_e==="body"?"--sf-font-body":"--sf-font-heading";e.onSet(ce,`'${H}', sans-serif`)}function q(H,_e){return H?e.overrides[H]??_e:_e}function ke(H,_e,ce){H&&(_e===ce?e.onReset(H):e.onSet(H,_e))}let Ze=u(()=>{const H=q(t(S).size,t(S).dSize),_e=k.find(Se=>Se.value===H),ce=(t(R)+t(D))/2;return Math.min((_e?.approx??1)*ce*t(Q),2.4)}),ne=u(()=>{const H=q(t(S).wt,t(S).dWt),_e=parseInt(H);return isNaN(_e)?600:_e}),fe=u(()=>{if(!t(S).ls)return 0;const H=q(t(S).ls,t(S).dLs),_e=E.find(Se=>Se.value===H);if(_e)return _e.em;const ce=parseFloat(H.replace("em",""));return isNaN(ce)?0:ce}),Pe=u(()=>{const H=q(t(S).lh,t(S).dLh),_e=_.find(Se=>Se.value===H);if(_e)return _e.num;const ce=parseFloat(H);return isNaN(ce)?1.3:ce});var De=nm(),ze=s(De),Le=s(ze),qe=r(s(Le),2),je=s(qe),lt=r(Le,2);{var dt=H=>{var _e=Np(),ce=de(_e);re(ce,17,()=>[{label:"Body",token:"--sf-font-body",current:t(ye),opts:n},{label:"Heading",token:"--sf-font-heading",current:t(ge),opts:l},{label:"Mono",token:"--sf-font-mono",current:t(Z),opts:i}],We=>We.token,(We,gt)=>{var yt=Mp(),ht=s(yt),Te=s(ht),Ce=r(ht,2),At=s(Ce);re(At,17,()=>t(gt).opts,st=>st.label,(st,rt)=>{var Tt=Dp(),Kt=s(Tt),ca={};O(()=>{y(Kt,t(rt).label),ca!==(ca=t(rt).value)&&(Tt.value=(Tt.__value=t(rt).value)??"")}),f(st,Tt)});var oa=r(At);{var Vt=st=>{var rt=vs(),Tt=s(rt),Kt={};O(ca=>{y(Tt,`Custom: ${ca??""}`),Kt!==(Kt=t(gt).current)&&(rt.value=(rt.__value=t(gt).current)??"")},[()=>t(gt).current.split(",")[0].replace(/['"]/g,"")]),f(st,rt)},Zt=u(()=>t(gt).current&&!t(gt).opts.some(st=>st.value===t(gt).current));I(oa,st=>{t(Zt)&&st(Vt)})}var pa;Fa(Ce);var Ca=r(Ce,2);{var Co=st=>{var rt=Cr();x("click",rt,()=>e.onReset(t(gt).token)),f(st,rt)};I(Ca,st=>{t(gt).token in e.overrides&&st(Co)})}O(()=>{y(Te,t(gt).label),it(Ce,`font-family: ${t(gt).current||"inherit"}`),pa!==(pa=t(gt).current)&&(Ce.value=(Ce.__value=t(gt).current)??"",Ba(Ce,t(gt).current))}),x("change",Ce,st=>{const rt=st.target.value;rt?e.onSet(t(gt).token,rt):e.onReset(t(gt).token)}),f(We,yt)});var Se=r(ce,2),Fe=r(s(Se),2),$e=s(Fe),Qe=s($e);Qe.value=Qe.__value="";var bt=r(Qe);re(bt,16,()=>c,We=>We,(We,gt)=>{var yt=vs(),ht=s(yt),Te={};O(()=>{y(ht,gt),Te!==(Te=gt)&&(yt.value=(yt.__value=gt)??"")}),f(We,yt)});var kt;Fa($e);var Pt=r($e,2),wt=s(Pt),X=r(wt,2),ae=r(Fe,2),Re=r(ae,2),Ke=s(Re);O(()=>{kt!==(kt=t(we))&&($e.value=($e.__value=t(we))??"",Ba($e,t(we))),Ye(wt,1,`px-2 rounded text-[10px] border transition-all cursor-pointer ${t(Ge)==="body"?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400"}`),Ye(X,1,`px-2 rounded text-[10px] border transition-all cursor-pointer ${t(Ge)==="heading"?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400"}`),Xt(ae,t(we)),y(Ke,`Load & apply to ${t(Ge)??""}`)}),x("change",$e,We=>{C(we,We.target.value,!0)}),x("click",wt,()=>{C(Ge,"body")}),x("click",X,()=>{C(Ge,"heading")}),x("input",ae,We=>{C(we,We.target.value,!0)}),x("click",Re,()=>te(t(we),t(Ge))),f(H,_e)};I(lt,H=>{t(be)&&H(dt)})}var Ot=r(ze,4),vt=s(Ot),oe=r(s(vt),2),xe=s(oe),Ee=r(vt,2);{var ot=H=>{var _e=Vp(),ce=de(_e);re(ce,21,()=>B,st=>st.id,(st,rt)=>{const Tt=u(()=>t(rt).size in e.overrides||t(rt).lh in e.overrides||t(rt).wt in e.overrides||!!t(rt).ls&&t(rt).ls in e.overrides);var Kt=jp(),ca=s(Kt),Oo=r(ca);{var oo=Aa=>{var ga=Fp();f(Aa,ga)};I(Oo,Aa=>{t(Tt)&&Aa(oo)})}O(()=>{Ye(Kt,1,`relative flex-1 py-1 rounded-md text-[10px] font-bold transition-all cursor-pointer ${t(U)===t(rt).id?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(ca,`${t(rt).label??""} `)}),x("click",Kt,()=>{C(U,t(rt).id,!0)}),f(st,Kt)});var Se=r(ce,2),Fe=s(Se),$e=r(Se,2),Qe=r(s($e),2),bt=s(Qe);re(bt,17,()=>k,st=>st.value,(st,rt)=>{var Tt=vs(),Kt=s(Tt),ca={};O(()=>{y(Kt,t(rt).label),ca!==(ca=t(rt).value)&&(Tt.value=(Tt.__value=t(rt).value)??"")}),f(st,Tt)});var kt=r(bt);{var Pt=st=>{var rt=Or(),Tt={};O(Kt=>{Tt!==(Tt=Kt)&&(rt.value=(rt.__value=Kt)??"")},[()=>q(t(S).size,t(S).dSize)]),f(st,rt)},wt=u(()=>!k.some(st=>st.value===q(t(S).size,t(S).dSize)));I(kt,st=>{t(wt)&&st(Pt)})}var X;Fa(Qe);var ae=r($e,2),Re=r(s(ae),2),Ke=s(Re);re(Ke,17,()=>_,st=>st.value,(st,rt)=>{var Tt=vs(),Kt=s(Tt),ca={};O(()=>{y(Kt,`${t(rt).label??""} · ${t(rt).num??""}`),ca!==(ca=t(rt).value)&&(Tt.value=(Tt.__value=t(rt).value)??"")}),f(st,Tt)});var We=r(Ke);{var gt=st=>{var rt=Or(),Tt={};O(Kt=>{Tt!==(Tt=Kt)&&(rt.value=(rt.__value=Kt)??"")},[()=>q(t(S).lh,t(S).dLh)]),f(st,rt)},yt=u(()=>!_.some(st=>st.value===q(t(S).lh,t(S).dLh)));I(We,st=>{t(yt)&&st(gt)})}var ht;Fa(Re);var Te=r(ae,2),Ce=r(s(Te),2);re(Ce,20,()=>p,st=>st,(st,rt)=>{const Tt=u(()=>q(t(S).wt,t(S).dWt));var Kt=Po(),ca=s(Kt);O(Oo=>{it(Kt,Oo),Ye(Kt,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(Tt)===rt?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(ca,rt)},[()=>`font-weight:${parseInt(rt)}`]),x("click",Kt,()=>ke(t(S).wt,rt,t(S).dWt)),f(st,Kt)});var At=r(Te,2);{var oa=st=>{var rt=Gp(),Tt=r(s(rt),2),Kt=s(Tt);re(Kt,17,()=>E,ga=>ga.value,(ga,So)=>{var Lo=vs(),Es=s(Lo),un={};O(()=>{y(Es,t(So).label),un!==(un=t(So).value)&&(Lo.value=(Lo.__value=t(So).value)??"")}),f(ga,Lo)});var ca=r(Kt);{var Oo=ga=>{var So=Or(),Lo={};O(Es=>{Lo!==(Lo=Es)&&(So.value=(So.__value=Es)??"")},[()=>q(t(S).ls,t(S).dLs)]),f(ga,So)},oo=u(()=>!E.some(ga=>ga.value===q(t(S).ls,t(S).dLs)));I(ca,ga=>{t(oo)&&ga(Oo)})}var Aa;Fa(Tt),O(ga=>{Aa!==(Aa=ga)&&(Tt.value=(Tt.__value=ga)??"",Ba(Tt,ga))},[()=>q(t(S).ls,t(S).dLs)]),x("change",Tt,ga=>ke(t(S).ls,ga.target.value,t(S).dLs)),f(st,rt)};I(At,st=>{t(S).ls&&st(oa)})}var Vt=r(At,2);{var Zt=st=>{const rt=u(()=>`--sf-${t(S).id}-max-width`);var Tt=Hp(),Kt=r(s(Tt),2),ca=r(Kt,2);{var Oo=oo=>{var Aa=Cr();x("click",Aa,()=>e.onReset(t(rt))),f(oo,Aa)};I(ca,oo=>{t(rt)in e.overrides&&oo(Oo)})}O(()=>Xt(Kt,e.overrides[t(rt)]??"")),x("input",Kt,oo=>{const Aa=oo.target.value.trim();Aa?e.onSet(t(rt),Aa):e.onReset(t(rt))}),f(st,Tt)};I(Vt,st=>{t(S).id!=="body"&&st(Zt)})}var pa=r(Vt,2),Ca=s(pa);{var Co=st=>{var rt=qp(),Tt=s(rt);O(()=>y(Tt,`reset ${t(S).label??""}`)),x("click",rt,()=>{const Kt={[t(S).size]:null,[t(S).lh]:null,[t(S).wt]:null};t(S).ls&&(Kt[t(S).ls]=null),e.onBulkChange(Kt)}),f(st,rt)};I(Ca,st=>{(t(S).size in e.overrides||t(S).lh in e.overrides||t(S).wt in e.overrides||t(S).ls&&t(S).ls in e.overrides)&&st(Co)})}O((st,rt)=>{it(Fe,`font-size:${t(Ze)}rem; font-weight:${t(ne)}; letter-spacing:${t(fe)}em; line-height:${t(Pe)}; font-family:${t(S).id==="body"?t(ye)||"inherit":t(ge)||t(ye)||"inherit"}`),X!==(X=st)&&(Qe.value=(Qe.__value=st)??"",Ba(Qe,st)),ht!==(ht=rt)&&(Re.value=(Re.__value=rt)??"",Ba(Re,rt))},[()=>q(t(S).size,t(S).dSize),()=>q(t(S).lh,t(S).dLh)]),x("change",Qe,st=>ke(t(S).size,st.target.value,t(S).dSize)),x("change",Re,st=>ke(t(S).lh,st.target.value,t(S).dLh)),f(H,_e)};I(Ee,H=>{t(Ie)&&H(ot)})}var ft=r(Ot,4),_t=s(ft),xt=r(s(_t),2),Nt=s(xt),St=r(_t,2);{var Et=H=>{var _e=Yp(),ce=de(_e);re(ce,16,()=>[{label:"Body strong",tokenName:"--sf-font-weight-strong"},{label:"Interactive",tokenName:"--sf-font-weight-interactive"}],X=>X.tokenName,(X,ae)=>{const Re=u(()=>m[ae.tokenName]??"600"),Ke=u(()=>e.overrides[ae.tokenName]??t(Re)),We=u(()=>ae.tokenName in e.overrides);var gt=qn(),yt=s(gt),ht=s(yt),Te=s(ht),Ce=r(ht,2);{var At=Vt=>{var Zt=Hn();x("click",Zt,()=>e.onReset(ae.tokenName)),f(Vt,Zt)};I(Ce,Vt=>{t(We)&&Vt(At)})}var oa=r(yt,2);re(oa,20,()=>p,Vt=>Vt,(Vt,Zt)=>{var pa=Po(),Ca=s(pa);O(Co=>{it(pa,Co),Ye(pa,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(Ke)===Zt?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Ca,Zt)},[()=>`font-weight: ${parseInt(Zt)}`]),x("click",pa,()=>Zt===t(Re)&&!t(We)?void 0:Zt===t(Re)?e.onReset(ae.tokenName):e.onSet(ae.tokenName,Zt)),f(Vt,pa)}),O(()=>y(Te,`${ae.label??""} weight`)),f(X,gt)});var Se=r(ce,2),Fe=r(s(Se),2);re(Fe,20,()=>[["Italic","italic"],["Normal","normal"]],([X,ae])=>ae,(X,ae)=>{var Re=u(()=>Pa(ae,2));let Ke=()=>t(Re)[0],We=()=>t(Re)[1];const gt=u(()=>e.overrides["--sf-body-em-style"]??"italic");var yt=Kp(),ht=s(yt),Te=s(ht);O(()=>{Ye(yt,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer ${t(gt)===We()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),it(ht,`font-style: ${We()}`),y(Te,Ke())}),x("click",yt,()=>We()==="italic"?e.onReset("--sf-body-em-style"):e.onSet("--sf-body-em-style",We())),f(X,yt)});var $e=r(Se,2);{let X=u(()=>L("--sf-code-font-size",.875)),ae=u(()=>"--sf-code-font-size"in e.overrides);pt($e,{label:"Code font size",get value(){return t(X)},min:.7,max:1.1,step:.005,unit:"em",help:"--sf-code-font-size — size of inline code relative to surrounding text",get overridden(){return t(ae)},onChange:Re=>e.onSet("--sf-code-font-size",`${Re}em`),onReset:()=>e.onReset("--sf-code-font-size")})}var Qe=r($e,2);re(Qe,16,()=>[{label:"Heading wrap",token:"--sf-heading-text-wrap",defaultVal:"balance"},{label:"Body wrap",token:"--sf-body-text-wrap",defaultVal:"pretty"}],X=>X.token,(X,ae)=>{const Re=u(()=>e.overrides[ae.token]??ae.defaultVal);var Ke=Wp(),We=s(Ke),gt=s(We),yt=r(We,2);re(yt,21,()=>d,ht=>ht.value,(ht,Te)=>{var Ce=Po(),At=s(Ce);O(()=>{Ye(Ce,1,`flex-1 px-2 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer ${t(Re)===t(Te).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(At,t(Te).label)}),x("click",Ce,()=>t(Te).value===ae.defaultVal&&!(ae.token in e.overrides)?void 0:t(Te).value===ae.defaultVal?e.onReset(ae.token):e.onSet(ae.token,t(Te).value)),f(ht,Ce)}),O(()=>y(gt,ae.label)),f(X,Ke)});var bt=r(Qe,2),kt=r(s(bt),2);Y(kt,"placeholder",'" ↗"');var Pt=r(kt,2);{var wt=X=>{var ae=Cr();x("click",ae,()=>e.onReset("--sf-link-external-marker")),f(X,ae)};I(Pt,X=>{"--sf-link-external-marker"in e.overrides&&X(wt)})}O(()=>Xt(kt,e.overrides["--sf-link-external-marker"]??"")),x("input",kt,X=>{const ae=X.target.value;ae?e.onSet("--sf-link-external-marker",ae):e.onReset("--sf-link-external-marker")}),f(H,_e)};I(St,H=>{t(pe)&&H(Et)})}var ct=r(ft,4),Gt=s(ct),ea=r(s(Gt),2),ia=s(ea),Xe=r(Gt,2);{var ut=H=>{var _e=Jp(),ce=r(de(_e),2);re(ce,16,()=>[{label:"Light",token:"--sf-font-weight-light",def:300},{label:"Normal",token:"--sf-font-weight-normal",def:400},{label:"Medium",token:"--sf-font-weight-medium",def:500},{label:"Semibold",token:"--sf-font-weight-semibold",def:600},{label:"Bold",token:"--sf-font-weight-bold",def:700}],Se=>Se.token,(Se,Fe)=>{var $e=Zp(),Qe=s($e),bt=s(Qe),kt=s(bt),Pt=r(bt,2);{var wt=ae=>{var Re=Vn();x("click",Re,()=>e.onReset(Fe.token)),f(ae,Re)};I(Pt,ae=>{Fe.token in e.overrides&&ae(wt)})}var X=r(Qe,2);re(X,20,()=>p,ae=>ae,(ae,Re)=>{const Ke=u(()=>e.overrides[Fe.token]??String(Fe.def));var We=Po(),gt=s(We);O(yt=>{it(We,yt),Ye(We,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(Ke)===Re?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(gt,Re)},[()=>`font-weight:${parseInt(Re)}`]),x("click",We,()=>Re===String(Fe.def)&&!(Fe.token in e.overrides)?void 0:Re===String(Fe.def)?e.onReset(Fe.token):e.onSet(Fe.token,Re)),f(ae,We)}),O(()=>y(kt,Fe.label)),f(Se,$e)}),f(H,_e)};I(Xe,H=>{t(W)&&H(ut)})}var Lt=r(ct,4),Dt=s(Lt),Rt=r(s(Dt),2),me=s(Rt),Je=r(Dt,2);{var mt=H=>{var _e=Qp(),ce=de(_e);{let $e=u(()=>"--sf-text-display-base-min"in e.overrides||"--sf-text-display-base-max"in e.overrides);Os(ce,{title:"Display base size",get minValue(){return t(A)},get maxValue(){return t(T)},min:1.5,max:6,step:.05,unit:"rem",previewKind:"type",get overridden(){return t($e)},onReset:()=>{e.onReset("--sf-text-display-base-min"),e.onReset("--sf-text-display-base-max")},onMinChange:Qe=>e.onSet("--sf-text-display-base-min",String(Qe)),onMaxChange:Qe=>e.onSet("--sf-text-display-base-max",String(Qe))})}var Se=r(ce,2);re(Se,20,()=>[{label:"Display L line-height",token:"--sf-display-l-line-height",def:1},{label:"Display M line-height",token:"--sf-display-m-line-height",def:1.05}],$e=>$e.token,($e,Qe)=>{var bt=Xp(),kt=s(bt),Pt=s(kt),wt=r(kt,2);{let X=u(()=>L(Qe.token,Qe.def)),ae=u(()=>Qe.token in e.overrides);pt(wt,{label:"",get value(){return t(X)},min:.8,max:1.5,step:.025,get overridden(){return t(ae)},onChange:Re=>e.onSet(Qe.token,String(Re)),onReset:()=>e.onReset(Qe.token)})}O(()=>y(Pt,Qe.label)),f($e,bt)});var Fe=r(Se,2);re(Fe,16,()=>[{label:"Display",tokenName:"--sf-font-weight-display"},{label:"Heading",tokenName:"--sf-font-weight-heading"}],$e=>$e.tokenName,($e,Qe)=>{const bt=u(()=>m[Qe.tokenName]??"700"),kt=u(()=>e.overrides[Qe.tokenName]??t(bt)),Pt=u(()=>Qe.tokenName in e.overrides);var wt=qn(),X=s(wt),ae=s(X),Re=s(ae),Ke=r(ae,2);{var We=yt=>{var ht=Hn();x("click",ht,()=>e.onReset(Qe.tokenName)),f(yt,ht)};I(Ke,yt=>{t(Pt)&&yt(We)})}var gt=r(X,2);re(gt,20,()=>p,yt=>yt,(yt,ht)=>{var Te=Po(),Ce=s(Te);O(At=>{it(Te,At),Ye(Te,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(kt)===ht?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Ce,ht)},[()=>`font-weight: ${parseInt(ht)}`]),x("click",Te,()=>ht===t(bt)&&!t(Pt)?void 0:ht===t(bt)?e.onReset(Qe.tokenName):e.onSet(Qe.tokenName,ht)),f(yt,Te)}),O(()=>y(Re,`${Qe.label??""} weight`)),f($e,wt)}),f(H,_e)};I(Je,H=>{t(he)&&H(mt)})}var Ut=r(Lt,4),Ue=s(Ut),Ae=r(s(Ue),2),Ve=s(Ae),tt=r(Ue,2);{var Ct=H=>{var _e=em(),ce=r(de(_e),2);{let wt=u(()=>"--sf-fluid-min-vw"in e.overrides||"--sf-fluid-max-vw"in e.overrides);Os(ce,{title:"Viewport range",get minValue(){return t(He)},get maxValue(){return t(ee)},min:15,max:120,step:.5,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",get overridden(){return t(wt)},onReset:()=>{e.onReset("--sf-fluid-min-vw"),e.onReset("--sf-fluid-max-vw")},onMinChange:X=>e.onSet("--sf-fluid-min-vw",String(X)),onMaxChange:X=>e.onSet("--sf-fluid-max-vw",String(X))})}var Se=r(ce,2);{let wt=u(()=>"--sf-text-base-min"in e.overrides||"--sf-text-base-max"in e.overrides);Os(Se,{title:"Base size & ratio",get minValue(){return t(R)},get maxValue(){return t(D)},min:.7,max:2,step:.01,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",previewKind:"type",get overridden(){return t(wt)},onReset:()=>{e.onReset("--sf-text-base-min"),e.onReset("--sf-text-base-max")},onMinChange:X=>e.onSet("--sf-text-base-min",String(X)),onMaxChange:X=>e.onSet("--sf-text-base-max",String(X)),get ratioPresets(){return o},get ratioMin(){return t(P)},get ratioMax(){return t(w)},ratioMin_bound:1.05,ratioMax_bound:1.8,onRatioMinChange:X=>e.onSet("--sf-text-ratio-min",String(X)),onRatioMaxChange:X=>e.onSet("--sf-text-ratio-max",String(X))})}var Fe=r(Se,2);re(Fe,21,()=>z,wt=>wt.name,(wt,X)=>{Go(wt,{get knob(){return t(X)},get overrides(){return e.overrides},onChange:(ae,Re)=>Re===null?e.onReset(ae):e.onSet(ae,Re)})});var $e=r(Fe,2),Qe=r(s($e),2);re(Qe,21,()=>b,wt=>wt.token,(wt,X)=>{{let ae=u(()=>Oe(t(X))),Re=u(()=>`${t(X).token} — ${t(X).label.toLowerCase()} line height`),Ke=u(()=>t(X).token in e.overrides);pt(wt,{get label(){return t(X).label},get value(){return t(ae)},min:1,max:2.2,step:.05,get help(){return t(Re)},get overridden(){return t(Ke)},onChange:We=>e.onSet(t(X).token,String(We)),onReset:()=>e.onReset(t(X).token)})}});var bt=r($e,2);{let wt=u(()=>"--sf-leading-taper"in e.overrides);pt(bt,{label:"Leading taper",get value(){return t(M)},min:0,max:.5,step:.01,help:"How aggressively large display sizes shrink their line-height.",get overridden(){return t(wt)},onChange:X=>e.onSet("--sf-leading-taper",String(X)),onReset:()=>e.onReset("--sf-leading-taper")})}var kt=r(bt,2),Pt=r(s(kt),4);re(Pt,21,()=>v,wt=>wt.token,(wt,X)=>{var ae=$p(),Re=s(ae),Ke=s(Re),We=s(Ke),gt=r(Ke,2);{var yt=Te=>{var Ce=Vn();x("click",Ce,()=>e.onReset(t(X).token)),f(Te,Ce)};I(gt,Te=>{t(X).token in e.overrides&&Te(yt)})}var ht=r(Re,2);{let Te=u(()=>nt(t(X)));Zo(ht,{get value(){return t(Te)},min:-.1,max:.2,step:.005,unit:"em",onChange:Ce=>e.onSet(t(X).token,`${Ce}em`)})}O(()=>y(We,t(X).label)),f(wt,ae)}),f(H,_e)};I(tt,H=>{t(Ne)&&H(Ct)})}var ta=r(Ut,4),zt=s(ta),It=r(s(zt),2),Ft=s(It),la=r(zt,2);{var ka=H=>{var _e=am();re(_e,21,()=>[...h].reverse(),({label:ce,factor:Se})=>ce,(ce,Se)=>{let Fe=()=>t(Se).label,$e=()=>t(Se).factor;const Qe=u(()=>(t(R)+t(D))/2),bt=u(()=>t(Qe)*$e()*t(Q));var kt=tm(),Pt=s(kt),wt=s(Pt),X=r(Pt,2),ae=r(X,2),Re=s(ae);O((Ke,We)=>{y(wt,Fe()),it(X,Ke),y(Re,`${We??""}rem`)},[()=>`font-size: ${Math.min(t(bt),2.5)}rem; font-family: ${t(ye)||"inherit"}`,()=>t(bt).toFixed(2)]),f(ce,kt)}),f(H,_e)};I(la,H=>{t(at)&&H(ka)})}var se=r(ta,4),V=s(se),F=r(s(V),2),$=s(F),ve=r(V,2);{var J=H=>{var _e=sm(),ce=r(de(_e),2);re(ce,20,()=>[{label:"2xs",token:"--sf-text-2xs-max-width",def:"55ch"},{label:"xs",token:"--sf-text-xs-max-width",def:"60ch"},{label:"s",token:"--sf-text-s-max-width",def:"65ch"},{label:"m",token:"--sf-text-m-max-width",def:"65ch"},{label:"l",token:"--sf-text-l-max-width",def:"none"},{label:"xl",token:"--sf-text-xl-max-width",def:"none"},{label:"2xl",token:"--sf-text-2xl-max-width",def:"none"},{label:"3xl",token:"--sf-text-3xl-max-width",def:"none"},{label:"4xl",token:"--sf-text-4xl-max-width",def:"none"}],Se=>Se.token,(Se,Fe)=>{var $e=om(),Qe=s($e),bt=s(Qe),kt=r(Qe,2),Pt=r(kt,2);{var wt=X=>{var ae=Sr();x("click",ae,()=>e.onReset(Fe.token)),f(X,ae)};I(Pt,X=>{Fe.token in e.overrides&&X(wt)})}O(()=>{y(bt,Fe.label),Xt(kt,e.overrides[Fe.token]??""),Y(kt,"placeholder",Fe.def)}),x("input",kt,X=>{const ae=X.target.value.trim();ae?e.onSet(Fe.token,ae):e.onReset(Fe.token)}),f(Se,$e)}),f(H,_e)};I(ve,H=>{t(N)&&H(J)})}var G=r(se,4),ie=s(G),ue=r(s(ie),2),K=s(ue),le=r(ie,2);{var Me=H=>{var _e=rm(),ce=r(de(_e),2),Se=r(s(ce),2);re(Se,20,()=>[["tabular-nums","tabular-nums (default)"],["proportional-nums","proportional-nums"],["normal","normal"]],([Ke,We])=>Ke,(Ke,We)=>{var gt=u(()=>Pa(We,2));let yt=()=>t(gt)[0],ht=()=>t(gt)[1];const Te=u(()=>e.overrides["--sf-font-numeric"]??"tabular-nums");var Ce=Po(),At=s(Ce);O(()=>{Ye(Ce,1,`flex-1 py-1.5 rounded-lg text-[9px] border transition-all cursor-pointer ${t(Te)===yt()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(At,ht())}),x("click",Ce,()=>yt()==="tabular-nums"?e.onReset("--sf-font-numeric"):e.onSet("--sf-font-numeric",yt())),f(Ke,Ce)});var Fe=r(ce,2),$e=r(s(Fe),2);re($e,20,()=>[["auto","auto (default)"],["none","none"]],([Ke,We])=>Ke,(Ke,We)=>{var gt=u(()=>Pa(We,2));let yt=()=>t(gt)[0],ht=()=>t(gt)[1];const Te=u(()=>e.overrides["--sf-optical-sizing"]??"auto");var Ce=Po(),At=s(Ce);O(()=>{Ye(Ce,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer ${t(Te)===yt()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(At,ht())}),x("click",Ce,()=>yt()==="auto"?e.onReset("--sf-optical-sizing"):e.onSet("--sf-optical-sizing",yt())),f(Ke,Ce)});var Qe=r(Fe,2),bt=r(s(Qe),2),kt=r(bt,2);{var Pt=Ke=>{var We=Sr();x("click",We,()=>e.onReset("--sf-font-features")),f(Ke,We)};I(kt,Ke=>{"--sf-font-features"in e.overrides&&Ke(Pt)})}var wt=r(Qe,2),X=r(s(wt),2),ae=r(X,2);{var Re=Ke=>{var We=Sr();x("click",We,()=>e.onReset("--sf-font-variation")),f(Ke,We)};I(ae,Ke=>{"--sf-font-variation"in e.overrides&&Ke(Re)})}O(()=>{Xt(bt,e.overrides["--sf-font-features"]??""),Xt(X,e.overrides["--sf-font-variation"]??"")}),x("input",bt,Ke=>{const We=Ke.target.value.trim();We?e.onSet("--sf-font-features",We):e.onReset("--sf-font-features")}),x("input",X,Ke=>{const We=Ke.target.value.trim();We?e.onSet("--sf-font-variation",We):e.onReset("--sf-font-variation")}),f(H,_e)};I(le,H=>{t(et)&&H(Me)})}O(()=>{Y(Le,"aria-expanded",t(be)),y(je,t(be)?"▲":"▼"),Y(vt,"aria-expanded",t(Ie)),y(xe,t(Ie)?"▲":"▼"),Y(_t,"aria-expanded",t(pe)),y(Nt,t(pe)?"▲":"▼"),Y(Gt,"aria-expanded",t(W)),y(ia,t(W)?"▲":"▼"),Y(Dt,"aria-expanded",t(he)),y(me,t(he)?"▲":"▼"),Y(Ue,"aria-expanded",t(Ne)),y(Ve,t(Ne)?"▲":"▼"),Y(zt,"aria-expanded",t(at)),y(Ft,t(at)?"▲":"▼"),Y(V,"aria-expanded",t(N)),y($,t(N)?"▲":"▼"),Y(ie,"aria-expanded",t(et)),y(K,t(et)?"▲":"▼")}),x("click",Le,()=>{C(be,!t(be))}),x("click",vt,()=>{C(Ie,!t(Ie))}),x("click",_t,()=>{C(pe,!t(pe))}),x("click",Gt,()=>{C(W,!t(W))}),x("click",Dt,()=>{C(he,!t(he))}),x("click",Ue,()=>{C(Ne,!t(Ne))}),x("click",zt,()=>{C(at,!t(at))}),x("click",V,()=>{C(N,!t(N))}),x("click",ie,()=>{C(et,!t(et))}),f(a,De),$t()}aa(["click","change","input"]);var im=g('

The two most-referenced spacing tokens. Referenced by every layout primitive (cluster, grid, stack, bento…).

',1),cm=g(''),dm=g('
'),fm=g(`

Utopia-style fluid scale — viewport width, base unit and ratio per endpoint. - The viewport range is shared with the type scale.

`,1),um=g('
'),pm=g('
'),mm=g('
');function vm(a,e){Qt(e,!0);const o=[{label:"Minor Third — 1.200",value:1.2},{label:"Major Third — 1.250",value:1.25},{label:"Perfect Fourth — 1.333",value:1.333},{label:"Aug. Fourth — 1.414",value:1.414},{label:"Golden — 1.618",value:1.618}],n=[{label:"Compact",desc:"Tight UI, data-heavy",patch:{"--sf-space-scale":"0.75","--sf-section-scale":"0.7","--sf-space-base-min":"0.75","--sf-space-base-max":"1.25"}},{label:"Comfortable",desc:"Balanced — default",patch:{"--sf-space-scale":null,"--sf-section-scale":null,"--sf-space-base-min":null,"--sf-space-base-max":null}},{label:"Spacious",desc:"Generous, editorial",patch:{"--sf-space-scale":"1.3","--sf-section-scale":"1.4","--sf-space-base-min":"1.25","--sf-space-base-max":"2.75"}}],l=["2xs","xs","s","m","l","xl","2xl","3xl","4xl"],i=jo.spacing??[];function c(Be,te){const q=parseFloat(e.overrides[Be]??"");return isNaN(q)?te:q}let d=u(()=>c("--sf-space-ratio-min",1.25)),p=u(()=>c("--sf-space-ratio-max",1.333)),m=u(()=>c("--sf-space-base-min",1)),h=u(()=>c("--sf-space-base-max",2)),v=u(()=>c("--sf-space-scale",1)),b=u(()=>c("--sf-gap",1)),k=u(()=>c("--sf-gutter",1.5)),_=u(()=>c("--sf-content-gap",.5)),E=u(()=>c("--sf-fluid-min-vw",22.5)),B=u(()=>c("--sf-fluid-max-vw",90)),U=u(()=>n.find(Be=>Object.entries(Be.patch).every(([te,q])=>q===null?!(te in e.overrides):e.overrides[te]===q))),S=j(!1),z=j(!1),L=j(!1),P=j(!1);var w=mm(),R=s(w),D=s(R),A=r(s(D),2),T=s(A),M=r(D,2);{var Q=Be=>{var te=im(),q=r(de(te),2);{let ne=u(()=>"--sf-gap"in e.overrides);pt(q,{label:"Gap",get value(){return t(b)},min:0,max:4,step:.0625,unit:"rem",help:"--sf-gap — spacing between layout items (cluster, grid, reel, stack, sidebar, bento)",get overridden(){return t(ne)},onChange:fe=>e.onSet("--sf-gap",`${fe}rem`),onReset:()=>e.onReset("--sf-gap"),rawDefault:"var(--sf-space-m)",get currentRaw(){return e.overrides["--sf-gap"]},onRawSet:fe=>e.onSet("--sf-gap",fe)})}var ke=r(q,2);{let ne=u(()=>"--sf-content-gap"in e.overrides);pt(ke,{label:"Content gap",get value(){return t(_)},min:0,max:2,step:.0625,unit:"rem",help:"--sf-content-gap — tighter gap within components (defaults to space-s)",get overridden(){return t(ne)},onChange:fe=>e.onSet("--sf-content-gap",`${fe}rem`),onReset:()=>e.onReset("--sf-content-gap"),rawDefault:"var(--sf-space-s)",get currentRaw(){return e.overrides["--sf-content-gap"]},onRawSet:fe=>e.onSet("--sf-content-gap",fe)})}var Ze=r(ke,2);{let ne=u(()=>"--sf-gutter"in e.overrides);pt(Ze,{label:"Gutter",get value(){return t(k)},min:0,max:6,step:.0625,unit:"rem",help:"--sf-gutter — wide page/section side gutter (containers, .sf-section--guttered)",get overridden(){return t(ne)},onChange:fe=>e.onSet("--sf-gutter",`${fe}rem`),onReset:()=>e.onReset("--sf-gutter"),rawDefault:"var(--sf-space-l)",get currentRaw(){return e.overrides["--sf-gutter"]},onRawSet:fe=>e.onSet("--sf-gutter",fe)})}f(Be,te)};I(M,Be=>{t(S)&&Be(Q)})}var He=r(R,4),ee=s(He),be=r(s(ee),2),Ie=s(be),pe=r(ee,2);{var he=Be=>{var te=dm();re(te,21,()=>n,q=>q.label,(q,ke)=>{var Ze=cm(),ne=s(Ze),fe=s(ne),Pe=r(ne,2),De=s(Pe);O(()=>{Ye(Ze,1,`flex flex-col items-center gap-1 p-3 rounded-xl border transition-all cursor-pointer ${t(U)?.label===t(ke).label?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(fe,t(ke).label),y(De,t(ke).desc)}),x("click",Ze,()=>e.onBulkChange(t(ke).patch)),f(q,Ze)}),f(Be,te)};I(pe,Be=>{t(z)&&Be(he)})}var Ne=r(He,4),at=s(Ne),et=r(s(at),2),N=s(et),W=r(at,2);{var ye=Be=>{var te=fm(),q=r(de(te),2);{let ne=u(()=>"--sf-fluid-min-vw"in e.overrides||"--sf-fluid-max-vw"in e.overrides);Os(q,{title:"Viewport range",get minValue(){return t(E)},get maxValue(){return t(B)},min:15,max:120,step:.5,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",get overridden(){return t(ne)},onReset:()=>{e.onReset("--sf-fluid-min-vw"),e.onReset("--sf-fluid-max-vw")},onMinChange:fe=>e.onSet("--sf-fluid-min-vw",String(fe)),onMaxChange:fe=>e.onSet("--sf-fluid-max-vw",String(fe))})}var ke=r(q,2);{let ne=u(()=>"--sf-space-base-min"in e.overrides||"--sf-space-base-max"in e.overrides);Os(ke,{title:"Base unit & ratio",get minValue(){return t(m)},get maxValue(){return t(h)},min:.5,max:4,step:.05,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",previewKind:"space",get overridden(){return t(ne)},onReset:()=>{e.onReset("--sf-space-base-min"),e.onReset("--sf-space-base-max")},onMinChange:fe=>e.onSet("--sf-space-base-min",String(fe)),onMaxChange:fe=>e.onSet("--sf-space-base-max",String(fe)),get ratioPresets(){return o},get ratioMin(){return t(d)},get ratioMax(){return t(p)},ratioMin_bound:1.1,ratioMax_bound:1.8,onRatioMinChange:fe=>e.onSet("--sf-space-ratio-min",String(fe)),onRatioMaxChange:fe=>e.onSet("--sf-space-ratio-max",String(fe))})}var Ze=r(ke,2);re(Ze,21,()=>i,ne=>ne.name,(ne,fe)=>{Go(ne,{get knob(){return t(fe)},get overrides(){return e.overrides},onChange:(Pe,De)=>De===null?e.onReset(Pe):e.onSet(Pe,De)})}),f(Be,te)};I(W,Be=>{t(L)&&Be(ye)})}var ge=r(Ne,4),Z=s(ge),we=r(s(Z),2),Ge=s(we),nt=r(Z,2);{var Oe=Be=>{var te=pm();re(te,22,()=>l,q=>q,(q,ke,Ze)=>{const ne=u(()=>(t(m)+t(h))/2),fe=u(()=>(t(d)+t(p))/2),Pe=u(()=>t(Ze)-4),De=u(()=>t(Pe)>=0?t(ne)*Math.pow(t(fe),t(Pe)):t(ne)/Math.pow(t(fe),-t(Pe))),ze=u(()=>t(De)*t(v)),Le=u(()=>Math.min(t(ze)*28,240));var qe=um(),je=s(qe),lt=s(je),dt=r(je,2),Ot=r(dt,2),vt=s(Ot);O(oe=>{y(lt,ke),it(dt,`width: ${t(Le)}px; min-width: 3px`),y(vt,`${oe??""}rem`)},[()=>t(ze).toFixed(2)]),f(q,qe)}),f(Be,te)};I(nt,Be=>{t(P)&&Be(Oe)})}O(()=>{Y(D,"aria-expanded",t(S)),y(T,t(S)?"▲":"▼"),Y(ee,"aria-expanded",t(z)),y(Ie,t(z)?"▲":"▼"),Y(at,"aria-expanded",t(L)),y(N,t(L)?"▲":"▼"),Y(Z,"aria-expanded",t(P)),y(Ge,t(P)?"▲":"▼")}),x("click",D,()=>{C(S,!t(S))}),x("click",ee,()=>{C(z,!t(z))}),x("click",at,()=>{C(L,!t(L))}),x("click",Z,()=>{C(P,!t(P))}),f(a,w),$t()}aa(["click"]);var hm=g('
'),gm=g('
Narrow
Prose
Default
Wide
',1),bm=g(" ",1),ym=g('
col
'),xm=g('
Named sizes (grid-min-xs → 2xl)
Preview at 360px panel width
',1),km=g('
'),wm=g('
Mobile
Desktop
',1),_m=g('

Offsets position:sticky elements below a fixed header. Defaults to header heights.

Mobile
Desktop
',1),Cm=g('
',1),Om=g('
'),Kn=g(''),Ns=g(''),Wn=g('
'),Yn=g(""),Sm=g('
Switcher
Sidebar content
Cluster
Equal grid
Named column counts (equal-min-col-2/3/4/6)
Cover
Frame ratio

--sf-frame-ratio — aspect ratio for .sf-frame

Reel

--sf-reel-item-width — width of each item in a horizontal .sf-reel

Height
Imposter
Content grid (breakout)
Alternate (zigzag)
'),Lm=g('
'),Pm=g('

Override the built-in named aspect ratios used by .sf-ratio-* utilities.

'),Im=g('

Default values for the .sf-bg full-bleed background utility.

'),Bm=g('
');function Um(a,e){Qt(e,!0);function o(F,$){if(!F)return $;const ve=parseFloat(F);return isNaN(ve)?$:ve}let n=u(()=>o(e.overrides["--sf-container-narrow"],38)),l=u(()=>o(e.overrides["--sf-container-prose"],65)),i=u(()=>o(e.overrides["--sf-container-default"],75)),c=u(()=>o(e.overrides["--sf-container-wide"],90)),d=u(()=>o(e.overrides["--sf-center-max"],75)),p=u(()=>o(e.overrides["--sf-center-gutter"],1)),m=u(()=>o(e.overrides["--sf-grid-min"],16)),h=u(()=>o(e.overrides["--sf-header-height-mobile"],3.5)),v=u(()=>o(e.overrides["--sf-header-height-desktop"],5)),b=u(()=>o(e.overrides["--sf-sidebar-width"],18)),k=u(()=>o(e.overrides["--sf-sticky-offset-mobile"],3.5)),_=u(()=>o(e.overrides["--sf-sticky-offset-desktop"],5));const E=[{label:"Columns",token:"--sf-bento-cols-default",min:1,max:12,step:1,unit:"",default:4},{label:"Row default",token:"--sf-bento-row-default",min:4,max:24,step:.5,unit:"rem",default:10},{label:"Row compact",token:"--sf-bento-row-compact",min:2,max:16,step:.5,unit:"rem",default:6},{label:"Row tall",token:"--sf-bento-row-tall",min:8,max:32,step:.5,unit:"rem",default:16}];let B=j(!1),U=j(!1),S=j(!1),z=j(!1),L=j(!1),P=j(!1),w=j(!1),R=j(!1),D=j(!1),A=j(!1);function T(F){const $=e.overrides[F.token];return $?parseFloat($):F.default}let M=u(()=>o(e.overrides["--sf-switcher-threshold"],30)),Q=u(()=>o(e.overrides["--sf-sidebar-min-width"],50)),He=u(()=>o(e.overrides["--sf-equal-min-col"],16)),ee=u(()=>o(e.overrides["--sf-cover-min-height"],100)),be=u(()=>o(e.overrides["--sf-imposter-margin"],1)),Ie=u(()=>o(e.overrides["--sf-breakout-width"],90)),pe=u(()=>o(e.overrides["--sf-content-width"],75)),he=u(()=>o(e.overrides["--sf-alternate-inner-gap"],1)),Ne=u(()=>e.overrides["--sf-frame-ratio"]??"16 / 9"),at=u(()=>e.overrides["--sf-reel-item-width"]??"max-content");const et=["16 / 9","4 / 3","3 / 2","1 / 1","21 / 9"],N=[{label:"auto",value:"max-content"},{label:"12rem",value:"12rem"},{label:"16rem",value:"16rem"},{label:"20rem",value:"20rem"}];var W=Bm(),ye=s(W),ge=s(ye),Z=r(s(ge),2),we=s(Z),Ge=r(ge,2);{var nt=F=>{var $=gm(),ve=de($),J=s(ve),G=r(s(J),2);{let ce=u(()=>"--sf-container-narrow"in e.overrides);pt(G,{label:"",get value(){return t(n)},min:20,max:60,step:1,unit:"rem",get overridden(){return t(ce)},onChange:Se=>e.onSet("--sf-container-narrow",`${Se}rem`),onReset:()=>e.onReset("--sf-container-narrow")})}var ie=r(J,2),ue=r(s(ie),2);{let ce=u(()=>"--sf-container-prose"in e.overrides);pt(ue,{label:"",get value(){return t(l)},min:40,max:90,step:1,unit:"ch",get overridden(){return t(ce)},onChange:Se=>e.onSet("--sf-container-prose",`${Se}ch`),onReset:()=>e.onReset("--sf-container-prose")})}var K=r(ie,2),le=r(s(K),2);{let ce=u(()=>"--sf-container-default"in e.overrides);pt(le,{label:"",get value(){return t(i)},min:50,max:120,step:1,unit:"rem",get overridden(){return t(ce)},onChange:Se=>e.onSet("--sf-container-default",`${Se}rem`),onReset:()=>e.onReset("--sf-container-default")})}var Me=r(K,2),H=r(s(Me),2);{let ce=u(()=>"--sf-container-wide"in e.overrides);pt(H,{label:"",get value(){return t(c)},min:60,max:160,step:1,unit:"rem",get overridden(){return t(ce)},onChange:Se=>e.onSet("--sf-container-wide",`${Se}rem`),onReset:()=>e.onReset("--sf-container-wide")})}var _e=r(ve,2);re(_e,21,()=>[{label:"narrow",value:t(n),max:t(c),unit:"rem"},{label:"prose",value:t(l),max:t(c)*1.5,unit:"ch"},{label:"default",value:t(i),max:t(c),unit:"rem"},{label:"wide",value:t(c),max:t(c),unit:"rem"}],ce=>ce.label,(ce,Se)=>{var Fe=hm(),$e=s(Fe),Qe=s($e),bt=r($e,2),kt=s(bt),Pt=r(bt,2),wt=s(Pt);O(X=>{y(Qe,t(Se).label),it(kt,X),y(wt,`${t(Se).value??""}${t(Se).unit??""}`)},[()=>`width: ${Math.min(t(Se).value/t(Se).max*100,100)}%`]),f(ce,Fe)}),f(F,$)};I(Ge,F=>{t(B)&&F(nt)})}var Oe=r(ye,4),Be=s(Oe),te=r(s(Be),2),q=s(te),ke=r(Be,2);{var Ze=F=>{var $=bm(),ve=de($);{let G=u(()=>"--sf-center-max"in e.overrides);pt(ve,{label:"Max width",get value(){return t(d)},min:30,max:160,step:1,unit:"rem",help:"--sf-center-max — max-width of the .sf-center centering wrapper",get overridden(){return t(G)},onChange:ie=>e.onSet("--sf-center-max",`${ie}rem`),onReset:()=>e.onReset("--sf-center-max"),rawDefault:"var(--sf-container-default)",get currentRaw(){return e.overrides["--sf-center-max"]},onRawSet:ie=>e.onSet("--sf-center-max",ie)})}var J=r(ve,2);{let G=u(()=>"--sf-center-gutter"in e.overrides);pt(J,{label:"Gutter",get value(){return t(p)},min:0,max:4,step:.125,unit:"rem",help:"--sf-center-gutter — minimum side padding inside the center wrapper",get overridden(){return t(G)},onChange:ie=>e.onSet("--sf-center-gutter",`${ie}rem`),onReset:()=>e.onReset("--sf-center-gutter"),rawDefault:"var(--sf-gutter)",get currentRaw(){return e.overrides["--sf-center-gutter"]},onRawSet:ie=>e.onSet("--sf-center-gutter",ie)})}f(F,$)};I(ke,F=>{t(U)&&F(Ze)})}var ne=r(Oe,4),fe=s(ne),Pe=r(s(fe),2),De=s(Pe),ze=r(fe,2);{var Le=F=>{var $=xm(),ve=de($);{let K=u(()=>"--sf-grid-min"in e.overrides);pt(ve,{label:"Grid min cell width",get value(){return t(m)},min:8,max:40,step:.5,unit:"rem",help:"sf-grid minimum column width — browser auto-fills columns",get overridden(){return t(K)},onChange:le=>e.onSet("--sf-grid-min",`${le}rem`),onReset:()=>e.onReset("--sf-grid-min")})}var J=r(ve,2),G=r(s(J),2);re(G,20,()=>[{label:"xs",token:"--sf-grid-min-xs",def:10},{label:"s",token:"--sf-grid-min-s",def:13},{label:"m",token:"--sf-grid-min-m",def:16},{label:"l",token:"--sf-grid-min-l",def:20},{label:"xl",token:"--sf-grid-min-xl",def:24},{label:"2xl",token:"--sf-grid-min-2xl",def:28}],K=>K.token,(K,le)=>{{let Me=u(()=>o(e.overrides[le.token],le.def)),H=u(()=>le.token in e.overrides);pt(K,{get label(){return le.label},get value(){return t(Me)},min:6,max:40,step:.5,unit:"rem",get overridden(){return t(H)},onChange:_e=>e.onSet(le.token,`${_e}rem`),onReset:()=>e.onReset(le.token)})}});var ie=r(J,2),ue=r(s(ie),2);re(ue,20,()=>Array.from({length:8}),nn,(K,le)=>{var Me=ym();f(K,Me)}),O(K=>it(ue,K),[()=>`grid-template-columns: repeat(auto-fill, minmax(${Math.min(t(m)*16*.3,120)}px, 1fr))`]),f(F,$)};I(ze,F=>{t(S)&&F(Le)})}var qe=r(ne,4),je=s(qe),lt=r(s(je),2),dt=s(lt),Ot=r(je,2);{var vt=F=>{var $=wm(),ve=de($),J=s(ve),G=r(s(J),2);{let ce=u(()=>"--sf-header-height-mobile"in e.overrides);pt(G,{label:"",get value(){return t(h)},min:2,max:8,step:.25,unit:"rem",get overridden(){return t(ce)},onChange:Se=>e.onSet("--sf-header-height-mobile",`${Se}rem`),onReset:()=>e.onReset("--sf-header-height-mobile")})}var ie=r(J,2),ue=r(s(ie),2);{let ce=u(()=>"--sf-header-height-desktop"in e.overrides);pt(ue,{label:"",get value(){return t(v)},min:3,max:10,step:.25,unit:"rem",get overridden(){return t(ce)},onChange:Se=>e.onSet("--sf-header-height-desktop",`${Se}rem`),onReset:()=>e.onReset("--sf-header-height-desktop")})}var K=r(ve,2),le=s(K),Me=r(s(le),2);re(Me,20,()=>[1,2,3],ce=>ce,(ce,Se)=>{var Fe=km();f(ce,Fe)});var H=r(le,2),_e=s(H);O(ce=>{it(le,ce),y(_e,`${t(h)??""}rem mobile · ${t(v)??""}rem desktop`)},[()=>`height: ${Math.min(t(h)*12,64)}px`]),f(F,$)};I(Ot,F=>{t(z)&&F(vt)})}var oe=r(qe,4),xe=s(oe),Ee=r(s(xe),2),ot=s(Ee),ft=r(xe,2);{var _t=F=>{var $=_m(),ve=r(de($),2),J=s(ve),G=r(s(J),2);{let K=u(()=>"--sf-sticky-offset-mobile"in e.overrides);pt(G,{label:"",get value(){return t(k)},min:0,max:12,step:.25,unit:"rem",get overridden(){return t(K)},onChange:le=>e.onSet("--sf-sticky-offset-mobile",`${le}rem`),onReset:()=>e.onReset("--sf-sticky-offset-mobile"),rawDefault:"var(--sf-header-height-mobile)",get currentRaw(){return e.overrides["--sf-sticky-offset-mobile"]},onRawSet:le=>e.onSet("--sf-sticky-offset-mobile",le)})}var ie=r(J,2),ue=r(s(ie),2);{let K=u(()=>"--sf-sticky-offset-desktop"in e.overrides);pt(ue,{label:"",get value(){return t(_)},min:0,max:12,step:.25,unit:"rem",get overridden(){return t(K)},onChange:le=>e.onSet("--sf-sticky-offset-desktop",`${le}rem`),onReset:()=>e.onReset("--sf-sticky-offset-desktop"),rawDefault:"var(--sf-header-height-desktop)",get currentRaw(){return e.overrides["--sf-sticky-offset-desktop"]},onRawSet:le=>e.onSet("--sf-sticky-offset-desktop",le)})}f(F,$)};I(ft,F=>{t(L)&&F(_t)})}var xt=r(oe,4),Nt=s(xt),St=r(s(Nt),2),Et=s(St),ct=r(Nt,2);{var Gt=F=>{var $=Cm(),ve=de($);{let K=u(()=>"--sf-sidebar-width"in e.overrides);pt(ve,{label:"Sidebar width",get value(){return t(b)},min:10,max:32,step:.5,unit:"rem",help:"--sf-sidebar-width — default sidebar / drawer width",get overridden(){return t(K)},onChange:le=>e.onSet("--sf-sidebar-width",`${le}rem`),onReset:()=>e.onReset("--sf-sidebar-width")})}var J=r(ve,2),G=s(J),ie=s(G),ue=s(ie);O(K=>{it(G,K),y(ue,`${t(b)??""}rem`)},[()=>`width: ${Math.min(t(b)*3.5,100)}px`]),f(F,$)};I(ct,F=>{t(P)&&F(Gt)})}var ea=r(xt,4),ia=s(ea),Xe=r(s(ia),2),ut=s(Xe),Lt=r(ia,2);{var Dt=F=>{var $=Om();re($,21,()=>E,ve=>ve.token,(ve,J)=>{{let G=u(()=>T(t(J))),ie=u(()=>t(J).token in e.overrides);pt(ve,{get label(){return t(J).label},get value(){return t(G)},get min(){return t(J).min},get max(){return t(J).max},get step(){return t(J).step},get unit(){return t(J).unit},get help(){return t(J).token},get overridden(){return t(ie)},onChange:ue=>e.onSet(t(J).token,t(J).unit?`${ue}${t(J).unit}`:String(ue)),onReset:()=>e.onReset(t(J).token)})}}),f(F,$)};I(Lt,F=>{t(w)&&F(Dt)})}var Rt=r(ea,4),me=s(Rt),Je=r(s(me),2),mt=s(Je),Ut=r(me,2);{var Ue=F=>{var $=Sm(),ve=s($),J=r(s(ve),2);{let Te=u(()=>"--sf-switcher-threshold"in e.overrides);pt(J,{label:"Threshold",get value(){return t(M)},min:10,max:60,step:1,unit:"rem",help:"--sf-switcher-threshold — width below which .sf-switcher stacks vertically",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-switcher-threshold",`${Ce}rem`),onReset:()=>e.onReset("--sf-switcher-threshold")})}var G=r(ve,2),ie=r(s(G),2);{let Te=u(()=>"--sf-sidebar-min-width"in e.overrides);pt(ie,{label:"Content min width",get value(){return t(Q)},min:20,max:80,step:1,unit:"%",help:"--sf-sidebar-min-width — minimum width of the .sf-sidebar content column before it wraps",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-sidebar-min-width",`${Ce}%`),onReset:()=>e.onReset("--sf-sidebar-min-width")})}var ue=r(G,2),K=r(s(ue),2);re(K,16,()=>[{label:"Align",token:"--sf-cluster-align",def:"center",opts:["flex-start","center","flex-end","stretch","baseline"]},{label:"Justify",token:"--sf-cluster-justify",def:"flex-start",opts:["flex-start","center","flex-end","space-between","space-around"]}],Te=>Te.token,(Te,Ce)=>{var At=Wn(),oa=s(At),Vt=s(oa),Zt=r(oa,2);re(Zt,20,()=>Ce.opts,st=>st,(st,rt)=>{var Tt=Kn(),Kt=s(Tt),ca={};O(()=>{y(Kt,rt),ca!==(ca=rt)&&(Tt.value=(Tt.__value=rt)??"")}),f(st,Tt)});var pa;Fa(Zt);var Ca=r(Zt,2);{var Co=st=>{var rt=Ns();x("click",rt,()=>e.onReset(Ce.token)),f(st,rt)};I(Ca,st=>{Ce.token in e.overrides&&st(Co)})}O(()=>{y(Vt,Ce.label),pa!==(pa=e.overrides[Ce.token]??Ce.def)&&(Zt.value=(Zt.__value=e.overrides[Ce.token]??Ce.def)??"",Ba(Zt,e.overrides[Ce.token]??Ce.def))}),x("change",Zt,st=>{const rt=st.target.value;rt===Ce.def?e.onReset(Ce.token):e.onSet(Ce.token,rt)}),f(Te,At)});var le=r(ue,2),Me=r(s(le),2);{let Te=u(()=>"--sf-equal-min-col"in e.overrides);pt(Me,{label:"Min column",get value(){return t(He)},min:6,max:36,step:.5,unit:"rem",help:"--sf-equal-min-col — minimum column width for .sf-equal",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-equal-min-col",`${Ce}rem`),onReset:()=>e.onReset("--sf-equal-min-col")})}var H=r(Me,2),_e=r(s(H),2);re(_e,20,()=>[{label:"2-col",token:"--sf-equal-min-col-2",def:28},{label:"3-col",token:"--sf-equal-min-col-3",def:15},{label:"4-col",token:"--sf-equal-min-col-4",def:16},{label:"6-col",token:"--sf-equal-min-col-6",def:10}],Te=>Te.token,(Te,Ce)=>{{let At=u(()=>o(e.overrides[Ce.token],Ce.def)),oa=u(()=>Ce.token in e.overrides);pt(Te,{get label(){return Ce.label},get value(){return t(At)},min:4,max:36,step:.5,unit:"rem",get overridden(){return t(oa)},onChange:Vt=>e.onSet(Ce.token,`${Vt}rem`),onReset:()=>e.onReset(Ce.token)})}});var ce=r(le,2),Se=r(s(ce),2);{let Te=u(()=>"--sf-cover-min-height"in e.overrides);pt(Se,{label:"Min height",get value(){return t(ee)},min:20,max:100,step:1,unit:"dvh",help:"--sf-cover-min-height — minimum height of the .sf-cover layout",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-cover-min-height",`${Ce}dvh`),onReset:()=>e.onReset("--sf-cover-min-height")})}var Fe=r(ce,2),$e=r(s(Fe),4);re($e,20,()=>et,Te=>Te,(Te,Ce)=>{var At=Yn(),oa=s(At);O(Vt=>{Ye(At,1,Vt),y(oa,Ce)},[()=>`py-1 rounded-lg text-[9px] border transition-all cursor-pointer font-mono ${t(Ne).replace(/\s/g,"")===Ce.replace(/\s/g,"")?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`]),x("click",At,()=>Ce==="16 / 9"?e.onReset("--sf-frame-ratio"):e.onSet("--sf-frame-ratio",Ce)),f(Te,At)});var Qe=r(Fe,2),bt=r(s(Qe),4);re(bt,21,()=>N,Te=>Te.value,(Te,Ce)=>{var At=Yn(),oa=s(At);O(()=>{Ye(At,1,`py-1 rounded-lg text-[9px] border transition-all cursor-pointer ${t(at)===t(Ce).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(oa,t(Ce).label)}),x("click",At,()=>t(Ce).value==="max-content"?e.onReset("--sf-reel-item-width"):e.onSet("--sf-reel-item-width",t(Ce).value)),f(Te,At)});var kt=r(bt,2),Pt=r(s(kt),2),wt=r(Pt,2);{var X=Te=>{var Ce=Ns();x("click",Ce,()=>e.onReset("--sf-reel-height")),f(Te,Ce)};I(wt,Te=>{"--sf-reel-height"in e.overrides&&Te(X)})}var ae=r(Qe,2),Re=r(s(ae),2);{let Te=u(()=>"--sf-imposter-margin"in e.overrides);pt(Re,{label:"Margin",get value(){return t(be)},min:0,max:4,step:.125,unit:"rem",help:"--sf-imposter-margin — viewport inset for the centered .sf-imposter overlay",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-imposter-margin",`${Ce}rem`),onReset:()=>e.onReset("--sf-imposter-margin"),rawDefault:"var(--sf-space-m)",get currentRaw(){return e.overrides["--sf-imposter-margin"]},onRawSet:Ce=>e.onSet("--sf-imposter-margin",Ce)})}var Ke=r(ae,2),We=r(s(Ke),2);{let Te=u(()=>"--sf-content-width"in e.overrides);pt(We,{label:"Content width",get value(){return t(pe)},min:40,max:120,step:1,unit:"rem",help:"--sf-content-width — default reading column width in .sf-content-grid",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-content-width",`${Ce}rem`),onReset:()=>e.onReset("--sf-content-width"),rawDefault:"var(--sf-container-default)",get currentRaw(){return e.overrides["--sf-content-width"]},onRawSet:Ce=>e.onSet("--sf-content-width",Ce)})}var gt=r(We,2);{let Te=u(()=>"--sf-breakout-width"in e.overrides);pt(gt,{label:"Breakout width",get value(){return t(Ie)},min:50,max:160,step:1,unit:"rem",help:"--sf-breakout-width — wide breakout column width in .sf-content-grid",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-breakout-width",`${Ce}rem`),onReset:()=>e.onReset("--sf-breakout-width"),rawDefault:"var(--sf-container-wide)",get currentRaw(){return e.overrides["--sf-breakout-width"]},onRawSet:Ce=>e.onSet("--sf-breakout-width",Ce)})}var yt=r(Ke,2),ht=r(s(yt),2);{let Te=u(()=>"--sf-alternate-inner-gap"in e.overrides);pt(ht,{label:"Inner gap",get value(){return t(he)},min:0,max:4,step:.125,unit:"rem",help:"--sf-alternate-inner-gap — gap between media and text within an .sf-alternate row",get overridden(){return t(Te)},onChange:Ce=>e.onSet("--sf-alternate-inner-gap",`${Ce}rem`),onReset:()=>e.onReset("--sf-alternate-inner-gap"),rawDefault:"var(--sf-gap)",get currentRaw(){return e.overrides["--sf-alternate-inner-gap"]},onRawSet:Ce=>e.onSet("--sf-alternate-inner-gap",Ce)})}O(()=>Xt(Pt,e.overrides["--sf-reel-height"]??"")),x("input",Pt,Te=>{const Ce=Te.target.value.trim();Ce?e.onSet("--sf-reel-height",Ce):e.onReset("--sf-reel-height")}),f(F,$)};I(Ut,F=>{t(R)&&F(Ue)})}var Ae=r(Rt,4),Ve=s(Ae),tt=r(s(Ve),2),Ct=s(tt),ta=r(Ve,2);{var zt=F=>{var $=Pm(),ve=r(s($),2);re(ve,16,()=>[{label:"Square",token:"--sf-ratio-square",def:"1"},{label:"Portrait",token:"--sf-ratio-portrait",def:"3 / 4"},{label:"3:2",token:"--sf-ratio-3-2",def:"3 / 2"},{label:"4:3",token:"--sf-ratio-4-3",def:"4 / 3"},{label:"Video",token:"--sf-ratio-video",def:"16 / 9"},{label:"Cinema",token:"--sf-ratio-cinema",def:"21 / 9"},{label:"Golden",token:"--sf-ratio-golden",def:"1.618 / 1"}],J=>J.token,(J,G)=>{var ie=Lm(),ue=s(ie),K=s(ue),le=r(ue,2),Me=r(le,2);{var H=_e=>{var ce=Ns();x("click",ce,()=>e.onReset(G.token)),f(_e,ce)};I(Me,_e=>{G.token in e.overrides&&_e(H)})}O(()=>{y(K,G.label),Xt(le,e.overrides[G.token]??""),Y(le,"placeholder",G.def)}),x("input",le,_e=>{const ce=_e.target.value.trim();ce?e.onSet(G.token,ce):e.onReset(G.token)}),f(J,ie)}),f(F,$)};I(ta,F=>{t(A)&&F(zt)})}var It=r(Ae,4),Ft=s(It),la=r(s(Ft),2),ka=s(la),se=r(Ft,2);{var V=F=>{var $=Im(),ve=r(s($),2);re(ve,16,()=>[{label:"Fit",token:"--sf-bg-fit",placeholder:"cover",opts:["cover","contain","fill","none","scale-down"]},{label:"Position",token:"--sf-bg-position",placeholder:"50% 50%",opts:["50% 50%","top","bottom","left","right","center"]}],ue=>ue.token,(ue,K)=>{var le=Wn(),Me=s(le),H=s(Me),_e=r(Me,2);re(_e,20,()=>K.opts,$e=>$e,($e,Qe)=>{var bt=Kn(),kt=s(bt),Pt={};O(()=>{y(kt,Qe),Pt!==(Pt=Qe)&&(bt.value=(bt.__value=Qe)??"")}),f($e,bt)});var ce;Fa(_e);var Se=r(_e,2);{var Fe=$e=>{var Qe=Ns();x("click",Qe,()=>e.onReset(K.token)),f($e,Qe)};I(Se,$e=>{K.token in e.overrides&&$e(Fe)})}O(()=>{y(H,K.label),ce!==(ce=e.overrides[K.token]??K.placeholder)&&(_e.value=(_e.__value=e.overrides[K.token]??K.placeholder)??"",Ba(_e,e.overrides[K.token]??K.placeholder))}),x("change",_e,$e=>{const Qe=$e.target.value;Qe===K.placeholder?e.onReset(K.token):e.onSet(K.token,Qe)}),f(ue,le)});var J=r(ve,2);{let ue=u(()=>o(e.overrides["--sf-bg-inset"],0)),K=u(()=>"--sf-bg-inset"in e.overrides);pt(J,{label:"Inset",get value(){return t(ue)},min:0,max:4,step:.25,unit:"rem",help:"--sf-bg-inset — inset the background from the container edges",get overridden(){return t(K)},onChange:le=>e.onSet("--sf-bg-inset",`${le}rem`),onReset:()=>e.onReset("--sf-bg-inset")})}var G=r(J,2);{let ue=u(()=>o(e.overrides["--sf-bg-radius"],0)),K=u(()=>"--sf-bg-radius"in e.overrides);pt(G,{label:"Radius",get value(){return t(ue)},min:0,max:4,step:.125,unit:"rem",help:"--sf-bg-radius — corner radius of the background element",get overridden(){return t(K)},onChange:le=>e.onSet("--sf-bg-radius",`${le}rem`),onReset:()=>e.onReset("--sf-bg-radius")})}var ie=r(G,2);{let ue=u(()=>o(e.overrides["--sf-bg-z"],-2)),K=u(()=>"--sf-bg-z"in e.overrides);pt(ie,{label:"Z-index",get value(){return t(ue)},min:-10,max:0,step:1,help:"--sf-bg-z — stack order of the background pseudo-element (typically negative)",get overridden(){return t(K)},onChange:le=>e.onSet("--sf-bg-z",String(le)),onReset:()=>e.onReset("--sf-bg-z")})}f(F,$)};I(se,F=>{t(D)&&F(V)})}O(()=>{Y(ge,"aria-expanded",t(B)),y(we,t(B)?"▲":"▼"),Y(Be,"aria-expanded",t(U)),y(q,t(U)?"▲":"▼"),Y(fe,"aria-expanded",t(S)),y(De,t(S)?"▲":"▼"),Y(je,"aria-expanded",t(z)),y(dt,t(z)?"▲":"▼"),Y(xe,"aria-expanded",t(L)),y(ot,t(L)?"▲":"▼"),Y(Nt,"aria-expanded",t(P)),y(Et,t(P)?"▲":"▼"),Y(ia,"aria-expanded",t(w)),y(ut,t(w)?"▲":"▼"),Y(me,"aria-expanded",t(R)),y(mt,t(R)?"▲":"▼"),Y(Ve,"aria-expanded",t(A)),y(Ct,t(A)?"▲":"▼"),Y(Ft,"aria-expanded",t(D)),y(ka,t(D)?"▲":"▼")}),x("click",ge,()=>{C(B,!t(B))}),x("click",Be,()=>{C(U,!t(U))}),x("click",fe,()=>{C(S,!t(S))}),x("click",je,()=>{C(z,!t(z))}),x("click",xe,()=>{C(L,!t(L))}),x("click",Nt,()=>{C(P,!t(P))}),x("click",ia,()=>{C(w,!t(w))}),x("click",me,()=>{C(R,!t(R))}),x("click",Ve,()=>{C(A,!t(A))}),x("click",Ft,()=>{C(D,!t(D))}),f(a,W),$t()}aa(["click","change","input"]);const zm=[{id:"default",label:"Default",patch:{"--sf-radius-scale":null}},{id:"sharp",label:"Sharp",patch:{"--sf-radius-scale":"0"}},{id:"subtle",label:"Subtle",patch:{"--sf-radius-scale":"0.5"}},{id:"rounded",label:"Rounded",patch:{"--sf-radius-scale":"1"}},{id:"pill",label:"Pill",patch:{"--sf-radius-scale":"2"}}],Am=[{id:"default",label:"Default",patch:{"--sf-shadow-strength":null}},{id:"none",label:"None",patch:{"--sf-shadow-strength":"0"}},{id:"subtle",label:"Subtle",patch:{"--sf-shadow-strength":"calc(0.04 + var(--sf-is-dark) * 0.08)"}},{id:"soft",label:"Soft",patch:{"--sf-shadow-strength":"calc(0.08 + var(--sf-is-dark) * 0.12)"}},{id:"strong",label:"Strong",patch:{"--sf-shadow-strength":"calc(0.18 + var(--sf-is-dark) * 0.22)"}}];var Em=g(""),Rm=g('
');function Ti(a,e){Qt(e,!0);function o(p,m){for(const v of p){if(v.id==="default")continue;if(Object.entries(v.patch).every(([k,_])=>_===null?!(k in m):m[k]===_))return v.id}return p.filter(v=>v.id!=="default").flatMap(v=>Object.keys(v.patch)).every(v=>!(v in m))?"default":""}let n=u(()=>o(e.presets,e.overrides));var l=Rm(),i=s(l),c=s(i),d=r(i,2);re(d,21,()=>e.presets,p=>p.id,(p,m)=>{var h=Em(),v=s(h);O(()=>{Ye(h,1,`px-3 py-1.5 rounded-lg text-[11px] font-bold border transition-all cursor-pointer ${t(n)===t(m).id?"bg-indigo-600/20 border-indigo-500/50 text-indigo-300":"bg-white/4 border-white/8 text-slate-400 hover:text-slate-200 hover:bg-white/8"}`),y(v,t(m).label)}),x("click",h,()=>e.onApply(t(m).patch)),f(p,h)}),O(()=>y(c,e.label)),f(a,l),$t()}aa(["click"]);var Tm=g('

Drives --sf-color-border--strong, --subtle, --translucent automatically.

',1),Dm=g('
'),Mm=g('
',1),Nm=g(''),Fm=g('
'),jm=g('
Border sample
',1),Gm=g('
Color
',1),Hm=g('
Ring color
Focus preview
',1),qm=g('
'),Vm=g('
'),Km=g('
'),Wm=g('
'),Ym=g('
'),Zm=g('
');function Jm(a,e){Qt(e,!0);const o=["solid","dashed","dotted"],n=["xs","s","m","l","xl","2xl","full"],l={xs:2,s:4,m:8,l:12,xl:16,"2xl":24,full:9999},i=[{step:"xs",name:"--sf-radius-xs",default:2,max:16,step_size:.5,rawDefault:"calc(2px * var(--sf-radius-scale))"},{step:"s",name:"--sf-radius-s",default:4,max:24,step_size:.5,rawDefault:"calc(4px * var(--sf-radius-scale))"},{step:"m",name:"--sf-radius-m",default:8,max:32,step_size:1,rawDefault:"calc(8px * var(--sf-radius-scale))"},{step:"l",name:"--sf-radius-l",default:12,max:48,step_size:1,rawDefault:"calc(12px * var(--sf-radius-scale))"},{step:"xl",name:"--sf-radius-xl",default:16,max:64,step_size:1,rawDefault:"calc(16px * var(--sf-radius-scale))"},{step:"2xl",name:"--sf-radius-2xl",default:24,max:80,step_size:2,rawDefault:"calc(24px * var(--sf-radius-scale))"}],c=[{label:"Button radius",token:"--sf-btn-radius",unit:"rem",min:0,max:2,step:.05,default:.5,rawDefault:"var(--sf-radius-m)",help:"--sf-btn-radius"},{label:"Button padding block",token:"--sf-btn-padding-block",unit:"rem",min:0,max:1,step:.025,default:.375,rawDefault:"var(--sf-space-xs)",help:"--sf-btn-padding-block"},{label:"Button padding inline",token:"--sf-btn-padding-inline",unit:"rem",min:0,max:2,step:.025,default:1,rawDefault:"var(--sf-space-m)",help:"--sf-btn-padding-inline"},{label:"Field radius",token:"--sf-field-radius",unit:"rem",min:0,max:2,step:.05,default:.5,rawDefault:"var(--sf-radius-m)",help:"--sf-field-radius"},{label:"Field padding block",token:"--sf-field-padding-block",unit:"rem",min:0,max:1,step:.025,default:.375,rawDefault:"var(--sf-space-xs)",help:"--sf-field-padding-block"},{label:"Field padding inline",token:"--sf-field-padding-inline",unit:"rem",min:0,max:2,step:.025,default:.75,rawDefault:"var(--sf-space-s)",help:"--sf-field-padding-inline"}],d=jo.borders??[];let p=j(!1),m=j(!1),h=j(!1),v=j(!1),b=j(!1),k=j(!1),_=j(!1),E=j(!1),B=j(!1);function U(Ue,Ae,Ve){if(!Ue)return Ae;const tt=parseFloat(Ve?Ue.replace(Ve,""):Ue);return isNaN(tt)?Ae:tt}let S=u(()=>U(e.overrides["--sf-radius-scale"],1)),z=u(()=>U(e.overrides["--sf-border-scale"],1)),L=u(()=>U(e.overrides["--sf-focus-ring-width"],2,"px")),P=u(()=>U(e.overrides["--sf-focus-ring-offset"],2,"px")),w=u(()=>U(e.overrides["--sf-divider-width"]?.replace("px",""),1)),R=u(()=>U(e.overrides["--sf-divider-gap"]?.replace("rem",""),1)),D=u(()=>e.overrides["--sf-color-border"]??""),A=u(()=>e.overrides["--sf-border-style"]??"solid"),T=u(()=>e.overrides["--sf-focus-ring-color"]??""),M=u(()=>e.overrides["--sf-divider-color"]??"");function Q(Ue,Ae){return e.overrides[Ue]??Ae}function He(Ue){const Ae=e.overrides[Ue.name];if(!Ae||/^(var|calc|clamp)\(/.test(Ae.trim()))return Ue.default;const Ve=parseFloat(Ae);return isNaN(Ve)?Ue.default:Ve}function ee(Ue){const Ae=e.overrides[Ue.token];if(!Ae||/^(var|calc|clamp)\(/.test(Ae.trim()))return Ue.default;const Ve=parseFloat(Ae);return isNaN(Ve)?Ue.default:Ve}var be=Zm(),Ie=s(be);Ti(Ie,{label:"Corner style",get presets(){return zm},get overrides(){return e.overrides},get onApply(){return e.onBulkChange}});var pe=r(Ie,4),he=s(pe),Ne=r(s(he),2),at=s(Ne),et=r(he,2);{var N=Ue=>{var Ae=Tm(),Ve=de(Ae);{let tt=u(()=>"--sf-color-border"in e.overrides);Va(Ve,{token:"--sf-color-border",get value(){return t(D)},placeholder:"auto-derived",get isOverridden(){return t(tt)},onSet:Ct=>e.onSet("--sf-color-border",Ct),onReset:()=>e.onReset("--sf-color-border")})}f(Ue,Ae)};I(et,Ue=>{t(p)&&Ue(N)})}var W=r(pe,4),ye=s(W),ge=r(s(ye),2),Z=s(ge),we=r(ye,2);{var Ge=Ue=>{var Ae=Mm(),Ve=de(Ae);{let zt=u(()=>"--sf-border-scale"in e.overrides);pt(Ve,{label:"Border scale",get value(){return t(z)},min:0,max:4,step:.25,help:"Multiplier applied to all border widths. 0 hides all borders.",get overridden(){return t(zt)},onChange:It=>e.onSet("--sf-border-scale",String(It)),onReset:()=>e.onReset("--sf-border-scale")})}var tt=r(Ve,2);{let zt=u(()=>U(e.overrides["--sf-border-width-hairline"]?.replace("px",""),.5)),It=u(()=>"--sf-border-width-hairline"in e.overrides);pt(tt,{label:"Hairline",get value(){return t(zt)},min:0,max:1,step:.25,unit:"px",help:"--sf-border-width-hairline — ultra-thin border for retina displays",get overridden(){return t(It)},onChange:Ft=>e.onSet("--sf-border-width-hairline",`${Ft}px`),onReset:()=>e.onReset("--sf-border-width-hairline")})}var Ct=r(tt,2);{let zt=u(()=>U(e.overrides["--sf-box-border-width"]?.replace("px",""),0)),It=u(()=>"--sf-box-border-width"in e.overrides);pt(Ct,{label:"Box border",get value(){return t(zt)},min:0,max:4,step:.5,unit:"px",help:"--sf-box-border-width — box-shadow border drawn without affecting layout",get overridden(){return t(It)},onChange:Ft=>e.onSet("--sf-box-border-width",`${Ft}px`),onReset:()=>e.onReset("--sf-box-border-width")})}var ta=r(Ct,2);re(ta,20,()=>[1,2,3,4],zt=>zt,(zt,It)=>{var Ft=Dm(),la=s(Ft),ka=s(la),se=r(la,2),V=r(se,2),F=s(V);O(($,ve)=>{y(ka,`${It??""}px →`),it(se,$),y(F,`${ve??""}px`)},[()=>`height: ${Math.max(It*t(z),.5)}px`,()=>(It*t(z)).toFixed(1)]),f(zt,Ft)}),f(Ue,Ae)};I(we,Ue=>{t(m)&&Ue(Ge)})}var nt=r(W,4),Oe=s(nt),Be=r(s(Oe),2),te=s(Be),q=r(Oe,2);{var ke=Ue=>{var Ae=jm(),Ve=de(Ae);re(Ve,20,()=>[{label:"Border",token:"--sf-border-style",default:"solid"},{label:"Divider",token:"--sf-divider-style",default:"solid"}],It=>It.token,(It,Ft)=>{var la=Fm(),ka=s(la),se=s(ka),V=r(ka,2);re(V,20,()=>o,F=>F,(F,$)=>{const ve=u(()=>Q(Ft.token,Ft.default));var J=Nm(),G=s(J),ie=r(G);O(()=>{Ye(J,1,`px-2 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer text-center ${t(ve)===$?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),it(G,`width: 20px; height: 0; border-bottom: 2px ${$} currentColor; opacity: 0.7`),y(ie,` ${$??""}`)}),x("click",J,()=>$===Ft.default?e.onReset(Ft.token):e.onSet(Ft.token,$)),f(F,J)}),O(()=>y(se,Ft.label)),f(It,la)});var tt=r(Ve,2),Ct=s(tt),ta=r(Ct,2),zt=s(ta);O((It,Ft)=>{it(Ct,It),y(zt,`${Ft??""}px · ${t(A)??""}`)},[()=>`border: ${Math.max(t(z),.5)}px ${t(A)} ${t(D)||"var(--sf-color-border, #64748b)"}`,()=>(1*t(z)).toFixed(1)]),f(Ue,Ae)};I(q,Ue=>{t(h)&&Ue(ke)})}var Ze=r(nt,4),ne=s(Ze),fe=r(s(ne),2),Pe=s(fe),De=r(ne,2);{var ze=Ue=>{var Ae=Gm(),Ve=de(Ae),tt=r(s(Ve),2);{let zt=u(()=>"--sf-divider-color"in e.overrides);Va(tt,{token:"--sf-divider-color",get value(){return t(M)},placeholder:"inherits border",get isOverridden(){return t(zt)},onSet:It=>e.onSet("--sf-divider-color",It),onReset:()=>e.onReset("--sf-divider-color")})}var Ct=r(Ve,2);{let zt=u(()=>"--sf-divider-width"in e.overrides);pt(Ct,{label:"Width",get value(){return t(w)},min:.5,max:4,step:.5,unit:"px",help:"--sf-divider-width",get overridden(){return t(zt)},onChange:It=>e.onSet("--sf-divider-width",`${It}px`),onReset:()=>e.onReset("--sf-divider-width"),rawDefault:"var(--sf-border-width-1)",get currentRaw(){return e.overrides["--sf-divider-width"]},onRawSet:It=>e.onSet("--sf-divider-width",It)})}var ta=r(Ct,2);{let zt=u(()=>"--sf-divider-gap"in e.overrides);pt(ta,{label:"Gap",get value(){return t(R)},min:0,max:4,step:.125,unit:"rem",help:"--sf-divider-gap — spacing around divider lines",get overridden(){return t(zt)},onChange:It=>e.onSet("--sf-divider-gap",`${It}rem`),onReset:()=>e.onReset("--sf-divider-gap"),rawDefault:"var(--sf-space-m)",get currentRaw(){return e.overrides["--sf-divider-gap"]},onRawSet:It=>e.onSet("--sf-divider-gap",It)})}f(Ue,Ae)};I(De,Ue=>{t(v)&&Ue(ze)})}var Le=r(Ze,4),qe=s(Le),je=r(s(qe),2),lt=s(je),dt=r(qe,2);{var Ot=Ue=>{var Ae=Hm(),Ve=de(Ae);{let Ft=u(()=>"--sf-focus-ring-width"in e.overrides);pt(Ve,{label:"Ring width",get value(){return t(L)},min:0,max:6,step:.5,unit:"px",help:"Thickness of the keyboard focus indicator",get overridden(){return t(Ft)},onChange:la=>e.onSet("--sf-focus-ring-width",`${la}px`),onReset:()=>e.onReset("--sf-focus-ring-width")})}var tt=r(Ve,2);{let Ft=u(()=>"--sf-focus-ring-offset"in e.overrides);pt(tt,{label:"Ring offset",get value(){return t(P)},min:0,max:8,step:.5,unit:"px",help:"Gap between element edge and focus ring",get overridden(){return t(Ft)},onChange:la=>e.onSet("--sf-focus-ring-offset",`${la}px`),onReset:()=>e.onReset("--sf-focus-ring-offset")})}var Ct=r(tt,2),ta=r(s(Ct),2);{let Ft=u(()=>"--sf-focus-ring-color"in e.overrides);Va(ta,{token:"--sf-focus-ring-color",get value(){return t(T)},placeholder:"default (action)",get isOverridden(){return t(Ft)},onSet:la=>e.onSet("--sf-focus-ring-color",la),onReset:()=>e.onReset("--sf-focus-ring-color")})}var zt=r(Ct,2),It=s(zt);O(()=>it(It,`outline: ${t(L)}px solid ${t(T)||"oklch(0.7 0.2 235)"}; outline-offset: ${t(P)}px`)),f(Ue,Ae)};I(dt,Ue=>{t(b)&&Ue(Ot)})}var vt=r(Le,4),oe=s(vt),xe=r(s(oe),2),Ee=s(xe),ot=r(oe,2);{var ft=Ue=>{var Ae=qm();re(Ae,21,()=>d,Ve=>Ve.name,(Ve,tt)=>{Go(Ve,{get knob(){return t(tt)},get overrides(){return e.overrides},onChange:(Ct,ta)=>ta===null?e.onReset(Ct):e.onSet(Ct,ta)})}),f(Ue,Ae)};I(ot,Ue=>{t(k)&&Ue(ft)})}var _t=r(vt,2),xt=s(_t),Nt=r(s(xt),2),St=s(Nt),Et=r(xt,2);{var ct=Ue=>{var Ae=Vm();re(Ae,21,()=>i,Ve=>Ve.name,(Ve,tt)=>{{let Ct=u(()=>He(t(tt))),ta=u(()=>t(tt).name in e.overrides);pt(Ve,{get label(){return t(tt).step},get value(){return t(Ct)},min:0,get max(){return t(tt).max},get step(){return t(tt).step_size},unit:"px",get overridden(){return t(ta)},onChange:zt=>e.onSet(t(tt).name,`${zt}px`),onReset:()=>e.onReset(t(tt).name),get rawDefault(){return t(tt).rawDefault},get currentRaw(){return e.overrides[t(tt).name]},onRawSet:zt=>e.onSet(t(tt).name,zt)})}}),f(Ue,Ae)};I(Et,Ue=>{t(E)&&Ue(ct)})}var Gt=r(_t,2),ea=s(Gt),ia=r(s(ea),2),Xe=s(ia),ut=r(ea,2);{var Lt=Ue=>{var Ae=Wm(),Ve=s(Ae);re(Ve,20,()=>n,tt=>tt,(tt,Ct)=>{const ta=u(()=>l[Ct]??6),zt=u(()=>Ct==="full"?9999:t(ta)*t(S));var It=Km(),Ft=s(It),la=r(Ft,2),ka=s(la);O(se=>{it(Ft,se),y(ka,Ct)},[()=>`border-radius: ${Math.min(t(zt),9999)}px`]),f(tt,It)}),f(Ue,Ae)};I(ut,Ue=>{t(_)&&Ue(Lt)})}var Dt=r(Gt,4),Rt=s(Dt),me=r(s(Rt),2),Je=s(me),mt=r(Rt,2);{var Ut=Ue=>{var Ae=Ym();re(Ae,21,()=>c,Ve=>Ve.token,(Ve,tt)=>{{let Ct=u(()=>ee(t(tt))),ta=u(()=>t(tt).token in e.overrides);pt(Ve,{get label(){return t(tt).label},get value(){return t(Ct)},get min(){return t(tt).min},get max(){return t(tt).max},get step(){return t(tt).step},get unit(){return t(tt).unit},get help(){return t(tt).help},get overridden(){return t(ta)},onChange:zt=>e.onSet(t(tt).token,`${zt}${t(tt).unit}`),onReset:()=>e.onReset(t(tt).token),get rawDefault(){return t(tt).rawDefault},get currentRaw(){return e.overrides[t(tt).token]},onRawSet:zt=>e.onSet(t(tt).token,zt)})}}),f(Ue,Ae)};I(mt,Ue=>{t(B)&&Ue(Ut)})}O(()=>{Y(he,"aria-expanded",t(p)),y(at,t(p)?"▲":"▼"),Y(ye,"aria-expanded",t(m)),y(Z,t(m)?"▲":"▼"),Y(Oe,"aria-expanded",t(h)),y(te,t(h)?"▲":"▼"),Y(ne,"aria-expanded",t(v)),y(Pe,t(v)?"▲":"▼"),Y(qe,"aria-expanded",t(b)),y(lt,t(b)?"▲":"▼"),Y(oe,"aria-expanded",t(k)),y(Ee,t(k)?"▲":"▼"),Y(xt,"aria-expanded",t(E)),y(St,t(E)?"▲":"▼"),Y(ea,"aria-expanded",t(_)),y(Xe,t(_)?"▲":"▼"),Y(Rt,"aria-expanded",t(B)),y(Je,t(B)?"▲":"▼")}),x("click",he,()=>{C(p,!t(p))}),x("click",ye,()=>{C(m,!t(m))}),x("click",Oe,()=>{C(h,!t(h))}),x("click",ne,()=>{C(v,!t(v))}),x("click",qe,()=>{C(b,!t(b))}),x("click",oe,()=>{C(k,!t(k))}),x("click",xt,()=>{C(E,!t(E))}),x("click",ea,()=>{C(_,!t(_))}),x("click",Rt,()=>{C(B,!t(B))}),f(a,be),$t()}aa(["click"]);var Xm=g('
',1),Qm=g('
Shadow color

Warm, cool or brand-tinted shadows. Default uses neutral hue.

'),$m=g('
Glow color

Which brand color radiates the glow. Defaults to primary.

'),ev=g('
Shadow glow
Ambient glow on elevated surfaces
',1),tv=g('
'),av=g('
'),ov=g('
');function sv(a,e){Qt(e,!0);const o=["xs","s","m","l","xl","2xl"],n=jo.shadows??[];let l=u(()=>parseFloat(e.overrides["--sf-shadow-lightness"]??"0.15")),i=u(()=>e.overrides["--sf-shadow-color"]??""),c=u(()=>e.overrides["--sf-shadow-glow-color"]??""),d=u(()=>e.overrides["--sf-shadow-glow"]==="none"),p=j(!1),m=j(!1),h=j(!1),v=j(!1);var b=ov(),k=s(b);Ti(k,{label:"Elevation preset",get presets(){return Am},get overrides(){return e.overrides},get onApply(){return e.onBulkChange}});var _=r(k,4),E=s(_),B=r(s(E),2),U=s(B),S=r(E,2);{var z=N=>{var W=Xm(),ye=de(W);re(ye,21,()=>n,Z=>Z.name,(Z,we)=>{Go(Z,{get knob(){return t(we)},get overrides(){return e.overrides},onChange:(Ge,nt)=>nt===null?e.onReset(Ge):e.onSet(Ge,nt)})});var ge=r(ye,2);{let Z=u(()=>"--sf-shadow-lightness"in e.overrides);pt(ge,{label:"Shadow lightness",get value(){return t(l)},min:0,max:.5,step:.01,help:"OKLCH lightness of the shadow color. Lower = darker, more visible shadows.",get overridden(){return t(Z)},onChange:we=>e.onSet("--sf-shadow-lightness",String(we)),onReset:()=>e.onReset("--sf-shadow-lightness")})}f(N,W)};I(S,N=>{t(p)&&N(z)})}var L=r(_,4),P=s(L),w=r(s(P),2),R=s(w),D=r(P,2);{var A=N=>{var W=Qm(),ye=r(s(W),2);{let ge=u(()=>"--sf-shadow-color"in e.overrides);Va(ye,{token:"--sf-shadow-color",get value(){return t(i)},placeholder:"auto (neutral hue)",get isOverridden(){return t(ge)},onSet:Z=>e.onSet("--sf-shadow-color",Z),onReset:()=>e.onReset("--sf-shadow-color")})}f(N,W)};I(D,N=>{t(m)&&N(A)})}var T=r(L,4),M=s(T),Q=r(s(M),2),He=s(Q),ee=r(M,2);{var be=N=>{var W=ev(),ye=de(W),ge=r(s(ye),2),Z=s(ge),we=r(ye,2);{var Ge=nt=>{var Oe=$m(),Be=r(s(Oe),2);{let te=u(()=>"--sf-shadow-glow-color"in e.overrides);Va(Be,{token:"--sf-shadow-glow-color",get value(){return t(c)},placeholder:"default (primary color)",get isOverridden(){return t(te)},onSet:q=>e.onSet("--sf-shadow-glow-color",q),onReset:()=>e.onReset("--sf-shadow-glow-color")})}f(nt,Oe)};I(we,nt=>{t(d)||nt(Ge)})}O(()=>{Y(ge,"aria-label",t(d)?"Enable shadow glow":"Disable shadow glow"),Ye(ge,1,`w-9 h-5 rounded-full transition-colors relative cursor-pointer ${t(d)?"bg-white/10":"bg-indigo-600"}`),Ye(Z,1,`absolute top-0.5 w-4 h-4 bg-white rounded-full shadow transition-transform ${t(d)?"translate-x-0.5":"translate-x-4"}`)}),x("click",ge,()=>{t(d)?e.onReset("--sf-shadow-glow"):e.onSet("--sf-shadow-glow","none")}),f(N,W)};I(ee,N=>{t(h)&&N(be)})}var Ie=r(T,4),pe=s(Ie),he=r(s(pe),2),Ne=s(he),at=r(pe,2);{var et=N=>{var W=av();re(W,22,()=>o,ye=>ye,(ye,ge,Z)=>{var we=tv(),Ge=s(we),nt=r(Ge,2),Oe=s(nt);O(()=>{it(Ge,`width: ${40+t(Z)*4}px; height: ${40+t(Z)*4}px; box-shadow: var(--sf-shadow-${ge})`),y(Oe,ge)}),f(ye,we)}),f(N,W)};I(at,N=>{t(v)&&N(et)})}O(()=>{Y(E,"aria-expanded",t(p)),y(U,t(p)?"▲":"▼"),Y(P,"aria-expanded",t(m)),y(R,t(m)?"▲":"▼"),Y(M,"aria-expanded",t(h)),y(He,t(h)?"▲":"▼"),Y(pe,"aria-expanded",t(v)),y(Ne,t(v)?"▲":"▼")}),x("click",E,()=>{C(p,!t(p))}),x("click",P,()=>{C(m,!t(m))}),x("click",M,()=>{C(h,!t(h))}),x("click",pe,()=>{C(v,!t(v))}),f(a,b),$t()}aa(["click"]);var rv=g('

Motion is disabled — duration sliders have no effect while scale is 0.

'),nv=g('
'),lv=g('(No effect while motion is disabled.)'),iv=g('

Set absolute ms values to override the fluid scale calculation.

',1),cv=g(''),dv=g('
'),fv=g('

One slider sets all five stagger delays (delay-1 through delay-5 are multiples of this base).

Stagger base
',1),uv=g(''),pv=g('
'),mv=g('

Customize the named easing tokens used throughout the design system.

',1),vv=g('
'),hv=g(''),gv=g('
'),bv=g('

Default animation-range for scroll-driven animations using the .sf-scroll-timeline utility.

',1),yv=g('
'),xv=g('
'),kv=g('
Disable motion
Respects prefers-reduced-motion
');function wv(a,e){Qt(e,!0);const o=[{label:"Instant",token:"--sf-duration-instant",base:100,max:300},{label:"Fast",token:"--sf-duration-fast",base:150,max:500},{label:"Normal",token:"--sf-duration-normal",base:250,max:800},{label:"Slow",token:"--sf-duration-slow",base:400,max:1200},{label:"Slower",token:"--sf-duration-slower",base:600,max:2e3}],n=[{label:"Linear",token:"--sf-ease-linear",value:"linear",preview:"M0,40 L40,0"},{label:"Ease out",token:"--sf-ease-out",value:"cubic-bezier(0.25, 0, 0.15, 1)",preview:"M0,40 C8,40 28,0 40,0"},{label:"Ease in",token:"--sf-ease-in",value:"cubic-bezier(0.5, 0, 0.75, 0.25)",preview:"M0,40 C12,40 32,32 40,0"},{label:"Ease in-out",token:"--sf-ease-in-out",value:"cubic-bezier(0.4, 0, 0.2, 1)",preview:"M0,40 C8,40 32,0 40,0"},{label:"Spring",token:"--sf-ease-spring",value:"linear(0, 0.5, 1.1, 0.95, 1.02, 1)",preview:"M0,40 C10,20 20,-4 28,-2 S38,2 40,0"},{label:"Bounce",token:"--sf-ease-bounce",value:"linear(0, 0.35 18%, 1 32%, 0.86 42%, 1.02 56%, 0.98 72%, 1)",preview:"M0,40 L12,16 L20,0 L26,6 L32,-1 L36,1 L40,0"},{label:"Elastic",token:"--sf-ease-elastic",value:"linear(0, 0.3, 1.2, 0.9, 1.05, 1)",preview:"M0,40 C8,40 16,-10 24,-2 S36,2 40,0"},{label:"Overshoot",token:"--sf-ease-overshoot",value:"cubic-bezier(0.34, 1.56, 0.64, 1)",preview:"M0,40 C8,40 20,-10 40,0"}],l=["--sf-animation-delay-1","--sf-animation-delay-2","--sf-animation-delay-3","--sf-animation-delay-4","--sf-animation-delay-5"],i=jo.motion??[];let c=u(()=>parseFloat(e.overrides["--sf-motion-scale"]??"1")),d=u(()=>e.overrides["--sf-motion-scale"]==="0"),p=u(()=>parseFloat(e.overrides["--sf-theme-transition-duration"]?.replace("ms","")??String(300*t(c)))),m=u(()=>()=>{const Xe=e.overrides[l[0]];return Xe?parseFloat(Xe.replace("ms","")):75*t(c)}),h=j(!1),v=j(0),b=j(!1),k=j(!1),_=j(!1),E=j(!1),B=j(!1),U=j(!1),S=j(!1),z=j(!1);function L(Xe,ut){const Lt=e.overrides[Xe];return Lt?parseFloat(Lt):Math.round(ut*t(c))}function P(){if(t(h))return;C(h,!0),C(v,180);const Xe=L("--sf-duration-normal",250);setTimeout(()=>{C(v,0),setTimeout(()=>{C(h,!1)},Xe)},Xe)}function w(Xe){const ut={};for(let Lt=1;Lt<=5;Lt++)ut[`--sf-animation-delay-${Lt}`]=`${Math.round(Xe*Lt)}ms`;e.onBulkChange(ut)}function R(){const Xe={};for(let ut=1;ut<=5;ut++)Xe[`--sf-animation-delay-${ut}`]=null;e.onBulkChange(Xe)}var D=kv(),A=s(D),T=r(s(A),2),M=s(T),Q=r(A,2);{var He=Xe=>{var ut=rv();f(Xe,ut)};I(Q,Xe=>{t(d)&&Xe(He)})}var ee=r(Q,2),be=s(ee),Ie=r(s(be),2),pe=s(Ie),he=r(be,2);{var Ne=Xe=>{var ut=nv();re(ut,21,()=>i,Lt=>Lt.name,(Lt,Dt)=>{Go(Lt,{get knob(){return t(Dt)},get overrides(){return e.overrides},onChange:(Rt,me)=>me===null?e.onReset(Rt):e.onSet(Rt,me)})}),f(Xe,ut)};I(he,Xe=>{t(b)&&Xe(Ne)})}var at=r(ee,4),et=s(at),N=r(s(et),2),W=s(N),ye=r(et,2);{var ge=Xe=>{{let ut=u(()=>"--sf-theme-transition-duration"in e.overrides);pt(Xe,{label:"Dark/light switch speed",get value(){return t(p)},min:0,max:600,step:10,unit:"ms",help:"--sf-theme-transition-duration — color-scheme switch animation speed",get overridden(){return t(ut)},onChange:Lt=>e.onSet("--sf-theme-transition-duration",`${Lt}ms`),onReset:()=>e.onReset("--sf-theme-transition-duration")})}};I(ye,Xe=>{t(k)&&Xe(ge)})}var Z=r(at,4),we=s(Z),Ge=r(s(we),2),nt=s(Ge),Oe=r(we,2);{var Be=Xe=>{var ut=iv(),Lt=de(ut),Dt=r(s(Lt));{var Rt=Je=>{var mt=lv();f(Je,mt)};I(Dt,Je=>{t(d)&&Je(Rt)})}var me=r(Lt,2);re(me,17,()=>o,Je=>Je.token,(Je,mt)=>{const Ut=u(()=>L(t(mt).token,t(mt).base));{let Ue=u(()=>t(mt).token in e.overrides);pt(Je,{get label(){return t(mt).label},get value(){return t(Ut)},min:0,get max(){return t(mt).max},step:10,unit:"ms",get overridden(){return t(Ue)},onChange:Ae=>e.onSet(t(mt).token,`${Ae}ms`),onReset:()=>e.onReset(t(mt).token)})}}),f(Xe,ut)};I(Oe,Xe=>{t(_)&&Xe(Be)})}var te=r(Z,4),q=s(te),ke=r(s(q),2),Ze=s(ke),ne=r(q,2);{var fe=Xe=>{var ut=fv(),Lt=r(de(ut),2),Dt=s(Lt),Rt=r(s(Dt),2);{var me=Ue=>{var Ae=cv();x("click",Ae,R),f(Ue,Ae)},Je=u(()=>l.some(Ue=>Ue in e.overrides));I(Rt,Ue=>{t(Je)&&Ue(me)})}var mt=r(Dt,2);{let Ue=u(()=>Math.round(t(m)())),Ae=u(()=>l.some(Ve=>Ve in e.overrides));pt(mt,{label:"",get value(){return t(Ue)},min:0,max:200,step:5,unit:"ms",help:"Base unit for --sf-animation-delay-1 through -5",get overridden(){return t(Ae)},onChange:Ve=>w(Ve),onReset:R})}var Ut=r(Lt,2);re(Ut,20,()=>[1,2,3,4,5],Ue=>Ue,(Ue,Ae)=>{const Ve=u(()=>Math.round(t(m)()*Ae));var tt=dv(),Ct=s(tt),ta=s(Ct),zt=r(Ct,2),It=s(zt),Ft=r(zt,2),la=s(Ft);O(ka=>{y(ta,`–${Ae??""}`),it(It,ka),y(la,`${t(Ve)??""}ms`)},[()=>`width: ${Math.min(t(Ve)/600*100,100)}%`]),f(Ue,tt)}),f(Xe,ut)};I(ne,Xe=>{t(E)&&Xe(fe)})}var Pe=r(te,4),De=s(Pe),ze=r(s(De),2),Le=s(ze),qe=r(De,2);{var je=Xe=>{var ut=mv(),Lt=r(de(ut),2);re(Lt,21,()=>n,Dt=>Dt.token,(Dt,Rt)=>{const me=u(()=>t(Rt).token in e.overrides);var Je=pv(),mt=s(Je),Ut=s(mt),Ue=s(Ut),Ae=r(Ut,2);{var Ve=It=>{var Ft=uv();x("click",Ft,()=>e.onReset(t(Rt).token)),f(It,Ft)};I(Ae,It=>{t(me)&&It(Ve)})}var tt=r(mt,2),Ct=s(tt),ta=r(tt,2),zt=s(ta);O(It=>{Ye(Je,1,`p-2.5 rounded-xl border transition-all ${t(me)?"bg-indigo-500/10 border-indigo-500/30":"border-white/8 bg-white/3"}`),y(Ue,t(Rt).label),Y(Ct,"d",t(Rt).preview),y(zt,It)},[()=>t(Rt).token.replace("--sf-ease-","")]),f(Dt,Je)}),f(Xe,ut)};I(qe,Xe=>{t(B)&&Xe(je)})}var lt=r(Pe,4),dt=s(lt),Ot=r(s(dt),2),vt=s(Ot),oe=r(dt,2);{var xe=Xe=>{var ut=vv(),Lt=s(ut),Dt=s(Lt),Rt=r(Lt,2),me=s(Rt);O(Je=>{it(Dt,Je),Rt.disabled=t(h),y(me,t(h)?"Animating…":"▶ Play")},[()=>`transform: translateX(${t(v)}px); transition: transform ${L("--sf-duration-normal",250)}ms ${e.overrides["--sf-ease-out"]??"cubic-bezier(0.25, 0, 0.15, 1)"}`]),x("click",Rt,P),f(Xe,ut)};I(oe,Xe=>{t(U)&&Xe(xe)})}var Ee=r(lt,4),ot=s(Ee),ft=r(s(ot),2),_t=s(ft),xt=r(ot,2);{var Nt=Xe=>{var ut=bv(),Lt=r(de(ut),2);re(Lt,16,()=>[{label:"Range start",token:"--sf-scroll-timeline-range-start",placeholder:"entry 0%"},{label:"Range end",token:"--sf-scroll-timeline-range-end",placeholder:"cover 30%"}],Dt=>Dt.token,(Dt,Rt)=>{var me=gv(),Je=s(me),mt=s(Je),Ut=r(Je,2),Ue=r(Ut,2);{var Ae=Ve=>{var tt=hv();x("click",tt,()=>e.onReset(Rt.token)),f(Ve,tt)};I(Ue,Ve=>{Rt.token in e.overrides&&Ve(Ae)})}O(()=>{y(mt,Rt.label),Xt(Ut,e.overrides[Rt.token]??""),Y(Ut,"placeholder",Rt.placeholder)}),x("input",Ut,Ve=>{const tt=Ve.target.value.trim();tt?e.onSet(Rt.token,tt):e.onReset(Rt.token)}),f(Dt,me)}),f(Xe,ut)};I(xt,Xe=>{t(z)&&Xe(Nt)})}var St=r(Ee,4),Et=s(St),ct=r(s(Et),2),Gt=s(ct),ea=r(Et,2);{var ia=Xe=>{var ut=xv();re(ut,21,()=>o,Lt=>Lt.label,(Lt,Dt)=>{const Rt=u(()=>L(t(Dt).token,t(Dt).base));var me=yv(),Je=s(me),mt=s(Je),Ut=r(Je,2),Ue=s(Ut),Ae=r(Ut,2),Ve=s(Ae);O(tt=>{y(mt,t(Dt).label),it(Ue,tt),y(Ve,`${t(Rt)??""}ms`)},[()=>`width: ${Math.min(t(Rt)/1200*100,100)}%`]),f(Lt,me)}),f(Xe,ut)};I(ea,Xe=>{t(S)&&Xe(ia)})}O(()=>{Y(T,"title",t(d)?"Enable motion":"Disable motion"),Ye(T,1,`w-9 h-5 rounded-full transition-colors relative cursor-pointer ${t(d)?"bg-indigo-600":"bg-white/10"}`),Ye(M,1,`absolute top-0.5 w-4 h-4 bg-white rounded-full shadow transition-transform ${t(d)?"translate-x-4":"translate-x-0.5"}`),Y(be,"aria-expanded",t(b)),y(pe,t(b)?"▲":"▼"),Y(et,"aria-expanded",t(k)),y(W,t(k)?"▲":"▼"),Y(we,"aria-expanded",t(_)),y(nt,t(_)?"▲":"▼"),Y(q,"aria-expanded",t(E)),y(Ze,t(E)?"▲":"▼"),Y(De,"aria-expanded",t(B)),y(Le,t(B)?"▲":"▼"),Y(dt,"aria-expanded",t(U)),y(vt,t(U)?"▲":"▼"),Y(ot,"aria-expanded",t(z)),y(_t,t(z)?"▲":"▼"),Y(Et,"aria-expanded",t(S)),y(Gt,t(S)?"▲":"▼")}),x("click",T,()=>{t(d)?e.onReset("--sf-motion-scale"):e.onSet("--sf-motion-scale","0")}),x("click",be,()=>{C(b,!t(b))}),x("click",et,()=>{C(k,!t(k))}),x("click",we,()=>{C(_,!t(_))}),x("click",q,()=>{C(E,!t(E))}),x("click",De,()=>{C(B,!t(B))}),x("click",dt,()=>{C(U,!t(U))}),x("click",ot,()=>{C(z,!t(z))}),x("click",Et,()=>{C(S,!t(S))}),f(a,D),$t()}aa(["click","input"]);var _v=g("
"),Cv=g('
',1),Ov=g('
'),Sv=g('
',1),Zn=g(""),Lv=g('

Gradient overlay for hero images and media content. Used by the .sf-scrim macro.

Color
Direction
Scrim preview
',1),Pv=g('
'),Iv=g('
Scrollbar preview
',1),Bv=g('

Controls text legibility over images. Applied via text-shadow: var(--sf-text-shadow-m).

',1),Uv=g('
');function zv(a,e){Qt(e,!0);const o=[{label:"To top",value:"to top"},{label:"To bottom",value:"to bottom"},{label:"To left",value:"to left"},{label:"To right",value:"to right"}],n=[{label:"None",patch:{"--sf-text-shadow-s":"none","--sf-text-shadow-m":"none","--sf-text-shadow-l":"none"}},{label:"Subtle",patch:null},{label:"Strong",patch:{"--sf-shadow-strength":"calc(0.25 + var(--sf-is-dark) * 0.17)"}}];function l(Le,qe,je){if(!Le)return qe;const lt=parseFloat(je?Le.replace(je,""):Le);return isNaN(lt)?qe:lt}let i=u(()=>l(e.overrides["--sf-blur"],12,"px")),c=u(()=>l(e.overrides["--sf-opacity-muted"],.5)),d=u(()=>l(e.overrides["--sf-opacity-disabled"],.45)),p=u(()=>e.overrides["--sf-scrim-direction"]??"to top"),m=u(()=>e.overrides["--sf-scrim-color"]??""),h=u(()=>l(e.overrides["--sf-scroll-shadow-size"]?.replace("rem",""),2)),v=u(()=>l(e.overrides["--sf-state-pending-opacity"],.7)),b=u(()=>e.overrides["--sf-scrollbar-thumb"]??""),k=u(()=>e.overrides["--sf-scrollbar-track"]??""),_=j(!1),E=j(!1),B=j(!1),U=j(!1),S=j(!1),z=j(!1);var L=Uv(),P=s(L),w=s(P),R=r(s(w),2),D=s(R),A=r(w,2);{var T=Le=>{var qe=Cv(),je=de(qe);{let xe=u(()=>"--sf-blur"in e.overrides);pt(je,{label:"Blur radius",get value(){return t(i)},min:0,max:48,step:1,unit:"px",help:"--sf-blur — used for frosted glass, modals, tooltips",get overridden(){return t(xe)},onChange:Ee=>e.onSet("--sf-blur",`${Ee}px`),onReset:()=>e.onReset("--sf-blur")})}var lt=r(je,2),dt=s(lt);re(dt,20,()=>Array.from({length:12}),nn,(xe,Ee,ot)=>{var ft=_v();Ye(ft,1,lo(ot%3===0?"bg-indigo-500/50":ot%3===1?"bg-purple-500/40":"bg-blue-500/30")),f(xe,ft)});var Ot=r(dt,2),vt=s(Ot),oe=s(vt);O(()=>{it(Ot,`backdrop-filter: blur(${t(i)}px)`),y(oe,`${t(i)??""}px`)}),f(Le,qe)};I(A,Le=>{t(_)&&Le(T)})}var M=r(P,4),Q=s(M),He=r(s(Q),2),ee=s(He),be=r(Q,2);{var Ie=Le=>{var qe=Sv(),je=de(qe);{let vt=u(()=>"--sf-opacity-muted"in e.overrides);pt(je,{label:"Muted opacity",get value(){return t(c)},min:0,max:1,step:.05,help:"--sf-opacity-muted — secondary text, icons, and placeholder content",get overridden(){return t(vt)},onChange:oe=>e.onSet("--sf-opacity-muted",String(oe)),onReset:()=>e.onReset("--sf-opacity-muted")})}var lt=r(je,2);{let vt=u(()=>"--sf-opacity-disabled"in e.overrides);pt(lt,{label:"Disabled opacity",get value(){return t(d)},min:0,max:1,step:.05,help:"--sf-opacity-disabled — disabled form controls and interactive elements",get overridden(){return t(vt)},onChange:oe=>e.onSet("--sf-opacity-disabled",String(oe)),onReset:()=>e.onReset("--sf-opacity-disabled")})}var dt=r(lt,2);{let vt=u(()=>"--sf-state-pending-opacity"in e.overrides);pt(dt,{label:"Pending opacity",get value(){return t(v)},min:.1,max:1,step:.05,help:"--sf-state-pending-opacity — opacity of elements in loading/pending state",get overridden(){return t(vt)},onChange:oe=>e.onSet("--sf-state-pending-opacity",String(oe)),onReset:()=>e.onReset("--sf-state-pending-opacity")})}var Ot=r(dt,2);re(Ot,21,()=>[{label:"muted",val:t(c)},{label:"disabled",val:t(d)},{label:"pending",val:t(v)}],vt=>vt.label,(vt,oe)=>{var xe=Ov(),Ee=s(xe),ot=s(Ee),ft=r(Ee,2),_t=r(ft,2),xt=s(_t);O(()=>{y(ot,t(oe).label),it(ft,`opacity: ${t(oe).val}`),y(xt,t(oe).val)}),f(vt,xe)}),f(Le,qe)};I(be,Le=>{t(E)&&Le(Ie)})}var pe=r(M,4),he=s(pe),Ne=r(s(he),2),at=s(Ne),et=r(he,2);{var N=Le=>{var qe=Lv(),je=r(de(qe),2),lt=r(s(je),2);{let Ee=u(()=>"--sf-scrim-color"in e.overrides);Va(lt,{token:"--sf-scrim-color",get value(){return t(m)},placeholder:"default (base color)",get isOverridden(){return t(Ee)},onSet:ot=>e.onSet("--sf-scrim-color",ot),onReset:()=>e.onReset("--sf-scrim-color")})}var dt=r(je,2),Ot=r(s(dt),2);re(Ot,21,()=>o,Ee=>Ee.value,(Ee,ot)=>{var ft=Zn(),_t=s(ft);O(()=>{Ye(ft,1,`py-2 px-3 rounded-lg text-[10px] border transition-all cursor-pointer text-left ${t(p)===t(ot).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(_t,t(ot).label)}),x("click",ft,()=>t(ot).value==="to top"?e.onReset("--sf-scrim-direction"):e.onSet("--sf-scrim-direction",t(ot).value)),f(Ee,ft)});var vt=r(dt,2),oe=s(vt),xe=s(oe);O(()=>it(xe,`background: linear-gradient(${t(p)}, ${t(m)||"oklch(0 0 0 / 0.6)"}, transparent)`)),f(Le,qe)};I(et,Le=>{t(B)&&Le(N)})}var W=r(pe,4),ye=s(W),ge=r(s(ye),2),Z=s(ge),we=r(ye,2);{var Ge=Le=>{var qe=Iv(),je=de(qe);re(je,17,()=>[{label:"Thumb color",token:"--sf-scrollbar-thumb",val:t(b)},{label:"Track color",token:"--sf-scrollbar-track",val:t(k)}],vt=>vt.token,(vt,oe)=>{var xe=Pv(),Ee=s(xe),ot=s(Ee),ft=r(Ee,2);{let _t=u(()=>t(oe).token in e.overrides);Va(ft,{get token(){return t(oe).token},get value(){return t(oe).val},placeholder:"default",get isOverridden(){return t(_t)},onSet:xt=>e.onSet(t(oe).token,xt),onReset:()=>e.onReset(t(oe).token)})}O(()=>y(ot,t(oe).label)),f(vt,xe)});var lt=r(je,2),dt=s(lt),Ot=s(dt);O(()=>{it(dt,`background: ${t(k)||"rgba(255,255,255,0.08)"}`),it(Ot,`background: ${t(b)||"oklch(0.52 0.025 260)"}`)}),f(Le,qe)};I(we,Le=>{t(U)&&Le(Ge)})}var nt=r(W,4),Oe=s(nt),Be=r(s(Oe),2),te=s(Be),q=r(Oe,2);{var ke=Le=>{{let qe=u(()=>"--sf-scroll-shadow-size"in e.overrides);pt(Le,{label:"Shadow size",get value(){return t(h)},min:0,max:6,step:.25,unit:"rem",help:"--sf-scroll-shadow-size — gradient edge mask on .sf-scroll-shadow elements",get overridden(){return t(qe)},onChange:je=>e.onSet("--sf-scroll-shadow-size",`${je}rem`),onReset:()=>e.onReset("--sf-scroll-shadow-size")})}};I(q,Le=>{t(S)&&Le(ke)})}var Ze=r(nt,4),ne=s(Ze),fe=r(s(ne),2),Pe=s(fe),De=r(ne,2);{var ze=Le=>{var qe=Bv(),je=r(de(qe),2);re(je,21,()=>n,lt=>lt.label,(lt,dt)=>{var Ot=Zn(),vt=s(Ot);O(()=>{Ye(Ot,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer ${t(dt).label==="None"&&e.overrides["--sf-text-shadow-s"]==="none"||t(dt).patch===null&&!("--sf-text-shadow-s"in e.overrides)?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(vt,t(dt).label)}),x("click",Ot,()=>{if(t(dt).patch===null)e.onReset("--sf-text-shadow-s"),e.onReset("--sf-text-shadow-m"),e.onReset("--sf-text-shadow-l");else for(const[oe,xe]of Object.entries(t(dt).patch))e.onSet(oe,xe)}),f(lt,Ot)}),f(Le,qe)};I(De,Le=>{t(z)&&Le(ze)})}O(()=>{Y(w,"aria-expanded",t(_)),y(D,t(_)?"▲":"▼"),Y(Q,"aria-expanded",t(E)),y(ee,t(E)?"▲":"▼"),Y(he,"aria-expanded",t(B)),y(at,t(B)?"▲":"▼"),Y(ye,"aria-expanded",t(U)),y(Z,t(U)?"▲":"▼"),Y(Oe,"aria-expanded",t(S)),y(te,t(S)?"▲":"▼"),Y(ne,"aria-expanded",t(z)),y(Pe,t(z)?"▲":"▼")}),x("click",w,()=>{C(_,!t(_))}),x("click",Q,()=>{C(E,!t(E))}),x("click",he,()=>{C(B,!t(B))}),x("click",ye,()=>{C(U,!t(U))}),x("click",Oe,()=>{C(S,!t(S))}),x("click",ne,()=>{C(z,!t(z))}),f(a,L),$t()}aa(["click"]);var Av=g('
'),Ev=g('
',1),Rv=g(`

SLASHED is a token-first CSS framework. This sample paragraph repeats so you + */function Yn(a,e,o){const n=o*Math.PI/180,l=a,i=e*Math.cos(n),c=e*Math.sin(n),f=l+.3963377774*i+.2158037573*c,p=l-.1055613458*i-.0638541728*c,m=l-.0894841775*i-1.291485548*c,h=f*f*f,v=p*p*p,b=m*m*m,k=4.0767416621*h-3.3077115913*v+.2309699292*b,S=-1.2684380046*h+2.6097574011*v-.3413193965*b,R=-.0041960863*h-.7034186147*v+1.707614701*b,P=T=>T<=.0031308?12.92*T:1.055*Math.pow(T,1/2.4)-.055,A=Math.max(0,Math.min(255,Math.round(P(k)*255))),B=Math.max(0,Math.min(255,Math.round(P(S)*255))),q=Math.max(0,Math.min(255,Math.round(P(R)*255)));return[A,B,q]}function To(a,e,o){const n=l=>{const i=l/255;return i<=.04045?i/12.92:Math.pow((i+.055)/1.055,2.4)};return .2126*n(a)+.7152*n(e)+.0722*n(o)}function Ks(a,e){const o=Math.max(a,e),n=Math.min(a,e);return(o+.05)/(n+.05)}function Ws(a){const e=a.match(/oklch\(\s*([\d.%]+)\s+([\d.]+)\s+([\d.]+)/i);if(e){const o=e[1],n=o.endsWith("%")?parseFloat(o)/100:parseFloat(o),l=parseFloat(e[2]),i=parseFloat(e[3]);return{l:n,c:l,h:i,valid:!0}}return{l:.5,c:.15,h:200,valid:!1}}function Ys(a,e,o){return`oklch(${a.toFixed(3)} ${e.toFixed(3)} ${Math.round(o)})`}var ju=g(' '),Gu=g('

');function Qo(a,e){$t(e,!0);let o=Oa(e,"disabled",3,!1);function n(S){return Math.min(e.max,Math.max(e.min,S))}let l=u(()=>(e.value-e.min)/(e.max-e.min)*100);var i=Gu(),c=s(i),f=r(s(c),2),p=r(f,2),m=r(p,2),h=r(c,2),v=s(h),b=r(v,2);{var k=S=>{var R=ju(),P=s(R);_(()=>y(P,e.unit)),d(S,R)};L(b,S=>{e.unit&&S(k)})}_(()=>{lt(f,`width: ${t(l)}%`),$(p,"min",e.min),$(p,"max",e.max),$(p,"step",e.step),Xt(p,e.value),p.disabled=o(),lt(m,`left: calc(${t(l)}% - 6px)`),$(v,"min",e.min),$(v,"max",e.max),$(v,"step",e.step),Xt(v,e.value),v.disabled=o()}),x("input",p,S=>e.onChange(n(parseFloat(S.target.value)))),x("change",v,S=>e.onChange(n(parseFloat(S.target.value)||0))),d(a,i),ea()}oa(["input","change"]);var Hu=g('
'),qu=g(''),Vu=g('
Lightness (L)
Chroma (C)
Hue (H)
Raw value
'),Ku=g('
');function Fs(a,e){$t(e,!0);function o(M){const Y=/oklch\(\s*([\d.]+)\s+([\d.]+)\s+([\d.]+)\s*\)/.exec(M);return Y?{l:parseFloat(Y[1]),c:parseFloat(Y[2]),h:parseFloat(Y[3])}:null}function n(M,Y,Oe){return`oklch(${M.toFixed(3)} ${Y.toFixed(3)} ${Oe.toFixed(1)})`}function l(M,Y,Oe){const De=Oe*Math.PI/180,Me=Y*Math.cos(De),xe=Y*Math.sin(De),be=M+.3963377774*Me+.2158037573*xe,Q=M-.1055613458*Me-.0638541728*xe,se=M-.0894841775*Me-1.291485548*xe,Se=be*be*be,Ce=Q*Q*Q,H=se*se*se;let D=4.0767416621*Se-3.3077115913*Ce+.2309699292*H,ee=-1.2684380046*Se+2.6097574011*Ce-.3413193965*H,le=-.0041960863*Se-.7034186147*Ce+1.707614701*H;const W=me=>me<=0?0:me>=1?255:Math.round(Math.pow(me,1/2.2)*255);return`rgb(${W(D)},${W(ee)},${W(le)})`}let i=u(()=>o(e.value)??{l:.6,c:.15,h:264}),c=K(!1),f=K(""),p=u(()=>l(t(i).l,t(i).c,t(i).h)),m=u(()=>e.tokenName.replace("--sf-",""));function h(M,Y,Oe){e.onChange(n(M,Y,Oe))}var v=Ku(),b=s(v),k=s(b);let S;var R=r(k,2),P=s(R),A=s(P),B=r(P,2),q=s(B),T=r(B,2),E=s(T),C=r(R,2);{var z=M=>{var Y=Hu();d(M,Y)};L(C,M=>{e.overridden&&M(z)})}var G=r(C,2),O=r(b,2);{var j=M=>{var Y=Vu(),Oe=s(Y),De=s(Oe),Me=r(s(De),2),xe=s(Me),be=r(De,2),Q=r(be,2);Qo(Q,{get value(){return t(i).l},min:0,max:1,step:.005,onChange:Qe=>h(Qe,t(i).c,t(i).h)});var se=r(Oe,2),Se=s(se),Ce=r(s(Se),2),H=s(Ce),D=r(Se,2);Qo(D,{get value(){return t(i).c},min:0,max:.4,step:.005,onChange:Qe=>h(t(i).l,Qe,t(i).h)});var ee=r(se,2),le=s(ee),W=r(s(le),2),me=s(W),ke=r(le,2),he=r(ke,2);Qo(he,{get value(){return t(i).h},min:0,max:360,step:1,unit:"°",onChange:Qe=>h(t(i).l,t(i).c,Qe)});var ie=r(ee,2),Ue=r(s(ie),2),Ne=s(Ue),Xe=r(Ne,2);{var We=Qe=>{var dt=qu();x("click",dt,function(...gt){e.onReset?.apply(this,gt)}),d(Qe,dt)};L(Xe,Qe=>{e.overridden&&Qe(We)})}_((Qe,dt,gt,kt,wt)=>{y(xe,Qe),lt(be,dt),y(H,gt),y(me,`${kt??""}°`),lt(ke,wt),Xt(Ne,t(f)||e.value)},[()=>t(i).l.toFixed(3),()=>`background: linear-gradient(to right, oklch(0 ${t(i).c.toFixed(3)} ${t(i).h.toFixed(1)}), oklch(1 ${t(i).c.toFixed(3)} ${t(i).h.toFixed(1)}))`,()=>t(i).c.toFixed(3),()=>t(i).h.toFixed(1),()=>`background: linear-gradient(to right, oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 0), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 60), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 120), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 180), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 240), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 300), oklch(${t(i).l.toFixed(3)} ${t(i).c.toFixed(3)} 360))`]),x("input",Ne,Qe=>{w(f,Qe.target.value,!0)}),go("blur",Ne,()=>{t(f).trim()&&(e.onChange(t(f).trim()),w(f,""))}),x("keydown",Ne,Qe=>{Qe.key==="Enter"&&(t(f).trim()&&(e.onChange(t(f).trim()),w(f,"")),Qe.currentTarget.blur())}),d(M,Y)};L(O,M=>{t(c)&&M(j)})}_(()=>{Ve(v,1,`rounded-xl border transition-all ${e.overridden?"bg-indigo-500/8 border-indigo-500/20":"bg-white/4 border-white/8 hover:border-white/12"}`),S=lt(k,"",S,{background:t(p)}),y(A,e.label),y(q,t(m)),y(E,e.value),Ve(G,1,`text-slate-500 text-[10px] transition-transform ${t(c)?"rotate-180":""}`)}),x("click",b,()=>{w(c,!t(c))}),d(a,v),ea()}oa(["click","input","keydown"]);var Wu=g(' '),Yu=g(''),Zu=g('

'),Xu=g('
');function Vo(a,e){$t(e,!0);let o=u(()=>e.overrides[e.knob.name]),n=u(()=>t(o)!==void 0?e.knob.decode?e.knob.decode(t(o)):parseFloat(t(o)):e.knob.default),l=u(()=>isNaN(t(n))?e.knob.default:t(n)),i=u(()=>e.knob.name in e.overrides);function c(T){const E=e.knob.encode?e.knob.encode(T):String(T);e.onChange(e.knob.name,E)}function f(){e.onChange(e.knob.name,null)}var p=Xu(),m=s(p),h=s(m),v=s(h),b=s(v),k=r(v,2);{var S=T=>{var E=Wu(),C=s(E);_(()=>y(C,`→ ${e.knob.driving??""} tokens`)),d(T,E)};L(k,T=>{e.knob.driving!==void 0&&T(S)})}var R=r(h,2);{var P=T=>{var E=Yu();x("click",E,f),d(T,E)};L(R,T=>{t(i)&&T(P)})}var A=r(m,2);Qo(A,{get value(){return t(l)},get min(){return e.knob.min},get max(){return e.knob.max},get step(){return e.knob.step},get unit(){return e.knob.unit},onChange:c});var B=r(A,2);{var q=T=>{var E=Zu(),C=s(E);_(()=>y(C,e.knob.help)),d(T,E)};L(B,T=>{e.knob.help&&T(q)})}_(()=>y(b,e.knob.label)),d(a,p),ea()}oa(["click"]);var Ju=g(' '),Qu=g(""),$u=g(""),ep=g(''),tp=g(''),ap=g('

'),op=g(" ",1),sp=g('

'),rp=g('
');function yt(a,e){$t(e,!0);let o=K(!1),n=K(""),l=K(!1),i=u(()=>!!e.currentRaw&&/^(var|calc|clamp|min|max|env)\(/.test(e.currentRaw.trim())),c=u(()=>!!(e.rawDefault&&e.onRawSet&&(t(o)||t(i)||t(l))));ba(()=>{t(l)||w(n,e.currentRaw??"",!0)});var f=rp(),p=s(f),m=s(p);{var h=C=>{var z=Ju(),G=s(z);_(()=>y(G,e.label)),d(C,z)},v=C=>{var z=Qu();d(C,z)};L(m,C=>{e.label?C(h):C(v,-1)})}var b=r(m,2),k=s(b);{var S=C=>{var z=$u();_(()=>{$(z,"title",t(c)?"Switch to slider":"Enter raw CSS value"),Ve(z,1,`text-[9px] font-mono cursor-pointer transition-all px-0.5 ${t(c)?"text-indigo-400":"opacity-0 group-hover:opacity-100 text-slate-500 hover:text-indigo-400"}`)}),x("click",z,()=>{w(o,!t(o))}),d(C,z)};L(k,C=>{e.rawDefault&&e.onRawSet&&C(S)})}var R=r(k,2);{var P=C=>{var z=ep();x("click",z,function(...G){e.onReset?.apply(this,G)}),d(C,z)};L(R,C=>{e.overridden&&C(P)})}var A=r(p,2);{var B=C=>{var z=tp();_(()=>{Xt(z,t(n)),$(z,"placeholder",e.rawDefault)}),go("focus",z,()=>{w(l,!0)}),go("blur",z,()=>{w(l,!1),t(n).trim()||e.onReset()}),x("input",z,G=>{w(n,G.target.value,!0);const O=t(n).trim();O&&e.onRawSet&&e.onRawSet(O)}),d(C,z)},q=C=>{var z=op(),G=fe(z);Qo(G,{get value(){return e.value},get min(){return e.min},get max(){return e.max},get step(){return e.step},get unit(){return e.unit},get onChange(){return e.onChange}});var O=r(G,2);{var j=M=>{var Y=ap(),Oe=s(Y);_(()=>y(Oe,`default: ${e.rawDefault??""}`)),d(M,Y)};L(O,M=>{e.rawDefault&&!e.overridden&&M(j)})}d(C,z)};L(A,C=>{t(c)&&e.rawDefault?C(B):C(q,-1)})}var T=r(A,2);{var E=C=>{var z=sp(),G=s(z);_(()=>y(G,e.help)),d(C,z)};L(T,C=>{e.help&&C(E)})}d(a,f),ea()}oa(["click","input"]);var np=g(''),lp=g(''),ip=g(' '),cp=g(''),dp=g(''),fp=g('
');function Ja(a,e){$t(e,!0);let o=K(!1),n=K(!1),l=K(null);ba(()=>{t(o)&&fr().then(()=>t(l)?.focus())});function i(E){const C=E.trim();return C.startsWith("--")&&!C.startsWith("var(")?`var(${C})`:C}function c(E){ja.value;const C=i(E);return vo(C)||C||"transparent"}let f=u(()=>c(e.value||`var(${e.token})`)),p=u(()=>e.value.trim().startsWith("var(")||e.value.trim().startsWith("--"));function m(E){if(E.match(/^#([0-9a-fA-F]{6})$/))return E.toLowerCase();const z=E.match(/^#([0-9a-fA-F]{3})$/);if(z)return"#"+z[1].split("").map(O=>O+O).join("");const G=E.match(/rgb\w*\((\d+)[,\s]+(\d+)[,\s]+(\d+)/);return G?"#"+[G[1],G[2],G[3]].map(O=>parseInt(O).toString(16).padStart(2,"0")).join(""):"#6366f1"}var h=fp(),v=s(h),b=s(v);let k;var S=r(b,2);{var R=E=>{var C=np();_(z=>Xt(C,z),[()=>m(t(f))]),x("input",C,z=>e.onSet(z.target.value)),d(E,C)};L(S,E=>{t(p)||E(R)})}var P=r(v,2);{var A=E=>{var C=lp();bo(C,z=>w(l,z),()=>t(l)),_(()=>{Xt(C,e.value),$(C,"placeholder",e.placeholder??"default")}),go("blur",C,z=>{if(t(n)){w(n,!1),w(o,!1);return}const G=i(z.target.value);G?e.onSet(G):e.onReset(),w(o,!1)}),x("keydown",C,z=>{z.key==="Enter"&&z.currentTarget.blur(),z.key==="Escape"&&(w(n,!0),w(o,!1))}),d(E,C)},B=E=>{var C=cp(),z=s(C);{var G=j=>{var M=ip(),Y=s(M);_(()=>y(Y,e.value)),d(j,M)},O=j=>{var M=ns();_(()=>y(M,e.placeholder??"default")),d(j,M)};L(z,j=>{e.isOverridden?j(G):j(O,-1)})}x("click",C,()=>{w(o,!0)}),d(E,C)};L(P,E=>{t(o)?E(A):E(B,-1)})}var q=r(P,2);{var T=E=>{var C=dp();x("click",C,function(...z){e.onReset?.apply(this,z)}),d(E,C)};L(q,E=>{e.isOverridden&&E(T)})}_(()=>k=lt(b,"",k,{background:t(f)})),d(a,h),ea()}oa(["input","keydown","click"]);var up=g('
Aa
'),pp=g('
'),mp=g('
'),Wo=g(""),vp=g('
'),hp=g('
'),gp=g('

Absolute lightness ramp — each step pins L and inherits chroma + hue from the source. Not the brand mix curve.

'),bp=g('
L
D
',1),Zn=g('
'),yp=g('
'),xp=g('

OKLCH source values — all 200+ derived color steps are computed automatically.

',1),kp=g('
'),wp=g(`

Pins brand colors (primary, secondary, tertiary, action) to a fixed OKLCH + lightness — useful for always-stable sections. Enable on canvas to preview.

Color Current Locked
`,1),_p=g('
'),Cp=g('
'),Op=g('
'),Sp=g(`

Dark mode is auto-derived from each light source by default. Switch to + Manual dark to set a bespoke dark value.

`,1),Lp=g('
Aa
'),Pp=g(''),Ip=g('

Controls whether text on brand-coloured surfaces is light or dark.

',1),Bp=g(''),Up=g('
'),Ap=g('
'),zp=g('
'),Ep=g('

Controls how much color is mixed into each palette step. Step 500 is always the source color.

Tints (50–400) — mixed toward surface
Shades (600–950) — mixed toward text
Palette & curve preview

Bar height = mix amount · fill = the resolved primary palette swatch at each step

Mini palettes — all brand colors
',1),Rp=g(''),Tp=g('
Dir
'),Dp=g('
Angle
'),Mp=g('
Stops
default:
'),Np=g('
',1),Fp=g(`

Auto-derived from your brand colors. Use the angle/direction and stop + controls, or edit the raw value for full control.

`,1),jp=g('

--sf-color-scheme — sets the CSS color-scheme property on the root, controlling browser UI (scrollbars, inputs) and default background.

',1),Gp=g('
'),Hp=g('

Direct color overrides for tokens the framework auto-derives. Use for edge cases.

',1),qp=g('
Semantic colors

Live preview — every semantic role on its on-color text, shown in light and dark. Resolved from the canvas, updates as you edit.

All tokens tab — override individual color steps (50–950), semantic aliases, or surface tokens directly.

');function Vp(a,e){$t(e,!0);function o(U,J){return ja.value,vo(U)||J}function n(U,J){ja.value;const ge=lu(U);return ge&&ge!=="none"?ge:J}function l(U,J,ge){return ja.value,ru(U,J)||ge}const i=[{name:"--sf-gradient-primary",label:"Primary",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-primary)",stop2:"oklch(from var(--sf-color-primary) calc(l - 0.08) c h)",formula:"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) calc(l - 0.08) c h))"},{name:"--sf-gradient-secondary",label:"Secondary",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-secondary)",stop2:"oklch(from var(--sf-color-secondary) calc(l - 0.08) c h)",formula:"linear-gradient(in oklch 135deg, var(--sf-color-secondary), oklch(from var(--sf-color-secondary) calc(l - 0.08) c h))"},{name:"--sf-gradient-tertiary",label:"Tertiary",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-tertiary)",stop2:"oklch(from var(--sf-color-tertiary) calc(l - 0.08) c h)",formula:"linear-gradient(in oklch 135deg, var(--sf-color-tertiary), oklch(from var(--sf-color-tertiary) calc(l - 0.08) c h))"},{name:"--sf-gradient-brand",label:"Brand",group:"brand",kind:"angle",space:"oklch",angle:135,dir:"right",stop1:"var(--sf-color-primary)",stop2:"oklch(from var(--sf-color-primary) l c calc(h + 30))",formula:"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) l c calc(h + 30)))"},{name:"--sf-gradient-surface",label:"Surface",group:"brand",kind:"angle",space:"oklab",angle:180,dir:"bottom",stop1:"var(--sf-color-surface)",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklab 180deg, var(--sf-color-surface), var(--sf-color-bg))"},{name:"--sf-gradient-fade--r",label:"Fade →",group:"fade",kind:"dir",space:"oklch",angle:90,dir:"right",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to right, transparent, var(--sf-color-bg))"},{name:"--sf-gradient-fade--l",label:"Fade ←",group:"fade",kind:"dir",space:"oklch",angle:270,dir:"left",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to left, transparent, var(--sf-color-bg))"},{name:"--sf-gradient-fade--t",label:"Fade ↑",group:"fade",kind:"dir",space:"oklch",angle:0,dir:"top",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to top, transparent, var(--sf-color-bg))"},{name:"--sf-gradient-fade--b",label:"Fade ↓",group:"fade",kind:"dir",space:"oklch",angle:180,dir:"bottom",stop1:"transparent",stop2:"var(--sf-color-bg)",formula:"linear-gradient(in oklch to bottom, transparent, var(--sf-color-bg))"}],c=[{key:"primary",label:"Primary"},{key:"secondary",label:"Secondary"},{key:"tertiary",label:"Tertiary"},{key:"action",label:"Action"}],f=[{name:"--sf-color-primary-source-light",label:"Primary",side:"light",default:"oklch(0.47 0.27 264)",colorKey:"primary"},{name:"--sf-color-primary-source-dark",label:"Primary",side:"dark",default:"oklch(0.715 0.243 264)",colorKey:"primary"},{name:"--sf-color-secondary-source-light",label:"Secondary",side:"light",default:"oklch(0.22 0.04 264)",colorKey:"secondary"},{name:"--sf-color-secondary-source-dark",label:"Secondary",side:"dark",default:"oklch(0.84 0.036 264)",colorKey:"secondary"},{name:"--sf-color-tertiary-source-light",label:"Tertiary",side:"light",default:"oklch(0.42 0.22 295)",colorKey:"tertiary"},{name:"--sf-color-tertiary-source-dark",label:"Tertiary",side:"dark",default:"oklch(0.74 0.198 295)",colorKey:"tertiary"},{name:"--sf-color-action-source-light",label:"Action",side:"light",default:"oklch(0.50 0.22 235)",colorKey:"action"},{name:"--sf-color-action-source-dark",label:"Action",side:"dark",default:"oklch(0.70 0.198 235)",colorKey:"action"},{name:"--sf-color-neutral-source-light",label:"Neutral",side:"light",default:"oklch(0.52 0.025 260)",colorKey:"neutral"},{name:"--sf-color-neutral-source-dark",label:"Neutral",side:"dark",default:"oklch(0.69 0.0225 260)",colorKey:"neutral"},{name:"--sf-color-base-source-light",label:"Base",side:"light",default:"oklch(0.96 0.006 250)",colorKey:"base"},{name:"--sf-color-base-source-dark",label:"Base",side:"dark",default:"oklch(0.22 0.003 250)",colorKey:"base"}],p=[{name:"--sf-color-success-source-light",label:"Success",side:"light",default:"oklch(0.50 0.16 145)",colorKey:"success"},{name:"--sf-color-success-source-dark",label:"Success",side:"dark",default:"oklch(0.70 0.144 145)",colorKey:"success"},{name:"--sf-color-warning-source-light",label:"Warning",side:"light",default:"oklch(0.75 0.17 80)",colorKey:"warning"},{name:"--sf-color-warning-source-dark",label:"Warning",side:"dark",default:"oklch(0.65 0.153 80)",colorKey:"warning"},{name:"--sf-color-info-source-light",label:"Info",side:"light",default:"oklch(0.48 0.18 235)",colorKey:"info"},{name:"--sf-color-info-source-dark",label:"Info",side:"dark",default:"oklch(0.71 0.162 235)",colorKey:"info"},{name:"--sf-color-danger-source-light",label:"Danger",side:"light",default:"oklch(0.48 0.22 12)",colorKey:"danger"},{name:"--sf-color-danger-source-dark",label:"Danger",side:"dark",default:"oklch(0.73 0.198 12)",colorKey:"danger"}],m=[{name:"--sf-palette-mix-50",label:"50",step:"tint",default:4},{name:"--sf-palette-mix-100",label:"100",step:"tint",default:8},{name:"--sf-palette-mix-200",label:"200",step:"tint",default:20},{name:"--sf-palette-mix-300",label:"300",step:"tint",default:40},{name:"--sf-palette-mix-400",label:"400",step:"tint",default:65},{name:"--sf-palette-mix-600",label:"600",step:"shade",default:82},{name:"--sf-palette-mix-700",label:"700",step:"shade",default:62},{name:"--sf-palette-mix-800",label:"800",step:"shade",default:38},{name:"--sf-palette-mix-900",label:"900",step:"shade",default:18},{name:"--sf-palette-mix-950",label:"950",step:"shade",default:8}],h=[{label:"Softer",desc:"Low contrast palette",patch:{"--sf-palette-mix-50":"3%","--sf-palette-mix-100":"6%","--sf-palette-mix-200":"14%","--sf-palette-mix-300":"30%","--sf-palette-mix-400":"55%","--sf-palette-mix-600":"72%","--sf-palette-mix-700":"52%","--sf-palette-mix-800":"28%","--sf-palette-mix-900":"12%","--sf-palette-mix-950":"5%"}},{label:"Default",desc:"Balanced contrast",patch:Object.fromEntries(m.map(U=>[U.name,null]))},{label:"Punchy",desc:"High contrast palette",patch:{"--sf-palette-mix-50":"6%","--sf-palette-mix-100":"12%","--sf-palette-mix-200":"28%","--sf-palette-mix-300":"52%","--sf-palette-mix-400":"78%","--sf-palette-mix-600":"90%","--sf-palette-mix-700":"72%","--sf-palette-mix-800":"50%","--sf-palette-mix-900":"26%","--sf-palette-mix-950":"12%"}}],v=[{name:"--sf-color-link",label:"Link"},{name:"--sf-color-link--visited",label:"Link visited"},{name:"--sf-color-mark-bg",label:"Mark background"},{name:"--sf-color-mark-text",label:"Mark text"},{name:"--sf-color-code-bg",label:"Code background"},{name:"--sf-color-code-text",label:"Code text"},{name:"--sf-color-overlay",label:"Overlay"},{name:"--sf-color-black",label:"Black"},{name:"--sf-color-white",label:"White"},{name:"--sf-color-dim",label:"Dim (translucent black)"}],b=["50","100","200","300","400","500","600","700","800","900","950"],k=["primary","secondary","tertiary","action","neutral"],S={50:.97,100:.94,200:.88,300:.78,400:.65,500:.5,600:.37,700:.27,800:.17,900:.11,950:.06},R=[...k,"base"],P=[...f,...p],A=[{heading:"Brand",items:[{name:"--sf-color-primary",label:"Primary",fg:"--sf-color-text--on-primary"},{name:"--sf-color-secondary",label:"Secondary",fg:"--sf-color-text--on-secondary"},{name:"--sf-color-tertiary",label:"Tertiary",fg:"--sf-color-text--on-tertiary"},{name:"--sf-color-action",label:"Action",fg:"--sf-color-text--on-action"},{name:"--sf-color-neutral",label:"Neutral",fg:"--sf-color-text--on-neutral"}]},{heading:"Status",items:[{name:"--sf-color-success",label:"Success",fg:"--sf-color-text--on-success"},{name:"--sf-color-warning",label:"Warning",fg:"--sf-color-text--on-warning"},{name:"--sf-color-info",label:"Info",fg:"--sf-color-text--on-info"},{name:"--sf-color-danger",label:"Danger",fg:"--sf-color-text--on-danger"}]},{heading:"Surfaces & text",items:[{name:"--sf-color-bg",label:"Bg",fg:"--sf-color-text"},{name:"--sf-color-surface",label:"Surface",fg:"--sf-color-text"},{name:"--sf-color-raised",label:"Raised",fg:"--sf-color-text"},{name:"--sf-color-inset",label:"Inset",fg:"--sf-color-text"},{name:"--sf-color-inverse",label:"Inverse",fg:"--sf-color-text--on-inverse"}]}],B=(qo.colors??[]).filter(U=>U.name==="--sf-contrast-bias"||U.name==="--sf-contrast-threshold"),q=(qo.colors??[]).filter(U=>U.name==="--sf-focus-ring-width");let T=K(!1),E=K(!1),C=K(!1),z=K(!1),G=K(!1),O=K(!1),j=K(!1),M=K(!1),Y=K("light"),Oe=ma({}),De=u(()=>parseFloat(e.overrides["--sf-lumlocker"]??"0.65"));function Me(U){const J=U.match(/^linear-gradient\(\s*in\s+(\S+)\s+(to\s+\w+|\d+deg)\s*,(.+)\)$/i);if(!J)return null;const ge=J[1],F=J[2].trim(),Z=F.startsWith("to "),ne=Z?F.slice(3).trim():"right",re=Z?0:parseInt(F);let ve=0,Be=0;const pe=[],ze=J[3];for(let $e=0;$eZ.name===ge)?.default??"";return F?`oklch(from ${F} ${t(De)} c h)`:""}let Ce=K(ma(new Set(P.filter(U=>U.side==="light"&&!((P.find(J=>J.colorKey===U.colorKey&&J.side==="dark")?.name??"")in e.overrides)).map(U=>U.colorKey)))),H=u(()=>{const U={};for(const J of e.tokens)P.some(ge=>ge.name===J.name)&&(U[J.name]=J);return U});function D(U){return U?e.overrides[U.name]??t(H)[U.name]?.value??U.default:""}function ee(U){return P.find(J=>J.name===U)}let le=u(()=>h.find(U=>Object.entries(U.patch).every(([J,ge])=>ge===null?!(J in e.overrides):e.overrides[J]===ge)));function W(U){const J=e.overrides[U.name];return J?parseFloat(J):U.default}const me=[];for(let U=0;Upe.label===J);if(!ne)return U;const re=W(ne),Be=`color-mix(in oklab, ${U} ${re}%, ${Z?ge:F})`;return vo(Be)||Be}function Qe(U,J){ja.value;const ge=S[J];if(ge===void 0)return U;const F=`oklch(from ${U} ${ge} c h)`;return vo(F)||F}function dt(U,J,ge,F,Z){return U==="base"?Qe(J,ge):We(J,ge,F,Z)}function gt(U,J,ge){e.onSet(U.name,ge)}function kt(U,J,ge){const F=!!(J&&J.name in e.overrides);if(t(Ce).has(U)&&!F){const ne=D(P.find(re=>re.name===ge));J&&e.onSet(J.name,he(ne,U)),w(Ce,new Set([...t(Ce)].filter(re=>re!==U)),!0)}else J&&e.onBulkChange({[J.name]:null}),w(Ce,new Set([...t(Ce),U]),!0)}const wt=[{label:"Body text on surface",fg:"var(--sf-color-text)",bg:"var(--sf-color-surface)"},{label:"White on primary",fg:"#ffffff",bg:"var(--sf-color-primary)"},{label:"Primary on surface",fg:"var(--sf-color-primary)",bg:"var(--sf-color-surface)"}];function mt(U,J){ja.value;const ge=Ls(U),F=Ls(J);return!ge||!F?null:Ks(To(...ge),To(...F))}var te=qp(),N=s(te),V=r(s(N),4);oe(V,21,()=>A,U=>U.heading,(U,J)=>{var ge=mp(),F=s(ge),Z=s(F),ne=r(F,2);oe(ne,16,()=>["light","dark"],re=>re,(re,ve)=>{var Be=pp(),pe=s(Be),ze=s(pe),$e=r(pe,2);oe($e,21,()=>t(J).items,Bt=>Bt.name,(Bt,Ut)=>{const pt=u(()=>l(`var(${t(Ut).name})`,ve,"transparent")),et=u(()=>l(`var(${t(Ut).fg})`,ve,"currentColor"));var ht=up(),Ot=r(s(ht),2),He=s(Ot);_(()=>{lt(ht,`background:${t(pt)}; color:${t(et)}`),$(ht,"title",`${t(Ut).name} (${ve}) — ${t(pt)}`),y(He,t(Ut).label)}),d(Bt,ht)}),_(()=>y(ze,ve==="light"?"L":"D")),d(re,Be)}),_(()=>y(Z,t(J).heading)),d(U,ge)});var ue=r(N,4),ye=s(ue),st=r(s(ye),2),Ke=s(st),I=r(ye,2);{var X=U=>{var J=xp(),ge=r(fe(J),2);oe(ge,21,()=>me,([F,Z])=>F.name,(F,Z)=>{var ne=u(()=>Ea(t(Z),2));let re=()=>t(ne)[0],ve=()=>t(ne)[1];const Be=u(()=>!!(ve()&&ve().name in e.overrides)),pe=u(()=>t(Ce).has(re().colorKey)&&!t(Be));var ze=yp(),$e=s(ze),Bt=s($e),Ut=s(Bt),pt=r(Bt,2);{var et=ce=>{var Ee=Wo(),xt=s(Ee);_(()=>{Ve(Ee,1,`text-[8px] px-1.5 py-0.5 rounded border transition-all cursor-pointer ${t(pe)?"border-indigo-500/40 bg-indigo-500/15 text-indigo-300":"border-white/10 text-slate-500 hover:text-slate-300"}`),y(xt,t(pe)?"Auto dark":"Manual dark")}),x("click",Ee,()=>kt(re().colorKey,ve(),re().name)),d(ce,Ee)};L(pt,ce=>{ve()&&ce(et)})}var ht=r($e,2);{let ce=u(()=>`${re().label} (light)`),Ee=u(()=>D(re())),xt=u(()=>re().name in e.overrides);Fs(ht,{get label(){return t(ce)},get tokenName(){return re().name},get value(){return t(Ee)},get overridden(){return t(xt)},onChange:Lt=>gt(re(),ve(),Lt),onReset:()=>e.onReset(re().name)})}var Ot=r(ht,2);{var He=ce=>{const Ee=u(()=>D(re())),xt=u(()=>t(pe)?he(t(Ee),re().colorKey):ve()?D(ve()):t(Ee)),Lt=u(ie),Rt=u(Ue),aa=u(Ne),sa=u(Xe);var Tt=bp(),Re=fe(Tt),Ze=s(Re),Ct=r(s(Ze),2);oe(Ct,20,()=>b,ua=>ua,(ua,ra)=>{const Ra=u(()=>dt(re().colorKey,t(Ee),ra,t(Lt),t(aa)));var Pa=vp();let eo;_(()=>{$(Pa,"title",`${re().colorKey}-${ra} (light) — ${t(Ra)}`),eo=lt(Pa,"",eo,{background:t(Ra)})}),d(ua,Pa)});var It=r(Ze,2),Jt=r(s(It),2);oe(Jt,20,()=>b,ua=>ua,(ua,ra)=>{const Ra=u(()=>dt(re().colorKey,t(xt),ra,t(Rt),t(sa)));var Pa=hp();let eo;_(()=>{$(Pa,"title",`${re().colorKey}-${ra} (dark) — ${t(Ra)}`),eo=lt(Pa,"",eo,{background:t(Ra)})}),d(ua,Pa)});var va=r(Re,2);{var Ua=ua=>{var ra=gp();d(ua,ra)};L(va,ua=>{re().colorKey==="base"&&ua(Ua)})}d(ce,Tt)},qe=u(()=>R.includes(re().colorKey));L(Ot,ce=>{t(qe)&&ce(He)})}var _t=r(Ot,2);{var we=ce=>{{let Ee=u(()=>`${ve().label} (dark mode)`),xt=u(()=>D(ve())),Lt=u(()=>ve().name in e.overrides);Fs(ce,{get label(){return t(Ee)},get tokenName(){return ve().name},get value(){return t(xt)},get overridden(){return t(Lt)},onChange:Rt=>e.onSet(ve().name,Rt),onReset:()=>e.onReset(ve().name)})}},de=ce=>{const Ee=u(()=>he(D(re()),re().colorKey));var xt=Zn(),Lt=s(xt);let Rt;var aa=r(Lt);_(sa=>{$(Lt,"title",t(Ee)),Rt=lt(Lt,"",Rt,sa),y(aa,` Dark: auto-derived (${t(Ee)??""})`)},[()=>({background:o(t(Ee),t(Ee))})]),d(ce,xt)};L(_t,ce=>{ve()&&!t(pe)?ce(we):ve()&&t(pe)&&ce(de,1)})}_(()=>y(Ut,re().label)),d(F,ze)}),d(U,J)};L(I,U=>{t(T)&&U(X)})}var ae=r(ue,4),Pe=s(ae),Te=r(s(Pe),2),ut=s(Te),je=r(Pe,2);{var it=U=>{var J=wp(),ge=r(fe(J),2);{let ve=u(()=>"--sf-lumlocker"in e.overrides);yt(ge,{label:"LumLocker lightness (L)",get value(){return t(De)},min:0,max:1,step:.01,help:"--sf-lumlocker — fixed OKLCH L applied to lockable brand colors under [data-lumlocker]",get overridden(){return t(ve)},onChange:Be=>e.onSet("--sf-lumlocker",String(Be)),onReset:()=>e.onReset("--sf-lumlocker")})}var F=r(ge,2),Z=r(s(F),2);oe(Z,17,()=>c,ve=>ve.key,(ve,Be)=>{var pe=At(),ze=fe(pe);oe(ze,16,()=>["light","dark"],$e=>$e,($e,Bt)=>{const Ut=u(()=>l(`var(--sf-color-${t(Be).key}-source-${Bt})`,Bt,"")),pt=u(()=>Se(t(Be).key,Bt));var et=kp(),ht=s(et),Ot=s(ht),He=r(Ot),qe=s(He),_t=r(ht,2),we=r(_t,4);_(de=>{y(Ot,`${t(Be).label??""} `),y(qe,Bt==="light"?"L":"D"),lt(_t,`background:${t(Ut)||`var(--sf-color-${t(Be).key})`}`),lt(we,de),$(we,"title",t(pt))},[()=>`background:${o(t(pt),t(pt))}`]),d($e,et)}),d(ve,pe)});var ne=r(F,2),re=s(ne);_(()=>{Ve(ne,1,`w-full py-2 rounded-lg text-[10px] font-bold border transition-all cursor-pointer ${Xo.value?"bg-indigo-600/25 border-indigo-500/40 text-indigo-200":"border-white/10 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(re,Xo.value?"✓ LumLocker active on canvas — click to disable":"Preview LumLocker on live canvas")}),x("click",ne,()=>{Xo.value=!Xo.value}),d(U,J)};L(je,U=>{t(M)&&U(it)})}var at=r(ae,4),ft=s(at),Ge=r(s(ft),2),Pt=s(Ge),jt=r(ft,2);{var ta=U=>{var J=Sp(),ge=r(fe(J),2);oe(ge,21,()=>ke,([F,Z])=>F.name,(F,Z)=>{var ne=u(()=>Ea(t(Z),2));let re=()=>t(ne)[0],ve=()=>t(ne)[1];const Be=u(()=>!!(ve()&&ve().name in e.overrides)),pe=u(()=>t(Ce).has(re().colorKey)&&!t(Be));var ze=Op(),$e=s(ze),Bt=s($e),Ut=s(Bt),pt=r(Bt,2);{var et=we=>{var de=Wo(),ce=s(de);_(()=>{Ve(de,1,`text-[8px] px-1.5 py-0.5 rounded border transition-all cursor-pointer ${t(pe)?"border-indigo-500/40 bg-indigo-500/15 text-indigo-300":"border-white/10 text-slate-500 hover:text-slate-300"}`),y(ce,t(pe)?"Auto dark":"Manual dark")}),x("click",de,()=>kt(re().colorKey,ve(),re().name)),d(we,de)};L(pt,we=>{ve()&&we(et)})}var ht=r($e,2);{let we=u(()=>`${re().label} light`),de=u(()=>D(re())),ce=u(()=>re().name in e.overrides);Fs(ht,{get label(){return t(we)},get tokenName(){return re().name},get value(){return t(de)},get overridden(){return t(ce)},onChange:Ee=>e.onSet(re().name,Ee),onReset:()=>e.onReset(re().name)})}var Ot=r(ht,2);{var He=we=>{{let de=u(()=>`${ve().label} dark`),ce=u(()=>D(ve())),Ee=u(()=>ve().name in e.overrides);Fs(we,{get label(){return t(de)},get tokenName(){return ve().name},get value(){return t(ce)},get overridden(){return t(Ee)},onChange:xt=>e.onSet(ve().name,xt),onReset:()=>e.onReset(ve().name)})}},qe=we=>{const de=u(()=>he(D(re()),re().colorKey));var ce=Zn(),Ee=s(ce);let xt;var Lt=r(Ee);_(Rt=>{$(Ee,"title",t(de)),xt=lt(Ee,"",xt,Rt),y(Lt,` Dark: auto-derived (${t(de)??""})`)},[()=>({background:o(t(de),t(de))})]),d(we,ce)};L(Ot,we=>{ve()&&!t(pe)?we(He):ve()&&t(pe)&&we(qe,1)})}var _t=r(Ot,2);oe(_t,21,()=>[["L","light",D(re()),ie(),Ne()],["D","dark",t(pe)?he(D(re()),re().colorKey):ve()?D(ve()):D(re()),Ue(),Xe()]],([we,de,ce,Ee,xt])=>we,(we,de)=>{var ce=u(()=>Ea(t(de),5));let Ee=()=>t(ce)[0],xt=()=>t(ce)[1],Lt=()=>t(ce)[2],Rt=()=>t(ce)[3],aa=()=>t(ce)[4];var sa=Cp(),Tt=s(sa),Re=s(Tt),Ze=r(Tt,2);oe(Ze,20,()=>b,Ct=>Ct,(Ct,It)=>{const Jt=u(()=>We(Lt(),It,Rt(),aa()));var va=_p();let Ua;_(()=>{$(va,"title",`${re().colorKey}-${It} (${xt()}) — ${t(Jt)}`),Ua=lt(va,"",Ua,{background:t(Jt)})}),d(Ct,va)}),_(()=>y(Re,Ee())),d(we,sa)}),_(()=>y(Ut,re().label)),d(F,ze)}),d(U,J)};L(jt,U=>{t(z)&&U(ta)})}var Dt=r(at,4),zt=s(Dt),ia=r(s(zt),2),ca=s(ia),da=r(zt,2);{var _e=U=>{var J=Ip(),ge=r(fe(J),2);oe(ge,17,()=>B,Be=>Be.name,(Be,pe)=>{Vo(Be,{get knob(){return t(pe)},get overrides(){return e.overrides},onChange:(ze,$e)=>$e===null?e.onReset(ze):e.onSet(ze,$e)})});var F=r(ge,2),Z=s(F);oe(Z,17,()=>wt,Be=>Be.label,(Be,pe)=>{const ze=u(()=>mt(t(pe).fg,t(pe).bg));var $e=At(),Bt=fe($e);{var Ut=pt=>{var et=Lp(),ht=s(et),Ot=r(ht,2),He=s(Ot),qe=r(Ot,2),_t=s(qe),we=r(qe,2),de=s(we);_((ce,Ee)=>{lt(ht,ce),y(He,t(pe).label),y(_t,`${Ee??""}:1`),Ve(we,1,`text-[9px] font-bold px-1.5 py-0.5 rounded ${t(ze)>=4.5?"bg-emerald-500/20 text-emerald-300":"bg-amber-500/20 text-amber-300"}`),y(de,t(ze)>=4.5?"AA":t(ze)>=3?"AA-L":"✗")},[()=>`background:${o(t(pe).bg,t(pe).bg)}; color:${o(t(pe).fg,t(pe).fg)}`,()=>t(ze).toFixed(2)]),d(pt,et)};L(Bt,pt=>{t(ze)!==null&&pt(Ut)})}d(Be,$e)});var ne=r(Z,2);{var re=Be=>{var pe=Pp();x("click",pe,()=>e.onSelectDomain?.("wcag")),d(Be,pe)};L(ne,Be=>{e.onSelectDomain&&Be(re)})}var ve=r(F,2);oe(ve,17,()=>q,Be=>Be.name,(Be,pe)=>{Vo(Be,{get knob(){return t(pe)},get overrides(){return e.overrides},onChange:(ze,$e)=>$e===null?e.onReset(ze):e.onSet(ze,$e)})}),d(U,J)};L(da,U=>{t(E)&&U(_e)})}var bt=r(Dt,4),Et=s(bt),Je=r(s(Et),2),St=s(Je),ot=r(Et,2);{var rt=U=>{const J=u(()=>e.overrides["--sf-color-primary-source-light"]??f.find(ce=>ce.name==="--sf-color-primary-source-light")?.default??"oklch(0.47 0.27 264)"),ge=u(()=>e.overrides["--sf-color-primary-source-dark"]),F=u(()=>t(ge)??(!t(Ce).has("primary")||t(ge)?f.find(ce=>ce.name==="--sf-color-primary-source-dark")?.default??he(t(J),"primary"):he(t(J),"primary"))),Z=u(()=>t(Y)==="light"?t(J):t(F)),ne=u(()=>t(Y)==="light"?ie():Ue()),re=u(()=>t(Y)==="light"?Ne():Xe()),ve=u(()=>t(Y)==="light"?ie():Ue()),Be=u(()=>t(Y)==="light"?Ne():Xe());var pe=Ep(),ze=r(fe(pe),2);oe(ze,21,()=>h,ce=>ce.label,(ce,Ee)=>{var xt=Bp(),Lt=s(xt),Rt=s(Lt),aa=r(Lt,2),sa=s(aa);_(()=>{Ve(xt,1,`flex flex-col items-center gap-0.5 p-2.5 rounded-xl border transition-all cursor-pointer ${t(le)?.label===t(Ee).label?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Rt,t(Ee).label),y(sa,t(Ee).desc)}),x("click",xt,()=>e.onBulkChange(t(Ee).patch)),d(ce,xt)});var $e=r(ze,2),Bt=r(s($e),2);oe(Bt,21,()=>m.filter(ce=>ce.step==="tint"),ce=>ce.name,(ce,Ee)=>{{let xt=u(()=>W(t(Ee))),Lt=u(()=>t(Ee).name in e.overrides);yt(ce,{get label(){return t(Ee).label},get value(){return t(xt)},min:0,max:100,step:1,unit:"%",get overridden(){return t(Lt)},onChange:Rt=>e.onSet(t(Ee).name,`${Rt}%`),onReset:()=>e.onReset(t(Ee).name)})}});var Ut=r($e,2),pt=r(s(Ut),2);oe(pt,21,()=>m.filter(ce=>ce.step==="shade"),ce=>ce.name,(ce,Ee)=>{{let xt=u(()=>W(t(Ee))),Lt=u(()=>t(Ee).name in e.overrides);yt(ce,{get label(){return t(Ee).label},get value(){return t(xt)},min:0,max:100,step:1,unit:"%",get overridden(){return t(Lt)},onChange:Rt=>e.onSet(t(Ee).name,`${Rt}%`),onReset:()=>e.onReset(t(Ee).name)})}});var et=r(Ut,2),ht=s(et),Ot=r(s(ht),2);oe(Ot,20,()=>["light","dark"],ce=>ce,(ce,Ee)=>{var xt=Wo(),Lt=s(xt);_(()=>{Ve(xt,1,`px-1.5 py-0.5 rounded text-[8px] font-bold cursor-pointer transition-all ${t(Y)===Ee?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(Lt,Ee==="light"?"Light":"Dark")}),x("click",xt,()=>{w(Y,Ee,!0)}),d(ce,xt)});var He=r(ht,2);oe(He,21,()=>m,ce=>ce.name,(ce,Ee)=>{const xt=u(()=>W(t(Ee))),Lt=u(()=>t(Ee).label),Rt=u(()=>We(t(Z),t(Lt),t(ne),t(re)));var aa=Up(),sa=s(aa),Tt=s(sa),Re=r(sa,2),Ze=r(Re,2),Ct=s(Ze);_((It,Jt,va)=>{y(Tt,It),lt(Re,Jt),$(Re,"title",va),y(Ct,t(Lt))},[()=>Math.round(t(xt)),()=>`background:${t(Rt)}; height: ${Math.max(t(xt)/100*56,6)}px`,()=>`primary-${t(Lt)} (${t(Y)}) · mix ${Math.round(t(xt))}%`]),d(ce,aa)});var qe=r(et,2),_t=s(qe),we=r(s(_t),2);oe(we,20,()=>["light","dark"],ce=>ce,(ce,Ee)=>{var xt=Wo(),Lt=s(xt);_(()=>{Ve(xt,1,`px-1.5 py-0.5 rounded text-[8px] font-bold cursor-pointer transition-all ${t(Y)===Ee?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(Lt,Ee==="light"?"Light":"Dark")}),x("click",xt,()=>{w(Y,Ee,!0)}),d(ce,xt)});var de=r(_t,2);oe(de,16,()=>k,ce=>ce,(ce,Ee)=>{const xt=u(()=>e.overrides[`--sf-color-${Ee}-source-light`]??f.find(Ct=>Ct.name===`--sf-color-${Ee}-source-light`)?.default??"oklch(0.5 0.15 264)"),Lt=u(()=>`--sf-color-${Ee}-source-dark`),Rt=u(()=>e.overrides[t(Lt)]??(t(Ce).has(Ee)&&!e.overrides[t(Lt)]?he(t(xt),Ee):f.find(Ct=>Ct.name===t(Lt))?.default??he(t(xt),Ee))),aa=u(()=>t(Y)==="light"?t(xt):t(Rt));var sa=zp(),Tt=s(sa),Re=s(Tt),Ze=r(Tt,2);oe(Ze,20,()=>b,Ct=>Ct,(Ct,It)=>{const Jt=u(()=>We(t(aa),It,t(ve),t(Be)));var va=Ap();_(()=>{lt(va,`background:${t(Jt)}`),$(va,"title",`${Ee}-${It} (${t(Y)})`)}),d(Ct,va)}),_(()=>y(Re,Ee)),d(ce,sa)}),d(U,pe)};L(ot,U=>{t(C)&&U(rt)})}var Gt=r(bt,4),Mt=s(Gt),Nt=r(s(Mt),2),Vt=s(Nt),Wt=r(Mt,2);{var fa=U=>{var J=Fp(),ge=r(fe(J),2);oe(ge,16,()=>["brand","fade"],F=>F,(F,Z)=>{var ne=Np(),re=fe(ne),ve=s(re),Be=r(re,2);oe(Be,21,()=>i.filter(pe=>pe.group===Z),pe=>pe.name,(pe,ze)=>{const $e=u(()=>`var(${t(ze).name})`),Bt=u(()=>be(t(ze)));var Ut=Mp(),pt=s(Ut),et=r(pt,2),ht=s(et),Ot=s(ht),He=s(Ot),qe=r(Ot,2);{var _t=Tt=>{var Re=Rp();x("click",Re,()=>{delete Oe[t(ze).name],e.onReset(t(ze).name)}),d(Tt,Re)};L(qe,Tt=>{t(ze).name in e.overrides&&Tt(_t)})}var we=r(ht,2);{var de=Tt=>{var Re=Tp(),Ze=r(s(Re),2);oe(Ze,16,()=>["top","right","bottom","left"],Ct=>Ct,(Ct,It)=>{var Jt=Wo(),va=s(Jt);_(()=>{Ve(Jt,1,`flex-1 py-0.5 rounded text-[9px] border transition-all cursor-pointer capitalize ${t(Bt).dir===It?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5"}`),y(va,It)}),x("click",Jt,()=>se(t(ze),"dir",It)),d(Ct,Jt)}),d(Tt,Re)},ce=Tt=>{var Re=Dp(),Ze=r(s(Re),2),Ct=r(Ze,2),It=s(Ct);_(()=>{Xt(Ze,t(Bt).angle),y(It,`${t(Bt).angle??""}°`)}),x("input",Ze,Jt=>se(t(ze),"angle",parseInt(Jt.target.value))),d(Tt,Re)};L(we,Tt=>{t(ze).kind==="dir"&&t(ze).group!=="fade"?Tt(de):t(ze).kind!=="dir"&&Tt(ce,1)})}var Ee=r(we,2),xt=r(s(Ee),2),Lt=r(xt,2),Rt=r(Ee,2),aa=r(s(Rt)),sa=r(Rt,2);_(Tt=>{lt(pt,Tt),y(He,t(ze).label),Xt(xt,t(Bt).stop1),Xt(Lt,t(Bt).stop2),y(aa,` ${t(ze).formula??""}`),Xt(sa,e.overrides[t(ze).name]??"")},[()=>`background:${n(t($e),t($e))}`]),x("change",xt,Tt=>se(t(ze),"stop1",Tt.target.value.trim())),x("change",Lt,Tt=>se(t(ze),"stop2",Tt.target.value.trim())),x("change",sa,Tt=>{const Re=Tt.target.value.trim();delete Oe[t(ze).name],Re?e.onSet(t(ze).name,Re):e.onReset(t(ze).name)}),d(pe,Ut)}),_(()=>y(ve,Z==="brand"?"Brand & surface":"Edge fades")),d(F,ne)}),d(U,J)};L(Wt,U=>{t(j)&&U(fa)})}var La=r(Gt,4),ka=s(La),Va=r(s(ka),2),vt=s(Va),Ie=r(ka,2);{var Ye=U=>{var J=jp(),ge=r(fe(J),2);oe(ge,20,()=>[["light dark","light dark (default)"],["light","Light only"],["dark","Dark only"]],([F,Z])=>F,(F,Z)=>{var ne=u(()=>Ea(Z,2));let re=()=>t(ne)[0],ve=()=>t(ne)[1];const Be=u(()=>e.overrides["--sf-color-scheme"]??"light dark");var pe=Wo(),ze=s(pe);_(()=>{Ve(pe,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer ${t(Be)===re()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(ze,ve())}),x("click",pe,()=>re()==="light dark"?e.onReset("--sf-color-scheme"):e.onSet("--sf-color-scheme",re())),d(F,pe)}),d(U,J)};L(Ie,U=>{t(O)&&U(Ye)})}var nt=r(La,4),Le=s(nt),Fe=r(s(Le),2),ct=s(Fe),tt=r(Le,2);{var Ae=U=>{var J=Hp(),ge=r(fe(J),2);oe(ge,21,()=>v,F=>F.name,(F,Z)=>{const ne=u(()=>o(`var(${t(Z).name})`,""));var re=Gp(),ve=s(re),Be=s(ve),pe=r(ve,2);{let ze=u(()=>e.overrides[t(Z).name]??""),$e=u(()=>t(ne)?`auto-derived · ${t(ne)}`:"auto-derived"),Bt=u(()=>t(Z).name in e.overrides);Ja(pe,{get token(){return t(Z).name},get value(){return t(ze)},get placeholder(){return t($e)},get isOverridden(){return t(Bt)},onSet:Ut=>e.onSet(t(Z).name,Ut),onReset:()=>e.onReset(t(Z).name)})}_(()=>y(Be,t(Z).label)),d(F,re)}),d(U,J)};L(tt,U=>{t(G)&&U(Ae)})}_(()=>{$(ye,"aria-expanded",t(T)),y(Ke,t(T)?"▲":"▼"),$(Pe,"aria-expanded",t(M)),y(ut,t(M)?"▲":"▼"),$(ft,"aria-expanded",t(z)),y(Pt,t(z)?"▲":"▼"),$(zt,"aria-expanded",t(E)),y(ca,t(E)?"▲":"▼"),$(Et,"aria-expanded",t(C)),y(St,t(C)?"▲":"▼"),$(Mt,"aria-expanded",t(j)),y(Vt,t(j)?"▲":"▼"),$(ka,"aria-expanded",t(O)),y(vt,t(O)?"▲":"▼"),$(Le,"aria-expanded",t(G)),y(ct,t(G)?"▲":"▼")}),x("click",ye,()=>{w(T,!t(T))}),x("click",Pe,()=>{w(M,!t(M))}),x("click",ft,()=>{w(z,!t(z))}),x("click",zt,()=>{w(E,!t(E))}),x("click",Et,()=>{w(C,!t(C))}),x("click",Mt,()=>{w(j,!t(j))}),x("click",ka,()=>{w(O,!t(O))}),x("click",Le,()=>{w(G,!t(G))}),d(a,te),ea()}oa(["click","input","change"]);var Kp=g('
Aa Aa
'),Wp=g('
min
max
'),Yp=g(''),Zp=g(''),Xp=g('
'),Jp=g('
Modular scale ratio
'),Qp=g('
'),$p=g('
clamp( )
');function Ps(a,e){$t(e,!0);let o=Oa(e,"unit",3,"rem"),n=Oa(e,"minLabel",3,"Min"),l=Oa(e,"maxLabel",3,"Max"),i=Oa(e,"overridden",3,!1),c=Oa(e,"ratioMin_bound",3,1.05),f=Oa(e,"ratioMax_bound",3,1.8),p=Oa(e,"previewKind",3,"none");function m(ie){return Math.min(e.max,Math.max(e.min,ie))}let h=u(()=>(e.minValue-e.min)/(e.max-e.min)*100),v=u(()=>(e.maxValue-e.min)/(e.max-e.min)*100);function b(ie){return Math.min(f(),Math.max(c(),ie))}let k=u(()=>e.ratioPresets?.find(ie=>e.ratioMin!==void 0&&Math.abs(ie.value-e.ratioMin)<.0015)?.value),S=u(()=>e.ratioPresets?.find(ie=>e.ratioMax!==void 0&&Math.abs(ie.value-e.ratioMax)<.0015)?.value);var R=$p(),P=s(R),A=s(P),B=s(A),q=r(A,2),T=r(s(q)),E=s(T),C=r(T,2),z=s(C),G=r(P,2),O=r(s(G),2),j=r(O,2),M=r(j,2),Y=r(M,2),Oe=r(Y,2),De=r(G,2),Me=s(De),xe=s(Me),be=s(xe),Q=r(xe,2),se=r(Me,2),Se=s(se),Ce=s(Se),H=r(Se,2),D=r(De,2);{var ee=ie=>{var Ue=Kp(),Ne=s(Ue),Xe=r(s(Ne)),We=s(Xe),Qe=r(Ne,2),dt=r(s(Qe)),gt=s(dt);_((kt,wt,mt,te)=>{lt(Ne,kt),y(We,wt),lt(Qe,mt),y(gt,te)},[()=>`font-size:${Math.min(e.minValue,2)}rem`,()=>n().toLowerCase(),()=>`font-size:${Math.min(e.maxValue,2.6)}rem`,()=>l().toLowerCase()]),d(ie,Ue)},le=ie=>{var Ue=Wp(),Ne=s(Ue),Xe=r(Ne,4);_((We,Qe)=>{lt(Ne,We),lt(Xe,Qe)},[()=>`width:${Math.min(e.minValue*28,120)}px`,()=>`width:${Math.min(e.maxValue*28,200)}px`]),d(ie,Ue)};L(D,ie=>{p()==="type"?ie(ee):p()==="space"&&ie(le,1)})}var W=r(D,2);{var me=ie=>{var Ue=Jp(),Ne=r(s(Ue),2);oe(Ne,21,()=>[{side:n(),value:e.ratioMin,active:t(k),onChange:e.onRatioMinChange},{side:l(),value:e.ratioMax,active:t(S),onChange:e.onRatioMaxChange}],Xe=>Xe.side,(Xe,We)=>{var Qe=Xp(),dt=s(Qe),gt=s(dt),kt=r(dt,2),wt=s(kt);{var mt=ue=>{var ye=Yp();ye.value=ye.__value="",d(ue,ye)};L(wt,ue=>{t(We).active===void 0&&ue(mt)})}var te=r(wt);oe(te,17,()=>e.ratioPresets,ue=>ue.value,(ue,ye)=>{var st=Zp(),Ke=s(st),I={};_(X=>{y(Ke,t(ye).label),I!==(I=X)&&(st.value=(st.__value=X)??"")},[()=>String(t(ye).value)]),d(ue,st)});var N;Da(kt);var V=r(kt,2);$(V,"step",.001),_(ue=>{y(gt,t(We).side),$(kt,"aria-label",`${t(We).side} modular scale ratio preset`),N!==(N=ue)&&(kt.value=(kt.__value=ue)??"",Ia(kt,ue)),$(V,"aria-label",`${t(We).side} modular scale custom ratio`),$(V,"min",c()),$(V,"max",f()),Xt(V,t(We).value)},[()=>t(We).active!==void 0?String(t(We).active):""]),x("change",kt,ue=>{const ye=parseFloat(ue.target.value);Number.isFinite(ye)&&t(We).onChange?.(b(ye))}),x("change",V,ue=>{const ye=parseFloat(ue.target.value);Number.isFinite(ye)&&t(We).onChange?.(b(ye))}),d(Xe,Qe)}),d(ie,Ue)};L(W,ie=>{e.ratioPresets&&ie(me)})}var ke=r(W,2);{var he=ie=>{var Ue=Qp(),Ne=s(Ue);x("click",Ne,function(...Xe){e.onReset?.apply(this,Xe)}),d(ie,Ue)};L(ke,ie=>{i()&&e.onReset&&ie(he)})}_(ie=>{Ve(R,1,`rounded-xl border p-3 ${i()?"bg-indigo-500/8 border-indigo-500/25":"bg-white/4 border-white/8"}`,"svelte-iy59wr"),y(B,e.title),y(E,`${e.minValue??""}${o()??""}`),y(z,`${e.maxValue??""}${o()??""}`),lt(O,ie),$(j,"min",e.min),$(j,"max",e.max),$(j,"step",e.step),Xt(j,e.minValue),$(j,"aria-label",`${e.title} min`),$(M,"min",e.min),$(M,"max",e.max),$(M,"step",e.step),Xt(M,e.maxValue),$(M,"aria-label",`${e.title} max`),lt(Y,`left: calc(${t(h)}% - 6px)`),lt(Oe,`left: calc(${t(v)}% - 6px)`),y(be,n()),$(Q,"min",e.min),$(Q,"max",e.max),$(Q,"step",e.step),Xt(Q,e.minValue),y(Ce,l()),$(H,"min",e.min),$(H,"max",e.max),$(H,"step",e.step),Xt(H,e.maxValue)},[()=>`left:${Math.min(t(h),t(v))}%; right:${100-Math.max(t(h),t(v))}%`]),x("input",j,ie=>e.onMinChange(Math.min(m(parseFloat(ie.target.value)),e.maxValue))),x("input",M,ie=>e.onMaxChange(Math.max(m(parseFloat(ie.target.value)),e.minValue))),x("change",Q,ie=>e.onMinChange(m(parseFloat(ie.target.value)||e.min))),x("change",H,ie=>e.onMaxChange(m(parseFloat(ie.target.value)||e.max))),d(a,R),ea()}oa(["input","change","click"]);var em=g(''),bs=g(''),Ir=g(''),tm=g('
'),am=g('
Google Font
',1),om=g(''),sm=g(""),Br=g(''),Ao=g(""),rm=g('
Tracking
'),nm=g('
Max width
'),lm=g(''),im=g('
The quick brown fox
Size
Line height
Weight
',1),Xn=g(''),Jn=g('
'),cm=g(""),dm=g('
'),fm=g('
Emphasis style
External marker
',1),Qn=g(''),um=g('
'),pm=g('

Named weight tokens. Override if your font uses non-standard axis values.

',1),mm=g('
'),vm=g('
',1),hm=g('
'),gm=g('
'),bm=g(`

Utopia-style fluid scale. Each endpoint has three values — viewport width, + base size, and modular ratio. Sizes interpolate fluidly between mobile and desktop.

Line height scale
Letter-spacing scale

Overriding these propagates to heading sizes that reference them.

`,1),ym=g('
Aa
'),xm=g('
'),Ur=g(''),km=g('
'),wm=g('

Per-text-size max-width caps on .sf-text-* elements. Set to none to remove the constraint; use ch units for character-based measures.

',1),_m=g('

Advanced OpenType and variable-font axes. Leave as normal unless your font supports these features.

Numeric figures
Optical sizing
Font features
Variation
',1),Cm=g('
');function Om(a,e){$t(e,!0);const o=[{label:"Minor Second — 1.067",value:1.067},{label:"Major Second — 1.125",value:1.125},{label:"Minor Third — 1.200",value:1.2},{label:"Major Third — 1.250",value:1.25},{label:"Perfect Fourth — 1.333",value:1.333},{label:"Aug. Fourth — 1.414",value:1.414},{label:"Golden — 1.618",value:1.618}],n=[{label:"System sans-serif",value:""},{label:"Geometric (Avenir, Montserrat…)",value:"var(--sf-font-geometric)"},{label:"Humanist (Seravek, Gill Sans…)",value:"var(--sf-font-humanist)"},{label:"Slab serif (Rockwell, Roboto Slab…)",value:"var(--sf-font-slab)"},{label:"Inter",value:"Inter, system-ui, sans-serif"},{label:"Georgia (serif)",value:"Georgia, 'Times New Roman', serif"},{label:"Merriweather (serif)",value:"'Merriweather', Georgia, serif"},{label:"JetBrains Mono",value:"'JetBrains Mono', 'Fira Code', monospace"}],l=[{label:"Same as body",value:""},{label:"Geometric (Avenir, Montserrat…)",value:"var(--sf-font-geometric)"},{label:"Humanist (Seravek, Gill Sans…)",value:"var(--sf-font-humanist)"},{label:"Slab serif (Rockwell, Roboto Slab…)",value:"var(--sf-font-slab)"},{label:"Inter",value:"Inter, system-ui, sans-serif"},{label:"Georgia (serif)",value:"Georgia, 'Times New Roman', serif"},{label:"Impact / condensed",value:"Impact, 'Arial Narrow', sans-serif"}],i=[{label:"System mono",value:"ui-monospace, monospace"},{label:"JetBrains Mono",value:"'JetBrains Mono', 'Fira Code', monospace"},{label:"Source Code Pro",value:"'Source Code Pro', 'Courier New', monospace"}],c=["Inter","Roboto","Open Sans","Lato","Montserrat","Poppins","Source Sans 3","Raleway","Nunito","Work Sans","Manrope","DM Sans","Outfit","Plus Jakarta Sans","Geist","Space Grotesk","Figtree","Merriweather","Playfair Display","Lora","Source Serif 4","Roboto Slab","IBM Plex Sans","IBM Plex Mono","JetBrains Mono","Fira Code","Space Mono"],f=[{label:"balance",value:"balance"},{label:"pretty",value:"pretty"},{label:"normal",value:"normal"}],p=["100","200","300","400","500","600","700","800","900"],m={"--sf-font-weight-body":"400","--sf-font-weight-heading":"600","--sf-font-weight-display":"700","--sf-font-weight-interactive":"600"},h=[{label:"2xs",factor:.64},{label:"xs",factor:.75},{label:"s",factor:.875},{label:"m",factor:1},{label:"l",factor:1.125},{label:"xl",factor:1.25},{label:"2xl",factor:1.5},{label:"3xl",factor:1.875},{label:"4xl",factor:2.25}],v=[{label:"Tight",token:"--sf-tracking-tight",default:-.025},{label:"Normal",token:"--sf-tracking-normal",default:0},{label:"Wide",token:"--sf-tracking-wide",default:.025},{label:"Wider",token:"--sf-tracking-wider",default:.05},{label:"Widest",token:"--sf-tracking-widest",default:.1}],b=[{label:"Tight",token:"--sf-leading-tight",default:1.1},{label:"Snug",token:"--sf-leading-snug",default:1.3},{label:"Normal",token:"--sf-leading-normal",default:1.5},{label:"Relaxed",token:"--sf-leading-relaxed",default:1.625}],k=[{label:"2xs",value:"var(--sf-text-2xs)",approx:.64},{label:"xs",value:"var(--sf-text-xs)",approx:.75},{label:"s",value:"var(--sf-text-s)",approx:.875},{label:"m",value:"var(--sf-text-m)",approx:1},{label:"l",value:"var(--sf-text-l)",approx:1.125},{label:"xl",value:"var(--sf-text-xl)",approx:1.25},{label:"2xl",value:"var(--sf-text-2xl)",approx:1.5},{label:"3xl",value:"var(--sf-text-3xl)",approx:1.875},{label:"4xl",value:"var(--sf-text-4xl)",approx:2.25},{label:"display-s",value:"var(--sf-text-display-s)",approx:2.6},{label:"display-m",value:"var(--sf-text-display-m)",approx:3.2},{label:"display-l",value:"var(--sf-text-display-l)",approx:3.8}],S=b.map(F=>({label:F.label,value:`var(${F.token})`,num:F.default})),R=v.map(F=>({label:F.label,value:`var(${F.token})`,em:F.default})),P=[{id:"body",label:"Body",size:"--sf-body-font-size",lh:"--sf-body-line-height",wt:"--sf-body-font-weight",ls:null,dSize:"var(--sf-text-m)",dLh:"var(--sf-leading-normal)",dWt:"400",dLs:""},{id:"h1",label:"H1",size:"--sf-h1-size",lh:"--sf-h1-line-height",wt:"--sf-h1-font-weight",ls:"--sf-h1-letter-spacing",dSize:"var(--sf-text-4xl)",dLh:"var(--sf-leading-tight)",dWt:"600",dLs:"var(--sf-tracking-tight)"},{id:"h2",label:"H2",size:"--sf-h2-size",lh:"--sf-h2-line-height",wt:"--sf-h2-font-weight",ls:"--sf-h2-letter-spacing",dSize:"var(--sf-text-3xl)",dLh:"var(--sf-leading-tight)",dWt:"600",dLs:"var(--sf-tracking-tight)"},{id:"h3",label:"H3",size:"--sf-h3-size",lh:"--sf-h3-line-height",wt:"--sf-h3-font-weight",ls:"--sf-h3-letter-spacing",dSize:"var(--sf-text-2xl)",dLh:"var(--sf-leading-snug)",dWt:"600",dLs:"var(--sf-tracking-normal)"},{id:"h4",label:"H4",size:"--sf-h4-size",lh:"--sf-h4-line-height",wt:"--sf-h4-font-weight",ls:"--sf-h4-letter-spacing",dSize:"var(--sf-text-xl)",dLh:"var(--sf-leading-snug)",dWt:"600",dLs:"var(--sf-tracking-normal)"},{id:"h5",label:"H5",size:"--sf-h5-size",lh:"--sf-h5-line-height",wt:"--sf-h5-font-weight",ls:"--sf-h5-letter-spacing",dSize:"var(--sf-text-l)",dLh:"var(--sf-leading-normal)",dWt:"600",dLs:"var(--sf-tracking-normal)"},{id:"h6",label:"H6",size:"--sf-h6-size",lh:"--sf-h6-line-height",wt:"--sf-h6-font-weight",ls:"--sf-h6-letter-spacing",dSize:"var(--sf-text-m)",dLh:"var(--sf-leading-normal)",dWt:"600",dLs:"var(--sf-tracking-wide)"}];let A=K("h1"),B=u(()=>P.find(F=>F.id===t(A)));const q=qo.typography??[];function T(F,Z){const ne=parseFloat(e.overrides[F]??"");return isNaN(ne)?Z:ne}let E=u(()=>T("--sf-text-ratio-min",1.25)),C=u(()=>T("--sf-text-ratio-max",1.333)),z=u(()=>T("--sf-text-base-min",1)),G=u(()=>T("--sf-text-base-max",1.25)),O=u(()=>T("--sf-text-display-base-min",2.4)),j=u(()=>T("--sf-text-display-base-max",3)),M=u(()=>T("--sf-leading-taper",0)),Y=u(()=>T("--sf-text-scale",1)),Oe=u(()=>T("--sf-fluid-min-vw",22.5)),De=u(()=>T("--sf-fluid-max-vw",90)),Me=K(!1),xe=K(!1),be=K(!1),Q=K(!1),se=K(!1),Se=K(!1),Ce=K(!1),H=K(!1),D=K(!1),ee=K(!1),le=u(()=>e.overrides["--sf-font-body"]??""),W=u(()=>e.overrides["--sf-font-heading"]??""),me=u(()=>e.overrides["--sf-font-mono"]??"ui-monospace, monospace"),ke=K(""),he=K("body");function ie(F){const Z=e.overrides[F.token];return Z?parseFloat(Z.replace("em","")):F.default}function Ue(F){return T(F.token,F.default)}function Ne(F){if(!F.trim())return;const Z=`gf-${F.replace(/\s+/g,"-")}`;if(!document.getElementById(Z)){const ne=document.createElement("link");ne.id=Z,ne.rel="stylesheet",ne.href=`https://fonts.googleapis.com/css2?family=${encodeURIComponent(F)}:wght@100;200;300;400;500;600;700;800;900&display=swap`,document.head.appendChild(ne)}}function Xe(F,Z){if(!F.trim())return;Ne(F);const ne=Z==="body"?"--sf-font-body":"--sf-font-heading";e.onSet(ne,`'${F}', sans-serif`)}function We(F,Z){return F?e.overrides[F]??Z:Z}function Qe(F,Z,ne){F&&(Z===ne?e.onReset(F):e.onSet(F,Z))}let dt=u(()=>{const F=We(t(B).size,t(B).dSize),Z=k.find(re=>re.value===F),ne=(t(z)+t(G))/2;return Math.min((Z?.approx??1)*ne*t(Y),2.4)}),gt=u(()=>{const F=We(t(B).wt,t(B).dWt),Z=parseInt(F);return isNaN(Z)?600:Z}),kt=u(()=>{if(!t(B).ls)return 0;const F=We(t(B).ls,t(B).dLs),Z=R.find(re=>re.value===F);if(Z)return Z.em;const ne=parseFloat(F.replace("em",""));return isNaN(ne)?0:ne}),wt=u(()=>{const F=We(t(B).lh,t(B).dLh),Z=S.find(re=>re.value===F);if(Z)return Z.num;const ne=parseFloat(F);return isNaN(ne)?1.3:ne});var mt=Cm(),te=s(mt),N=s(te),V=r(s(N),2),ue=s(V),ye=r(N,2);{var st=F=>{var Z=am(),ne=fe(Z);oe(ne,17,()=>[{label:"Body",token:"--sf-font-body",current:t(le),opts:n},{label:"Heading",token:"--sf-font-heading",current:t(W),opts:l},{label:"Mono",token:"--sf-font-mono",current:t(me),opts:i}],He=>He.token,(He,qe)=>{var _t=tm(),we=s(_t),de=s(we),ce=r(we,2),Ee=s(ce);oe(Ee,17,()=>t(qe).opts,Re=>Re.label,(Re,Ze)=>{var Ct=em(),It=s(Ct),Jt={};_(()=>{y(It,t(Ze).label),Jt!==(Jt=t(Ze).value)&&(Ct.value=(Ct.__value=t(Ze).value)??"")}),d(Re,Ct)});var xt=r(Ee);{var Lt=Re=>{var Ze=bs(),Ct=s(Ze),It={};_(Jt=>{y(Ct,`Custom: ${Jt??""}`),It!==(It=t(qe).current)&&(Ze.value=(Ze.__value=t(qe).current)??"")},[()=>t(qe).current.split(",")[0].replace(/['"]/g,"")]),d(Re,Ze)},Rt=u(()=>t(qe).current&&!t(qe).opts.some(Re=>Re.value===t(qe).current));L(xt,Re=>{t(Rt)&&Re(Lt)})}var aa;Da(ce);var sa=r(ce,2);{var Tt=Re=>{var Ze=Ir();x("click",Ze,()=>e.onReset(t(qe).token)),d(Re,Ze)};L(sa,Re=>{t(qe).token in e.overrides&&Re(Tt)})}_(()=>{y(de,t(qe).label),lt(ce,`font-family: ${t(qe).current||"inherit"}`),aa!==(aa=t(qe).current)&&(ce.value=(ce.__value=t(qe).current)??"",Ia(ce,t(qe).current))}),x("change",ce,Re=>{const Ze=Re.target.value;Ze?e.onSet(t(qe).token,Ze):e.onReset(t(qe).token)}),d(He,_t)});var re=r(ne,2),ve=r(s(re),2),Be=s(ve),pe=s(Be);pe.value=pe.__value="";var ze=r(pe);oe(ze,16,()=>c,He=>He,(He,qe)=>{var _t=bs(),we=s(_t),de={};_(()=>{y(we,qe),de!==(de=qe)&&(_t.value=(_t.__value=qe)??"")}),d(He,_t)});var $e;Da(Be);var Bt=r(Be,2),Ut=s(Bt),pt=r(Ut,2),et=r(ve,2),ht=r(et,2),Ot=s(ht);_(()=>{$e!==($e=t(ke))&&(Be.value=(Be.__value=t(ke))??"",Ia(Be,t(ke))),Ve(Ut,1,`px-2 rounded text-[10px] border transition-all cursor-pointer ${t(he)==="body"?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400"}`),Ve(pt,1,`px-2 rounded text-[10px] border transition-all cursor-pointer ${t(he)==="heading"?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400"}`),Xt(et,t(ke)),y(Ot,`Load & apply to ${t(he)??""}`)}),x("change",Be,He=>{w(ke,He.target.value,!0)}),x("click",Ut,()=>{w(he,"body")}),x("click",pt,()=>{w(he,"heading")}),x("input",et,He=>{w(ke,He.target.value,!0)}),x("click",ht,()=>Xe(t(ke),t(he))),d(F,Z)};L(ye,F=>{t(Me)&&F(st)})}var Ke=r(te,4),I=s(Ke),X=r(s(I),2),ae=s(X),Pe=r(I,2);{var Te=F=>{var Z=im(),ne=fe(Z);oe(ne,21,()=>P,Re=>Re.id,(Re,Ze)=>{const Ct=u(()=>t(Ze).size in e.overrides||t(Ze).lh in e.overrides||t(Ze).wt in e.overrides||!!t(Ze).ls&&t(Ze).ls in e.overrides);var It=sm(),Jt=s(It),va=r(Jt);{var Ua=ua=>{var ra=om();d(ua,ra)};L(va,ua=>{t(Ct)&&ua(Ua)})}_(()=>{Ve(It,1,`relative flex-1 py-1 rounded-md text-[10px] font-bold transition-all cursor-pointer ${t(A)===t(Ze).id?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(Jt,`${t(Ze).label??""} `)}),x("click",It,()=>{w(A,t(Ze).id,!0)}),d(Re,It)});var re=r(ne,2),ve=s(re),Be=r(re,2),pe=r(s(Be),2),ze=s(pe);oe(ze,17,()=>k,Re=>Re.value,(Re,Ze)=>{var Ct=bs(),It=s(Ct),Jt={};_(()=>{y(It,t(Ze).label),Jt!==(Jt=t(Ze).value)&&(Ct.value=(Ct.__value=t(Ze).value)??"")}),d(Re,Ct)});var $e=r(ze);{var Bt=Re=>{var Ze=Br(),Ct={};_(It=>{Ct!==(Ct=It)&&(Ze.value=(Ze.__value=It)??"")},[()=>We(t(B).size,t(B).dSize)]),d(Re,Ze)},Ut=u(()=>!k.some(Re=>Re.value===We(t(B).size,t(B).dSize)));L($e,Re=>{t(Ut)&&Re(Bt)})}var pt;Da(pe);var et=r(Be,2),ht=r(s(et),2),Ot=s(ht);oe(Ot,17,()=>S,Re=>Re.value,(Re,Ze)=>{var Ct=bs(),It=s(Ct),Jt={};_(()=>{y(It,`${t(Ze).label??""} · ${t(Ze).num??""}`),Jt!==(Jt=t(Ze).value)&&(Ct.value=(Ct.__value=t(Ze).value)??"")}),d(Re,Ct)});var He=r(Ot);{var qe=Re=>{var Ze=Br(),Ct={};_(It=>{Ct!==(Ct=It)&&(Ze.value=(Ze.__value=It)??"")},[()=>We(t(B).lh,t(B).dLh)]),d(Re,Ze)},_t=u(()=>!S.some(Re=>Re.value===We(t(B).lh,t(B).dLh)));L(He,Re=>{t(_t)&&Re(qe)})}var we;Da(ht);var de=r(et,2),ce=r(s(de),2);oe(ce,20,()=>p,Re=>Re,(Re,Ze)=>{const Ct=u(()=>We(t(B).wt,t(B).dWt));var It=Ao(),Jt=s(It);_(va=>{lt(It,va),Ve(It,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(Ct)===Ze?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Jt,Ze)},[()=>`font-weight:${parseInt(Ze)}`]),x("click",It,()=>Qe(t(B).wt,Ze,t(B).dWt)),d(Re,It)});var Ee=r(de,2);{var xt=Re=>{var Ze=rm(),Ct=r(s(Ze),2),It=s(Ct);oe(It,17,()=>R,ra=>ra.value,(ra,Ra)=>{var Pa=bs(),eo=s(Pa),gn={};_(()=>{y(eo,t(Ra).label),gn!==(gn=t(Ra).value)&&(Pa.value=(Pa.__value=t(Ra).value)??"")}),d(ra,Pa)});var Jt=r(It);{var va=ra=>{var Ra=Br(),Pa={};_(eo=>{Pa!==(Pa=eo)&&(Ra.value=(Ra.__value=eo)??"")},[()=>We(t(B).ls,t(B).dLs)]),d(ra,Ra)},Ua=u(()=>!R.some(ra=>ra.value===We(t(B).ls,t(B).dLs)));L(Jt,ra=>{t(Ua)&&ra(va)})}var ua;Da(Ct),_(ra=>{ua!==(ua=ra)&&(Ct.value=(Ct.__value=ra)??"",Ia(Ct,ra))},[()=>We(t(B).ls,t(B).dLs)]),x("change",Ct,ra=>Qe(t(B).ls,ra.target.value,t(B).dLs)),d(Re,Ze)};L(Ee,Re=>{t(B).ls&&Re(xt)})}var Lt=r(Ee,2);{var Rt=Re=>{const Ze=u(()=>`--sf-${t(B).id}-max-width`);var Ct=nm(),It=r(s(Ct),2),Jt=r(It,2);{var va=Ua=>{var ua=Ir();x("click",ua,()=>e.onReset(t(Ze))),d(Ua,ua)};L(Jt,Ua=>{t(Ze)in e.overrides&&Ua(va)})}_(()=>Xt(It,e.overrides[t(Ze)]??"")),x("input",It,Ua=>{const ua=Ua.target.value.trim();ua?e.onSet(t(Ze),ua):e.onReset(t(Ze))}),d(Re,Ct)};L(Lt,Re=>{t(B).id!=="body"&&Re(Rt)})}var aa=r(Lt,2),sa=s(aa);{var Tt=Re=>{var Ze=lm(),Ct=s(Ze);_(()=>y(Ct,`reset ${t(B).label??""}`)),x("click",Ze,()=>{const It={[t(B).size]:null,[t(B).lh]:null,[t(B).wt]:null};t(B).ls&&(It[t(B).ls]=null),e.onBulkChange(It)}),d(Re,Ze)};L(sa,Re=>{(t(B).size in e.overrides||t(B).lh in e.overrides||t(B).wt in e.overrides||t(B).ls&&t(B).ls in e.overrides)&&Re(Tt)})}_((Re,Ze)=>{lt(ve,`font-size:${t(dt)}rem; font-weight:${t(gt)}; letter-spacing:${t(kt)}em; line-height:${t(wt)}; font-family:${t(B).id==="body"?t(le)||"inherit":t(W)||t(le)||"inherit"}`),pt!==(pt=Re)&&(pe.value=(pe.__value=Re)??"",Ia(pe,Re)),we!==(we=Ze)&&(ht.value=(ht.__value=Ze)??"",Ia(ht,Ze))},[()=>We(t(B).size,t(B).dSize),()=>We(t(B).lh,t(B).dLh)]),x("change",pe,Re=>Qe(t(B).size,Re.target.value,t(B).dSize)),x("change",ht,Re=>Qe(t(B).lh,Re.target.value,t(B).dLh)),d(F,Z)};L(Pe,F=>{t(xe)&&F(Te)})}var ut=r(Ke,4),je=s(ut),it=r(s(je),2),at=s(it),ft=r(je,2);{var Ge=F=>{var Z=fm(),ne=fe(Z);oe(ne,16,()=>[{label:"Body strong",tokenName:"--sf-font-weight-strong"},{label:"Interactive",tokenName:"--sf-font-weight-interactive"}],pt=>pt.tokenName,(pt,et)=>{const ht=u(()=>m[et.tokenName]??"600"),Ot=u(()=>e.overrides[et.tokenName]??t(ht)),He=u(()=>et.tokenName in e.overrides);var qe=Jn(),_t=s(qe),we=s(_t),de=s(we),ce=r(we,2);{var Ee=Lt=>{var Rt=Xn();x("click",Rt,()=>e.onReset(et.tokenName)),d(Lt,Rt)};L(ce,Lt=>{t(He)&&Lt(Ee)})}var xt=r(_t,2);oe(xt,20,()=>p,Lt=>Lt,(Lt,Rt)=>{var aa=Ao(),sa=s(aa);_(Tt=>{lt(aa,Tt),Ve(aa,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(Ot)===Rt?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(sa,Rt)},[()=>`font-weight: ${parseInt(Rt)}`]),x("click",aa,()=>Rt===t(ht)&&!t(He)?void 0:Rt===t(ht)?e.onReset(et.tokenName):e.onSet(et.tokenName,Rt)),d(Lt,aa)}),_(()=>y(de,`${et.label??""} weight`)),d(pt,qe)});var re=r(ne,2),ve=r(s(re),2);oe(ve,20,()=>[["Italic","italic"],["Normal","normal"]],([pt,et])=>et,(pt,et)=>{var ht=u(()=>Ea(et,2));let Ot=()=>t(ht)[0],He=()=>t(ht)[1];const qe=u(()=>e.overrides["--sf-body-em-style"]??"italic");var _t=cm(),we=s(_t),de=s(we);_(()=>{Ve(_t,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer ${t(qe)===He()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),lt(we,`font-style: ${He()}`),y(de,Ot())}),x("click",_t,()=>He()==="italic"?e.onReset("--sf-body-em-style"):e.onSet("--sf-body-em-style",He())),d(pt,_t)});var Be=r(re,2);{let pt=u(()=>T("--sf-code-font-size",.875)),et=u(()=>"--sf-code-font-size"in e.overrides);yt(Be,{label:"Code font size",get value(){return t(pt)},min:.7,max:1.1,step:.005,unit:"em",help:"--sf-code-font-size — size of inline code relative to surrounding text",get overridden(){return t(et)},onChange:ht=>e.onSet("--sf-code-font-size",`${ht}em`),onReset:()=>e.onReset("--sf-code-font-size")})}var pe=r(Be,2);oe(pe,16,()=>[{label:"Heading wrap",token:"--sf-heading-text-wrap",defaultVal:"balance"},{label:"Body wrap",token:"--sf-body-text-wrap",defaultVal:"pretty"}],pt=>pt.token,(pt,et)=>{const ht=u(()=>e.overrides[et.token]??et.defaultVal);var Ot=dm(),He=s(Ot),qe=s(He),_t=r(He,2);oe(_t,21,()=>f,we=>we.value,(we,de)=>{var ce=Ao(),Ee=s(ce);_(()=>{Ve(ce,1,`flex-1 px-2 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer ${t(ht)===t(de).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Ee,t(de).label)}),x("click",ce,()=>t(de).value===et.defaultVal&&!(et.token in e.overrides)?void 0:t(de).value===et.defaultVal?e.onReset(et.token):e.onSet(et.token,t(de).value)),d(we,ce)}),_(()=>y(qe,et.label)),d(pt,Ot)});var ze=r(pe,2),$e=r(s(ze),2);$($e,"placeholder",'" ↗"');var Bt=r($e,2);{var Ut=pt=>{var et=Ir();x("click",et,()=>e.onReset("--sf-link-external-marker")),d(pt,et)};L(Bt,pt=>{"--sf-link-external-marker"in e.overrides&&pt(Ut)})}_(()=>Xt($e,e.overrides["--sf-link-external-marker"]??"")),x("input",$e,pt=>{const et=pt.target.value;et?e.onSet("--sf-link-external-marker",et):e.onReset("--sf-link-external-marker")}),d(F,Z)};L(ft,F=>{t(be)&&F(Ge)})}var Pt=r(ut,4),jt=s(Pt),ta=r(s(jt),2),Dt=s(ta),zt=r(jt,2);{var ia=F=>{var Z=pm(),ne=r(fe(Z),2);oe(ne,16,()=>[{label:"Light",token:"--sf-font-weight-light",def:300},{label:"Normal",token:"--sf-font-weight-normal",def:400},{label:"Medium",token:"--sf-font-weight-medium",def:500},{label:"Semibold",token:"--sf-font-weight-semibold",def:600},{label:"Bold",token:"--sf-font-weight-bold",def:700}],re=>re.token,(re,ve)=>{var Be=um(),pe=s(Be),ze=s(pe),$e=s(ze),Bt=r(ze,2);{var Ut=et=>{var ht=Qn();x("click",ht,()=>e.onReset(ve.token)),d(et,ht)};L(Bt,et=>{ve.token in e.overrides&&et(Ut)})}var pt=r(pe,2);oe(pt,20,()=>p,et=>et,(et,ht)=>{const Ot=u(()=>e.overrides[ve.token]??String(ve.def));var He=Ao(),qe=s(He);_(_t=>{lt(He,_t),Ve(He,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(Ot)===ht?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(qe,ht)},[()=>`font-weight:${parseInt(ht)}`]),x("click",He,()=>ht===String(ve.def)&&!(ve.token in e.overrides)?void 0:ht===String(ve.def)?e.onReset(ve.token):e.onSet(ve.token,ht)),d(et,He)}),_(()=>y($e,ve.label)),d(re,Be)}),d(F,Z)};L(zt,F=>{t(ee)&&F(ia)})}var ca=r(Pt,4),da=s(ca),_e=r(s(da),2),bt=s(_e),Et=r(da,2);{var Je=F=>{var Z=vm(),ne=fe(Z);{let Be=u(()=>"--sf-text-display-base-min"in e.overrides||"--sf-text-display-base-max"in e.overrides);Ps(ne,{title:"Display base size",get minValue(){return t(O)},get maxValue(){return t(j)},min:1.5,max:6,step:.05,unit:"rem",previewKind:"type",get overridden(){return t(Be)},onReset:()=>{e.onReset("--sf-text-display-base-min"),e.onReset("--sf-text-display-base-max")},onMinChange:pe=>e.onSet("--sf-text-display-base-min",String(pe)),onMaxChange:pe=>e.onSet("--sf-text-display-base-max",String(pe))})}var re=r(ne,2);oe(re,20,()=>[{label:"Display L line-height",token:"--sf-display-l-line-height",def:1},{label:"Display M line-height",token:"--sf-display-m-line-height",def:1.05}],Be=>Be.token,(Be,pe)=>{var ze=mm(),$e=s(ze),Bt=s($e),Ut=r($e,2);{let pt=u(()=>T(pe.token,pe.def)),et=u(()=>pe.token in e.overrides);yt(Ut,{label:"",get value(){return t(pt)},min:.8,max:1.5,step:.025,get overridden(){return t(et)},onChange:ht=>e.onSet(pe.token,String(ht)),onReset:()=>e.onReset(pe.token)})}_(()=>y(Bt,pe.label)),d(Be,ze)});var ve=r(re,2);oe(ve,16,()=>[{label:"Display",tokenName:"--sf-font-weight-display"},{label:"Heading",tokenName:"--sf-font-weight-heading"}],Be=>Be.tokenName,(Be,pe)=>{const ze=u(()=>m[pe.tokenName]??"700"),$e=u(()=>e.overrides[pe.tokenName]??t(ze)),Bt=u(()=>pe.tokenName in e.overrides);var Ut=Jn(),pt=s(Ut),et=s(pt),ht=s(et),Ot=r(et,2);{var He=_t=>{var we=Xn();x("click",we,()=>e.onReset(pe.tokenName)),d(_t,we)};L(Ot,_t=>{t(Bt)&&_t(He)})}var qe=r(pt,2);oe(qe,20,()=>p,_t=>_t,(_t,we)=>{var de=Ao(),ce=s(de);_(Ee=>{lt(de,Ee),Ve(de,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t($e)===we?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(ce,we)},[()=>`font-weight: ${parseInt(we)}`]),x("click",de,()=>we===t(ze)&&!t(Bt)?void 0:we===t(ze)?e.onReset(pe.tokenName):e.onSet(pe.tokenName,we)),d(_t,de)}),_(()=>y(ht,`${pe.label??""} weight`)),d(Be,Ut)}),d(F,Z)};L(Et,F=>{t(Q)&&F(Je)})}var St=r(ca,4),ot=s(St),rt=r(s(ot),2),Gt=s(rt),Mt=r(ot,2);{var Nt=F=>{var Z=bm(),ne=r(fe(Z),2);{let He=u(()=>"--sf-fluid-min-vw"in e.overrides||"--sf-fluid-max-vw"in e.overrides);Ps(ne,{title:"Viewport range",get minValue(){return t(Oe)},get maxValue(){return t(De)},min:15,max:120,step:.5,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",get overridden(){return t(He)},onReset:()=>{e.onReset("--sf-fluid-min-vw"),e.onReset("--sf-fluid-max-vw")},onMinChange:qe=>e.onSet("--sf-fluid-min-vw",String(qe)),onMaxChange:qe=>e.onSet("--sf-fluid-max-vw",String(qe))})}var re=r(ne,2);{let He=u(()=>"--sf-text-base-min"in e.overrides||"--sf-text-base-max"in e.overrides);Ps(re,{title:"Base size & ratio",get minValue(){return t(z)},get maxValue(){return t(G)},min:.7,max:2,step:.01,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",previewKind:"type",get overridden(){return t(He)},onReset:()=>{e.onReset("--sf-text-base-min"),e.onReset("--sf-text-base-max")},onMinChange:qe=>e.onSet("--sf-text-base-min",String(qe)),onMaxChange:qe=>e.onSet("--sf-text-base-max",String(qe)),get ratioPresets(){return o},get ratioMin(){return t(E)},get ratioMax(){return t(C)},ratioMin_bound:1.05,ratioMax_bound:1.8,onRatioMinChange:qe=>e.onSet("--sf-text-ratio-min",String(qe)),onRatioMaxChange:qe=>e.onSet("--sf-text-ratio-max",String(qe))})}var ve=r(re,2),Be=r(s(ve),2);oe(Be,21,()=>b,He=>He.token,(He,qe)=>{{let _t=u(()=>Ue(t(qe))),we=u(()=>`${t(qe).token} — ${t(qe).label.toLowerCase()} line height`),de=u(()=>t(qe).token in e.overrides);yt(He,{get label(){return t(qe).label},get value(){return t(_t)},min:1,max:2.2,step:.05,get help(){return t(we)},get overridden(){return t(de)},onChange:ce=>e.onSet(t(qe).token,String(ce)),onReset:()=>e.onReset(t(qe).token)})}});var pe=r(ve,2);{let He=u(()=>"--sf-leading-taper"in e.overrides);yt(pe,{label:"Leading taper",get value(){return t(M)},min:0,max:.5,step:.01,help:"How aggressively large display sizes shrink their line-height.",get overridden(){return t(He)},onChange:qe=>e.onSet("--sf-leading-taper",String(qe)),onReset:()=>e.onReset("--sf-leading-taper")})}var ze=r(pe,2),$e=r(s(ze),4);oe($e,21,()=>v,He=>He.token,(He,qe)=>{var _t=hm(),we=s(_t),de=s(we),ce=s(de),Ee=r(de,2);{var xt=Rt=>{var aa=Qn();x("click",aa,()=>e.onReset(t(qe).token)),d(Rt,aa)};L(Ee,Rt=>{t(qe).token in e.overrides&&Rt(xt)})}var Lt=r(we,2);{let Rt=u(()=>ie(t(qe)));Qo(Lt,{get value(){return t(Rt)},min:-.1,max:.2,step:.005,unit:"em",onChange:aa=>e.onSet(t(qe).token,`${aa}em`)})}_(()=>y(ce,t(qe).label)),d(He,_t)});var Bt=r(ze,2),Ut=s(Bt),pt=r(s(Ut),2),et=s(pt),ht=r(Ut,2);{var Ot=He=>{var qe=gm();oe(qe,21,()=>q,_t=>_t.name,(_t,we)=>{Vo(_t,{get knob(){return t(we)},get overrides(){return e.overrides},onChange:(de,ce)=>ce===null?e.onReset(de):e.onSet(de,ce)})}),d(He,qe)};L(ht,He=>{t(Se)&&He(Ot)})}_(()=>{$(Ut,"aria-expanded",t(Se)),y(et,t(Se)?"▲":"▼")}),x("click",Ut,()=>{w(Se,!t(Se))}),d(F,Z)};L(Mt,F=>{t(se)&&F(Nt)})}var Vt=r(St,4),Wt=s(Vt),fa=r(s(Wt),2),La=s(fa),ka=r(Wt,2);{var Va=F=>{var Z=xm();oe(Z,21,()=>[...h].reverse(),({label:ne,factor:re})=>ne,(ne,re)=>{let ve=()=>t(re).label,Be=()=>t(re).factor;const pe=u(()=>(t(z)+t(G))/2),ze=u(()=>t(pe)*Be()*t(Y));var $e=ym(),Bt=s($e),Ut=s(Bt),pt=r(Bt,2),et=r(pt,2),ht=s(et);_((Ot,He)=>{y(Ut,ve()),lt(pt,Ot),y(ht,`${He??""}rem`)},[()=>`font-size: ${Math.min(t(ze),2.5)}rem; font-family: ${t(le)||"inherit"}`,()=>t(ze).toFixed(2)]),d(ne,$e)}),d(F,Z)};L(ka,F=>{t(Ce)&&F(Va)})}var vt=r(Vt,4),Ie=s(vt),Ye=r(s(Ie),2),nt=s(Ye),Le=r(Ie,2);{var Fe=F=>{var Z=wm(),ne=r(fe(Z),2);oe(ne,20,()=>[{label:"2xs",token:"--sf-text-2xs-max-width",def:"55ch"},{label:"xs",token:"--sf-text-xs-max-width",def:"60ch"},{label:"s",token:"--sf-text-s-max-width",def:"65ch"},{label:"m",token:"--sf-text-m-max-width",def:"65ch"},{label:"l",token:"--sf-text-l-max-width",def:"none"},{label:"xl",token:"--sf-text-xl-max-width",def:"none"},{label:"2xl",token:"--sf-text-2xl-max-width",def:"none"},{label:"3xl",token:"--sf-text-3xl-max-width",def:"none"},{label:"4xl",token:"--sf-text-4xl-max-width",def:"none"}],re=>re.token,(re,ve)=>{var Be=km(),pe=s(Be),ze=s(pe),$e=r(pe,2),Bt=r($e,2);{var Ut=pt=>{var et=Ur();x("click",et,()=>e.onReset(ve.token)),d(pt,et)};L(Bt,pt=>{ve.token in e.overrides&&pt(Ut)})}_(()=>{y(ze,ve.label),Xt($e,e.overrides[ve.token]??""),$($e,"placeholder",ve.def)}),x("input",$e,pt=>{const et=pt.target.value.trim();et?e.onSet(ve.token,et):e.onReset(ve.token)}),d(re,Be)}),d(F,Z)};L(Le,F=>{t(D)&&F(Fe)})}var ct=r(vt,4),tt=s(ct),Ae=r(s(tt),2),U=s(Ae),J=r(tt,2);{var ge=F=>{var Z=_m(),ne=r(fe(Z),2),re=r(s(ne),2);oe(re,20,()=>[["tabular-nums","tabular-nums (default)"],["proportional-nums","proportional-nums"],["normal","normal"]],([Ot,He])=>Ot,(Ot,He)=>{var qe=u(()=>Ea(He,2));let _t=()=>t(qe)[0],we=()=>t(qe)[1];const de=u(()=>e.overrides["--sf-font-numeric"]??"tabular-nums");var ce=Ao(),Ee=s(ce);_(()=>{Ve(ce,1,`flex-1 py-1.5 rounded-lg text-[9px] border transition-all cursor-pointer ${t(de)===_t()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Ee,we())}),x("click",ce,()=>_t()==="tabular-nums"?e.onReset("--sf-font-numeric"):e.onSet("--sf-font-numeric",_t())),d(Ot,ce)});var ve=r(ne,2),Be=r(s(ve),2);oe(Be,20,()=>[["auto","auto (default)"],["none","none"]],([Ot,He])=>Ot,(Ot,He)=>{var qe=u(()=>Ea(He,2));let _t=()=>t(qe)[0],we=()=>t(qe)[1];const de=u(()=>e.overrides["--sf-optical-sizing"]??"auto");var ce=Ao(),Ee=s(ce);_(()=>{Ve(ce,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer ${t(de)===_t()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Ee,we())}),x("click",ce,()=>_t()==="auto"?e.onReset("--sf-optical-sizing"):e.onSet("--sf-optical-sizing",_t())),d(Ot,ce)});var pe=r(ve,2),ze=r(s(pe),2),$e=r(ze,2);{var Bt=Ot=>{var He=Ur();x("click",He,()=>e.onReset("--sf-font-features")),d(Ot,He)};L($e,Ot=>{"--sf-font-features"in e.overrides&&Ot(Bt)})}var Ut=r(pe,2),pt=r(s(Ut),2),et=r(pt,2);{var ht=Ot=>{var He=Ur();x("click",He,()=>e.onReset("--sf-font-variation")),d(Ot,He)};L(et,Ot=>{"--sf-font-variation"in e.overrides&&Ot(ht)})}_(()=>{Xt(ze,e.overrides["--sf-font-features"]??""),Xt(pt,e.overrides["--sf-font-variation"]??"")}),x("input",ze,Ot=>{const He=Ot.target.value.trim();He?e.onSet("--sf-font-features",He):e.onReset("--sf-font-features")}),x("input",pt,Ot=>{const He=Ot.target.value.trim();He?e.onSet("--sf-font-variation",He):e.onReset("--sf-font-variation")}),d(F,Z)};L(J,F=>{t(H)&&F(ge)})}_(()=>{$(N,"aria-expanded",t(Me)),y(ue,t(Me)?"▲":"▼"),$(I,"aria-expanded",t(xe)),y(ae,t(xe)?"▲":"▼"),$(je,"aria-expanded",t(be)),y(at,t(be)?"▲":"▼"),$(jt,"aria-expanded",t(ee)),y(Dt,t(ee)?"▲":"▼"),$(da,"aria-expanded",t(Q)),y(bt,t(Q)?"▲":"▼"),$(ot,"aria-expanded",t(se)),y(Gt,t(se)?"▲":"▼"),$(Wt,"aria-expanded",t(Ce)),y(La,t(Ce)?"▲":"▼"),$(Ie,"aria-expanded",t(D)),y(nt,t(D)?"▲":"▼"),$(tt,"aria-expanded",t(H)),y(U,t(H)?"▲":"▼")}),x("click",N,()=>{w(Me,!t(Me))}),x("click",I,()=>{w(xe,!t(xe))}),x("click",je,()=>{w(be,!t(be))}),x("click",jt,()=>{w(ee,!t(ee))}),x("click",da,()=>{w(Q,!t(Q))}),x("click",ot,()=>{w(se,!t(se))}),x("click",Wt,()=>{w(Ce,!t(Ce))}),x("click",Ie,()=>{w(D,!t(D))}),x("click",tt,()=>{w(H,!t(H))}),d(a,mt),ea()}oa(["click","change","input"]);var Sm=g('
'),Lm=g('

The two most-referenced spacing tokens. Referenced by every layout primitive (cluster, grid, stack, bento…).

',1),Pm=g(`

Utopia-style fluid scale — viewport width, base unit and ratio per endpoint. + The viewport range is shared with the type scale.

`,1),Im=g('
'),Bm=g('
Space scale preview
');function Um(a,e){$t(e,!0);const o=[{label:"Minor Third — 1.200",value:1.2},{label:"Major Third — 1.250",value:1.25},{label:"Perfect Fourth — 1.333",value:1.333},{label:"Aug. Fourth — 1.414",value:1.414},{label:"Golden — 1.618",value:1.618}],n=["2xs","xs","s","m","l","xl","2xl","3xl","4xl"],l=qo.spacing??[];function i(ee,le){const W=parseFloat(e.overrides[ee]??"");return isNaN(W)?le:W}let c=u(()=>i("--sf-space-ratio-min",1.25)),f=u(()=>i("--sf-space-ratio-max",1.333)),p=u(()=>i("--sf-space-base-min",1)),m=u(()=>i("--sf-space-base-max",2)),h=u(()=>i("--sf-space-scale",1)),v=u(()=>i("--sf-gap",1)),b=u(()=>i("--sf-gutter",1.5)),k=u(()=>i("--sf-content-gap",.5)),S=u(()=>i("--sf-fluid-min-vw",22.5)),R=u(()=>i("--sf-fluid-max-vw",90)),P=K(!1),A=K(!1),B=K(!1);var q=Bm(),T=s(q),E=r(s(T),2);oe(E,22,()=>n,ee=>ee,(ee,le,W)=>{const me=u(()=>(t(p)+t(m))/2),ke=u(()=>(t(c)+t(f))/2),he=u(()=>t(W)-3),ie=u(()=>t(he)>=0?t(me)*Math.pow(t(ke),t(he)):t(me)/Math.pow(t(ke),-t(he))),Ue=u(()=>t(ie)*t(h)),Ne=u(()=>Math.min(t(Ue)*28,240));var Xe=Sm(),We=s(Xe),Qe=s(We),dt=r(We,2),gt=r(dt,2),kt=s(gt);_(wt=>{y(Qe,le),lt(dt,`width: ${t(Ne)}px; min-width: 3px`),y(kt,`${wt??""}rem`)},[()=>t(Ue).toFixed(2)]),d(ee,Xe)});var C=r(T,4),z=s(C),G=r(s(z),2),O=s(G),j=r(z,2);{var M=ee=>{var le=Lm(),W=r(fe(le),2);{let he=u(()=>"--sf-gap"in e.overrides);yt(W,{label:"Gap",get value(){return t(v)},min:0,max:4,step:.0625,unit:"rem",help:"--sf-gap — spacing between layout items (cluster, grid, reel, stack, sidebar, bento)",get overridden(){return t(he)},onChange:ie=>e.onSet("--sf-gap",`${ie}rem`),onReset:()=>e.onReset("--sf-gap"),rawDefault:"var(--sf-space-m)",get currentRaw(){return e.overrides["--sf-gap"]},onRawSet:ie=>e.onSet("--sf-gap",ie)})}var me=r(W,2);{let he=u(()=>"--sf-content-gap"in e.overrides);yt(me,{label:"Content gap",get value(){return t(k)},min:0,max:2,step:.0625,unit:"rem",help:"--sf-content-gap — tighter gap within components (defaults to space-s)",get overridden(){return t(he)},onChange:ie=>e.onSet("--sf-content-gap",`${ie}rem`),onReset:()=>e.onReset("--sf-content-gap"),rawDefault:"var(--sf-space-s)",get currentRaw(){return e.overrides["--sf-content-gap"]},onRawSet:ie=>e.onSet("--sf-content-gap",ie)})}var ke=r(me,2);{let he=u(()=>"--sf-gutter"in e.overrides);yt(ke,{label:"Gutter",get value(){return t(b)},min:0,max:6,step:.0625,unit:"rem",help:"--sf-gutter — wide page/section side gutter (containers, .sf-section--guttered)",get overridden(){return t(he)},onChange:ie=>e.onSet("--sf-gutter",`${ie}rem`),onReset:()=>e.onReset("--sf-gutter"),rawDefault:"var(--sf-space-l)",get currentRaw(){return e.overrides["--sf-gutter"]},onRawSet:ie=>e.onSet("--sf-gutter",ie)})}d(ee,le)};L(j,ee=>{t(P)&&ee(M)})}var Y=r(C,4),Oe=s(Y),De=r(s(Oe),2),Me=s(De),xe=r(Oe,2);{var be=ee=>{var le=Pm(),W=r(fe(le),2);{let ke=u(()=>"--sf-fluid-min-vw"in e.overrides||"--sf-fluid-max-vw"in e.overrides);Ps(W,{title:"Viewport range",get minValue(){return t(S)},get maxValue(){return t(R)},min:15,max:120,step:.5,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",get overridden(){return t(ke)},onReset:()=>{e.onReset("--sf-fluid-min-vw"),e.onReset("--sf-fluid-max-vw")},onMinChange:he=>e.onSet("--sf-fluid-min-vw",String(he)),onMaxChange:he=>e.onSet("--sf-fluid-max-vw",String(he))})}var me=r(W,2);{let ke=u(()=>"--sf-space-base-min"in e.overrides||"--sf-space-base-max"in e.overrides);Ps(me,{title:"Base unit & ratio",get minValue(){return t(p)},get maxValue(){return t(m)},min:.5,max:4,step:.05,unit:"rem",minLabel:"Mobile",maxLabel:"Desktop",previewKind:"space",get overridden(){return t(ke)},onReset:()=>{e.onReset("--sf-space-base-min"),e.onReset("--sf-space-base-max")},onMinChange:he=>e.onSet("--sf-space-base-min",String(he)),onMaxChange:he=>e.onSet("--sf-space-base-max",String(he)),get ratioPresets(){return o},get ratioMin(){return t(c)},get ratioMax(){return t(f)},ratioMin_bound:1.1,ratioMax_bound:1.8,onRatioMinChange:he=>e.onSet("--sf-space-ratio-min",String(he)),onRatioMaxChange:he=>e.onSet("--sf-space-ratio-max",String(he))})}d(ee,le)};L(xe,ee=>{t(A)&&ee(be)})}var Q=r(Y,4),se=s(Q),Se=r(s(se),2),Ce=s(Se),H=r(se,2);{var D=ee=>{var le=Im();oe(le,21,()=>l,W=>W.name,(W,me)=>{Vo(W,{get knob(){return t(me)},get overrides(){return e.overrides},onChange:(ke,he)=>he===null?e.onReset(ke):e.onSet(ke,he)})}),d(ee,le)};L(H,ee=>{t(B)&&ee(D)})}_(()=>{$(z,"aria-expanded",t(P)),y(O,t(P)?"▲":"▼"),$(Oe,"aria-expanded",t(A)),y(Me,t(A)?"▲":"▼"),$(se,"aria-expanded",t(B)),y(Ce,t(B)?"▲":"▼")}),x("click",z,()=>{w(P,!t(P))}),x("click",Oe,()=>{w(A,!t(A))}),x("click",se,()=>{w(B,!t(B))}),d(a,q),ea()}oa(["click"]);var Am=g('
'),zm=g('
Narrow
Prose
Default
Wide
',1),Em=g(" ",1),Rm=g('
col
'),Tm=g('
Named sizes (grid-min-xs → 2xl)
Preview at 360px panel width
',1),Dm=g('
'),Mm=g('
Mobile
Desktop
',1),Nm=g('

Offsets position:sticky elements below a fixed header. Defaults to header heights.

Mobile
Desktop
',1),Fm=g('
',1),jm=g('
'),$n=g(''),js=g(''),el=g('
'),tl=g(""),Gm=g('
Switcher
Sidebar content
Cluster
Equal grid
Named column counts (equal-min-col-2/3/4/6)
Cover
Frame ratio

--sf-frame-ratio — aspect ratio for .sf-frame

Reel

--sf-reel-item-width — width of each item in a horizontal .sf-reel

Height
Imposter
Content grid (breakout)
Alternate (zigzag)
'),Hm=g('
'),qm=g('

Override the built-in named aspect ratios used by .sf-ratio-* utilities.

'),Vm=g('

Default values for the .sf-bg full-bleed background utility.

'),Km=g('
');function Wm(a,e){$t(e,!0);function o(Ie,Ye){if(!Ie)return Ye;const nt=parseFloat(Ie);return isNaN(nt)?Ye:nt}let n=u(()=>o(e.overrides["--sf-container-narrow"],38)),l=u(()=>o(e.overrides["--sf-container-prose"],65)),i=u(()=>o(e.overrides["--sf-container-default"],75)),c=u(()=>o(e.overrides["--sf-container-wide"],90)),f=u(()=>o(e.overrides["--sf-center-max"],75)),p=u(()=>o(e.overrides["--sf-center-gutter"],1)),m=u(()=>o(e.overrides["--sf-grid-min"],16)),h=u(()=>o(e.overrides["--sf-header-height-mobile"],3.5)),v=u(()=>o(e.overrides["--sf-header-height-desktop"],5)),b=u(()=>o(e.overrides["--sf-sidebar-width"],18)),k=u(()=>o(e.overrides["--sf-sticky-offset-mobile"],3.5)),S=u(()=>o(e.overrides["--sf-sticky-offset-desktop"],5));const R=[{label:"Columns",token:"--sf-bento-cols-default",min:1,max:12,step:1,unit:"",default:4},{label:"Row default",token:"--sf-bento-row-default",min:4,max:24,step:.5,unit:"rem",default:10},{label:"Row compact",token:"--sf-bento-row-compact",min:2,max:16,step:.5,unit:"rem",default:6},{label:"Row tall",token:"--sf-bento-row-tall",min:8,max:32,step:.5,unit:"rem",default:16}];let P=K(!1),A=K(!1),B=K(!1),q=K(!1),T=K(!1),E=K(!1),C=K(!1),z=K(!1),G=K(!1),O=K(!1);function j(Ie){const Ye=e.overrides[Ie.token];return Ye?parseFloat(Ye):Ie.default}let M=u(()=>o(e.overrides["--sf-switcher-threshold"],30)),Y=u(()=>o(e.overrides["--sf-sidebar-min-width"],50)),Oe=u(()=>o(e.overrides["--sf-equal-min-col"],16)),De=u(()=>o(e.overrides["--sf-cover-min-height"],100)),Me=u(()=>o(e.overrides["--sf-imposter-margin"],1)),xe=u(()=>o(e.overrides["--sf-breakout-width"],90)),be=u(()=>o(e.overrides["--sf-content-width"],75)),Q=u(()=>o(e.overrides["--sf-alternate-inner-gap"],1)),se=u(()=>e.overrides["--sf-frame-ratio"]??"16 / 9"),Se=u(()=>e.overrides["--sf-reel-item-width"]??"max-content");const Ce=["16 / 9","4 / 3","3 / 2","1 / 1","21 / 9"],H=[{label:"auto",value:"max-content"},{label:"12rem",value:"12rem"},{label:"16rem",value:"16rem"},{label:"20rem",value:"20rem"}];var D=Km(),ee=s(D),le=s(ee),W=r(s(le),2),me=s(W),ke=r(le,2);{var he=Ie=>{var Ye=zm(),nt=fe(Ye),Le=s(nt),Fe=r(s(Le),2);{let Z=u(()=>"--sf-container-narrow"in e.overrides);yt(Fe,{label:"",get value(){return t(n)},min:20,max:60,step:1,unit:"rem",get overridden(){return t(Z)},onChange:ne=>e.onSet("--sf-container-narrow",`${ne}rem`),onReset:()=>e.onReset("--sf-container-narrow")})}var ct=r(Le,2),tt=r(s(ct),2);{let Z=u(()=>"--sf-container-prose"in e.overrides);yt(tt,{label:"",get value(){return t(l)},min:40,max:90,step:1,unit:"ch",get overridden(){return t(Z)},onChange:ne=>e.onSet("--sf-container-prose",`${ne}ch`),onReset:()=>e.onReset("--sf-container-prose")})}var Ae=r(ct,2),U=r(s(Ae),2);{let Z=u(()=>"--sf-container-default"in e.overrides);yt(U,{label:"",get value(){return t(i)},min:50,max:120,step:1,unit:"rem",get overridden(){return t(Z)},onChange:ne=>e.onSet("--sf-container-default",`${ne}rem`),onReset:()=>e.onReset("--sf-container-default")})}var J=r(Ae,2),ge=r(s(J),2);{let Z=u(()=>"--sf-container-wide"in e.overrides);yt(ge,{label:"",get value(){return t(c)},min:60,max:160,step:1,unit:"rem",get overridden(){return t(Z)},onChange:ne=>e.onSet("--sf-container-wide",`${ne}rem`),onReset:()=>e.onReset("--sf-container-wide")})}var F=r(nt,2);oe(F,21,()=>[{label:"narrow",value:t(n),max:t(c),unit:"rem"},{label:"prose",value:t(l),max:t(c)*1.5,unit:"ch"},{label:"default",value:t(i),max:t(c),unit:"rem"},{label:"wide",value:t(c),max:t(c),unit:"rem"}],Z=>Z.label,(Z,ne)=>{var re=Am(),ve=s(re),Be=s(ve),pe=r(ve,2),ze=s(pe),$e=r(pe,2),Bt=s($e);_(Ut=>{y(Be,t(ne).label),lt(ze,Ut),y(Bt,`${t(ne).value??""}${t(ne).unit??""}`)},[()=>`width: ${Math.min(t(ne).value/t(ne).max*100,100)}%`]),d(Z,re)}),d(Ie,Ye)};L(ke,Ie=>{t(P)&&Ie(he)})}var ie=r(ee,4),Ue=s(ie),Ne=r(s(Ue),2),Xe=s(Ne),We=r(Ue,2);{var Qe=Ie=>{var Ye=Em(),nt=fe(Ye);{let Fe=u(()=>"--sf-center-max"in e.overrides);yt(nt,{label:"Max width",get value(){return t(f)},min:30,max:160,step:1,unit:"rem",help:"--sf-center-max — max-width of the .sf-center centering wrapper",get overridden(){return t(Fe)},onChange:ct=>e.onSet("--sf-center-max",`${ct}rem`),onReset:()=>e.onReset("--sf-center-max"),rawDefault:"var(--sf-container-default)",get currentRaw(){return e.overrides["--sf-center-max"]},onRawSet:ct=>e.onSet("--sf-center-max",ct)})}var Le=r(nt,2);{let Fe=u(()=>"--sf-center-gutter"in e.overrides);yt(Le,{label:"Gutter",get value(){return t(p)},min:0,max:4,step:.125,unit:"rem",help:"--sf-center-gutter — minimum side padding inside the center wrapper",get overridden(){return t(Fe)},onChange:ct=>e.onSet("--sf-center-gutter",`${ct}rem`),onReset:()=>e.onReset("--sf-center-gutter"),rawDefault:"var(--sf-gutter)",get currentRaw(){return e.overrides["--sf-center-gutter"]},onRawSet:ct=>e.onSet("--sf-center-gutter",ct)})}d(Ie,Ye)};L(We,Ie=>{t(A)&&Ie(Qe)})}var dt=r(ie,4),gt=s(dt),kt=r(s(gt),2),wt=s(kt),mt=r(gt,2);{var te=Ie=>{var Ye=Tm(),nt=fe(Ye);{let Ae=u(()=>"--sf-grid-min"in e.overrides);yt(nt,{label:"Grid min cell width",get value(){return t(m)},min:8,max:40,step:.5,unit:"rem",help:"sf-grid minimum column width — browser auto-fills columns",get overridden(){return t(Ae)},onChange:U=>e.onSet("--sf-grid-min",`${U}rem`),onReset:()=>e.onReset("--sf-grid-min")})}var Le=r(nt,2),Fe=r(s(Le),2);oe(Fe,20,()=>[{label:"xs",token:"--sf-grid-min-xs",def:10},{label:"s",token:"--sf-grid-min-s",def:13},{label:"m",token:"--sf-grid-min-m",def:16},{label:"l",token:"--sf-grid-min-l",def:20},{label:"xl",token:"--sf-grid-min-xl",def:24},{label:"2xl",token:"--sf-grid-min-2xl",def:28}],Ae=>Ae.token,(Ae,U)=>{{let J=u(()=>o(e.overrides[U.token],U.def)),ge=u(()=>U.token in e.overrides);yt(Ae,{get label(){return U.label},get value(){return t(J)},min:6,max:40,step:.5,unit:"rem",get overridden(){return t(ge)},onChange:F=>e.onSet(U.token,`${F}rem`),onReset:()=>e.onReset(U.token)})}});var ct=r(Le,2),tt=r(s(ct),2);oe(tt,20,()=>Array.from({length:8}),fn,(Ae,U)=>{var J=Rm();d(Ae,J)}),_(Ae=>lt(tt,Ae),[()=>`grid-template-columns: repeat(auto-fill, minmax(${Math.min(t(m)*16*.3,120)}px, 1fr))`]),d(Ie,Ye)};L(mt,Ie=>{t(B)&&Ie(te)})}var N=r(dt,4),V=s(N),ue=r(s(V),2),ye=s(ue),st=r(V,2);{var Ke=Ie=>{var Ye=Mm(),nt=fe(Ye),Le=s(nt),Fe=r(s(Le),2);{let Z=u(()=>"--sf-header-height-mobile"in e.overrides);yt(Fe,{label:"",get value(){return t(h)},min:2,max:8,step:.25,unit:"rem",get overridden(){return t(Z)},onChange:ne=>e.onSet("--sf-header-height-mobile",`${ne}rem`),onReset:()=>e.onReset("--sf-header-height-mobile")})}var ct=r(Le,2),tt=r(s(ct),2);{let Z=u(()=>"--sf-header-height-desktop"in e.overrides);yt(tt,{label:"",get value(){return t(v)},min:3,max:10,step:.25,unit:"rem",get overridden(){return t(Z)},onChange:ne=>e.onSet("--sf-header-height-desktop",`${ne}rem`),onReset:()=>e.onReset("--sf-header-height-desktop")})}var Ae=r(nt,2),U=s(Ae),J=r(s(U),2);oe(J,20,()=>[1,2,3],Z=>Z,(Z,ne)=>{var re=Dm();d(Z,re)});var ge=r(U,2),F=s(ge);_(Z=>{lt(U,Z),y(F,`${t(h)??""}rem mobile · ${t(v)??""}rem desktop`)},[()=>`height: ${Math.min(t(h)*12,64)}px`]),d(Ie,Ye)};L(st,Ie=>{t(q)&&Ie(Ke)})}var I=r(N,4),X=s(I),ae=r(s(X),2),Pe=s(ae),Te=r(X,2);{var ut=Ie=>{var Ye=Nm(),nt=r(fe(Ye),2),Le=s(nt),Fe=r(s(Le),2);{let Ae=u(()=>"--sf-sticky-offset-mobile"in e.overrides);yt(Fe,{label:"",get value(){return t(k)},min:0,max:12,step:.25,unit:"rem",get overridden(){return t(Ae)},onChange:U=>e.onSet("--sf-sticky-offset-mobile",`${U}rem`),onReset:()=>e.onReset("--sf-sticky-offset-mobile"),rawDefault:"var(--sf-header-height-mobile)",get currentRaw(){return e.overrides["--sf-sticky-offset-mobile"]},onRawSet:U=>e.onSet("--sf-sticky-offset-mobile",U)})}var ct=r(Le,2),tt=r(s(ct),2);{let Ae=u(()=>"--sf-sticky-offset-desktop"in e.overrides);yt(tt,{label:"",get value(){return t(S)},min:0,max:12,step:.25,unit:"rem",get overridden(){return t(Ae)},onChange:U=>e.onSet("--sf-sticky-offset-desktop",`${U}rem`),onReset:()=>e.onReset("--sf-sticky-offset-desktop"),rawDefault:"var(--sf-header-height-desktop)",get currentRaw(){return e.overrides["--sf-sticky-offset-desktop"]},onRawSet:U=>e.onSet("--sf-sticky-offset-desktop",U)})}d(Ie,Ye)};L(Te,Ie=>{t(T)&&Ie(ut)})}var je=r(I,4),it=s(je),at=r(s(it),2),ft=s(at),Ge=r(it,2);{var Pt=Ie=>{var Ye=Fm(),nt=fe(Ye);{let Ae=u(()=>"--sf-sidebar-width"in e.overrides);yt(nt,{label:"Sidebar width",get value(){return t(b)},min:10,max:32,step:.5,unit:"rem",help:"--sf-sidebar-width — default sidebar / drawer width",get overridden(){return t(Ae)},onChange:U=>e.onSet("--sf-sidebar-width",`${U}rem`),onReset:()=>e.onReset("--sf-sidebar-width")})}var Le=r(nt,2),Fe=s(Le),ct=s(Fe),tt=s(ct);_(Ae=>{lt(Fe,Ae),y(tt,`${t(b)??""}rem`)},[()=>`width: ${Math.min(t(b)*3.5,100)}px`]),d(Ie,Ye)};L(Ge,Ie=>{t(E)&&Ie(Pt)})}var jt=r(je,4),ta=s(jt),Dt=r(s(ta),2),zt=s(Dt),ia=r(ta,2);{var ca=Ie=>{var Ye=jm();oe(Ye,21,()=>R,nt=>nt.token,(nt,Le)=>{{let Fe=u(()=>j(t(Le))),ct=u(()=>t(Le).token in e.overrides);yt(nt,{get label(){return t(Le).label},get value(){return t(Fe)},get min(){return t(Le).min},get max(){return t(Le).max},get step(){return t(Le).step},get unit(){return t(Le).unit},get help(){return t(Le).token},get overridden(){return t(ct)},onChange:tt=>e.onSet(t(Le).token,t(Le).unit?`${tt}${t(Le).unit}`:String(tt)),onReset:()=>e.onReset(t(Le).token)})}}),d(Ie,Ye)};L(ia,Ie=>{t(C)&&Ie(ca)})}var da=r(jt,4),_e=s(da),bt=r(s(_e),2),Et=s(bt),Je=r(_e,2);{var St=Ie=>{var Ye=Gm(),nt=s(Ye),Le=r(s(nt),2);{let we=u(()=>"--sf-switcher-threshold"in e.overrides);yt(Le,{label:"Threshold",get value(){return t(M)},min:10,max:60,step:1,unit:"rem",help:"--sf-switcher-threshold — width below which .sf-switcher stacks vertically",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-switcher-threshold",`${de}rem`),onReset:()=>e.onReset("--sf-switcher-threshold")})}var Fe=r(nt,2),ct=r(s(Fe),2);{let we=u(()=>"--sf-sidebar-min-width"in e.overrides);yt(ct,{label:"Content min width",get value(){return t(Y)},min:20,max:80,step:1,unit:"%",help:"--sf-sidebar-min-width — minimum width of the .sf-sidebar content column before it wraps",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-sidebar-min-width",`${de}%`),onReset:()=>e.onReset("--sf-sidebar-min-width")})}var tt=r(Fe,2),Ae=r(s(tt),2);oe(Ae,16,()=>[{label:"Align",token:"--sf-cluster-align",def:"center",opts:["flex-start","center","flex-end","stretch","baseline"]},{label:"Justify",token:"--sf-cluster-justify",def:"flex-start",opts:["flex-start","center","flex-end","space-between","space-around"]}],we=>we.token,(we,de)=>{var ce=el(),Ee=s(ce),xt=s(Ee),Lt=r(Ee,2);oe(Lt,20,()=>de.opts,Tt=>Tt,(Tt,Re)=>{var Ze=$n(),Ct=s(Ze),It={};_(()=>{y(Ct,Re),It!==(It=Re)&&(Ze.value=(Ze.__value=Re)??"")}),d(Tt,Ze)});var Rt;Da(Lt);var aa=r(Lt,2);{var sa=Tt=>{var Re=js();x("click",Re,()=>e.onReset(de.token)),d(Tt,Re)};L(aa,Tt=>{de.token in e.overrides&&Tt(sa)})}_(()=>{y(xt,de.label),Rt!==(Rt=e.overrides[de.token]??de.def)&&(Lt.value=(Lt.__value=e.overrides[de.token]??de.def)??"",Ia(Lt,e.overrides[de.token]??de.def))}),x("change",Lt,Tt=>{const Re=Tt.target.value;Re===de.def?e.onReset(de.token):e.onSet(de.token,Re)}),d(we,ce)});var U=r(tt,2),J=r(s(U),2);{let we=u(()=>"--sf-equal-min-col"in e.overrides);yt(J,{label:"Min column",get value(){return t(Oe)},min:6,max:36,step:.5,unit:"rem",help:"--sf-equal-min-col — minimum column width for .sf-equal",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-equal-min-col",`${de}rem`),onReset:()=>e.onReset("--sf-equal-min-col")})}var ge=r(J,2),F=r(s(ge),2);oe(F,20,()=>[{label:"2-col",token:"--sf-equal-min-col-2",def:28},{label:"3-col",token:"--sf-equal-min-col-3",def:15},{label:"4-col",token:"--sf-equal-min-col-4",def:16},{label:"6-col",token:"--sf-equal-min-col-6",def:10}],we=>we.token,(we,de)=>{{let ce=u(()=>o(e.overrides[de.token],de.def)),Ee=u(()=>de.token in e.overrides);yt(we,{get label(){return de.label},get value(){return t(ce)},min:4,max:36,step:.5,unit:"rem",get overridden(){return t(Ee)},onChange:xt=>e.onSet(de.token,`${xt}rem`),onReset:()=>e.onReset(de.token)})}});var Z=r(U,2),ne=r(s(Z),2);{let we=u(()=>"--sf-cover-min-height"in e.overrides);yt(ne,{label:"Min height",get value(){return t(De)},min:20,max:100,step:1,unit:"dvh",help:"--sf-cover-min-height — minimum height of the .sf-cover layout",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-cover-min-height",`${de}dvh`),onReset:()=>e.onReset("--sf-cover-min-height")})}var re=r(Z,2),ve=r(s(re),4);oe(ve,20,()=>Ce,we=>we,(we,de)=>{var ce=tl(),Ee=s(ce);_(xt=>{Ve(ce,1,xt),y(Ee,de)},[()=>`py-1 rounded-lg text-[9px] border transition-all cursor-pointer font-mono ${t(se).replace(/\s/g,"")===de.replace(/\s/g,"")?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`]),x("click",ce,()=>de==="16 / 9"?e.onReset("--sf-frame-ratio"):e.onSet("--sf-frame-ratio",de)),d(we,ce)});var Be=r(re,2),pe=r(s(Be),4);oe(pe,21,()=>H,we=>we.value,(we,de)=>{var ce=tl(),Ee=s(ce);_(()=>{Ve(ce,1,`py-1 rounded-lg text-[9px] border transition-all cursor-pointer ${t(Se)===t(de).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Ee,t(de).label)}),x("click",ce,()=>t(de).value==="max-content"?e.onReset("--sf-reel-item-width"):e.onSet("--sf-reel-item-width",t(de).value)),d(we,ce)});var ze=r(pe,2),$e=r(s(ze),2),Bt=r($e,2);{var Ut=we=>{var de=js();x("click",de,()=>e.onReset("--sf-reel-height")),d(we,de)};L(Bt,we=>{"--sf-reel-height"in e.overrides&&we(Ut)})}var pt=r(Be,2),et=r(s(pt),2);{let we=u(()=>"--sf-imposter-margin"in e.overrides);yt(et,{label:"Margin",get value(){return t(Me)},min:0,max:4,step:.125,unit:"rem",help:"--sf-imposter-margin — viewport inset for the centered .sf-imposter overlay",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-imposter-margin",`${de}rem`),onReset:()=>e.onReset("--sf-imposter-margin"),rawDefault:"var(--sf-space-m)",get currentRaw(){return e.overrides["--sf-imposter-margin"]},onRawSet:de=>e.onSet("--sf-imposter-margin",de)})}var ht=r(pt,2),Ot=r(s(ht),2);{let we=u(()=>"--sf-content-width"in e.overrides);yt(Ot,{label:"Content width",get value(){return t(be)},min:40,max:120,step:1,unit:"rem",help:"--sf-content-width — default reading column width in .sf-content-grid",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-content-width",`${de}rem`),onReset:()=>e.onReset("--sf-content-width"),rawDefault:"var(--sf-container-default)",get currentRaw(){return e.overrides["--sf-content-width"]},onRawSet:de=>e.onSet("--sf-content-width",de)})}var He=r(Ot,2);{let we=u(()=>"--sf-breakout-width"in e.overrides);yt(He,{label:"Breakout width",get value(){return t(xe)},min:50,max:160,step:1,unit:"rem",help:"--sf-breakout-width — wide breakout column width in .sf-content-grid",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-breakout-width",`${de}rem`),onReset:()=>e.onReset("--sf-breakout-width"),rawDefault:"var(--sf-container-wide)",get currentRaw(){return e.overrides["--sf-breakout-width"]},onRawSet:de=>e.onSet("--sf-breakout-width",de)})}var qe=r(ht,2),_t=r(s(qe),2);{let we=u(()=>"--sf-alternate-inner-gap"in e.overrides);yt(_t,{label:"Inner gap",get value(){return t(Q)},min:0,max:4,step:.125,unit:"rem",help:"--sf-alternate-inner-gap — gap between media and text within an .sf-alternate row",get overridden(){return t(we)},onChange:de=>e.onSet("--sf-alternate-inner-gap",`${de}rem`),onReset:()=>e.onReset("--sf-alternate-inner-gap"),rawDefault:"var(--sf-gap)",get currentRaw(){return e.overrides["--sf-alternate-inner-gap"]},onRawSet:de=>e.onSet("--sf-alternate-inner-gap",de)})}_(()=>Xt($e,e.overrides["--sf-reel-height"]??"")),x("input",$e,we=>{const de=we.target.value.trim();de?e.onSet("--sf-reel-height",de):e.onReset("--sf-reel-height")}),d(Ie,Ye)};L(Je,Ie=>{t(z)&&Ie(St)})}var ot=r(da,4),rt=s(ot),Gt=r(s(rt),2),Mt=s(Gt),Nt=r(rt,2);{var Vt=Ie=>{var Ye=qm(),nt=r(s(Ye),2);oe(nt,16,()=>[{label:"Square",token:"--sf-ratio-square",def:"1"},{label:"Portrait",token:"--sf-ratio-portrait",def:"3 / 4"},{label:"3:2",token:"--sf-ratio-3-2",def:"3 / 2"},{label:"4:3",token:"--sf-ratio-4-3",def:"4 / 3"},{label:"Video",token:"--sf-ratio-video",def:"16 / 9"},{label:"Cinema",token:"--sf-ratio-cinema",def:"21 / 9"},{label:"Golden",token:"--sf-ratio-golden",def:"1.618 / 1"}],Le=>Le.token,(Le,Fe)=>{var ct=Hm(),tt=s(ct),Ae=s(tt),U=r(tt,2),J=r(U,2);{var ge=F=>{var Z=js();x("click",Z,()=>e.onReset(Fe.token)),d(F,Z)};L(J,F=>{Fe.token in e.overrides&&F(ge)})}_(()=>{y(Ae,Fe.label),Xt(U,e.overrides[Fe.token]??""),$(U,"placeholder",Fe.def)}),x("input",U,F=>{const Z=F.target.value.trim();Z?e.onSet(Fe.token,Z):e.onReset(Fe.token)}),d(Le,ct)}),d(Ie,Ye)};L(Nt,Ie=>{t(O)&&Ie(Vt)})}var Wt=r(ot,4),fa=s(Wt),La=r(s(fa),2),ka=s(La),Va=r(fa,2);{var vt=Ie=>{var Ye=Vm(),nt=r(s(Ye),2);oe(nt,16,()=>[{label:"Fit",token:"--sf-bg-fit",placeholder:"cover",opts:["cover","contain","fill","none","scale-down"]},{label:"Position",token:"--sf-bg-position",placeholder:"50% 50%",opts:["50% 50%","top","bottom","left","right","center"]}],tt=>tt.token,(tt,Ae)=>{var U=el(),J=s(U),ge=s(J),F=r(J,2);oe(F,20,()=>Ae.opts,ve=>ve,(ve,Be)=>{var pe=$n(),ze=s(pe),$e={};_(()=>{y(ze,Be),$e!==($e=Be)&&(pe.value=(pe.__value=Be)??"")}),d(ve,pe)});var Z;Da(F);var ne=r(F,2);{var re=ve=>{var Be=js();x("click",Be,()=>e.onReset(Ae.token)),d(ve,Be)};L(ne,ve=>{Ae.token in e.overrides&&ve(re)})}_(()=>{y(ge,Ae.label),Z!==(Z=e.overrides[Ae.token]??Ae.placeholder)&&(F.value=(F.__value=e.overrides[Ae.token]??Ae.placeholder)??"",Ia(F,e.overrides[Ae.token]??Ae.placeholder))}),x("change",F,ve=>{const Be=ve.target.value;Be===Ae.placeholder?e.onReset(Ae.token):e.onSet(Ae.token,Be)}),d(tt,U)});var Le=r(nt,2);{let tt=u(()=>o(e.overrides["--sf-bg-inset"],0)),Ae=u(()=>"--sf-bg-inset"in e.overrides);yt(Le,{label:"Inset",get value(){return t(tt)},min:0,max:4,step:.25,unit:"rem",help:"--sf-bg-inset — inset the background from the container edges",get overridden(){return t(Ae)},onChange:U=>e.onSet("--sf-bg-inset",`${U}rem`),onReset:()=>e.onReset("--sf-bg-inset")})}var Fe=r(Le,2);{let tt=u(()=>o(e.overrides["--sf-bg-radius"],0)),Ae=u(()=>"--sf-bg-radius"in e.overrides);yt(Fe,{label:"Radius",get value(){return t(tt)},min:0,max:4,step:.125,unit:"rem",help:"--sf-bg-radius — corner radius of the background element",get overridden(){return t(Ae)},onChange:U=>e.onSet("--sf-bg-radius",`${U}rem`),onReset:()=>e.onReset("--sf-bg-radius")})}var ct=r(Fe,2);{let tt=u(()=>o(e.overrides["--sf-bg-z"],-2)),Ae=u(()=>"--sf-bg-z"in e.overrides);yt(ct,{label:"Z-index",get value(){return t(tt)},min:-10,max:0,step:1,help:"--sf-bg-z — stack order of the background pseudo-element (typically negative)",get overridden(){return t(Ae)},onChange:U=>e.onSet("--sf-bg-z",String(U)),onReset:()=>e.onReset("--sf-bg-z")})}d(Ie,Ye)};L(Va,Ie=>{t(G)&&Ie(vt)})}_(()=>{$(le,"aria-expanded",t(P)),y(me,t(P)?"▲":"▼"),$(Ue,"aria-expanded",t(A)),y(Xe,t(A)?"▲":"▼"),$(gt,"aria-expanded",t(B)),y(wt,t(B)?"▲":"▼"),$(V,"aria-expanded",t(q)),y(ye,t(q)?"▲":"▼"),$(X,"aria-expanded",t(T)),y(Pe,t(T)?"▲":"▼"),$(it,"aria-expanded",t(E)),y(ft,t(E)?"▲":"▼"),$(ta,"aria-expanded",t(C)),y(zt,t(C)?"▲":"▼"),$(_e,"aria-expanded",t(z)),y(Et,t(z)?"▲":"▼"),$(rt,"aria-expanded",t(O)),y(Mt,t(O)?"▲":"▼"),$(fa,"aria-expanded",t(G)),y(ka,t(G)?"▲":"▼")}),x("click",le,()=>{w(P,!t(P))}),x("click",Ue,()=>{w(A,!t(A))}),x("click",gt,()=>{w(B,!t(B))}),x("click",V,()=>{w(q,!t(q))}),x("click",X,()=>{w(T,!t(T))}),x("click",it,()=>{w(E,!t(E))}),x("click",ta,()=>{w(C,!t(C))}),x("click",_e,()=>{w(z,!t(z))}),x("click",rt,()=>{w(O,!t(O))}),x("click",fa,()=>{w(G,!t(G))}),d(a,D),ea()}oa(["click","change","input"]);var Ym=g('

Drives --sf-color-border--strong, --subtle, --translucent automatically.

',1),Zm=g('
'),Xm=g('
',1),Jm=g(''),Qm=g('
'),$m=g('
Border sample
',1),ev=g('
Color
',1),tv=g('
Ring color
Focus preview
',1),av=g('
'),ov=g('
'),sv=g('
'),rv=g('
'),nv=g('
'),lv=g('
Radius
');function iv(a,e){$t(e,!0);const o=["solid","dashed","dotted"],n=["xs","s","m","l","xl","2xl","full"],l={xs:2,s:4,m:8,l:12,xl:16,"2xl":24,full:9999},i=[{step:"xs",name:"--sf-radius-xs",default:2,max:16,step_size:.5,rawDefault:"calc(2px * var(--sf-radius-scale))"},{step:"s",name:"--sf-radius-s",default:4,max:24,step_size:.5,rawDefault:"calc(4px * var(--sf-radius-scale))"},{step:"m",name:"--sf-radius-m",default:8,max:32,step_size:1,rawDefault:"calc(8px * var(--sf-radius-scale))"},{step:"l",name:"--sf-radius-l",default:12,max:48,step_size:1,rawDefault:"calc(12px * var(--sf-radius-scale))"},{step:"xl",name:"--sf-radius-xl",default:16,max:64,step_size:1,rawDefault:"calc(16px * var(--sf-radius-scale))"},{step:"2xl",name:"--sf-radius-2xl",default:24,max:80,step_size:2,rawDefault:"calc(24px * var(--sf-radius-scale))"}],c=[{label:"Button radius",token:"--sf-btn-radius",unit:"rem",min:0,max:2,step:.05,default:.5,rawDefault:"var(--sf-radius-m)",help:"--sf-btn-radius"},{label:"Button padding block",token:"--sf-btn-padding-block",unit:"rem",min:0,max:1,step:.025,default:.375,rawDefault:"var(--sf-space-xs)",help:"--sf-btn-padding-block"},{label:"Button padding inline",token:"--sf-btn-padding-inline",unit:"rem",min:0,max:2,step:.025,default:1,rawDefault:"var(--sf-space-m)",help:"--sf-btn-padding-inline"},{label:"Field radius",token:"--sf-field-radius",unit:"rem",min:0,max:2,step:.05,default:.5,rawDefault:"var(--sf-radius-m)",help:"--sf-field-radius"},{label:"Field padding block",token:"--sf-field-padding-block",unit:"rem",min:0,max:1,step:.025,default:.375,rawDefault:"var(--sf-space-xs)",help:"--sf-field-padding-block"},{label:"Field padding inline",token:"--sf-field-padding-inline",unit:"rem",min:0,max:2,step:.025,default:.75,rawDefault:"var(--sf-space-s)",help:"--sf-field-padding-inline"}],f=qo.borders??[];let p=K(!1),m=K(!1),h=K(!1),v=K(!1),b=K(!1),k=K(!1),S=K(!1),R=K(!1),P=K(!1);function A(Je,St,ot){if(!Je)return St;const rt=parseFloat(ot?Je.replace(ot,""):Je);return isNaN(rt)?St:rt}let B=u(()=>A(e.overrides["--sf-radius-scale"],1)),q=u(()=>A(e.overrides["--sf-border-scale"],1)),T=u(()=>A(e.overrides["--sf-focus-ring-width"],2,"px")),E=u(()=>A(e.overrides["--sf-focus-ring-offset"],2,"px")),C=u(()=>A(e.overrides["--sf-divider-width"]?.replace("px",""),1)),z=u(()=>A(e.overrides["--sf-divider-gap"]?.replace("rem",""),1)),G=u(()=>e.overrides["--sf-color-border"]??""),O=u(()=>e.overrides["--sf-border-style"]??"solid"),j=u(()=>e.overrides["--sf-focus-ring-color"]??""),M=u(()=>e.overrides["--sf-divider-color"]??"");function Y(Je,St){return e.overrides[Je]??St}function Oe(Je){const St=e.overrides[Je.name];if(!St||/^(var|calc|clamp)\(/.test(St.trim()))return Je.default;const ot=parseFloat(St);return isNaN(ot)?Je.default:ot}function De(Je){const St=e.overrides[Je.token];if(!St||/^(var|calc|clamp)\(/.test(St.trim()))return Je.default;const ot=parseFloat(St);return isNaN(ot)?Je.default:ot}var Me=lv(),xe=s(Me),be=s(xe),Q=r(s(be),2),se=s(Q),Se=r(be,2);{var Ce=Je=>{var St=Ym(),ot=fe(St);{let rt=u(()=>"--sf-color-border"in e.overrides);Ja(ot,{token:"--sf-color-border",get value(){return t(G)},placeholder:"auto-derived",get isOverridden(){return t(rt)},onSet:Gt=>e.onSet("--sf-color-border",Gt),onReset:()=>e.onReset("--sf-color-border")})}d(Je,St)};L(Se,Je=>{t(p)&&Je(Ce)})}var H=r(xe,4),D=s(H),ee=r(s(D),2),le=s(ee),W=r(D,2);{var me=Je=>{var St=Xm(),ot=fe(St);{let Nt=u(()=>"--sf-border-scale"in e.overrides);yt(ot,{label:"Border scale",get value(){return t(q)},min:0,max:4,step:.25,help:"Multiplier applied to all border widths. 0 hides all borders.",get overridden(){return t(Nt)},onChange:Vt=>e.onSet("--sf-border-scale",String(Vt)),onReset:()=>e.onReset("--sf-border-scale")})}var rt=r(ot,2);{let Nt=u(()=>A(e.overrides["--sf-border-width-hairline"]?.replace("px",""),.5)),Vt=u(()=>"--sf-border-width-hairline"in e.overrides);yt(rt,{label:"Hairline",get value(){return t(Nt)},min:0,max:1,step:.25,unit:"px",help:"--sf-border-width-hairline — ultra-thin border for retina displays",get overridden(){return t(Vt)},onChange:Wt=>e.onSet("--sf-border-width-hairline",`${Wt}px`),onReset:()=>e.onReset("--sf-border-width-hairline")})}var Gt=r(rt,2);{let Nt=u(()=>A(e.overrides["--sf-box-border-width"]?.replace("px",""),0)),Vt=u(()=>"--sf-box-border-width"in e.overrides);yt(Gt,{label:"Box border",get value(){return t(Nt)},min:0,max:4,step:.5,unit:"px",help:"--sf-box-border-width — box-shadow border drawn without affecting layout",get overridden(){return t(Vt)},onChange:Wt=>e.onSet("--sf-box-border-width",`${Wt}px`),onReset:()=>e.onReset("--sf-box-border-width")})}var Mt=r(Gt,2);oe(Mt,20,()=>[1,2,3,4],Nt=>Nt,(Nt,Vt)=>{var Wt=Zm(),fa=s(Wt),La=s(fa),ka=r(fa,2),Va=r(ka,2),vt=s(Va);_((Ie,Ye)=>{y(La,`${Vt??""}px →`),lt(ka,Ie),y(vt,`${Ye??""}px`)},[()=>`height: ${Math.max(Vt*t(q),.5)}px`,()=>(Vt*t(q)).toFixed(1)]),d(Nt,Wt)}),d(Je,St)};L(W,Je=>{t(m)&&Je(me)})}var ke=r(H,4),he=s(ke),ie=r(s(he),2),Ue=s(ie),Ne=r(he,2);{var Xe=Je=>{var St=$m(),ot=fe(St);oe(ot,20,()=>[{label:"Border",token:"--sf-border-style",default:"solid"},{label:"Divider",token:"--sf-divider-style",default:"solid"}],Vt=>Vt.token,(Vt,Wt)=>{var fa=Qm(),La=s(fa),ka=s(La),Va=r(La,2);oe(Va,20,()=>o,vt=>vt,(vt,Ie)=>{const Ye=u(()=>Y(Wt.token,Wt.default));var nt=Jm(),Le=s(nt),Fe=r(Le);_(()=>{Ve(nt,1,`px-2 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer text-center ${t(Ye)===Ie?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),lt(Le,`width: 20px; height: 0; border-bottom: 2px ${Ie} currentColor; opacity: 0.7`),y(Fe,` ${Ie??""}`)}),x("click",nt,()=>Ie===Wt.default?e.onReset(Wt.token):e.onSet(Wt.token,Ie)),d(vt,nt)}),_(()=>y(ka,Wt.label)),d(Vt,fa)});var rt=r(ot,2),Gt=s(rt),Mt=r(Gt,2),Nt=s(Mt);_((Vt,Wt)=>{lt(Gt,Vt),y(Nt,`${Wt??""}px · ${t(O)??""}`)},[()=>`border: ${Math.max(t(q),.5)}px ${t(O)} ${t(G)||"var(--sf-color-border, #64748b)"}`,()=>(1*t(q)).toFixed(1)]),d(Je,St)};L(Ne,Je=>{t(h)&&Je(Xe)})}var We=r(ke,4),Qe=s(We),dt=r(s(Qe),2),gt=s(dt),kt=r(Qe,2);{var wt=Je=>{var St=ev(),ot=fe(St),rt=r(s(ot),2);{let Nt=u(()=>"--sf-divider-color"in e.overrides);Ja(rt,{token:"--sf-divider-color",get value(){return t(M)},placeholder:"inherits border",get isOverridden(){return t(Nt)},onSet:Vt=>e.onSet("--sf-divider-color",Vt),onReset:()=>e.onReset("--sf-divider-color")})}var Gt=r(ot,2);{let Nt=u(()=>"--sf-divider-width"in e.overrides);yt(Gt,{label:"Width",get value(){return t(C)},min:.5,max:4,step:.5,unit:"px",help:"--sf-divider-width",get overridden(){return t(Nt)},onChange:Vt=>e.onSet("--sf-divider-width",`${Vt}px`),onReset:()=>e.onReset("--sf-divider-width"),rawDefault:"var(--sf-border-width-1)",get currentRaw(){return e.overrides["--sf-divider-width"]},onRawSet:Vt=>e.onSet("--sf-divider-width",Vt)})}var Mt=r(Gt,2);{let Nt=u(()=>"--sf-divider-gap"in e.overrides);yt(Mt,{label:"Gap",get value(){return t(z)},min:0,max:4,step:.125,unit:"rem",help:"--sf-divider-gap — spacing around divider lines",get overridden(){return t(Nt)},onChange:Vt=>e.onSet("--sf-divider-gap",`${Vt}rem`),onReset:()=>e.onReset("--sf-divider-gap"),rawDefault:"var(--sf-space-m)",get currentRaw(){return e.overrides["--sf-divider-gap"]},onRawSet:Vt=>e.onSet("--sf-divider-gap",Vt)})}d(Je,St)};L(kt,Je=>{t(v)&&Je(wt)})}var mt=r(We,4),te=s(mt),N=r(s(te),2),V=s(N),ue=r(te,2);{var ye=Je=>{var St=tv(),ot=fe(St);{let Wt=u(()=>"--sf-focus-ring-width"in e.overrides);yt(ot,{label:"Ring width",get value(){return t(T)},min:0,max:6,step:.5,unit:"px",help:"Thickness of the keyboard focus indicator",get overridden(){return t(Wt)},onChange:fa=>e.onSet("--sf-focus-ring-width",`${fa}px`),onReset:()=>e.onReset("--sf-focus-ring-width")})}var rt=r(ot,2);{let Wt=u(()=>"--sf-focus-ring-offset"in e.overrides);yt(rt,{label:"Ring offset",get value(){return t(E)},min:0,max:8,step:.5,unit:"px",help:"Gap between element edge and focus ring",get overridden(){return t(Wt)},onChange:fa=>e.onSet("--sf-focus-ring-offset",`${fa}px`),onReset:()=>e.onReset("--sf-focus-ring-offset")})}var Gt=r(rt,2),Mt=r(s(Gt),2);{let Wt=u(()=>"--sf-focus-ring-color"in e.overrides);Ja(Mt,{token:"--sf-focus-ring-color",get value(){return t(j)},placeholder:"default (action)",get isOverridden(){return t(Wt)},onSet:fa=>e.onSet("--sf-focus-ring-color",fa),onReset:()=>e.onReset("--sf-focus-ring-color")})}var Nt=r(Gt,2),Vt=s(Nt);_(()=>lt(Vt,`outline: ${t(T)}px solid ${t(j)||"oklch(0.7 0.2 235)"}; outline-offset: ${t(E)}px`)),d(Je,St)};L(ue,Je=>{t(b)&&Je(ye)})}var st=r(mt,6),Ke=s(st),I=r(s(Ke),2),X=s(I),ae=r(Ke,2);{var Pe=Je=>{var St=av();oe(St,21,()=>i,ot=>ot.name,(ot,rt)=>{{let Gt=u(()=>Oe(t(rt))),Mt=u(()=>t(rt).name in e.overrides);yt(ot,{get label(){return t(rt).step},get value(){return t(Gt)},min:0,get max(){return t(rt).max},get step(){return t(rt).step_size},unit:"px",get overridden(){return t(Mt)},onChange:Nt=>e.onSet(t(rt).name,`${Nt}px`),onReset:()=>e.onReset(t(rt).name),get rawDefault(){return t(rt).rawDefault},get currentRaw(){return e.overrides[t(rt).name]},onRawSet:Nt=>e.onSet(t(rt).name,Nt)})}}),d(Je,St)};L(ae,Je=>{t(R)&&Je(Pe)})}var Te=r(st,2),ut=s(Te),je=r(s(ut),2),it=s(je),at=r(ut,2);{var ft=Je=>{var St=sv(),ot=s(St);oe(ot,20,()=>n,rt=>rt,(rt,Gt)=>{const Mt=u(()=>l[Gt]??6),Nt=u(()=>Gt==="full"?9999:t(Mt)*t(B));var Vt=ov(),Wt=s(Vt),fa=r(Wt,2),La=s(fa);_(ka=>{lt(Wt,ka),y(La,Gt)},[()=>`border-radius: ${Math.min(t(Nt),9999)}px`]),d(rt,Vt)}),d(Je,St)};L(at,Je=>{t(S)&&Je(ft)})}var Ge=r(Te,4),Pt=s(Ge),jt=r(s(Pt),2),ta=s(jt),Dt=r(Pt,2);{var zt=Je=>{var St=rv();oe(St,21,()=>c,ot=>ot.token,(ot,rt)=>{{let Gt=u(()=>De(t(rt))),Mt=u(()=>t(rt).token in e.overrides);yt(ot,{get label(){return t(rt).label},get value(){return t(Gt)},get min(){return t(rt).min},get max(){return t(rt).max},get step(){return t(rt).step},get unit(){return t(rt).unit},get help(){return t(rt).help},get overridden(){return t(Mt)},onChange:Nt=>e.onSet(t(rt).token,`${Nt}${t(rt).unit}`),onReset:()=>e.onReset(t(rt).token),get rawDefault(){return t(rt).rawDefault},get currentRaw(){return e.overrides[t(rt).token]},onRawSet:Nt=>e.onSet(t(rt).token,Nt)})}}),d(Je,St)};L(Dt,Je=>{t(P)&&Je(zt)})}var ia=r(Ge,4),ca=s(ia),da=r(s(ca),2),_e=s(da),bt=r(ca,2);{var Et=Je=>{var St=nv();oe(St,21,()=>f,ot=>ot.name,(ot,rt)=>{Vo(ot,{get knob(){return t(rt)},get overrides(){return e.overrides},onChange:(Gt,Mt)=>Mt===null?e.onReset(Gt):e.onSet(Gt,Mt)})}),d(Je,St)};L(bt,Je=>{t(k)&&Je(Et)})}_(()=>{$(be,"aria-expanded",t(p)),y(se,t(p)?"▲":"▼"),$(D,"aria-expanded",t(m)),y(le,t(m)?"▲":"▼"),$(he,"aria-expanded",t(h)),y(Ue,t(h)?"▲":"▼"),$(Qe,"aria-expanded",t(v)),y(gt,t(v)?"▲":"▼"),$(te,"aria-expanded",t(b)),y(V,t(b)?"▲":"▼"),$(Ke,"aria-expanded",t(R)),y(X,t(R)?"▲":"▼"),$(ut,"aria-expanded",t(S)),y(it,t(S)?"▲":"▼"),$(Pt,"aria-expanded",t(P)),y(ta,t(P)?"▲":"▼"),$(ca,"aria-expanded",t(k)),y(_e,t(k)?"▲":"▼")}),x("click",be,()=>{w(p,!t(p))}),x("click",D,()=>{w(m,!t(m))}),x("click",he,()=>{w(h,!t(h))}),x("click",Qe,()=>{w(v,!t(v))}),x("click",te,()=>{w(b,!t(b))}),x("click",Ke,()=>{w(R,!t(R))}),x("click",ut,()=>{w(S,!t(S))}),x("click",Pt,()=>{w(P,!t(P))}),x("click",ca,()=>{w(k,!t(k))}),d(a,Me),ea()}oa(["click"]);var cv=g('
'),dv=g('
Shadow color

Warm, cool or brand-tinted shadows. Default uses neutral hue.

'),fv=g('
Glow color

Which brand color radiates the glow. Defaults to primary.

'),uv=g('

Glow disabled.

'),pv=g('
Shadow glow
Ambient glow on elevated surfaces
',1),mv=g('
'),vv=g('
');function hv(a,e){$t(e,!0);const o=["xs","s","m","l","xl","2xl"],n=qo.shadows??[];let l=u(()=>(()=>{const xe=parseFloat(e.overrides["--sf-shadow-lightness"]??"0.15");return isFinite(xe)?xe:.15})()),i=u(()=>e.overrides["--sf-shadow-color"]??""),c=u(()=>e.overrides["--sf-shadow-glow-color"]??""),f=u(()=>e.overrides["--sf-shadow-glow"]==="none"),p=K(!1),m=K(!1),h=K(!1);var v=vv(),b=s(v);oe(b,22,()=>o,xe=>xe,(xe,be,Q)=>{var se=cv(),Se=s(se),Ce=r(Se,2),H=s(Ce);_(()=>{lt(Se,`width: ${40+t(Q)*4}px; height: ${40+t(Q)*4}px; box-shadow: var(--sf-shadow-${be})`),y(H,be)}),d(xe,se)});var k=r(b,4);{let xe=u(()=>"--sf-shadow-lightness"in e.overrides);yt(k,{label:"Shadow lightness",get value(){return t(l)},min:0,max:.5,step:.01,help:"--sf-shadow-lightness — OKLCH lightness of the shadow color. Lower = darker, more visible shadows.",get overridden(){return t(xe)},onChange:be=>e.onSet("--sf-shadow-lightness",String(be)),onReset:()=>e.onReset("--sf-shadow-lightness")})}var S=r(k,4),R=s(S),P=r(s(R),2),A=s(P),B=r(R,2);{var q=xe=>{var be=dv(),Q=r(s(be),2);{let se=u(()=>"--sf-shadow-color"in e.overrides);Ja(Q,{token:"--sf-shadow-color",get value(){return t(i)},placeholder:"auto (neutral hue)",get isOverridden(){return t(se)},onSet:Se=>e.onSet("--sf-shadow-color",Se),onReset:()=>e.onReset("--sf-shadow-color")})}d(xe,be)};L(B,xe=>{t(p)&&xe(q)})}var T=r(S,4),E=s(T),C=r(s(E),2),z=s(C),G=r(E,2);{var O=xe=>{var be=pv(),Q=fe(be),se=r(s(Q),2),Se=s(se),Ce=r(Q,2);{var H=me=>{var ke=fv(),he=r(s(ke),2);{let ie=u(()=>"--sf-shadow-glow-color"in e.overrides);Ja(he,{token:"--sf-shadow-glow-color",get value(){return t(c)},placeholder:"default (primary color)",get isOverridden(){return t(ie)},onSet:Ue=>e.onSet("--sf-shadow-glow-color",Ue),onReset:()=>e.onReset("--sf-shadow-glow-color")})}d(me,ke)};L(Ce,me=>{t(f)||me(H)})}var D=r(Ce,2),ee=s(D),le=r(D,2);{var W=me=>{var ke=uv();d(me,ke)};L(le,me=>{t(f)&&me(W)})}_(()=>{$(se,"aria-label",t(f)?"Enable shadow glow":"Disable shadow glow"),Ve(se,1,`w-9 h-5 rounded-full transition-colors relative cursor-pointer ${t(f)?"bg-white/10":"bg-indigo-600"}`),Ve(Se,1,`absolute top-0.5 w-4 h-4 bg-white rounded-full shadow transition-transform ${t(f)?"translate-x-0.5":"translate-x-4"}`),lt(ee,`box-shadow: ${t(f)?"none":"var(--sf-shadow-glow)"}`)}),x("click",se,()=>{t(f)?e.onReset("--sf-shadow-glow"):e.onSet("--sf-shadow-glow","none")}),d(xe,be)};L(G,xe=>{t(m)&&xe(O)})}var j=r(T,4),M=s(j),Y=r(s(M),2),Oe=s(Y),De=r(M,2);{var Me=xe=>{var be=mv();oe(be,21,()=>n,Q=>Q.name,(Q,se)=>{Vo(Q,{get knob(){return t(se)},get overrides(){return e.overrides},onChange:(Se,Ce)=>Ce===null?e.onReset(Se):e.onSet(Se,Ce)})}),d(xe,be)};L(De,xe=>{t(h)&&xe(Me)})}_(()=>{$(R,"aria-expanded",t(p)),y(A,t(p)?"▲":"▼"),$(E,"aria-expanded",t(m)),y(z,t(m)?"▲":"▼"),$(M,"aria-expanded",t(h)),y(Oe,t(h)?"▲":"▼")}),x("click",R,()=>{w(p,!t(p))}),x("click",E,()=>{w(m,!t(m))}),x("click",M,()=>{w(h,!t(h))}),d(a,v),ea()}oa(["click"]);var gv=g('

Motion is disabled — duration & easing have no effect while scale is 0.

'),al=g(''),bv=g('(No effect while motion is disabled.)'),yv=g('
'),xv=g('

Named duration tokens. Drag to set an absolute ms value, overriding the global scale.

',1),kv=g(''),wv=g('
'),_v=g('

Edit the named easing tokens. Accepts any CSS timing function — cubic-bezier(…) or linear(…). Use “Live preview” above to feel a curve.

',1),Cv=g(''),Ov=g('
'),Sv=g('

One slider sets all five stagger delays (delay-1 through delay-5 are multiples of this base).

Stagger base
',1),Lv=g(''),Pv=g('
'),Iv=g('

Default animation-range for scroll-driven animations using the .sf-scroll-timeline utility.

',1),Bv=g('
Disable motion
Respects prefers-reduced-motion
Live preview
');function Uv(a,e){$t(e,!0);const o=[{label:"Instant",token:"--sf-duration-instant",base:100,max:300},{label:"Fast",token:"--sf-duration-fast",base:150,max:500},{label:"Normal",token:"--sf-duration-normal",base:250,max:800},{label:"Slow",token:"--sf-duration-slow",base:400,max:1200},{label:"Slower",token:"--sf-duration-slower",base:600,max:2e3}],n=[{label:"Linear",token:"--sf-ease-linear",value:"linear",preview:"M0,40 L40,0"},{label:"Ease out",token:"--sf-ease-out",value:"cubic-bezier(0.25, 0, 0.15, 1)",preview:"M0,40 C8,40 28,0 40,0"},{label:"Ease in",token:"--sf-ease-in",value:"cubic-bezier(0.5, 0, 0.75, 0.25)",preview:"M0,40 C12,40 32,32 40,0"},{label:"Ease in-out",token:"--sf-ease-in-out",value:"cubic-bezier(0.4, 0, 0.2, 1)",preview:"M0,40 C8,40 32,0 40,0"},{label:"Spring",token:"--sf-ease-spring",value:"linear(0, 0.5, 1.1, 0.95, 1.02, 1)",preview:"M0,40 C10,20 20,-4 28,-2 S38,2 40,0"},{label:"Bounce",token:"--sf-ease-bounce",value:"linear(0, 0.35 18%, 1 32%, 0.86 42%, 1.02 56%, 0.98 72%, 1)",preview:"M0,40 L12,16 L20,0 L26,6 L32,-1 L36,1 L40,0"},{label:"Elastic",token:"--sf-ease-elastic",value:"linear(0, 0.3, 1.2, 0.9, 1.05, 1)",preview:"M0,40 C8,40 16,-10 24,-2 S36,2 40,0"},{label:"Overshoot",token:"--sf-ease-overshoot",value:"linear(0, 0.6 30%, 1.08 55%, 0.98 75%, 1)",preview:"M0,40 C8,40 20,-10 40,0"}],l=["--sf-animation-delay-1","--sf-animation-delay-2","--sf-animation-delay-3","--sf-animation-delay-4","--sf-animation-delay-5"],i=qo.motion??[];let c=u(()=>(()=>{const I=parseFloat(e.overrides["--sf-motion-scale"]??"1");return isFinite(I)?I:1})()),f=u(()=>e.overrides["--sf-motion-scale"]==="0"),p=u(()=>(()=>{const I=parseFloat(e.overrides["--sf-theme-transition-duration"]?.replace("ms","")??String(300*t(c)));return isFinite(I)?I:Math.round(300*t(c))})()),m=u(()=>{const I=e.overrides[l[0]];return I?parseFloat(I.replace("ms","")):75*t(c)}),h=K(!1),v=K(0),b=K("--sf-ease-out"),k=K("--sf-duration-normal"),S=K(!1),R=K(!1),P=K(!1),A=K(!1);function B(I,X){const ae=e.overrides[I];if(ae){const Pe=parseFloat(ae);if(isFinite(Pe))return Pe}return Math.round(X*t(c))}function q(I){return e.overrides[I]??n.find(X=>X.token===I)?.value??"ease"}function T(){if(t(h))return;const I=o.find(ae=>ae.token===t(k))?.base??250,X=B(t(k),I);w(h,!0),w(v,180),setTimeout(()=>{w(v,0),setTimeout(()=>{w(h,!1)},X)},X)}function E(I){const X={};for(let ae=1;ae<=5;ae++)X[`--sf-animation-delay-${ae}`]=`${Math.round(I*ae)}ms`;e.onBulkChange(X)}function C(){const I={};for(let X=1;X<=5;X++)I[`--sf-animation-delay-${X}`]=null;e.onBulkChange(I)}var z=Bv(),G=s(z),O=r(s(G),2),j=s(O),M=r(G,2);{var Y=I=>{var X=gv();d(I,X)};L(M,I=>{t(f)&&I(Y)})}var Oe=r(M,2),De=r(s(Oe),2),Me=s(De),xe=s(Me),be=r(Me,2),Q=s(be);oe(Q,21,()=>n,I=>I.token,(I,X)=>{var ae=al(),Pe=s(ae),Te={};_(()=>{y(Pe,t(X).label),Te!==(Te=t(X).token)&&(ae.value=(ae.__value=t(X).token)??"")}),d(I,ae)});var se;Da(Q);var Se=r(Q,2);oe(Se,21,()=>o,I=>I.token,(I,X)=>{var ae=al(),Pe=s(ae),Te={};_(()=>{y(Pe,t(X).label),Te!==(Te=t(X).token)&&(ae.value=(ae.__value=t(X).token)??"")}),d(I,ae)});var Ce;Da(Se);var H=r(Se,2),D=s(H),ee=r(Oe,4),le=s(ee),W=r(s(le),2),me=s(W),ke=r(le,2);{var he=I=>{var X=xv(),ae=fe(X),Pe=r(s(ae));{var Te=it=>{var at=bv();d(it,at)};L(Pe,it=>{t(f)&&it(Te)})}var ut=r(ae,2);oe(ut,17,()=>o,it=>it.token,(it,at)=>{const ft=u(()=>B(t(at).token,t(at).base));{let Ge=u(()=>t(at).token in e.overrides);yt(it,{get label(){return t(at).label},get value(){return t(ft)},min:0,get max(){return t(at).max},step:10,unit:"ms",get overridden(){return t(Ge)},onChange:Pt=>e.onSet(t(at).token,`${Pt}ms`),onReset:()=>e.onReset(t(at).token)})}});var je=r(ut,2);oe(je,21,()=>o,it=>it.label,(it,at)=>{const ft=u(()=>B(t(at).token,t(at).base));var Ge=yv(),Pt=s(Ge),jt=s(Pt),ta=r(Pt,2),Dt=s(ta),zt=r(ta,2),ia=s(zt);_(ca=>{y(jt,t(at).label),lt(Dt,ca),y(ia,`${t(ft)??""}ms`)},[()=>`width: ${Math.min(t(ft)/1200*100,100)}%`]),d(it,Ge)}),d(I,X)};L(ke,I=>{t(S)&&I(he)})}var ie=r(ee,4),Ue=s(ie),Ne=r(s(Ue),2),Xe=s(Ne),We=r(Ue,2);{var Qe=I=>{var X=_v(),ae=r(fe(X),2);oe(ae,21,()=>n,Pe=>Pe.token,(Pe,Te)=>{const ut=u(()=>t(Te).token in e.overrides);var je=wv(),it=s(je),at=s(it),ft=s(at),Ge=r(at,2),Pt=s(Ge),jt=s(Pt),ta=s(jt),Dt=r(jt,2),zt=s(Dt),ia=r(zt,2);{var ca=_e=>{var bt=kv();x("click",bt,()=>e.onReset(t(Te).token)),d(_e,bt)};L(ia,_e=>{t(ut)&&_e(ca)})}var da=r(Pt,2);_(()=>{Ve(je,1,`p-2.5 rounded-xl border transition-all ${t(ut)?"bg-indigo-500/10 border-indigo-500/30":"border-white/8 bg-white/3"}`),$(ft,"d",t(Te).preview),y(ta,t(Te).label),Xt(da,e.overrides[t(Te).token]??""),$(da,"placeholder",t(Te).value)}),x("click",zt,()=>{w(b,t(Te).token,!0),T()}),x("input",da,_e=>{const bt=_e.target.value.trim();bt?e.onSet(t(Te).token,bt):e.onReset(t(Te).token)}),d(Pe,je)}),d(I,X)};L(We,I=>{t(R)&&I(Qe)})}var dt=r(ie,4),gt=s(dt),kt=r(s(gt),2),wt=s(kt),mt=r(gt,2);{var te=I=>{var X=Sv(),ae=r(fe(X),2),Pe=s(ae),Te=r(s(Pe),2);{var ut=ft=>{var Ge=Cv();x("click",Ge,C),d(ft,Ge)},je=u(()=>l.some(ft=>ft in e.overrides));L(Te,ft=>{t(je)&&ft(ut)})}var it=r(Pe,2);{let ft=u(()=>Math.round(t(m))),Ge=u(()=>l.some(Pt=>Pt in e.overrides));yt(it,{label:"",get value(){return t(ft)},min:0,max:200,step:5,unit:"ms",help:"Base unit for --sf-animation-delay-1 through -5",get overridden(){return t(Ge)},onChange:Pt=>E(Pt),onReset:C})}var at=r(ae,2);oe(at,20,()=>[1,2,3,4,5],ft=>ft,(ft,Ge)=>{const Pt=u(()=>Math.round(t(m)*Ge));var jt=Ov(),ta=s(jt),Dt=s(ta),zt=r(ta,2),ia=s(zt),ca=r(zt,2),da=s(ca);_(_e=>{y(Dt,`–${Ge??""}`),lt(ia,_e),y(da,`${t(Pt)??""}ms`)},[()=>`width: ${Math.min(t(Pt)/600*100,100)}%`]),d(ft,jt)}),d(I,X)};L(mt,I=>{t(P)&&I(te)})}var N=r(dt,4),V=s(N),ue=r(s(V),2),ye=s(ue),st=r(V,2);{var Ke=I=>{var X=Iv(),ae=fe(X);oe(ae,21,()=>i,je=>je.name,(je,it)=>{Vo(je,{get knob(){return t(it)},get overrides(){return e.overrides},onChange:(at,ft)=>ft===null?e.onReset(at):e.onSet(at,ft)})});var Pe=r(ae,2);{let je=u(()=>"--sf-theme-transition-duration"in e.overrides);yt(Pe,{label:"Theme switch speed",get value(){return t(p)},min:0,max:600,step:10,unit:"ms",help:"--sf-theme-transition-duration — dark/light color-scheme switch animation speed",get overridden(){return t(je)},onChange:it=>e.onSet("--sf-theme-transition-duration",`${it}ms`),onReset:()=>e.onReset("--sf-theme-transition-duration")})}var Te=r(Pe,2),ut=r(s(Te),2);oe(ut,16,()=>[{label:"Range start",token:"--sf-scroll-timeline-range-start",placeholder:"entry 0%"},{label:"Range end",token:"--sf-scroll-timeline-range-end",placeholder:"cover 30%"}],je=>je.token,(je,it)=>{var at=Pv(),ft=s(at),Ge=s(ft),Pt=r(ft,2),jt=r(Pt,2);{var ta=Dt=>{var zt=Lv();x("click",zt,()=>e.onReset(it.token)),d(Dt,zt)};L(jt,Dt=>{it.token in e.overrides&&Dt(ta)})}_(()=>{y(Ge,it.label),Xt(Pt,e.overrides[it.token]??""),$(Pt,"placeholder",it.placeholder)}),x("input",Pt,Dt=>{const zt=Dt.target.value.trim();zt?e.onSet(it.token,zt):e.onReset(it.token)}),d(je,at)}),d(I,X)};L(st,I=>{t(A)&&I(Ke)})}_(I=>{$(O,"title",t(f)?"Enable motion":"Disable motion"),Ve(O,1,`w-9 h-5 rounded-full transition-colors relative cursor-pointer ${t(f)?"bg-indigo-600":"bg-white/10"}`),Ve(j,1,`absolute top-0.5 w-4 h-4 bg-white rounded-full shadow transition-transform ${t(f)?"translate-x-4":"translate-x-0.5"}`),lt(xe,I),se!==(se=t(b))&&(Q.value=(Q.__value=t(b))??"",Ia(Q,t(b))),Ce!==(Ce=t(k))&&(Se.value=(Se.__value=t(k))??"",Ia(Se,t(k))),H.disabled=t(h),y(D,t(h)?"…":"▶ Play"),$(le,"aria-expanded",t(S)),y(me,t(S)?"▲":"▼"),$(Ue,"aria-expanded",t(R)),y(Xe,t(R)?"▲":"▼"),$(gt,"aria-expanded",t(P)),y(wt,t(P)?"▲":"▼"),$(V,"aria-expanded",t(A)),y(ye,t(A)?"▲":"▼")},[()=>`transform: translateX(${t(v)}px); transition: transform ${B(t(k),o.find(I=>I.token===t(k))?.base??250)}ms ${q(t(b))}`]),x("click",O,()=>{t(f)?e.onReset("--sf-motion-scale"):e.onSet("--sf-motion-scale","0")}),x("change",Q,I=>{w(b,I.target.value,!0)}),x("change",Se,I=>{w(k,I.target.value,!0)}),x("click",H,T),x("click",le,()=>{w(S,!t(S))}),x("click",Ue,()=>{w(R,!t(R))}),x("click",gt,()=>{w(P,!t(P))}),x("click",V,()=>{w(A,!t(A))}),d(a,z),ea()}oa(["click","change","input"]);var Av=g("
"),zv=g('
',1),Ev=g('
'),Rv=g('
',1),Tv=g(""),Dv=g('

Gradient overlay for hero images and media content. Used by the .sf-scrim macro.

Color
Direction
Scrim preview
',1),Mv=g('
'),Nv=g('
Scrollbar preview
',1),Fv=g(''),jv=g('
'),Gv=g(`

Controls text legibility over images. Applied via text-shadow: var(--sf-text-shadow-m). + Edit each token directly — use none to disable.

`,1),Hv=g('
');function qv(a,e){$t(e,!0);const o=[{label:"To top",value:"to top"},{label:"To bottom",value:"to bottom"},{label:"To left",value:"to left"},{label:"To right",value:"to right"}],n=[{label:"Small",token:"--sf-text-shadow-s",default:"0 1px 2px oklch(…)"},{label:"Medium",token:"--sf-text-shadow-m",default:"0 2px 4px oklch(…)"},{label:"Large",token:"--sf-text-shadow-l",default:"0 4px 8px oklch(…)"}];function l(te,N,V){if(!te)return N;const ue=parseFloat(V?te.replace(V,""):te);return isNaN(ue)?N:ue}let i=u(()=>l(e.overrides["--sf-blur"],12,"px")),c=u(()=>l(e.overrides["--sf-opacity-muted"],.5)),f=u(()=>l(e.overrides["--sf-opacity-disabled"],.45)),p=u(()=>e.overrides["--sf-scrim-direction"]??"to top"),m=u(()=>e.overrides["--sf-scrim-color"]??""),h=u(()=>l(e.overrides["--sf-scroll-shadow-size"]?.replace("rem",""),2)),v=u(()=>l(e.overrides["--sf-state-pending-opacity"],.7)),b=u(()=>e.overrides["--sf-scrollbar-thumb"]??""),k=u(()=>e.overrides["--sf-scrollbar-track"]??""),S=K(!1),R=K(!1),P=K(!1),A=K(!1),B=K(!1),q=K(!1);var T=Hv(),E=s(T),C=s(E),z=r(s(C),2),G=s(z),O=r(C,2);{var j=te=>{var N=zv(),V=fe(N);{let X=u(()=>"--sf-blur"in e.overrides);yt(V,{label:"Blur radius",get value(){return t(i)},min:0,max:48,step:1,unit:"px",help:"--sf-blur — used for frosted glass, modals, tooltips",get overridden(){return t(X)},onChange:ae=>e.onSet("--sf-blur",`${ae}px`),onReset:()=>e.onReset("--sf-blur")})}var ue=r(V,2),ye=s(ue);oe(ye,20,()=>Array.from({length:12}),fn,(X,ae,Pe)=>{var Te=Av();Ve(Te,1,mo(Pe%3===0?"bg-indigo-500/50":Pe%3===1?"bg-purple-500/40":"bg-blue-500/30")),d(X,Te)});var st=r(ye,2),Ke=s(st),I=s(Ke);_(()=>{lt(st,`backdrop-filter: blur(${t(i)}px)`),y(I,`${t(i)??""}px`)}),d(te,N)};L(O,te=>{t(S)&&te(j)})}var M=r(E,4),Y=s(M),Oe=r(s(Y),2),De=s(Oe),Me=r(Y,2);{var xe=te=>{var N=Rv(),V=fe(N);{let Ke=u(()=>"--sf-opacity-muted"in e.overrides);yt(V,{label:"Muted opacity",get value(){return t(c)},min:0,max:1,step:.05,help:"--sf-opacity-muted — secondary text, icons, and placeholder content",get overridden(){return t(Ke)},onChange:I=>e.onSet("--sf-opacity-muted",String(I)),onReset:()=>e.onReset("--sf-opacity-muted")})}var ue=r(V,2);{let Ke=u(()=>"--sf-opacity-disabled"in e.overrides);yt(ue,{label:"Disabled opacity",get value(){return t(f)},min:0,max:1,step:.05,help:"--sf-opacity-disabled — disabled form controls and interactive elements",get overridden(){return t(Ke)},onChange:I=>e.onSet("--sf-opacity-disabled",String(I)),onReset:()=>e.onReset("--sf-opacity-disabled")})}var ye=r(ue,2);{let Ke=u(()=>"--sf-state-pending-opacity"in e.overrides);yt(ye,{label:"Pending opacity",get value(){return t(v)},min:.1,max:1,step:.05,help:"--sf-state-pending-opacity — opacity of elements in loading/pending state",get overridden(){return t(Ke)},onChange:I=>e.onSet("--sf-state-pending-opacity",String(I)),onReset:()=>e.onReset("--sf-state-pending-opacity")})}var st=r(ye,2);oe(st,21,()=>[{label:"muted",val:t(c)},{label:"disabled",val:t(f)},{label:"pending",val:t(v)}],Ke=>Ke.label,(Ke,I)=>{var X=Ev(),ae=s(X),Pe=s(ae),Te=r(ae,2),ut=r(Te,2),je=s(ut);_(()=>{y(Pe,t(I).label),lt(Te,`opacity: ${t(I).val}`),y(je,t(I).val)}),d(Ke,X)}),d(te,N)};L(Me,te=>{t(R)&&te(xe)})}var be=r(M,4),Q=s(be),se=r(s(Q),2),Se=s(se),Ce=r(Q,2);{var H=te=>{var N=Dv(),V=r(fe(N),2),ue=r(s(V),2);{let ae=u(()=>"--sf-scrim-color"in e.overrides);Ja(ue,{token:"--sf-scrim-color",get value(){return t(m)},placeholder:"default (base color)",get isOverridden(){return t(ae)},onSet:Pe=>e.onSet("--sf-scrim-color",Pe),onReset:()=>e.onReset("--sf-scrim-color")})}var ye=r(V,2),st=r(s(ye),2);oe(st,21,()=>o,ae=>ae.value,(ae,Pe)=>{var Te=Tv(),ut=s(Te);_(()=>{Ve(Te,1,`py-2 px-3 rounded-lg text-[10px] border transition-all cursor-pointer text-left ${t(p)===t(Pe).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(ut,t(Pe).label)}),x("click",Te,()=>t(Pe).value==="to top"?e.onReset("--sf-scrim-direction"):e.onSet("--sf-scrim-direction",t(Pe).value)),d(ae,Te)});var Ke=r(ye,2),I=s(Ke),X=s(I);_(()=>lt(X,`background: linear-gradient(${t(p)}, ${t(m)||"oklch(0 0 0 / 0.6)"}, transparent)`)),d(te,N)};L(Ce,te=>{t(P)&&te(H)})}var D=r(be,4),ee=s(D),le=r(s(ee),2),W=s(le),me=r(ee,2);{var ke=te=>{var N=Nv(),V=fe(N);oe(V,17,()=>[{label:"Thumb color",token:"--sf-scrollbar-thumb",val:t(b)},{label:"Track color",token:"--sf-scrollbar-track",val:t(k)}],X=>X.token,(X,ae)=>{var Pe=Mv(),Te=s(Pe),ut=s(Te),je=r(Te,2);{let it=u(()=>t(ae).token in e.overrides);Ja(je,{get token(){return t(ae).token},get value(){return t(ae).val},placeholder:"default",get isOverridden(){return t(it)},onSet:at=>e.onSet(t(ae).token,at),onReset:()=>e.onReset(t(ae).token)})}_(()=>y(ut,t(ae).label)),d(X,Pe)});var ue=r(V,2),ye=s(ue);let st;var Ke=s(ye);let I;_(()=>{st=lt(ye,"",st,{background:t(k)||"rgba(255,255,255,0.08)"}),I=lt(Ke,"",I,{background:t(b)||"oklch(0.52 0.025 260)"})}),d(te,N)};L(me,te=>{t(A)&&te(ke)})}var he=r(D,4),ie=s(he),Ue=r(s(ie),2),Ne=s(Ue),Xe=r(ie,2);{var We=te=>{{let N=u(()=>"--sf-scroll-shadow-size"in e.overrides);yt(te,{label:"Shadow size",get value(){return t(h)},min:0,max:6,step:.25,unit:"rem",help:"--sf-scroll-shadow-size — gradient edge mask on .sf-scroll-shadow elements",get overridden(){return t(N)},onChange:V=>e.onSet("--sf-scroll-shadow-size",`${V}rem`),onReset:()=>e.onReset("--sf-scroll-shadow-size")})}};L(Xe,te=>{t(B)&&te(We)})}var Qe=r(he,4),dt=s(Qe),gt=r(s(dt),2),kt=s(gt),wt=r(dt,2);{var mt=te=>{var N=Gv(),V=r(fe(N),2);oe(V,21,()=>n,ue=>ue.token,(ue,ye)=>{var st=jv(),Ke=s(st),I=s(Ke),X=r(Ke,2),ae=r(X,2);{var Pe=Te=>{var ut=Fv();x("click",ut,()=>e.onReset(t(ye).token)),d(Te,ut)};L(ae,Te=>{t(ye).token in e.overrides&&Te(Pe)})}_(()=>{y(I,t(ye).label),Xt(X,e.overrides[t(ye).token]??""),$(X,"placeholder",t(ye).default)}),x("input",X,Te=>{const je=Te.target.value.trim();je?e.onSet(t(ye).token,je):e.onReset(t(ye).token)}),d(ue,st)}),d(te,N)};L(wt,te=>{t(q)&&te(mt)})}_(()=>{$(C,"aria-expanded",t(S)),y(G,t(S)?"▲":"▼"),$(Y,"aria-expanded",t(R)),y(De,t(R)?"▲":"▼"),$(Q,"aria-expanded",t(P)),y(Se,t(P)?"▲":"▼"),$(ee,"aria-expanded",t(A)),y(W,t(A)?"▲":"▼"),$(ie,"aria-expanded",t(B)),y(Ne,t(B)?"▲":"▼"),$(dt,"aria-expanded",t(q)),y(kt,t(q)?"▲":"▼")}),x("click",C,()=>{w(S,!t(S))}),x("click",Y,()=>{w(R,!t(R))}),x("click",Q,()=>{w(P,!t(P))}),x("click",ee,()=>{w(A,!t(A))}),x("click",ie,()=>{w(B,!t(B))}),x("click",dt,()=>{w(q,!t(q))}),d(a,T),ea()}oa(["click","input"]);var Vv=g('
'),Kv=g('
',1),Wv=g(`

SLASHED is a token-first CSS framework. This sample paragraph repeats so you can see exactly how many lines survive the clamp before the ellipsis kicks in. Drag the slider above and watch the visible line count change in real time. - Extra filler text keeps the block taller than the clamp at every setting.

`,1),Jn=g(""),Tv=g('

--sf-aspect — default ratio for .sf-aspect / .sf-frame

',1),Dv=g('
',1),Fs=g(''),Mv=g('

--sf-scrim-color / --sf-scrim-direction — darkening gradient for .sf-scrim

Color
Direction
Caption over scrim
Text shadow
',1),Nv=g('

Spacing tokens for .sf-prose. Defaults track the space scale; sliders write rem overrides.

Marker color
',1),Fv=g('

--sf-content-intrinsic-size — placeholder size used with content-visibility: auto to improve scroll performance on tall pages.

Intrinsic size
',1),jv=g(`

Tokens for the framework's utility macros — .sf-prose, .sf-flow, .sf-line-clamp, .sf-aspect, .sf-scroll-shadow and .sf-scrim.

All tokens tab — edit every prose, scrim and surface token directly.

`);function Gv(a,e){Qt(e,!0);function o(oe,xe,Ee){const ot=e.overrides[oe];if(!ot)return xe;const ft=parseFloat(Ee?ot.replace(Ee,""):ot);return isNaN(ft)?xe:ft}const n=[{label:"16 / 9",value:"16 / 9"},{label:"4 / 3",value:"4 / 3"},{label:"3 / 2",value:"3 / 2"},{label:"1 / 1",value:"1 / 1"},{label:"21 / 9",value:"21 / 9"},{label:"9 / 16",value:"9 / 16"}],l=[{label:"↑ top",value:"to top"},{label:"↓ bottom",value:"to bottom"},{label:"← left",value:"to left"},{label:"→ right",value:"to right"},{label:"↗ top-right",value:"to top right"},{label:"↖ top-left",value:"to top left"}],i=[{label:"Heading gap",token:"--sf-prose-heading-gap",def:.75,max:3},{label:"List gap",token:"--sf-prose-list-gap",def:.5,max:2},{label:"Block margin",token:"--sf-prose-block-margin",def:1,max:4},{label:"Media margin",token:"--sf-prose-media-margin",def:1,max:4},{label:"Figure margin",token:"--sf-prose-figure-margin",def:1.5,max:4},{label:"Blockquote padding",token:"--sf-prose-blockquote-padding",def:1,max:3},{label:"HR margin",token:"--sf-prose-hr-margin",def:1.5,max:4}];let c=j(!1),d=j(!1),p=j(!1),m=j(!1),h=j(!1),v=j(!1),b=j(!1),k=u(()=>o("--sf-line-clamp",3)),_=u(()=>o("--sf-flow-space",.5,"rem")),E=u(()=>o("--sf-scroll-shadow-size",2,"rem")),B=u(()=>e.overrides["--sf-aspect"]??"16 / 9"),U=u(()=>e.overrides["--sf-scrim-color"]??"oklch(0 0 0 / 0.55)"),S=u(()=>e.overrides["--sf-scrim-direction"]??"to top"),z=u(()=>o("--sf-prose-media-radius",6,"px"));function L(oe){const xe=e.overrides[oe.token];if(!xe)return oe.def;const Ee=parseFloat(xe);return isNaN(Ee)?oe.def:Ee}var P=jv(),w=r(s(P),2),R=s(w),D=r(s(R),2),A=s(D),T=r(R,2);{var M=oe=>{var xe=Ev(),Ee=de(xe);{let ft=u(()=>"--sf-flow-space"in e.overrides);pt(Ee,{label:"Flow space",get value(){return t(_)},min:0,max:4,step:.0625,unit:"rem",help:"--sf-flow-space — vertical gap between adjacent children of .sf-flow",get overridden(){return t(ft)},onChange:_t=>e.onSet("--sf-flow-space",`${_t}rem`),onReset:()=>e.onReset("--sf-flow-space")})}var ot=r(Ee,2);re(ot,20,()=>[0,1,2],ft=>ft,(ft,_t)=>{var xt=Av();O(()=>it(xt,`width:${90-_t*12}%`)),f(ft,xt)}),O(()=>it(ot,`display:flex;flex-direction:column;gap:${t(_)}rem`)),f(oe,xe)};I(T,oe=>{t(c)&&oe(M)})}var Q=r(w,4),He=s(Q),ee=r(s(He),2),be=s(ee),Ie=r(He,2);{var pe=oe=>{var xe=Rv(),Ee=de(xe);{let _t=u(()=>"--sf-line-clamp"in e.overrides);pt(Ee,{label:"Default lines",get value(){return t(k)},min:1,max:8,step:1,help:"--sf-line-clamp — default line count for .sf-line-clamp (override per element)",get overridden(){return t(_t)},onChange:xt=>e.onSet("--sf-line-clamp",String(xt)),onReset:()=>e.onReset("--sf-line-clamp")})}var ot=r(Ee,2),ft=s(ot);O(()=>it(ft,`display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:${t(k)};overflow:hidden`)),f(oe,xe)};I(Ie,oe=>{t(d)&&oe(pe)})}var he=r(Q,4),Ne=s(he),at=r(s(Ne),2),et=s(at),N=r(Ne,2);{var W=oe=>{var xe=Tv(),Ee=r(de(xe),2);re(Ee,21,()=>n,xt=>xt.value,(xt,Nt)=>{var St=Jn(),Et=s(St);O(ct=>{Ye(St,1,ct),y(Et,t(Nt).label)},[()=>`py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(B).replace(/\s/g,"")===t(Nt).value.replace(/\s/g,"")?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`]),x("click",St,()=>t(Nt).value==="16 / 9"?e.onReset("--sf-aspect"):e.onSet("--sf-aspect",t(Nt).value)),f(xt,St)});var ot=r(Ee,2),ft=s(ot),_t=s(ft);O(()=>{it(ft,`aspect-ratio:${t(B)};max-height:120px;max-width:100%;width:auto;height:120px`),y(_t,t(B))}),f(oe,xe)};I(N,oe=>{t(p)&&oe(W)})}var ye=r(he,4),ge=s(ye),Z=r(s(ge),2),we=s(Z),Ge=r(ge,2);{var nt=oe=>{var xe=Dv(),Ee=de(xe);{let _t=u(()=>"--sf-scroll-shadow-size"in e.overrides);pt(Ee,{label:"Fade size",get value(){return t(E)},min:0,max:6,step:.25,unit:"rem",help:"--sf-scroll-shadow-size — size of the edge fade mask on .sf-scroll-shadow / .sf-overflow-fade",get overridden(){return t(_t)},onChange:xt=>e.onSet("--sf-scroll-shadow-size",`${xt}rem`),onReset:()=>e.onReset("--sf-scroll-shadow-size")})}var ot=r(Ee,2),ft=s(ot);O(()=>it(ft,`mask:linear-gradient(to right, transparent, #000 ${t(E)}rem, #000 calc(100% - ${t(E)}rem), transparent)`)),f(oe,xe)};I(Ge,oe=>{t(m)&&oe(nt)})}var Oe=r(ye,4),Be=s(Oe),te=r(s(Be),2),q=s(te),ke=r(Be,2);{var Ze=oe=>{var xe=Mv(),Ee=r(de(xe),2),ot=r(s(Ee),2),ft=r(ot,2);{var _t=Xe=>{var ut=Fs();x("click",ut,()=>e.onReset("--sf-scrim-color")),f(Xe,ut)};I(ft,Xe=>{"--sf-scrim-color"in e.overrides&&Xe(_t)})}var xt=r(Ee,2),Nt=r(s(xt),2);re(Nt,21,()=>l,Xe=>Xe.value,(Xe,ut)=>{var Lt=Jn(),Dt=s(Lt);O(()=>{Ye(Lt,1,`py-1 rounded-lg text-[10px] border transition-all cursor-pointer ${t(S)===t(ut).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Dt,t(ut).label)}),x("click",Lt,()=>t(ut).value==="to top"?e.onReset("--sf-scrim-direction"):e.onSet("--sf-scrim-direction",t(ut).value)),f(Xe,Lt)});var St=r(xt,2),Et=s(St),ct=r(St,2),Gt=r(s(ct),2),ea=r(Gt,2);{var ia=Xe=>{var ut=Fs();x("click",ut,()=>e.onReset("--sf-scrim-text-shadow")),f(Xe,ut)};I(ea,Xe=>{"--sf-scrim-text-shadow"in e.overrides&&Xe(ia)})}O(()=>{Xt(ot,e.overrides["--sf-scrim-color"]??""),it(Et,`background:linear-gradient(${t(S)}, ${t(U)}, transparent)`),Xt(Gt,e.overrides["--sf-scrim-text-shadow"]??"")}),x("input",ot,Xe=>{const ut=Xe.target.value.trim();ut?e.onSet("--sf-scrim-color",ut):e.onReset("--sf-scrim-color")}),x("input",Gt,Xe=>{const ut=Xe.target.value.trim();ut?e.onSet("--sf-scrim-text-shadow",ut):e.onReset("--sf-scrim-text-shadow")}),f(oe,xe)};I(ke,oe=>{t(h)&&oe(Ze)})}var ne=r(Oe,4),fe=s(ne),Pe=r(s(fe),2),De=s(Pe),ze=r(fe,2);{var Le=oe=>{var xe=Nv(),Ee=r(de(xe),2),ot=s(Ee);re(ot,17,()=>i,Et=>Et.token,(Et,ct)=>{{let Gt=u(()=>L(t(ct))),ea=u(()=>t(ct).token in e.overrides);pt(Et,{get label(){return t(ct).label},get value(){return t(Gt)},min:0,get max(){return t(ct).max},step:.0625,unit:"rem",get help(){return t(ct).token},get overridden(){return t(ea)},onChange:ia=>e.onSet(t(ct).token,`${ia}rem`),onReset:()=>e.onReset(t(ct).token)})}});var ft=r(ot,2);{let Et=u(()=>"--sf-prose-media-radius"in e.overrides);pt(ft,{label:"Media radius",get value(){return t(z)},min:0,max:32,step:1,unit:"px",help:"--sf-prose-media-radius — corner radius on prose images/video",get overridden(){return t(Et)},onChange:ct=>e.onSet("--sf-prose-media-radius",`${ct}px`),onReset:()=>e.onReset("--sf-prose-media-radius")})}var _t=r(ft,2),xt=r(s(_t),2),Nt=r(xt,2);{var St=Et=>{var ct=Fs();x("click",ct,()=>e.onReset("--sf-prose-marker-color")),f(Et,ct)};I(Nt,Et=>{"--sf-prose-marker-color"in e.overrides&&Et(St)})}O(()=>Xt(xt,e.overrides["--sf-prose-marker-color"]??"")),x("input",xt,Et=>{const ct=Et.target.value.trim();ct?e.onSet("--sf-prose-marker-color",ct):e.onReset("--sf-prose-marker-color")}),f(oe,xe)};I(ze,oe=>{t(v)&&oe(Le)})}var qe=r(ne,2),je=s(qe),lt=r(s(je),2),dt=s(lt),Ot=r(je,2);{var vt=oe=>{var xe=Fv(),Ee=r(de(xe),2),ot=r(s(Ee),2),ft=r(ot,2);{var _t=xt=>{var Nt=Fs();x("click",Nt,()=>e.onReset("--sf-content-intrinsic-size")),f(xt,Nt)};I(ft,xt=>{"--sf-content-intrinsic-size"in e.overrides&&xt(_t)})}O(()=>Xt(ot,e.overrides["--sf-content-intrinsic-size"]??"")),x("input",ot,xt=>{const Nt=xt.target.value.trim();Nt?e.onSet("--sf-content-intrinsic-size",Nt):e.onReset("--sf-content-intrinsic-size")}),f(oe,xe)};I(Ot,oe=>{t(b)&&oe(vt)})}O(()=>{Y(R,"aria-expanded",t(c)),y(A,t(c)?"▲":"▼"),Y(He,"aria-expanded",t(d)),y(be,t(d)?"▲":"▼"),Y(Ne,"aria-expanded",t(p)),y(et,t(p)?"▲":"▼"),Y(ge,"aria-expanded",t(m)),y(we,t(m)?"▲":"▼"),Y(Be,"aria-expanded",t(h)),y(q,t(h)?"▲":"▼"),Y(fe,"aria-expanded",t(v)),y(De,t(v)?"▲":"▼"),Y(je,"aria-expanded",t(b)),y(dt,t(b)?"▲":"▼")}),x("click",R,()=>{C(c,!t(c))}),x("click",He,()=>{C(d,!t(d))}),x("click",Ne,()=>{C(p,!t(p))}),x("click",ge,()=>{C(m,!t(m))}),x("click",Be,()=>{C(h,!t(h))}),x("click",fe,()=>{C(v,!t(v))}),x("click",je,()=>{C(b,!t(b))}),f(a,P),$t()}aa(["click","input"]);var Hv=g('

Minimum interactive area — ensures accessibility on touch devices.

',1),hs=g(""),qv=g('
'),Vv=g('
'),Kv=g('

Override individual z-index tokens in the "All tokens" tab.

',1),Wv=g('
Selection background
Selection text color

Select this text to preview the selection color.

'),Yv=g('
',1),Zv=g('
'),Jv=g('

Controls the height / tap-target of all sized components (buttons, inputs, badges).

',1),Xv=g(''),Qv=g('
Caret color
Underline thickness

A sample link with the current underline settings.

',1),$v=g('

Icon scale tokens used by .sf-icon-* utilities. Values are in em units relative to surrounding text.

',1),eh=g(''),gs=g(''),th=g('

Default values for .sf-media images and replaced elements.

Fit
Position
',1),ah=g('
'),oh=g(`

Default to the device's env(safe-area-inset-*). Override only if you need fixed padding regardless of notch/home-indicator.

`,1),sh=g('
'),rh=g('

Applied inside @media print via optional/print.css.

Page size
',1),nh=g('
'),lh=g(`

Boolean CSS custom property flags (0 = off, 1 = on). Components toggle these to activate state-specific styles. - Overriding globally forces all matching elements into that state — useful for testing and demos.

Required marker
`,1),ih=g(`

Selection colors, caret, links, focus ring, borders and sizes all render in the + Extra filler text keeps the block taller than the clamp at every setting.

`,1),ol=g(""),Yv=g('

--sf-aspect — default ratio for .sf-aspect / .sf-frame

',1),Zv=g('
',1),Gs=g(''),Xv=g('

--sf-scrim-color / --sf-scrim-direction — darkening gradient for .sf-scrim

Color
Direction
Caption over scrim
Text shadow
',1),Jv=g('

Spacing tokens for .sf-prose. Defaults track the space scale; sliders write rem overrides.

Marker color
',1),Qv=g('

--sf-content-intrinsic-size — placeholder size used with content-visibility: auto to improve scroll performance on tall pages.

Intrinsic size
',1),$v=g(`

Tokens for the framework's utility macros — .sf-prose, .sf-flow, .sf-line-clamp, .sf-aspect, .sf-scroll-shadow and .sf-scrim.

All tokens tab — edit every prose, scrim and surface token directly.

`);function eh(a,e){$t(e,!0);function o(I,X,ae){const Pe=e.overrides[I];if(!Pe)return X;const Te=parseFloat(ae?Pe.replace(ae,""):Pe);return isNaN(Te)?X:Te}const n=[{label:"16 / 9",value:"16 / 9"},{label:"4 / 3",value:"4 / 3"},{label:"3 / 2",value:"3 / 2"},{label:"1 / 1",value:"1 / 1"},{label:"21 / 9",value:"21 / 9"},{label:"9 / 16",value:"9 / 16"}],l=[{label:"↑ top",value:"to top"},{label:"↓ bottom",value:"to bottom"},{label:"← left",value:"to left"},{label:"→ right",value:"to right"},{label:"↗ top-right",value:"to top right"},{label:"↖ top-left",value:"to top left"}],i=[{label:"Heading gap",token:"--sf-prose-heading-gap",def:.75,max:3,raw:"var(--sf-space-s)"},{label:"List gap",token:"--sf-prose-list-gap",def:.5,max:2,raw:"var(--sf-space-xs)"},{label:"Block margin",token:"--sf-prose-block-margin",def:1,max:4,raw:"var(--sf-space-m)"},{label:"Media margin",token:"--sf-prose-media-margin",def:1,max:4,raw:"var(--sf-space-m)"},{label:"Figure margin",token:"--sf-prose-figure-margin",def:1.5,max:4,raw:"var(--sf-space-l)"},{label:"Blockquote padding",token:"--sf-prose-blockquote-padding",def:1,max:3,raw:"var(--sf-space-m)"},{label:"HR margin",token:"--sf-prose-hr-margin",def:1.5,max:4,raw:"var(--sf-space-l)"}];let c=K(!1),f=K(!1),p=K(!1),m=K(!1),h=K(!1),v=K(!1),b=K(!1),k=u(()=>o("--sf-line-clamp",3)),S=u(()=>o("--sf-flow-space",.5,"rem")),R=u(()=>o("--sf-scroll-shadow-size",2,"rem")),P=u(()=>e.overrides["--sf-aspect"]??"16 / 9"),A=u(()=>e.overrides["--sf-scrim-color"]??"oklch(0 0 0 / 0.55)"),B=u(()=>e.overrides["--sf-scrim-direction"]??"to top"),q=u(()=>o("--sf-prose-media-radius",6,"px"));function T(I){const X=e.overrides[I.token];if(!X)return I.def;const ae=parseFloat(X);return isNaN(ae)?I.def:ae}var E=$v(),C=r(s(E),2),z=s(C),G=r(s(z),2),O=s(G),j=r(z,2);{var M=I=>{var X=Kv(),ae=fe(X);{let Te=u(()=>"--sf-flow-space"in e.overrides);yt(ae,{label:"Flow space",get value(){return t(S)},min:0,max:4,step:.0625,unit:"rem",help:"--sf-flow-space — vertical gap between adjacent children of .sf-flow",get overridden(){return t(Te)},onChange:ut=>e.onSet("--sf-flow-space",`${ut}rem`),onReset:()=>e.onReset("--sf-flow-space"),rawDefault:"var(--sf-content-gap)",get currentRaw(){return e.overrides["--sf-flow-space"]},onRawSet:ut=>e.onSet("--sf-flow-space",ut)})}var Pe=r(ae,2);oe(Pe,20,()=>[0,1,2],Te=>Te,(Te,ut)=>{var je=Vv();_(()=>lt(je,`width:${90-ut*12}%`)),d(Te,je)}),_(()=>lt(Pe,`display:flex;flex-direction:column;gap:${t(S)}rem`)),d(I,X)};L(j,I=>{t(c)&&I(M)})}var Y=r(C,4),Oe=s(Y),De=r(s(Oe),2),Me=s(De),xe=r(Oe,2);{var be=I=>{var X=Wv(),ae=fe(X);{let ut=u(()=>"--sf-line-clamp"in e.overrides);yt(ae,{label:"Default lines",get value(){return t(k)},min:1,max:8,step:1,help:"--sf-line-clamp — default line count for .sf-line-clamp (override per element)",get overridden(){return t(ut)},onChange:je=>e.onSet("--sf-line-clamp",String(je)),onReset:()=>e.onReset("--sf-line-clamp")})}var Pe=r(ae,2),Te=s(Pe);_(()=>lt(Te,`display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:${t(k)};overflow:hidden`)),d(I,X)};L(xe,I=>{t(f)&&I(be)})}var Q=r(Y,4),se=s(Q),Se=r(s(se),2),Ce=s(Se),H=r(se,2);{var D=I=>{var X=Yv(),ae=r(fe(X),2);oe(ae,21,()=>n,je=>je.value,(je,it)=>{var at=ol(),ft=s(at);_(Ge=>{Ve(at,1,Ge),y(ft,t(it).label)},[()=>`py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer font-mono ${t(P).replace(/\s/g,"")===t(it).value.replace(/\s/g,"")?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`]),x("click",at,()=>t(it).value==="16 / 9"?e.onReset("--sf-aspect"):e.onSet("--sf-aspect",t(it).value)),d(je,at)});var Pe=r(ae,2),Te=s(Pe),ut=s(Te);_(()=>{lt(Te,`aspect-ratio:${t(P)};max-height:120px;max-width:100%;width:auto;height:120px`),y(ut,t(P))}),d(I,X)};L(H,I=>{t(p)&&I(D)})}var ee=r(Q,4),le=s(ee),W=r(s(le),2),me=s(W),ke=r(le,2);{var he=I=>{var X=Zv(),ae=fe(X);{let ut=u(()=>"--sf-scroll-shadow-size"in e.overrides);yt(ae,{label:"Fade size",get value(){return t(R)},min:0,max:6,step:.25,unit:"rem",help:"--sf-scroll-shadow-size — size of the edge fade mask on .sf-scroll-shadow / .sf-overflow-fade",get overridden(){return t(ut)},onChange:je=>e.onSet("--sf-scroll-shadow-size",`${je}rem`),onReset:()=>e.onReset("--sf-scroll-shadow-size"),rawDefault:"2rem",get currentRaw(){return e.overrides["--sf-scroll-shadow-size"]},onRawSet:je=>e.onSet("--sf-scroll-shadow-size",je)})}var Pe=r(ae,2),Te=s(Pe);_(()=>lt(Te,`mask:linear-gradient(to right, transparent, #000 ${t(R)}rem, #000 calc(100% - ${t(R)}rem), transparent)`)),d(I,X)};L(ke,I=>{t(m)&&I(he)})}var ie=r(ee,4),Ue=s(ie),Ne=r(s(Ue),2),Xe=s(Ne),We=r(Ue,2);{var Qe=I=>{var X=Xv(),ae=r(fe(X),2),Pe=r(s(ae),2),Te=r(Pe,2);{var ut=Dt=>{var zt=Gs();x("click",zt,()=>e.onReset("--sf-scrim-color")),d(Dt,zt)};L(Te,Dt=>{"--sf-scrim-color"in e.overrides&&Dt(ut)})}var je=r(ae,2),it=r(s(je),2);oe(it,21,()=>l,Dt=>Dt.value,(Dt,zt)=>{var ia=ol(),ca=s(ia);_(()=>{Ve(ia,1,`py-1 rounded-lg text-[10px] border transition-all cursor-pointer ${t(B)===t(zt).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(ca,t(zt).label)}),x("click",ia,()=>t(zt).value==="to top"?e.onReset("--sf-scrim-direction"):e.onSet("--sf-scrim-direction",t(zt).value)),d(Dt,ia)});var at=r(je,2),ft=s(at),Ge=r(at,2),Pt=r(s(Ge),2),jt=r(Pt,2);{var ta=Dt=>{var zt=Gs();x("click",zt,()=>e.onReset("--sf-scrim-text-shadow")),d(Dt,zt)};L(jt,Dt=>{"--sf-scrim-text-shadow"in e.overrides&&Dt(ta)})}_(()=>{Xt(Pe,e.overrides["--sf-scrim-color"]??""),lt(ft,`background:linear-gradient(${t(B)}, ${t(A)}, transparent)`),Xt(Pt,e.overrides["--sf-scrim-text-shadow"]??"")}),x("input",Pe,Dt=>{const zt=Dt.target.value.trim();zt?e.onSet("--sf-scrim-color",zt):e.onReset("--sf-scrim-color")}),x("input",Pt,Dt=>{const zt=Dt.target.value.trim();zt?e.onSet("--sf-scrim-text-shadow",zt):e.onReset("--sf-scrim-text-shadow")}),d(I,X)};L(We,I=>{t(h)&&I(Qe)})}var dt=r(ie,4),gt=s(dt),kt=r(s(gt),2),wt=s(kt),mt=r(gt,2);{var te=I=>{var X=Jv(),ae=r(fe(X),2),Pe=s(ae);oe(Pe,17,()=>i,ft=>ft.token,(ft,Ge)=>{{let Pt=u(()=>T(t(Ge))),jt=u(()=>t(Ge).token in e.overrides);yt(ft,{get label(){return t(Ge).label},get value(){return t(Pt)},min:0,get max(){return t(Ge).max},step:.0625,unit:"rem",get help(){return t(Ge).token},get overridden(){return t(jt)},onChange:ta=>e.onSet(t(Ge).token,`${ta}rem`),onReset:()=>e.onReset(t(Ge).token),get rawDefault(){return t(Ge).raw},get currentRaw(){return e.overrides[t(Ge).token]},onRawSet:ta=>e.onSet(t(Ge).token,ta)})}});var Te=r(Pe,2);{let ft=u(()=>"--sf-prose-media-radius"in e.overrides);yt(Te,{label:"Media radius",get value(){return t(q)},min:0,max:32,step:1,unit:"px",help:"--sf-prose-media-radius — corner radius on prose images/video",get overridden(){return t(ft)},onChange:Ge=>e.onSet("--sf-prose-media-radius",`${Ge}px`),onReset:()=>e.onReset("--sf-prose-media-radius"),rawDefault:"var(--sf-radius-m)",get currentRaw(){return e.overrides["--sf-prose-media-radius"]},onRawSet:Ge=>e.onSet("--sf-prose-media-radius",Ge)})}var ut=r(Te,2),je=r(s(ut),2),it=r(je,2);{var at=ft=>{var Ge=Gs();x("click",Ge,()=>e.onReset("--sf-prose-marker-color")),d(ft,Ge)};L(it,ft=>{"--sf-prose-marker-color"in e.overrides&&ft(at)})}_(()=>Xt(je,e.overrides["--sf-prose-marker-color"]??"")),x("input",je,ft=>{const Ge=ft.target.value.trim();Ge?e.onSet("--sf-prose-marker-color",Ge):e.onReset("--sf-prose-marker-color")}),d(I,X)};L(mt,I=>{t(v)&&I(te)})}var N=r(dt,2),V=s(N),ue=r(s(V),2),ye=s(ue),st=r(V,2);{var Ke=I=>{var X=Qv(),ae=r(fe(X),2),Pe=r(s(ae),2),Te=r(Pe,2);{var ut=je=>{var it=Gs();x("click",it,()=>e.onReset("--sf-content-intrinsic-size")),d(je,it)};L(Te,je=>{"--sf-content-intrinsic-size"in e.overrides&&je(ut)})}_(()=>Xt(Pe,e.overrides["--sf-content-intrinsic-size"]??"")),x("input",Pe,je=>{const it=je.target.value.trim();it?e.onSet("--sf-content-intrinsic-size",it):e.onReset("--sf-content-intrinsic-size")}),d(I,X)};L(st,I=>{t(b)&&I(Ke)})}_(()=>{$(z,"aria-expanded",t(c)),y(O,t(c)?"▲":"▼"),$(Oe,"aria-expanded",t(f)),y(Me,t(f)?"▲":"▼"),$(se,"aria-expanded",t(p)),y(Ce,t(p)?"▲":"▼"),$(le,"aria-expanded",t(m)),y(me,t(m)?"▲":"▼"),$(Ue,"aria-expanded",t(h)),y(Xe,t(h)?"▲":"▼"),$(gt,"aria-expanded",t(v)),y(wt,t(v)?"▲":"▼"),$(V,"aria-expanded",t(b)),y(ye,t(b)?"▲":"▼")}),x("click",z,()=>{w(c,!t(c))}),x("click",Oe,()=>{w(f,!t(f))}),x("click",se,()=>{w(p,!t(p))}),x("click",le,()=>{w(m,!t(m))}),x("click",Ue,()=>{w(h,!t(h))}),x("click",gt,()=>{w(v,!t(v))}),x("click",V,()=>{w(b,!t(b))}),d(a,E),ea()}oa(["click","input"]);var th=g('

Minimum interactive area — ensures accessibility on touch devices.

',1),ys=g(""),ah=g('
'),oh=g('
'),sh=g('

Override individual z-index tokens in the "All tokens" tab.

',1),rh=g('
Selection background
Selection text color

Select this text to preview the selection color.

'),nh=g('
',1),lh=g('
'),ih=g('

Controls the height / tap-target of all sized components (buttons, inputs, badges).

',1),ch=g(''),dh=g('
Caret color
Underline thickness

A sample link with the current underline settings.

',1),fh=g('

Icon scale tokens used by .sf-icon-* utilities. Values are in em units relative to surrounding text.

',1),uh=g(''),xs=g(''),ph=g('

Default values for .sf-media images and replaced elements.

Fit
Position
',1),mh=g('
'),vh=g(`

Default to the device's env(safe-area-inset-*). Override only if you need fixed padding regardless of notch/home-indicator.

`,1),hh=g('
'),gh=g('

Applied inside @media print via optional/print.css.

Page size
',1),bh=g('
'),yh=g(`

Boolean CSS custom property flags (0 = off, 1 = on). Components toggle these to activate state-specific styles. + Overriding globally forces all matching elements into that state — useful for testing and demos.

Required marker
`,1),xh=g(`

Selection colors, caret, links, focus ring, borders and sizes all render in the live preview (try the Components template). Scroll behavior applies to the page - itself and can't be shown in the static canvas.

`);function ch(a,e){Qt(e,!0);const o=[{label:"Below",token:"--sf-z-below",note:"Behind content (e.g. decorative BG)"},{label:"Raised",token:"--sf-z-raised",note:"Slightly above flow"},{label:"Dropdown",token:"--sf-z-dropdown",note:"Dropdowns, popovers"},{label:"Sticky",token:"--sf-z-sticky",note:"Sticky headers, toolbars"},{label:"Fixed",token:"--sf-z-fixed",note:"Fixed UI chrome"},{label:"Overlay",token:"--sf-z-overlay",note:"Modals, drawers backdrop"},{label:"Modal",token:"--sf-z-modal",note:"Modal dialogs"},{label:"Popover",token:"--sf-z-popover",note:"Tooltips, menus"},{label:"Tooltip",token:"--sf-z-tooltip",note:"Inline tooltips"},{label:"Toast",token:"--sf-z-toast",note:"Notifications"}],n=[{label:"Smooth",value:"smooth"},{label:"Auto",value:"auto"}],l=[{label:"XS",token:"--sf-size-xs",default:1.5},{label:"S",token:"--sf-size-s",default:2},{label:"M",token:"--sf-size-m",default:2.5},{label:"L",token:"--sf-size-l",default:2.75},{label:"XL",token:"--sf-size-xl",default:3.5}];function i(V,F,$){if(!V)return F;const ve=parseFloat($?V.replace($,""):V);return isNaN(ve)?F:ve}let c=u(()=>i(e.overrides["--sf-touch-target"],44,"px")),d=u(()=>e.overrides["--sf-scroll-behavior"]??"smooth"),p=u(()=>i(e.overrides["--sf-z-base"],0)),m=u(()=>e.overrides["--sf-caret-color"]??""),h=u(()=>i(e.overrides["--sf-link-underline-offset"]?.replace("em",""),.15)),v=u(()=>e.overrides["--sf-link-underline-thickness"]??"auto"),b=u(()=>e.overrides["--sf-focus-ring-style"]??"solid"),k=j(!1),_=j(!1),E=j(!1),B=j(!1),U=j(!1),S=j(!1),z=j(!1),L=j(!1),P=j(!1),w=j(!1),R=j(!1),D=j(!1);function A(V){return i(e.overrides[V.token]?.replace("rem",""),V.default)}var T=ih(),M=s(T),Q=s(M),He=r(s(Q),2),ee=s(He),be=r(Q,2);{var Ie=V=>{var F=Hv(),$=de(F);{let ie=u(()=>"--sf-touch-target"in e.overrides);pt($,{label:"Min touch size",get value(){return t(c)},min:32,max:64,step:1,unit:"px",help:"--sf-touch-target — minimum tappable area for interactive elements (WCAG 2.5.5)",get overridden(){return t(ie)},onChange:ue=>e.onSet("--sf-touch-target",`${ue}px`),onReset:()=>e.onReset("--sf-touch-target")})}var ve=r($,2),J=s(ve),G=s(J);O(()=>{it(J,`width: ${t(c)}px; height: ${t(c)}px`),y(G,`${t(c)??""}px`)}),f(V,F)};I(be,V=>{t(k)&&V(Ie)})}var pe=r(M,4),he=s(pe),Ne=r(s(he),2),at=s(Ne),et=r(he,2);{var N=V=>{var F=qv();re(F,21,()=>n,$=>$.value,($,ve)=>{var J=hs(),G=s(J);O(()=>{Ye(J,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer ${t(d)===t(ve).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(G,t(ve).label)}),x("click",J,()=>t(ve).value==="smooth"?e.onReset("--sf-scroll-behavior"):e.onSet("--sf-scroll-behavior",t(ve).value)),f($,J)}),f(V,F)};I(et,V=>{t(_)&&V(N)})}var W=r(pe,4),ye=s(W),ge=r(s(ye),2),Z=s(ge),we=r(ye,2);{var Ge=V=>{var F=Kv(),$=de(F);{let J=u(()=>"--sf-z-base"in e.overrides);pt($,{label:"Base offset",get value(){return t(p)},min:0,max:1e3,step:10,help:"--sf-z-base — added to all z-index tokens to avoid conflicts with existing stacking contexts",get overridden(){return t(J)},onChange:G=>e.onSet("--sf-z-base",String(G)),onReset:()=>e.onReset("--sf-z-base")})}var ve=r($,2);re(ve,21,()=>o,J=>J.token,(J,G)=>{const ie=u(()=>t(G).token in e.overrides);var ue=Vv(),K=s(ue),le=r(K,2),Me=s(le),H=r(le,2),_e=s(H),ce=r(H,2),Se=s(ce);O(Fe=>{Ye(K,1,`w-1.5 h-1.5 rounded-full shrink-0 ${t(ie)?"bg-amber-400":"bg-white/20"}`),y(Me,t(G).label),y(_e,t(G).note),y(Se,Fe)},[()=>t(G).token.replace("--sf-z-","")]),f(J,ue)}),f(V,F)};I(we,V=>{t(E)&&V(Ge)})}var nt=r(W,4),Oe=s(nt),Be=r(s(Oe),2),te=s(Be),q=r(Oe,2);{var ke=V=>{var F=Wv(),$=s(F),ve=r(s($),2);{let K=u(()=>e.overrides["--sf-color-selection-bg"]??""),le=u(()=>"--sf-color-selection-bg"in e.overrides);Va(ve,{token:"--sf-color-selection-bg",get value(){return t(K)},placeholder:"default",get isOverridden(){return t(le)},onSet:Me=>e.onSet("--sf-color-selection-bg",Me),onReset:()=>e.onReset("--sf-color-selection-bg")})}var J=r($,2),G=r(s(J),2);{let K=u(()=>e.overrides["--sf-color-selection-text"]??""),le=u(()=>"--sf-color-selection-text"in e.overrides);Va(G,{token:"--sf-color-selection-text",get value(){return t(K)},placeholder:"default",get isOverridden(){return t(le)},onSet:Me=>e.onSet("--sf-color-selection-text",Me),onReset:()=>e.onReset("--sf-color-selection-text")})}var ie=r(J,2),ue=s(ie);O(()=>it(ue,`--sf-color-selection-bg: ${e.overrides["--sf-color-selection-bg"]??"#6366f1"}; --sf-color-selection-text: ${e.overrides["--sf-color-selection-text"]??"#ffffff"}`)),f(V,F)};I(q,V=>{t(B)&&V(ke)})}var Ze=r(nt,4),ne=s(Ze),fe=r(s(ne),2),Pe=s(fe),De=r(ne,2);{var ze=V=>{var F=Yv(),$=de(F);re($,20,()=>["solid","dashed","dotted"],ie=>ie,(ie,ue)=>{const K=u(()=>e.overrides["--sf-focus-ring-style"]??"solid");var le=hs(),Me=s(le);O(()=>{Ye(le,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer capitalize ${t(K)===ue?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Me,ue)}),x("click",le,()=>ue==="solid"?e.onReset("--sf-focus-ring-style"):e.onSet("--sf-focus-ring-style",ue)),f(ie,le)});var ve=r($,2),J=s(ve),G=s(J);O(()=>{it(J,`outline: 2px ${t(b)} ${e.overrides["--sf-focus-ring-color"]||"oklch(0.7 0.2 235)"}; outline-offset: 2px`),y(G,`Focus ring · ${t(b)??""}`)}),f(V,F)};I(De,V=>{t(U)&&V(ze)})}var Le=r(Ze,4),qe=s(Le),je=r(s(qe),2),lt=s(je),dt=r(qe,2);{var Ot=V=>{var F=Jv(),$=r(de(F),2);re($,21,()=>l,J=>J.token,(J,G)=>{const ie=u(()=>A(t(G)));{let ue=u(()=>`${t(G).token} — component size step ${t(G).label}`),K=u(()=>t(G).token in e.overrides);pt(J,{get label(){return t(G).label},get value(){return t(ie)},min:1,max:5,step:.05,unit:"rem",get help(){return t(ue)},get overridden(){return t(K)},onChange:le=>e.onSet(t(G).token,`${le}rem`),onReset:()=>e.onReset(t(G).token)})}});var ve=r($,2);re(ve,21,()=>l,J=>J.token,(J,G)=>{const ie=u(()=>A(t(G)));var ue=Zv(),K=s(ue),le=r(K,2),Me=s(le);O(H=>{it(K,H),y(Me,t(G).label)},[()=>`height: ${Math.min(t(ie)*14,64)}px`]),f(J,ue)}),f(V,F)};I(dt,V=>{t(S)&&V(Ot)})}var vt=r(Le,4),oe=s(vt),xe=r(s(oe),2),Ee=s(xe),ot=r(oe,2);{var ft=V=>{var F=Qv(),$=de(F),ve=r(s($),2);{let Se=u(()=>"--sf-caret-color"in e.overrides);Va(ve,{token:"--sf-caret-color",get value(){return t(m)},placeholder:"default (action color)",get isOverridden(){return t(Se)},onSet:Fe=>e.onSet("--sf-caret-color",Fe),onReset:()=>e.onReset("--sf-caret-color")})}var J=r($,2);{let Se=u(()=>"--sf-link-underline-offset"in e.overrides);pt(J,{label:"Underline offset",get value(){return t(h)},min:0,max:.5,step:.01,unit:"em",help:"--sf-link-underline-offset — gap between text baseline and underline",get overridden(){return t(Se)},onChange:Fe=>e.onSet("--sf-link-underline-offset",`${Fe}em`),onReset:()=>e.onReset("--sf-link-underline-offset")})}var G=r(J,2),ie=s(G),ue=r(s(ie),2);{var K=Se=>{var Fe=Xv();x("click",Fe,()=>e.onReset("--sf-link-underline-thickness")),f(Se,Fe)};I(ue,Se=>{"--sf-link-underline-thickness"in e.overrides&&Se(K)})}var le=r(ie,2);re(le,20,()=>[["auto","auto"],["1px","1px"],["2px","2px"],["3px","3px"]],([Se,Fe])=>Fe,(Se,Fe)=>{var $e=u(()=>Pa(Fe,2));let Qe=()=>t($e)[0],bt=()=>t($e)[1];var kt=hs(),Pt=s(kt);O(()=>{Ye(kt,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer ${t(v)===bt()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Pt,Qe())}),x("click",kt,()=>bt()==="auto"?e.onReset("--sf-link-underline-thickness"):e.onSet("--sf-link-underline-thickness",bt())),f(Se,kt)});var Me=r(G,2),H=s(Me),_e=r(H,2),ce=r(s(_e));O(()=>{it(H,`caret-color:${t(m)||"#6366f1"}`),it(ce,`text-decoration:underline;text-underline-offset:${t(h)}em;text-decoration-thickness:${t(v)}`)}),x("click",ce,Se=>Se.preventDefault()),f(V,F)};I(ot,V=>{t(z)&&V(ft)})}var _t=r(vt,4),xt=s(_t),Nt=r(s(xt),2),St=s(Nt),Et=r(xt,2);{var ct=V=>{var F=$v(),$=r(de(F),2);re($,20,()=>[{label:"xs",token:"--sf-icon-xs",def:.875},{label:"s",token:"--sf-icon-s",def:1},{label:"m",token:"--sf-icon-m",def:1.5},{label:"l",token:"--sf-icon-l",def:2},{label:"xl",token:"--sf-icon-xl",def:3},{label:"2xl",token:"--sf-icon-2xl",def:4}],J=>J.token,(J,G)=>{{let ie=u(()=>i(e.overrides[G.token]?.replace("em",""),G.def)),ue=u(()=>G.token in e.overrides);pt(J,{get label(){return G.label},get value(){return t(ie)},min:.5,max:6,step:.125,unit:"em",get overridden(){return t(ue)},onChange:K=>e.onSet(G.token,`${K}em`),onReset:()=>e.onReset(G.token)})}});var ve=r($,2);{let J=u(()=>i(e.overrides["--sf-icon-box-pad"]?.replace("em",""),.5)),G=u(()=>"--sf-icon-box-pad"in e.overrides);pt(ve,{label:"Box padding",get value(){return t(J)},min:0,max:2,step:.125,unit:"em",help:"--sf-icon-box-pad — padding around icon when using .sf-icon-box",get overridden(){return t(G)},onChange:ie=>e.onSet("--sf-icon-box-pad",`${ie}em`),onReset:()=>e.onReset("--sf-icon-box-pad")})}f(V,F)};I(Et,V=>{t(L)&&V(ct)})}var Gt=r(_t,4),ea=s(Gt),ia=r(s(ea),2),Xe=s(ia),ut=r(ea,2);{var Lt=V=>{var F=th(),$=r(de(F),2),ve=r(s($),2);re(ve,20,()=>["cover","contain","fill","none"],Me=>Me,(Me,H)=>{const _e=u(()=>e.overrides["--sf-object-fit"]??"cover");var ce=hs(),Se=s(ce);O(()=>{Ye(ce,1,`flex-1 py-1.5 rounded-lg text-[9px] border transition-all cursor-pointer ${t(_e)===H?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5"}`),y(Se,H)}),x("click",ce,()=>H==="cover"?e.onReset("--sf-object-fit"):e.onSet("--sf-object-fit",H)),f(Me,ce)});var J=r(ve,2);{var G=Me=>{var H=eh();x("click",H,()=>e.onReset("--sf-object-fit")),f(Me,H)};I(J,Me=>{"--sf-object-fit"in e.overrides&&Me(G)})}var ie=r($,2),ue=r(s(ie),2),K=r(ue,2);{var le=Me=>{var H=gs();x("click",H,()=>e.onReset("--sf-object-position")),f(Me,H)};I(K,Me=>{"--sf-object-position"in e.overrides&&Me(le)})}O(()=>Xt(ue,e.overrides["--sf-object-position"]??"")),x("input",ue,Me=>{const H=Me.target.value.trim();H?e.onSet("--sf-object-position",H):e.onReset("--sf-object-position")}),f(V,F)};I(ut,V=>{t(P)&&V(Lt)})}var Dt=r(Gt,4),Rt=s(Dt),me=r(s(Rt),2),Je=s(me),mt=r(Rt,2);{var Ut=V=>{var F=oh(),$=r(de(F),2);re($,20,()=>[{label:"Top",token:"--sf-safe-top",placeholder:"env(safe-area-inset-top, 0px)"},{label:"Right",token:"--sf-safe-right",placeholder:"env(safe-area-inset-right, 0px)"},{label:"Bottom",token:"--sf-safe-bottom",placeholder:"env(safe-area-inset-bottom, 0px)"},{label:"Left",token:"--sf-safe-left",placeholder:"env(safe-area-inset-left, 0px)"}],ve=>ve.token,(ve,J)=>{var G=ah(),ie=s(G),ue=s(ie),K=r(ie,2),le=r(K,2);{var Me=H=>{var _e=gs();x("click",_e,()=>e.onReset(J.token)),f(H,_e)};I(le,H=>{J.token in e.overrides&&H(Me)})}O(()=>{y(ue,J.label),Xt(K,e.overrides[J.token]??""),Y(K,"placeholder",J.placeholder)}),x("input",K,H=>{const _e=H.target.value.trim();_e?e.onSet(J.token,_e):e.onReset(J.token)}),f(ve,G)}),f(V,F)};I(mt,V=>{t(R)&&V(Ut)})}var Ue=r(Dt,4),Ae=s(Ue),Ve=r(s(Ae),2),tt=s(Ve),Ct=r(Ae,2);{var ta=V=>{var F=rh(),$=r(de(F),2),ve=r(s($),2);re(ve,20,()=>["a4","letter","legal","a3"],G=>G,(G,ie)=>{const ue=u(()=>e.overrides["--sf-print-page-size"]??"a4");var K=hs(),le=s(K);O(()=>{Ye(K,1,`flex-1 py-1.5 rounded-lg text-[9px] border transition-all cursor-pointer ${t(ue)===ie?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5"}`),y(le,ie)}),x("click",K,()=>ie==="a4"?e.onReset("--sf-print-page-size"):e.onSet("--sf-print-page-size",ie)),f(G,K)});var J=r($,2);re(J,16,()=>[{label:"Base size",token:"--sf-print-base-size",placeholder:"11pt"},{label:"Page margin",token:"--sf-print-page-margin",placeholder:"2cm"}],G=>G.token,(G,ie)=>{var ue=sh(),K=s(ue),le=s(K),Me=r(K,2),H=r(Me,2);{var _e=ce=>{var Se=gs();x("click",Se,()=>e.onReset(ie.token)),f(ce,Se)};I(H,ce=>{ie.token in e.overrides&&ce(_e)})}O(()=>{y(le,ie.label),Xt(Me,e.overrides[ie.token]??""),Y(Me,"placeholder",ie.placeholder)}),x("input",Me,ce=>{const Se=ce.target.value.trim();Se?e.onSet(ie.token,Se):e.onReset(ie.token)}),f(G,ue)}),f(V,F)};I(Ct,V=>{t(w)&&V(ta)})}var zt=r(Ue,4),It=s(zt),Ft=r(s(It),2),la=s(Ft),ka=r(It,2);{var se=V=>{var F=lh(),$=r(de(F),2);re($,20,()=>[{label:"is-active",token:"--sf-is-active",note:"Active/selected state"},{label:"is-current",token:"--sf-is-current",note:"Current page/item"},{label:"is-open",token:"--sf-is-open",note:"Open/expanded state"},{label:"is-pressed",token:"--sf-is-pressed",note:"Pressed/depressed state"}],ue=>ue.token,(ue,K)=>{const le=u(()=>e.overrides[K.token]??"0");var Me=nh(),H=s(Me),_e=s(H),ce=r(H,2),Se=s(ce),Fe=r(ce,2),$e=s(Fe),Qe=r(Fe,2);{var bt=kt=>{var Pt=gs();x("click",Pt,()=>e.onReset(K.token)),f(kt,Pt)};I(Qe,kt=>{K.token in e.overrides&&kt(bt)})}O(()=>{Y(H,"aria-label",K.label),Y(H,"aria-pressed",t(le)==="1"),Ye(H,1,`w-8 h-4 rounded-full transition-colors relative cursor-pointer shrink-0 ${t(le)==="1"?"bg-indigo-600":"bg-white/10"}`),Ye(_e,1,`absolute top-0.5 w-3 h-3 bg-white rounded-full shadow transition-transform ${t(le)==="1"?"translate-x-4":"translate-x-0.5"}`),y(Se,K.label),y($e,K.note)}),x("click",H,()=>t(le)==="1"?e.onReset(K.token):e.onSet(K.token,"1")),f(ue,Me)});var ve=r($,2),J=r(s(ve),2),G=r(J,2);{var ie=ue=>{var K=gs();x("click",K,()=>e.onReset("--sf-field-required-marker")),f(ue,K)};I(G,ue=>{"--sf-field-required-marker"in e.overrides&&ue(ie)})}O(()=>Xt(J,e.overrides["--sf-field-required-marker"]??"")),x("input",J,ue=>{const K=ue.target.value;K?e.onSet("--sf-field-required-marker",K):e.onReset("--sf-field-required-marker")}),f(V,F)};I(ka,V=>{t(D)&&V(se)})}O(()=>{Y(Q,"aria-expanded",t(k)),y(ee,t(k)?"▲":"▼"),Y(he,"aria-expanded",t(_)),y(at,t(_)?"▲":"▼"),Y(ye,"aria-expanded",t(E)),y(Z,t(E)?"▲":"▼"),Y(Oe,"aria-expanded",t(B)),y(te,t(B)?"▲":"▼"),Y(ne,"aria-expanded",t(U)),y(Pe,t(U)?"▲":"▼"),Y(qe,"aria-expanded",t(S)),y(lt,t(S)?"▲":"▼"),Y(oe,"aria-expanded",t(z)),y(Ee,t(z)?"▲":"▼"),Y(xt,"aria-expanded",t(L)),y(St,t(L)?"▲":"▼"),Y(ea,"aria-expanded",t(P)),y(Xe,t(P)?"▲":"▼"),Y(Rt,"aria-expanded",t(R)),y(Je,t(R)?"▲":"▼"),Y(Ae,"aria-expanded",t(w)),y(tt,t(w)?"▲":"▼"),Y(It,"aria-expanded",t(D)),y(la,t(D)?"▲":"▼")}),x("click",Q,()=>{C(k,!t(k))}),x("click",he,()=>{C(_,!t(_))}),x("click",ye,()=>{C(E,!t(E))}),x("click",Oe,()=>{C(B,!t(B))}),x("click",ne,()=>{C(U,!t(U))}),x("click",qe,()=>{C(S,!t(S))}),x("click",oe,()=>{C(z,!t(z))}),x("click",xt,()=>{C(L,!t(L))}),x("click",ea,()=>{C(P,!t(P))}),x("click",Rt,()=>{C(R,!t(R))}),x("click",Ae,()=>{C(w,!t(w))}),x("click",It,()=>{C(D,!t(D))}),f(a,T),$t()}aa(["click","input"]);var dh=g(' '),fh=g(' '),uh=g('
'),ph=g('
'),mh=g(' '),vh=g('
'),hh=g('
'),gh=g(`
Theme presets

Apply a curated set of overrides with one click. Existing overrides outside the theme's scope are preserved.

`);function bh(a,e){Qt(e,!0);var o=gh(),n=r(s(o),4);re(n,21,()=>Ri,l=>l.id,(l,i)=>{const c=u(()=>Object.keys(t(i).overrides).length);var d=hh(),p=s(d),m=s(p),h=s(m),v=r(m,2),b=s(v),k=s(b),_=r(b,2),E=s(_),B=r(_,2),U=s(B);{var S=A=>{var T=Bt(),M=de(T);re(M,16,()=>t(i).tags,Q=>Q,(Q,He)=>{var ee=dh(),be=s(ee);O(()=>y(be,He)),f(Q,ee)}),f(A,T)};I(U,A=>{t(i).tags&&A(S)})}var z=r(U,2);{var L=A=>{var T=fh(),M=s(T);O(()=>y(M,`${t(c)??""} overrides`)),f(A,T)};I(z,A=>{t(c)>0&&A(L)})}var P=r(v,2),w=s(P),R=r(p,2);{var D=A=>{var T=vh(),M=s(T);re(M,17,()=>Object.entries(t(i).overrides).slice(0,5),([ee,be])=>ee,(ee,be)=>{var Ie=u(()=>Pa(t(be),2));let pe=()=>t(Ie)[0],he=()=>t(Ie)[1];var Ne=ph(),at=s(Ne);{var et=ge=>{var Z=uh();O(()=>it(Z,`background: ${he()}`)),f(ge,Z)},N=u(()=>pe().includes("color")||pe().includes("source"));I(at,ge=>{t(N)&&ge(et)})}var W=r(at,2),ye=s(W);O(ge=>y(ye,ge),[()=>pe().replace("--sf-","")]),f(ee,Ne)});var Q=r(M,2);{var He=ee=>{var be=mh(),Ie=s(be);O(()=>y(Ie,`+${t(c)-5} more`)),f(ee,be)};I(Q,ee=>{t(c)>5&&ee(He)})}f(A,T)};I(R,A=>{t(c)>0&&A(D)})}O(()=>{y(h,t(i).icon),y(k,t(i).name),y(E,t(i).blurb),Ye(P,1,`px-3 py-1.5 rounded-lg text-[11px] font-bold transition-all cursor-pointer shrink-0 ${t(i).id==="default"?"border border-rose-500/30 text-rose-400 hover:bg-rose-500/10":"bg-indigo-600/20 border border-indigo-500/30 text-indigo-300 hover:bg-indigo-600/30"}`),y(w,t(i).id==="default"?"Reset all":"Apply")}),x("click",P,()=>e.onApplyTheme(t(i))),f(l,d)}),f(a,o),$t()}aa(["click"]);var yh=g(' Link copied!',1),xh=g(" Copy shareable link",1),kh=g('
Export

CSS output
 
Usage
Paste this CSS into your project after the SLASHED import.
');function wh(a,e){Qt(e,!0);let o=j("layer"),n=j(!1),l=j(!1),i=u(()=>Mo(e.overrides,{mode:t(o),banner:!0})),c=u(()=>Object.keys(e.overrides).length);async function d(){try{await navigator.clipboard.writeText(t(i)),C(n,!0),setTimeout(()=>{C(n,!1)},2e3)}catch{}}async function p(){try{const N=Mf(e.overrides);await navigator.clipboard.writeText(N),C(l,!0),setTimeout(()=>{C(l,!1)},2e3)}catch{}}function m(){const N=new Blob([t(i)],{type:"text/css"}),W=URL.createObjectURL(N),ye=document.createElement("a");ye.href=W,ye.download="slashed-overrides.css",ye.click(),URL.revokeObjectURL(W)}function h(N){return N.includes("color")||N.includes("scrim-color")||N.includes("shadow-color")?"color":N.includes("duration")||N.includes("delay")||N.includes("transition-duration")?"duration":N.includes("radius")||N.includes("space")||N.includes("size")||N.includes("width")||N.includes("height")||N.includes("gap")||N.includes("blur")||N.includes("text-")||N.includes("leading")||N.includes("tracking")?"dimension":N.includes("font-family")||N.includes("font-mono")||N.includes("font-body")||N.includes("font-heading")||N.includes("font-code")?"fontFamily":N.includes("font-weight")||N.includes("weight")?"fontWeight":"string"}function v(){const N={};for(const[we,Ge]of Object.entries(e.overrides)){const nt=we.replace(/^--sf-/,"").replace(/-/g,".");N[nt]={$value:Ge,$type:h(we)}}const W=JSON.stringify({$schema:"https://design-tokens.github.io/community-group/format/",...N},null,2),ye=new Blob([W],{type:"application/json"}),ge=URL.createObjectURL(ye),Z=document.createElement("a");Z.href=ge,Z.download="slashed-tokens.w3c.json",Z.click(),URL.revokeObjectURL(ge)}var b=kh(),k=s(b),_=r(s(k),2),E=s(_),B=r(k,2),U=s(B);{var S=N=>{var W=yh(),ye=de(W);Fo(ye,{class:"w-3 h-3 text-emerald-400"}),f(N,W)},z=N=>{var W=xh(),ye=de(W);Md(ye,{class:"w-3 h-3"}),f(N,W)};I(U,N=>{t(l)?N(S):N(z,-1)})}var L=r(B,2),P=r(s(L),2),w=s(P),R=r(w,2),D=r(L,2),A=s(D),T=s(A),M=r(A,2),Q=s(M),He=s(Q);{var ee=N=>{Fo(N,{class:"w-3 h-3 text-emerald-400"})},be=N=>{jr(N,{class:"w-3 h-3"})};I(He,N=>{t(n)?N(ee):N(be,-1)})}var Ie=r(Q,2),pe=s(Ie);Gr(pe,{class:"w-3 h-3"});var he=r(D,2),Ne=s(he);Gr(Ne,{class:"w-3 h-3"});var at=r(he,2),et=r(s(at),4);et.textContent=`@import 'slashed/slashed.full.css'; -@import './slashed-overrides.css';`,O(()=>{y(E,t(c)>0?`${t(c)} override${t(c)!==1?"s":""} ready to export.`:"No overrides yet. Customise tokens, then export."),B.disabled=t(c)===0,Ye(w,1,`flex-1 py-1.5 rounded-md text-[11px] font-bold transition-all cursor-pointer ${t(o)==="layer"?"bg-indigo-600 text-white":"text-slate-400 hover:text-slate-200"}`),Ye(R,1,`flex-1 py-1.5 rounded-md text-[11px] font-bold transition-all cursor-pointer ${t(o)==="root"?"bg-indigo-600 text-white":"text-slate-400 hover:text-slate-200"}`),y(T,t(i)||"/* No overrides */"),he.disabled=t(c)===0}),x("click",B,p),x("click",w,()=>{C(o,"layer")}),x("click",R,()=>{C(o,"root")}),x("click",Q,d),x("click",Ie,m),x("click",he,v),f(a,b),$t()}aa(["click"]);const _h=JSON.parse(`[{"name":"is-active","selector":".is-active","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Active state — applied to the currently interacted-with element (e.g. pressed button, active menu item). Sets --sf-is-active to 1 for calc() branching.","optional":false,"layer":"slashed.states"},{"name":"is-busy","selector":".is-busy","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Busy state — shows a progress cursor to indicate background processing. Does not mask content; use is-loading when content should be hidden during loading.","optional":false,"layer":"slashed.states"},{"name":"is-clickable","selector":".is-clickable","kind":"state","category":"State classes","group":"FOCUS / INTERACTION MODIFIERS","description":"Makes the element appear interactive (pointer cursor). Use when an element has a click handler but no native button or link role.","optional":false,"layer":"slashed.states"},{"name":"is-clipped","selector":".is-clipped","kind":"state","category":"State classes","group":"OVERFLOW / CLIPPING","description":"Clips overflowing content (overflow: hidden). Use to constrain media or tooltips within a container boundary.","optional":false,"layer":"slashed.states"},{"name":"is-collapsed","selector":".is-collapsed","kind":"state","category":"State classes","group":"OPEN / CLOSED","description":"Collapsed state for disclosure widgets — hides the expandable region. Pair with is-expanded or is-open. Components add transitions.","optional":false,"layer":"slashed.states"},{"name":"is-current","selector":".is-current","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Current/selected state — marks the active page in navigation or the selected item in a list. Sets --sf-is-current to 1 for calc() branching.","optional":false,"layer":"slashed.states"},{"name":"is-danger","selector":".is-danger","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Danger status state — applies danger color tokens for destructive actions (e.g. a delete confirmation dialog) and form validation errors.","optional":false,"layer":"slashed.states"},{"name":"is-disabled","selector":".is-disabled","kind":"state","category":"State classes","group":"INTERACTIVITY","description":"Disabled state — dims the element (--sf-opacity-disabled), removes pointer events, and sets cursor: not-allowed. Inherited by child elements that re-enable pointer events.","optional":false,"layer":"slashed.states"},{"name":"is-draggable","selector":".is-draggable","kind":"state","category":"State classes","group":"DRAG & DROP","description":"Draggable state — shows a grab cursor to indicate the element can be dragged. Apply before a drag interaction begins.","optional":false,"layer":"slashed.states"},{"name":"is-dragging","selector":".is-dragging","kind":"state","category":"State classes","group":"DRAG & DROP","description":"Active drag state — shows a grabbing cursor while the element is being dragged. Apply during the drag event.","optional":false,"layer":"slashed.states"},{"name":"is-drop-target","selector":".is-drop-target","kind":"state","category":"State classes","group":"DRAG & DROP","description":"Drop-target state — applies a visual highlight to indicate a valid drag-and-drop destination. Toggle on drag-over events.","optional":false,"layer":"slashed.states"},{"name":"is-empty","selector":".is-empty","kind":"state","category":"State classes","group":"EMPTY STATE","description":"Empty state — hides the element when it has no child nodes (:empty). Used for dynamic lists or containers that may render empty.","optional":false,"layer":"slashed.states"},{"name":"is-error","selector":".is-error","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Error state — alias for is-danger. Applies danger color tokens to indicate a validation failure or system error. Visual styling is identical to is-invalid.","optional":false,"layer":"slashed.states"},{"name":"is-expanded","selector":".is-expanded","kind":"state","category":"State classes","group":"OPEN / CLOSED","description":"Expanded state for disclosure widgets — shows the expandable region. Inverse of is-collapsed. Components add transitions.","optional":false,"layer":"slashed.states"},{"name":"is-fixed","selector":".is-fixed","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Fixed positioning state — removes the element from the document flow and positions it relative to the viewport. Respects writing-mode (logical variant of fixed positioning).","optional":false,"layer":"slashed.states"},{"name":"is-focused","selector":".is-focused","kind":"state","category":"State classes","group":"FOCUS / INTERACTION MODIFIERS","description":"Programmatic focus state — applies the focus ring to an element that should appear focused. Use when :focus-visible alone is insufficient (e.g. custom select).","optional":false,"layer":"slashed.states"},{"name":"is-fullscreen","selector":".is-fullscreen","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Fullscreen positioning state — stretches the element to cover the viewport. Bare positioning only; consumers supply inset values.","optional":false,"layer":"slashed.states"},{"name":"is-hidden","selector":".is-hidden","kind":"state","category":"State classes","group":"VISIBILITY","description":"Hidden state — removes the element from layout and accessibility tree (display: none !important).","optional":false,"layer":"slashed.states"},{"name":"is-highlighted","selector":".is-highlighted","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Highlighted state — applies a highlight background. Useful for search result highlighting and keyboard-navigated lists.","optional":false,"layer":"slashed.states"},{"name":"is-info","selector":".is-info","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Info status state — applies info color tokens. Use for neutral informational messages and hints.","optional":false,"layer":"slashed.states"},{"name":"is-invalid","selector":".is-invalid","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Invalid state — applies danger color tokens to form fields with validation failures. Identical visual output to is-error; the name signals form-field context.","optional":false,"layer":"slashed.states"},{"name":"is-invisible","selector":".is-invisible","kind":"state","category":"State classes","group":"VISIBILITY","description":"Invisible state — hides the element visually but keeps it in the layout and accessibility tree (visibility: hidden).","optional":false,"layer":"slashed.states"},{"name":"is-loading","selector":".is-loading","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Loading state — hides the element's text (color: transparent), removes pointer events, and renders a spinner via ::after. Use for buttons and containers awaiting async results.","optional":false,"layer":"slashed.states"},{"name":"is-open","selector":".is-open","kind":"state","category":"State classes","group":"OPEN / CLOSED","description":"Open/shown state for modals, dropdowns, and drawers — counterpart to is-collapsed/is-hidden. Sets --sf-is-open to 1 for calc() branching.","optional":false,"layer":"slashed.states"},{"name":"is-overlay","selector":".is-overlay","kind":"state","category":"State classes","group":"OVERLAY / BACKDROP","description":"Overlay positioning state — renders the element as a full-screen fixed overlay with a backdrop scrim. Use for modal backgrounds.","optional":false,"layer":"slashed.states"},{"name":"is-pending","selector":".is-pending","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Pending state for optimistic UI — content remains visible but dimmed while an async request is in flight. Differs from is-loading (which hides content entirely).","optional":false,"layer":"slashed.states"},{"name":"is-pinned","selector":".is-pinned","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Pinned / sticky state — applies a visual affordance (e.g. border or shadow) to indicate the element is in its stuck (sticky) position. Toggle via IntersectionObserver.","optional":false,"layer":"slashed.states"},{"name":"is-pressed","selector":".is-pressed","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Pressed/toggled-on state for toggle buttons. Sets --sf-is-pressed to 1 for calc() branching and signals the selected state to components.","optional":false,"layer":"slashed.states"},{"name":"is-readonly","selector":".is-readonly","kind":"state","category":"State classes","group":"INTERACTIVITY","description":"Readonly state — removes pointer events and text selection. Use for fields that display data but cannot be edited.","optional":false,"layer":"slashed.states"},{"name":"is-resizable","selector":".is-resizable","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Resizable state — enables user resize handle on the element (resize: both). Typically applied to textareas or panels.","optional":false,"layer":"slashed.states"},{"name":"is-scrollable","selector":".is-scrollable","kind":"state","category":"State classes","group":"OVERFLOW / CLIPPING","description":"Makes the element scrollable (overflow: auto) when its content overflows. Applies to both axes.","optional":false,"layer":"slashed.states"},{"name":"is-selected","selector":".is-selected","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Selected state — marks an item as selected in a list, table row, or grid cell. Visual specifics (background, border) are applied by component styles.","optional":false,"layer":"slashed.states"},{"name":"is-skeleton","selector":".is-skeleton","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Skeleton loading placeholder state. Applies a shimmer animation over the element to indicate that content is loading. Works on both img and non-media elements.","optional":false,"layer":"slashed.states"},{"name":"is-sticky","selector":".is-sticky","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Sticky positioning state — sets position: sticky with a top offset from --sf-sticky-offset. Useful for sticky headers and sidebar sub-menus.","optional":false,"layer":"slashed.states"},{"name":"is-success","selector":".is-success","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Success status state — applies success color tokens. Use for confirmation messages, completed form steps, and positive feedback.","optional":false,"layer":"slashed.states"},{"name":"is-truncated","selector":".is-truncated","kind":"state","category":"State classes","group":"OVERFLOW / CLIPPING","description":"Single-line truncation state — clips overflowing text with an ellipsis (overflow: hidden, text-overflow: ellipsis, white-space: nowrap).","optional":false,"layer":"slashed.states"},{"name":"is-unselectable","selector":".is-unselectable","kind":"state","category":"State classes","group":"FOCUS / INTERACTION MODIFIERS","description":"Prevents text selection (user-select: none) on the element. Use on interactive drag handles, labels, and UI chrome that shouldn't be selected.","optional":false,"layer":"slashed.states"},{"name":"is-valid","selector":".is-valid","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Valid state — applies success color tokens to form fields that have passed validation. Visual styling is identical to is-success; the name signals form-field context.","optional":false,"layer":"slashed.states"},{"name":"is-visible","selector":".is-visible","kind":"state","category":"State classes","group":"VISIBILITY","description":"Visible state — forces the element to be visible (visibility: visible). Use to un-hide an element that inherited visibility: hidden from a parent.","optional":false,"layer":"slashed.states"},{"name":"is-warning","selector":".is-warning","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Warning status state — applies warning color tokens. Use for cautionary messages and non-critical alerts.","optional":false,"layer":"slashed.states"},{"name":"no-motion","selector":".no-motion","kind":"accessibility","category":"Accessibility","group":"Reduced motion. Token override helps components that read","description":"Suppresses all animations and transitions within the subtree. Apply to a container to create a reduced-motion zone without relying on the system preference.","optional":false,"layer":"slashed.accessibility"},{"name":"no-print","selector":".no-print","kind":"print","category":"Print","group":"Print visibility utilities","description":"Hides the element in @media print. Use on sidebars, navigation bars, and decorative elements that should not appear on paper.","optional":false,"layer":"slashed.print"},{"name":"print-color-exact","selector":".print-color-exact","kind":"print","category":"Print","group":"Opt-in colour treatment","description":"Forces exact color rendering in print (print-color-adjust: exact). Use on charts and colored badges that must preserve their fill colors in print.","optional":false,"layer":"slashed.print"},{"name":"print-no-color","selector":".print-no-color","kind":"print","category":"Print","group":"Opt-in colour treatment","description":"Strips color information in print (print-color-adjust: economy). Defers to the printer's ink-saving mode for backgrounds and non-critical color fills.","optional":false,"layer":"slashed.print"},{"name":"print-only","selector":".print-only","kind":"print","category":"Print","group":"Print visibility utilities","description":"Hides the element on screen (display: none) but shows it in @media print. Use for print-only headers, footers, and supplementary content not needed on screen.","optional":false,"layer":"slashed.print"},{"name":"sf-alternate","selector":".sf-alternate","kind":"layout","category":"Layout primitives","group":"Alternate (zigzag / media-object)","description":"Zigzag / alternating two-column layout. Even children align image-left/text-right; odd children flip. Collapses to a single column below the breakpoint.","optional":false,"layer":"slashed.layout"},{"name":"sf-aspect","selector":".sf-aspect","kind":"macro","category":"Macro classes","group":"Aspect","description":"Sets aspect-ratio from a --sf-aspect-ratio scoped token. Override the token inline to get any ratio without a new class.","optional":false,"layer":"slashed.macros"},{"name":"sf-bento","selector":".sf-bento","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Auto-fill bento grid for card dashboards. Children span 1 column by default; use span modifiers (sf-bento-wide, sf-bento-tall, sf-bento-full, sf-bento-featured) to break the grid.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--2","selector":".sf-bento--2","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with a 2-column base layout.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--3","selector":".sf-bento--3","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with a 3-column base layout.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--6","selector":".sf-bento--6","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with a 6-column base layout.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--compact","selector":".sf-bento--compact","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with shorter default row height.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--tall","selector":".sf-bento--tall","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with taller default row height.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-featured","selector":".sf-bento-featured","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: takes up 2×2 cells (featured hero placement).","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-full","selector":".sf-bento-full","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: stretches across all columns (full-width banner).","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-tall","selector":".sf-bento-tall","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: doubles the row height (tall card).","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-wide","selector":".sf-bento-wide","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: spans 2 columns (wide card).","optional":false,"layer":"slashed.layout"},{"name":"sf-bg","selector":".sf-bg","kind":"layout","category":"Layout primitives","group":"Background","description":"Background layer — absolutely-positioned cover media that sits behind a parent's content. The parent is auto-promoted to a positioned, isolated stacking context via :has(), so .sf-bg composes natively under .sf-scrim (background → scrim gradient → content). Works as a bare or as a wrapper with a nested > img / > video / > picture.","optional":false,"layer":"slashed.layout"},{"name":"sf-box","selector":".sf-box","kind":"layout","category":"Layout primitives","group":"Box","description":"Minimal padding container that applies --sf-component-pad on all sides. The simplest layout primitive for adding breathing room.","optional":false,"layer":"slashed.layout"},{"name":"sf-breakout","selector":".sf-breakout","kind":"layout","category":"Layout primitives","group":"Content grid (breakout pattern)","description":"Breaks a child element out of a parent sf-content-grid, spanning full bleed (or a named grid area) regardless of the parent column. Useful for full-width sections inside constrained prose.","optional":false,"layer":"slashed.layout"},{"name":"sf-center","selector":".sf-center","kind":"layout","category":"Layout primitives","group":"Center","description":"Centers children both horizontally and vertically using flexbox. Optionally add sf-center--intrinsic to size the container to its content.","optional":false,"layer":"slashed.layout"},{"name":"sf-center--intrinsic","selector":".sf-center--intrinsic","kind":"layout","category":"Layout primitives","group":"Center","description":"Modifier for sf-center: constrains the container to the natural width of its children (no stretching to fill available space).","optional":false,"layer":"slashed.layout"},{"name":"sf-clickable-parent","selector":".sf-clickable-parent","kind":"accessibility","category":"Accessibility","group":"Clickable-parent","description":"Makes the entire card or list-item clickable via an absolutely-positioned child overlay link. Apply to the container; place sf-clickable-parent__overlay on the .","optional":false,"layer":"slashed.accessibility"},{"name":"sf-clickable-parent__overlay","selector":".sf-clickable-parent__overlay","kind":"accessibility","category":"Accessibility","group":"Clickable-parent","description":"The full-bleed overlay link inside an sf-clickable-parent. Stretches to cover the parent and uses pointer-events to let interactive children keep their own clicks.","optional":false,"layer":"slashed.accessibility"},{"name":"sf-cluster","selector":".sf-cluster","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Flex-wrap row of variable-width items with automatic gap. Children wrap when the container is too narrow. Use for tag lists, button groups, and icon rows.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--2xl","selector":".sf-cluster--2xl","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with 2xl gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--between","selector":".sf-cluster--between","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that distributes items with space-between alignment.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--center","selector":".sf-cluster--center","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that centers the item row horizontally.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--end","selector":".sf-cluster--end","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that aligns items to the inline end (right in LTR).","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--l","selector":".sf-cluster--l","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with large (l) gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--m","selector":".sf-cluster--m","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with medium (m) gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--no-wrap","selector":".sf-cluster--no-wrap","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that prevents item wrapping (single-line row).","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--s","selector":".sf-cluster--s","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with small (s) gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--xl","selector":".sf-cluster--xl","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with xl gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--xs","selector":".sf-cluster--xs","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with xs gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-color-pulse","selector":".sf-color-pulse","kind":"motion","category":"Motion / animation","group":"@property color animation","description":"Applies a gentle color-pulse animation to draw attention to a dynamic value change (e.g. a counter updating). Scoped to users who have not requested reduced motion.","optional":false,"layer":"slashed.motion"},{"name":"sf-container","selector":".sf-container","kind":"layout","category":"Layout primitives","group":"Section","description":"Max-width page container, centered with auto side gutters. Establishes a named inline-size container (cq-container) for container queries. Default width is --sf-container-m.","optional":false,"layer":"slashed.layout"},{"name":"sf-container--full","selector":".sf-container--full","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant that spans the full viewport width (no max-width cap).","optional":false,"layer":"slashed.layout"},{"name":"sf-container--narrow","selector":".sf-container--narrow","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant with a narrower max-width (--sf-container-s). Use for single-column prose and forms.","optional":false,"layer":"slashed.layout"},{"name":"sf-container--prose","selector":".sf-container--prose","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant with a prose-optimised max-width (--sf-container-prose). Ideal for long-form reading content.","optional":false,"layer":"slashed.layout"},{"name":"sf-container--wide","selector":".sf-container--wide","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant with a wider max-width (--sf-container-l). Use for dashboards and wide media.","optional":false,"layer":"slashed.layout"},{"name":"sf-content-auto","selector":".sf-content-auto","kind":"macro","category":"Macro classes","group":"Content visibility","description":"Sets content-visibility: auto on the element. The browser skips rendering off-screen content, improving LCP for long pages.","optional":false,"layer":"slashed.macros"},{"name":"sf-content-grid","selector":".sf-content-grid","kind":"layout","category":"Layout primitives","group":"Content grid (breakout pattern)","description":"Holy-grail content grid with named areas: full-bleed, popout, and content columns. Use sf-breakout on children to escape the content column.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover","selector":".sf-cover","kind":"layout","category":"Layout primitives","group":"Cover","description":"Vertically stretches to at least a viewport height with a centered element (sf-cover__center). Typical use: hero sections.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover__center","selector":".sf-cover__center","kind":"layout","category":"Layout primitives","group":"Cover","description":"The centered focal element inside an sf-cover. Stays vertically centered even when the cover content is shorter than the viewport.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--max","selector":".sf-cover--max","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant that uses a max-height instead of min-height for the viewport constraint.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--min","selector":".sf-cover--min","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant that reduces the minimum height to half a viewport.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--padding-l","selector":".sf-cover--padding-l","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant with large vertical padding above and below the centered content.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--padding-s","selector":".sf-cover--padding-s","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant with small vertical padding above and below the centered content.","optional":false,"layer":"slashed.layout"},{"name":"sf-cq","selector":".sf-cq","kind":"layout","category":"Layout primitives","group":"Container query context","description":"Assigns an inline-size container context to any element. Children can then use @container rules or container-query-aware tokens.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider","selector":".sf-divider","kind":"layout","category":"Layout primitives","group":"Divider","description":"Horizontal rule (divider line). Uses --sf-divider-* tokens for color, width, and style. Modifiers change dash style or orientation.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--dashed","selector":".sf-divider--dashed","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with a dashed stroke.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--dotted","selector":".sf-divider--dotted","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with a dotted stroke.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--gradient","selector":".sf-divider--gradient","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant rendered as a gradient that fades to transparent at both ends.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--soft","selector":".sf-divider--soft","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with reduced opacity (subtle separator).","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--strong","selector":".sf-divider--strong","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with stronger/darker color for a more prominent separator.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--vertical","selector":".sf-divider--vertical","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant rendered as a vertical line. Use inside flex or grid containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-entrance--fade","selector":".sf-entrance--fade","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in as it enters the viewport. Animation tied to scroll progress via animation-timeline.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-down","selector":".sf-entrance--fade-down","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving downward into position.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-left","selector":".sf-entrance--fade-left","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving from the right toward the left.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-right","selector":".sf-entrance--fade-right","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving from the left toward the right.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-up","selector":".sf-entrance--fade-up","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving upward into position.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--scale-up","selector":".sf-entrance--scale-up","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while scaling up from a slightly smaller size.","optional":false,"layer":"slashed.motion"},{"name":"sf-equal","selector":".sf-equal","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Auto-fill equal-columns grid. Columns fill the row and wrap when they hit --sf-equal-min-col. No breakpoints needed.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--2","selector":".sf-equal--2","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 2 columns using --sf-equal-min-col-2.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--3","selector":".sf-equal--3","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 3 columns using --sf-equal-min-col-3.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--4","selector":".sf-equal--4","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 4 columns using --sf-equal-min-col-4.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--6","selector":".sf-equal--6","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 6 columns using --sf-equal-min-col-6.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal-height","selector":".sf-equal-height","kind":"macro","category":"Macro classes","group":"Equal height","description":"Forces all flex children to equal height (align-items: stretch). Use on a flex row to make cards in a grid share the tallest card's height.","optional":false,"layer":"slashed.macros"},{"name":"sf-fade-in","selector":".sf-fade-in","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot fade-in animation (opacity 0 → 1). Scoped to no-preference so it stops automatically for reduced-motion users.","optional":false,"layer":"slashed.motion"},{"name":"sf-fade-out","selector":".sf-fade-out","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot fade-out animation (opacity 1 → 0). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-flow","selector":".sf-flow","kind":"macro","category":"Macro classes","group":"Flow","description":"Applies --sf-flow-space as margin-block-start to all direct children except the first. Establishes consistent vertical rhythm in prose-like containers.","optional":false,"layer":"slashed.macros"},{"name":"sf-focus-parent","selector":".sf-focus-parent","kind":"accessibility","category":"Accessibility","group":"Focus-parent","description":"Forwards focus-visible styling to this container when any descendant is keyboard-focused. Useful for custom controls that wrap a visually-hidden .","optional":false,"layer":"slashed.accessibility"},{"name":"sf-focus-shadow","selector":".sf-focus-shadow","kind":"accessibility","category":"Accessibility","group":"Focus-shadow opt-in","description":"Applies the standard focus ring as a box-shadow to any element. Use on custom controls where the native :focus-visible ring doesn't render correctly.","optional":false,"layer":"slashed.accessibility"},{"name":"sf-frame","selector":".sf-frame","kind":"layout","category":"Layout primitives","group":"Frame","description":"Aspect-ratio container for media (images, video, maps). Children fill and cover the fixed-ratio box. Default ratio is 16:9.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--3-2","selector":".sf-frame--3-2","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a 3:2 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--4-3","selector":".sf-frame--4-3","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a 4:3 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--cinema","selector":".sf-frame--cinema","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a cinematic 21:9 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--golden","selector":".sf-frame--golden","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to the golden ratio (1.618:1).","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--portrait","selector":".sf-frame--portrait","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a portrait 2:3 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--square","selector":".sf-frame--square","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a square 1:1 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--video","selector":".sf-frame--video","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to the standard 16:9 video aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-full-bleed","selector":".sf-full-bleed","kind":"layout","category":"Layout primitives","group":"Content grid (breakout pattern)","description":"Forces an element to span the full viewport width, breaking out of any centered container. Use for full-bleed images and section backgrounds.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap","selector":".sf-gap","kind":"layout","category":"Layout primitives","group":"Gap","description":"Injects the default --sf-gap into an existing flex or grid container without imposing display:flex itself. Use when the parent is already a flex or grid.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--2xl","selector":".sf-gap--2xl","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with 2xl gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--l","selector":".sf-gap--l","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with large (l) gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--m","selector":".sf-gap--m","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with medium (m) gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--s","selector":".sf-gap--s","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with small (s) gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--xl","selector":".sf-gap--xl","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with xl gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--xs","selector":".sf-gap--xs","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with xs gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid","selector":".sf-grid","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Auto-fill CSS grid. Columns are sized with RAM pattern (Repeat, Auto-fill, Minmax) and wrap automatically. Default column min-width is --sf-grid-min-col.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--2xl","selector":".sf-grid--2xl","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a 2xl minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--dense","selector":".sf-grid--dense","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with grid-auto-flow: dense, allowing the grid to fill holes created by span modifiers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--fit","selector":".sf-grid--fit","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant that switches from auto-fill to auto-fit, collapsing empty columns.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--l","selector":".sf-grid--l","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a large (l) minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--m","selector":".sf-grid--m","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a medium (m) minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--s","selector":".sf-grid--s","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a small (s) minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--xl","selector":".sf-grid--xl","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with an xl minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--xs","selector":".sf-grid--xs","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with an xs minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-1","selector":".sf-grid-cols-1","kind":"layout","category":"Layout primitives","group":"Single-column grid","description":"Single-column layout (forces all children to one column).","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-1-2","selector":".sf-grid-cols-1-2","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 1fr, second takes 2fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-1-3","selector":".sf-grid-cols-1-3","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 1fr, second takes 3fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-2","selector":".sf-grid-cols-2","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 2-column fixed grid. Uses container queries to collapse to one column on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-2-1","selector":".sf-grid-cols-2-1","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 2fr, second takes 1fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-3","selector":".sf-grid-cols-3","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 3-column fixed grid. Collapses progressively on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-3-1","selector":".sf-grid-cols-3-1","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 3fr, second takes 1fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-4","selector":".sf-grid-cols-4","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 4-column fixed grid. Collapses progressively on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-6","selector":".sf-grid-cols-6","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 6-column fixed grid. Collapses progressively on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-icon","selector":".sf-icon","kind":"layout","category":"Layout primitives","group":"Icon","description":"Inline icon sizing primitive. Sets width and height to --sf-icon-m via em-based tokens so the icon scales with the surrounding text.","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--2xl","selector":".sf-icon--2xl","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-2xl (extra-extra-large).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--boxed","selector":".sf-icon--boxed","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant with a square bordered box background. Useful for standalone icon buttons and feature icons.","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--l","selector":".sf-icon--l","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-l (large).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--m","selector":".sf-icon--m","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-m (medium, same as base sf-icon).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--s","selector":".sf-icon--s","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-s (small).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--xl","selector":".sf-icon--xl","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-xl (extra-large).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--xs","selector":".sf-icon--xs","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-xs (extra-small).","optional":false,"layer":"slashed.layout"},{"name":"sf-imposter","selector":".sf-imposter","kind":"layout","category":"Layout primitives","group":"Imposter","description":"Absolutely positions an element at the center of its nearest positioned ancestor. Use for overlays, badges, and floating labels.","optional":false,"layer":"slashed.layout"},{"name":"sf-imposter--contain","selector":".sf-imposter--contain","kind":"layout","category":"Layout primitives","group":"Imposter","description":"Imposter variant that clamps the element within the bounds of its parent using overflow:hidden on the parent.","optional":false,"layer":"slashed.layout"},{"name":"sf-imposter--fixed","selector":".sf-imposter--fixed","kind":"layout","category":"Layout primitives","group":"Imposter","description":"Imposter variant that uses position:fixed instead of absolute. Use for viewport-level overlays and modals.","optional":false,"layer":"slashed.layout"},{"name":"sf-line-clamp-2","selector":".sf-line-clamp-2","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Clamps text to 2 lines with an ellipsis. Applies -webkit-line-clamp: 2.","optional":false,"layer":"slashed.macros"},{"name":"sf-line-clamp-3","selector":".sf-line-clamp-3","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Clamps text to 3 lines with an ellipsis. Applies -webkit-line-clamp: 3.","optional":false,"layer":"slashed.macros"},{"name":"sf-line-clamp-N","selector":".sf-line-clamp-N","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Clamps text to a custom N lines. Set --sf-line-clamp on the element to control the number of visible lines.","optional":false,"layer":"slashed.macros"},{"name":"sf-link--reverse","selector":".sf-link--reverse","kind":"macro","category":"Macro classes","group":"Link variants","description":"Link color modifier: reverses the default link color to work on dark/inverted backgrounds. Sets color to --sf-color-text--inverse.","optional":false,"layer":"slashed.macros"},{"name":"sf-link--subtle","selector":".sf-link--subtle","kind":"macro","category":"Macro classes","group":"Link variants","description":"Link color modifier: renders the link in the body text color instead of the default action color. Underline still indicates the link on hover.","optional":false,"layer":"slashed.macros"},{"name":"sf-link-external","selector":".sf-link-external","kind":"macro","category":"Macro classes","group":"External link indication","description":"Automatically appends an external-link icon (via ::after content) to indicate the link opens in a new tab or goes to an external domain.","optional":false,"layer":"slashed.macros"},{"name":"sf-no-tap-highlight","selector":".sf-no-tap-highlight","kind":"macro","category":"Macro classes","group":"No tap highlight","description":"Removes the mobile tap highlight color (-webkit-tap-highlight-color: transparent). Use on interactive elements with a custom active state.","optional":false,"layer":"slashed.macros"},{"name":"sf-not-prose","selector":".sf-not-prose","kind":"macro","category":"Macro classes","group":"Prose","description":"Opt-out of sf-prose typography styles within a prose block. Apply to an element that should keep default browser or component styles.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade","selector":".sf-overflow-fade","kind":"macro","category":"Macro classes","group":"Overflow fade","description":"Adds a gradient fade at the inline-end of an overflowing element to hint at hidden content. Use inside sf-reel or any scroll container.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--block","selector":".sf-overflow-fade--block","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades both the top and bottom edges simultaneously (block axis).","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--bottom","selector":".sf-overflow-fade--bottom","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the bottom (block-end) edge.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--inline","selector":".sf-overflow-fade--inline","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades both the left and right edges simultaneously (inline axis).","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--left","selector":".sf-overflow-fade--left","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the left (inline-start) edge.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--right","selector":".sf-overflow-fade--right","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the right (inline-end) edge. Explicit alias for the default sf-overflow-fade behaviour.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--top","selector":".sf-overflow-fade--top","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the top (block-start) edge.","optional":false,"layer":"slashed.macros"},{"name":"sf-pancake","selector":".sf-pancake","kind":"layout","category":"Layout primitives","group":"Pancake (sticky footer)","description":"Three-row layout (header, main, footer) where main takes all remaining vertical space via flex-grow. The footer always sticks to the bottom on tall viewports.","optional":false,"layer":"slashed.layout"},{"name":"sf-prose","selector":".sf-prose","kind":"macro","category":"Macro classes","group":"Prose","description":"Opinionated typographic defaults for long-form content: heading hierarchy, paragraph spacing, blockquote, code, and list styling. Override with sf-not-prose.","optional":false,"layer":"slashed.macros"},{"name":"sf-reel","selector":".sf-reel","kind":"layout","category":"Layout primitives","group":"Reel","description":"Horizontally scrollable row of fixed-height items with snap scrolling. Children don't shrink below their intrinsic width, creating a card carousel effect.","optional":false,"layer":"slashed.layout"},{"name":"sf-scale-down","selector":".sf-scale-down","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot scale-down animation (element shrinks from full size). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-scale-up","selector":".sf-scale-up","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot scale-up animation (element grows from smaller size). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-scrim","selector":".sf-scrim","kind":"macro","category":"Macro classes","group":"Scrim","description":"Overlay container with a gradient darkening scrim behind text placed on an image or colored background.","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim__content","selector":".sf-scrim__content","kind":"macro","category":"Macro classes","group":"Scrim","description":"Content area inside an sf-scrim. Positioned above the gradient overlay layer.","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim--bottom","selector":".sf-scrim--bottom","kind":"macro","category":"Macro classes","group":"Scrim","description":"Scrim variant with the gradient emanating from the bottom edge (bottom-to-top fade).","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim--full","selector":".sf-scrim--full","kind":"macro","category":"Macro classes","group":"Scrim","description":"Scrim variant that covers the entire surface with a uniform translucent overlay.","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim--top","selector":".sf-scrim--top","kind":"macro","category":"Macro classes","group":"Scrim","description":"Scrim variant with the gradient emanating from the top edge (top-to-bottom fade).","optional":false,"layer":"slashed.macros"},{"name":"sf-scroll-shadow","selector":".sf-scroll-shadow","kind":"macro","category":"Macro classes","group":"Scroll shadow","description":"Adds inset box-shadows at the top and bottom of a scrollable container to indicate hidden overflow above or below.","optional":false,"layer":"slashed.macros"},{"name":"sf-scroll-snap","selector":".sf-scroll-snap","kind":"macro","category":"Macro classes","group":"Scroll snap","description":"Enables CSS scroll-snap-type: x mandatory on a horizontal scroll container. Children should have scroll-snap-align.","optional":false,"layer":"slashed.macros"},{"name":"sf-section","selector":".sf-section","kind":"layout","category":"Layout primitives","group":"Section","description":"Full-width page section with vertical padding (--sf-section-pad-default). Use to create visually distinct content bands.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--2xl","selector":".sf-section--2xl","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with 2xl vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--collapse","selector":".sf-section--collapse","kind":"layout","category":"Layout primitives","group":"Collapse modifier","description":"Section variant that removes vertical padding (zero-padding section for adjacent same-color blocks).","optional":false,"layer":"slashed.layout"},{"name":"sf-section--guttered","selector":".sf-section--guttered","kind":"layout","category":"Layout primitives","group":"Section","description":"Adds horizontal page gutters directly to a section — use when you want to skip a separate .sf-container wrapper (gutterless layout inside section). Neutralises container gutter to prevent double padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--l","selector":".sf-section--l","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with large (l) vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--m","selector":".sf-section--m","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with medium (m) vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--s","selector":".sf-section--s","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with small (s) vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--xl","selector":".sf-section--xl","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with xl vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--xs","selector":".sf-section--xs","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with xs vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section-group","selector":".sf-section-group","kind":"layout","category":"Layout primitives","group":"Section","description":"Groups adjacent sf-section elements so their combined padding collapses correctly at the top and bottom edges.","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar","selector":".sf-sidebar","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Two-column sidebar layout: first child is the sidebar, second child is main content. The sidebar collapses below the breakpoint (--sf-sidebar-min-width). Default sidebar on the left.","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar--narrow","selector":".sf-sidebar--narrow","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Sidebar variant with a narrower sidebar column.","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar--right","selector":".sf-sidebar--right","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Sidebar variant with the sidebar on the right (second child becomes the sidebar).","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar--wide","selector":".sf-sidebar--wide","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Sidebar variant with a wider sidebar column.","optional":false,"layer":"slashed.layout"},{"name":"sf-slide-in-down","selector":".sf-slide-in-down","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-above animation. Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-slide-in-left","selector":".sf-slide-in-left","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-right animation (slides to the left). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-slide-in-right","selector":".sf-slide-in-right","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-left animation (slides to the right). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-slide-in-up","selector":".sf-slide-in-up","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-below animation. Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-stack","selector":".sf-stack","kind":"layout","category":"Layout primitives","group":"Stack","description":"Flex column with even vertical spacing between children (--sf-stack-gap). Stacking context for vertical rhythm.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--2xl","selector":".sf-stack--2xl","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with 2xl gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--center","selector":".sf-stack--center","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant that centers children on the cross axis.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--end","selector":".sf-stack--end","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant that aligns children to the cross-axis end (right in LTR).","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--l","selector":".sf-stack--l","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with large (l) gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--m","selector":".sf-stack--m","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with medium (m) gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--s","selector":".sf-stack--s","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with small (s) gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--stretch","selector":".sf-stack--stretch","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant that stretches children to fill the full available width.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--xl","selector":".sf-stack--xl","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with xl gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--xs","selector":".sf-stack--xs","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with xs gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-subgrid","selector":".sf-subgrid","kind":"layout","category":"Layout primitives","group":"Subgrid","description":"Passes the parent grid columns through to children via subgrid. Place on a grid item that should align its own children to the outer grid columns.","optional":false,"layer":"slashed.layout"},{"name":"sf-subgrid-rows","selector":".sf-subgrid-rows","kind":"layout","category":"Layout primitives","group":"Subgrid","description":"Passes the parent grid rows through to children via subgrid. Place on a grid item that should align its own children to the outer grid rows.","optional":false,"layer":"slashed.layout"},{"name":"sf-surface","selector":".sf-surface","kind":"macro","category":"Macro classes","group":"Surface","description":"Generic semantic surface: applies --sf-surface-color as the background and automatically sets a contrasting text color. Tone variants (--primary, --action, etc.) activate preset palettes.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--action","selector":".sf-surface--action","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the action color palette (button/CTA primary color).","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--danger","selector":".sf-surface--danger","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the danger status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--info","selector":".sf-surface--info","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the info status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--inverse","selector":".sf-surface--inverse","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant that inverts light/dark, creating an always-dark surface in light mode and always-light in dark mode.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--neutral","selector":".sf-surface--neutral","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the neutral palette (muted/gray).","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--primary","selector":".sf-surface--primary","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the primary brand color palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--secondary","selector":".sf-surface--secondary","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the secondary brand color palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--success","selector":".sf-surface--success","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the success status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--tertiary","selector":".sf-surface--tertiary","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the tertiary brand color palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--warning","selector":".sf-surface--warning","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the warning status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-switcher","selector":".sf-switcher","kind":"layout","category":"Layout primitives","group":"Switcher","description":"Flex layout that switches from a horizontal row to a vertical column when the container is narrower than --sf-switcher-threshold.","optional":false,"layer":"slashed.layout"},{"name":"sf-switcher--no-wrap","selector":".sf-switcher--no-wrap","kind":"layout","category":"Layout primitives","group":"Switcher","description":"Switcher variant that stays horizontal and never wraps (single-line regardless of container width).","optional":false,"layer":"slashed.layout"},{"name":"sf-switcher--vertical","selector":".sf-switcher--vertical","kind":"layout","category":"Layout primitives","group":"Switcher","description":"Switcher variant that starts in the vertical (stacked) direction on all sizes.","optional":false,"layer":"slashed.layout"},{"name":"sf-tabular-nums","selector":".sf-tabular-nums","kind":"macro","category":"Macro classes","group":"Tabular figures","description":"Forces tabular (monospaced) number rendering. Use on price tables, counters, and anywhere numbers need to align vertically across rows.","optional":false,"layer":"slashed.macros"},{"name":"sf-text-gradient","selector":".sf-text-gradient","kind":"macro","category":"Macro classes","group":"Text gradient","description":"Applies a brand gradient to inline text. Sets the background to the gradient, clips it to the text, and makes the text color transparent.","optional":false,"layer":"slashed.macros"},{"name":"sf-text-protect","selector":".sf-text-protect","kind":"macro","category":"Macro classes","group":"Text protect","description":"Wraps text in a translucent dark gradient overlay to ensure legibility when placed over a light or variable background image.","optional":false,"layer":"slashed.macros"},{"name":"sf-theme-transition","selector":".sf-theme-transition","kind":"theme","category":"Theme utilities","group":"OPT-IN THEME CROSS-FADE","description":"Opt-in animated light/dark theme crossfade. Apply to (or a subtree) so color tokens transition smoothly when [data-theme] changes. Duration controlled by --sf-theme-transition-duration.","optional":false,"layer":"slashed.themes"},{"name":"sf-truncate","selector":".sf-truncate","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Single-line text overflow with ellipsis. Equivalent to the classic text-overflow: ellipsis trio (white-space nowrap, overflow hidden, text-overflow ellipsis).","optional":false,"layer":"slashed.macros"},{"name":"skip-link","selector":".skip-link","kind":"accessibility","category":"Accessibility","group":"Skip link","description":"Accessible skip-navigation link. Hidden until focused; jumps keyboard users past repeated navigation blocks. Place as the very first element in .","optional":false,"layer":"slashed.accessibility"},{"name":"sr-only","selector":".sr-only","kind":"accessibility","category":"Accessibility","group":"Screen-reader-only. Atomic contract: a partial override","description":"Visually hides content while keeping it accessible to screen readers. Use for labels, descriptions, and off-screen text that assistive technology needs.","optional":false,"layer":"slashed.accessibility"},{"name":"sr-only-focusable","selector":".sr-only-focusable","kind":"accessibility","category":"Accessibility","group":"Screen-reader-only. Atomic contract: a partial override","description":"Extends sr-only — also reveals the element when it receives keyboard focus. Typical use: skip links and visually-hidden focus targets.","optional":false,"layer":"slashed.accessibility"},{"name":"theme-transition","selector":".theme-transition","kind":"theme","category":"Theme example","group":"5. SMOOTH THEME-TRANSITION HELPER","description":"Internal helper class used by the sf-theme-transition macro. Applies per-property transitions to registered color tokens during light/dark mode switches.","optional":true,"layer":"slashed.themes"}]`),Ch={classes:_h},Oh={generatedBy:"configurator/scripts/sync-api.mjs",source:"docs/api-index.json",tokensHash:"99d86a47c17a",bundles:["full","optimal","optimal-components","optimal-utilities"],counts:{tokens:691,byTier:{PUBLIC:635,"PUBLIC-ADVANCED":55,INTERNAL:1},byCategory:{"Layout tokens":54,"Core tokens":608,"Macro tokens":23,"Component tokens":6}}},Sh=JSON.parse(`[{"name":"--sf-alternate-gap","tier":"PUBLIC","role":"consumption","namespace":"alternate","category":"Layout tokens","group":"Alternate (zigzag)","description":"Gap tokens for the alternating content/media (zigzag) layout.","note":"Gap between items in the alternating zigzag layout.","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-alternate-inner-gap","tier":"PUBLIC","role":"consumption","namespace":"alternate","category":"Layout tokens","group":"Alternate (zigzag)","description":"Gap tokens for the alternating content/media (zigzag) layout.","note":"Gap between content and media within each zigzag item.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-blink","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Blinking visibility loop. Use for cursor indicators or critical attention cues. Respect prefers-reduced-motion.","value":"sf-blink calc(1s * var(--sf-motion-scale)) steps(1, end) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-color-pulse","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Pulsing color loop. Use for live-status badges (recording, live). Respect prefers-reduced-motion.","value":"sf-color-pulse var(--sf-duration-slow) var(--sf-ease-in-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-1","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Shortest stagger delay. Apply to the first element in a sequentially animated group.","value":"calc(75ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-2","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Second stagger delay step.","value":"calc(150ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-3","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Third stagger delay step.","value":"calc(225ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-4","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Fourth stagger delay step.","value":"calc(300ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-5","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Longest stagger delay. Apply to the last element in a sequentially animated group.","value":"calc(375ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-fade-in","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Fade-in entrance animation shorthand. Use directly as animation property value.","value":"sf-fade-in var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-fade-out","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Fade-out exit animation shorthand.","value":"sf-fade-out var(--sf-duration-normal) var(--sf-ease-in) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-float","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Gentle floating / levitating loop. Use for hero illustrations or floating UI elements. Decorative — disable for prefers-reduced-motion.","value":"sf-float calc(3s * var(--sf-motion-scale)) var(--sf-ease-in-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-ping","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Expanding ping / ripple loop. Use for notification badges and live-indicator dots.","value":"sf-ping var(--sf-duration-slow) var(--sf-ease-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-scale-down","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Scale-down exit animation. Pairs with --sf-animation-scale-up for enter/leave transitions.","value":"sf-scale-down var(--sf-duration-normal) var(--sf-ease-in) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-scale-up","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Scale-up entrance animation. Use for modals, popovers, and tooltips appearing.","value":"sf-scale-up var(--sf-duration-normal) var(--sf-ease-overshoot) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-shimmer","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Shimmer / skeleton-loading sweep. Apply on placeholder elements while content loads.","value":"sf-shimmer calc(1.5s * var(--sf-motion-scale)) var(--sf-ease-in-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-down","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from above. Use for dropdown menus and top-attached sheets.","value":"sf-slide-in-down var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-left","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from the left. Use for left-side drawers and navigation panels.","value":"sf-slide-in-left var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-right","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from the right. Use for right-side drawers and detail panels.","value":"sf-slide-in-right var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-up","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from below. Use for bottom sheets, toasts, and floating action buttons.","value":"sf-slide-in-up var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-spin","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Continuous rotation loop. Use for loading spinners and progress indicators.","value":"sf-spin var(--sf-duration-slower) linear infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-aspect","tier":"PUBLIC","role":"knob","namespace":"aspect","category":"Macro tokens","group":"Aspect ratio","description":"Aspect-ratio value for the .aspect-ratio macro.","note":"Aspect ratio value for the .aspect-ratio macro.","value":"16 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-cols-default","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Default column count for the bento grid.","value":"4","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-gap","tier":"PUBLIC","role":"consumption","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Gap between bento grid cells.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-row-compact","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Row height for compact-variant bento items.","value":"6rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-row-default","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Default row height for standard bento grid cells.","value":"10rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-row-tall","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Tall row height for visually prominent or hero bento cells.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-fit","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"object-fit applied to .sf-bg when used as a bare media element, and to .sf-bg > img / video / picture children. Defaults to cover.","note":"object-fit applied to .sf-bg when used as a bare media element, and to .sf-bg > img / video / picture children. Defaults to cover.","value":"cover","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-inset","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"Inset from every edge of the parent. A single length applied uniformly; the layer size is derived from it so a non-zero inset still fills correctly.","note":"Inset from every edge of the parent. A single length applied uniformly; the layer size is derived from it so a non-zero inset still fills correctly.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-position","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"object-position controlling where the media is anchored within the layer. Defaults to center (50% 50%).","note":"object-position controlling where the media is anchored within the layer. Defaults to center (50% 50%).","value":"50% 50%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-radius","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"border-radius applied to the .sf-bg layer and its img/video/picture children. Defaults to 0; set to match the parent's radius when clipping is needed.","note":"border-radius applied to the .sf-bg layer and its img/video/picture children. Defaults to 0; set to match the parent's radius when clipping is needed.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-z","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"z-index of the background layer. Defaults to -2 so it sits behind sibling content but above the parent's own background.","note":"z-index of the background layer. Defaults to -2 so it sits behind sibling content but above the parent's own background.","value":"-2","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-blur","tier":"PUBLIC","role":"knob","namespace":"blur","category":"Core tokens","group":"Blur & opacity","description":"Backdrop-filter blur scale and background-opacity tokens.","note":"Backdrop-filter blur amount for frosted-glass surfaces (navbars, overlays, dialogs). Default 12px. Pair with a semi-transparent background.","value":"12px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-color","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Text color for body copy. Alias of --sf-color-text. Override here to deviate body text from the global text color.","value":"var(--sf-color-text)","aliasOf":"--sf-color-text","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-em-style","tier":"PUBLIC","role":"knob","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"font-style for inside body text (italic by default). Override to suppress italics if your typeface has no italic variant.","value":"italic","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-font-family","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font family for body text. Alias of --sf-font-body.","value":"var(--sf-font-body)","aliasOf":"--sf-font-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-font-size","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Base font size for body paragraphs. Alias of --sf-text-m.","value":"var(--sf-text-m)","aliasOf":"--sf-text-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-font-weight","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for body text. Alias of --sf-font-weight-body.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-line-height","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for body paragraphs. Alias of --sf-leading-normal.","value":"var(--sf-leading-normal)","aliasOf":"--sf-leading-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-strong-weight","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for inside body text. Override to choose a specific weight instead of inheriting bold.","value":"var(--sf-font-weight-strong)","aliasOf":"--sf-font-weight-strong","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-text-wrap","tier":"PUBLIC","role":"knob","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"text-wrap mode for body paragraphs. 'pretty' prevents orphaned last words; 'balance' equalises line lengths.","value":"pretty","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border shorthands","description":"Ready-to-use border shorthand values (width + style + color) for the three most common border weights.","note":"Default border shorthand (width + solid + color). Apply directly to border property.","value":"var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-scale","tier":"PUBLIC","role":"knob","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Global border-width multiplier. Set to 0 for borderless UI; 0.5 for hairline-only; 2 to double all border widths across the system.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-strong","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border shorthands","description":"Ready-to-use border shorthand values (width + style + color) for the three most common border weights.","note":"Strong-emphasis border shorthand.","value":"var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border--strong)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-style","tier":"PUBLIC","role":"knob","namespace":"border","category":"Core tokens","group":"Border style","description":"Global border-style default (solid, dashed, etc.).","note":"Global border-style default applied across all border tokens.","value":"solid","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-subtle","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border shorthands","description":"Ready-to-use border shorthand values (width + style + color) for the three most common border weights.","note":"Low-contrast subtle border shorthand.","value":"var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border--subtle)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-1","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Standard 1px border width.","value":"calc(1px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-2","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Medium 2px border width. Common for focus outlines.","value":"calc(2px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-3","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Thick 3px border width.","value":"calc(3px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-4","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Extra-thick 4px border width for decorative borders.","value":"calc(4px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-hairline","tier":"PUBLIC","role":"knob","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"1px border width (hairline).","value":"0.5px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-box-border-color","tier":"PUBLIC","role":"consumption","namespace":"box","category":"Layout tokens","group":"Box","description":"Border, background, and padding tokens for the box layout primitive.","note":"Border color for the box layout primitive.","value":"var(--sf-color-border)","aliasOf":"--sf-color-border","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-box-border-width","tier":"PUBLIC","role":"knob","namespace":"box","category":"Layout tokens","group":"Box","description":"Border, background, and padding tokens for the box layout primitive.","note":"Border width for the box layout primitive.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-box-padding","tier":"PUBLIC","role":"consumption","namespace":"box","category":"Layout tokens","group":"Box","description":"Border, background, and padding tokens for the box layout primitive.","note":"Inner padding for the box layout primitive.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-breakout-width","tier":"PUBLIC","role":"consumption","namespace":"breakout","category":"Layout tokens","group":"Content grid (breakout pattern)","description":"Breakout width and content width for the content-grid pattern (full-bleed breakouts inside a constrained column).","note":"Width of full-bleed breakout elements inside a content grid.","value":"var(--sf-container-wide)","aliasOf":"--sf-container-wide","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-btn-padding-block","tier":"PUBLIC","role":"consumption","namespace":"btn","category":"Component tokens","group":"BUTTON TOKENS","description":"Padding and radius tokens that control button geometry. Override these to give buttons a distinct visual language from form fields.","note":"","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-btn-padding-inline","tier":"PUBLIC","role":"consumption","namespace":"btn","category":"Component tokens","group":"BUTTON TOKENS","description":"Padding and radius tokens that control button geometry. Override these to give buttons a distinct visual language from form fields.","note":"","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-btn-radius","tier":"PUBLIC","role":"consumption","namespace":"btn","category":"Component tokens","group":"BUTTON TOKENS","description":"Padding and radius tokens that control button geometry. Override these to give buttons a distinct visual language from form fields.","note":"","value":"var(--sf-radius-m)","aliasOf":"--sf-radius-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-caret-color","tier":"PUBLIC","role":"consumption","namespace":"caret","category":"Core tokens","group":"Focus / form colors","description":"Focus ring and form caret colors. Centralised here so keyboard navigation is consistently styled.","note":"Cursor caret color inside text inputs and contenteditable elements.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-center-gutter","tier":"PUBLIC","role":"consumption","namespace":"center","category":"Layout tokens","group":"Center","description":"Max-width and gutter for the center layout primitive.","note":"Minimum side gutter for the center layout.","value":"var(--sf-gutter)","aliasOf":"--sf-gutter","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-center-max","tier":"PUBLIC","role":"consumption","namespace":"center","category":"Layout tokens","group":"Center","description":"Max-width and gutter for the center layout primitive.","note":"Maximum width for the center layout.","value":"var(--sf-container-default)","aliasOf":"--sf-container-default","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cluster-align","tier":"PUBLIC","role":"knob","namespace":"cluster","category":"Layout tokens","group":"Cluster","description":"Configuration tokens for the cluster layout (inline wrapped items).","note":"Vertical alignment of cluster items (align-items value).","value":"center","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cluster-gap","tier":"PUBLIC","role":"consumption","namespace":"cluster","category":"Layout tokens","group":"Cluster","description":"Configuration tokens for the cluster layout (inline wrapped items).","note":"Gap between wrapped inline items in the cluster layout.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cluster-justify","tier":"PUBLIC","role":"knob","namespace":"cluster","category":"Layout tokens","group":"Cluster","description":"Configuration tokens for the cluster layout (inline wrapped items).","note":"Horizontal justification of the cluster (justify-content value).","value":"flex-start","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-code-font-size","tier":"PUBLIC","role":"knob","namespace":"code","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for inline and
. Usually slightly smaller than body text so monospace doesn't feel oversized.","value":"0.875em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Primary interactive color. Applied to filled buttons, active indicators, and brand accent surfaces.","value":"light-dark(var(--sf-color-action-source-light), var(--sf-color-action-source-dark, oklch(from var(--sf-color-action-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Action color at pressed/active brightness.","value":"var(--sf-color-action-xdark)","aliasOf":"--sf-color-action-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Action color at hover brightness.","value":"var(--sf-color-action-darker)","aliasOf":"--sf-color-action-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Very light action shade. Hover fills on white surfaces, badge backgrounds.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Light action shade. Subtle fills and outlined badge backgrounds.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Light-mid action shade. Borders on light backgrounds, low-emphasis fills.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Mid-light action shade. Disabled state fills, decorative accents.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Lightest action tint. Background fill for subtle action-tinted surfaces.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Mid action shade — the 'pure' hue. Accessible on both light and dark backgrounds.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Mid-dark action shade. Text on light surfaces, icon fills.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Dark action shade. Strong text and icon fills on light backgrounds.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Very dark action shade. High-contrast text on white.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-black action shade. Extreme contrast on white surfaces.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Darkest action tint. Near-black for dark-theme surface accents.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"10% opacity action tint. Subtle hover or selected-row background.","value":"oklch(from var(--sf-color-action) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"30% opacity action tint.","value":"oklch(from var(--sf-color-action) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"5% opacity action tint. Barely-there hover highlight.","value":"oklch(from var(--sf-color-action) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"50% opacity action tint. Mid-transparency badge or overlay.","value":"oklch(from var(--sf-color-action) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"80% opacity action tint.","value":"oklch(from var(--sf-color-action) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Deep action shade for high-contrast contexts.","value":"var(--sf-color-action-600)","aliasOf":"--sf-color-action-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-transparent action tint for ghost-button hover backgrounds.","value":"var(--sf-color-action-a5)","aliasOf":"--sf-color-action-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Light action shade for soft accents.","value":"var(--sf-color-action-400)","aliasOf":"--sf-color-action-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Medium action fill — outlined button hover backgrounds.","value":"var(--sf-color-action-a30)","aliasOf":"--sf-color-action-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-action. Enables smooth CSS transitions when toggling between light and dark mode; without  registration the browser cannot interpolate and transitions snap at 50%.","value":"oklch(0.70 0.198 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the action color. Animate this to smoothly transition between light and dark brand themes.","note":"OKLCH lightness source for the action color. Animate this to smoothly transition between light and dark brand themes.","value":"oklch(0.50 0.22 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Lightest action tint — selected rows, active nav, chips.","value":"var(--sf-color-action-a10)","aliasOf":"--sf-color-action-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-black action shade for maximum contrast on light surfaces.","value":"var(--sf-color-action-950)","aliasOf":"--sf-color-action-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-white action shade for maximum contrast on dark surfaces.","value":"var(--sf-color-action-50)","aliasOf":"--sf-color-action-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Extra-dark action shade.","value":"var(--sf-color-action-800)","aliasOf":"--sf-color-action-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Extra-light action shade.","value":"var(--sf-color-action-200)","aliasOf":"--sf-color-action-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Secondary interactive color for supporting actions and secondary buttons.","value":"light-dark(var(--sf-color-base-source-light), var(--sf-color-base-source-dark, oklch(from var(--sf-color-base-source-light) clamp(0.16, calc(1.18 - l), 0.24) calc(c * 0.5) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Base color at pressed/active brightness.","value":"var(--sf-color-base-xdark)","aliasOf":"--sf-color-base-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Base color at hover brightness.","value":"var(--sf-color-base-darker)","aliasOf":"--sf-color-base-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Very light base shade. Hover fills, badge backgrounds.","value":"color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-100), var(--sf-color-base))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Light base shade.","value":"color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-200), var(--sf-color-base))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Light-mid base shade. Borders on light backgrounds.","value":"color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-300), var(--sf-color-base))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Mid-light base shade. Disabled fills.","value":"color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-400), var(--sf-color-base))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Lightest base tint.","value":"color-mix(in oklab, var(--sf-color-text) var(--sf-palette-mix-50), var(--sf-color-base))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Mid base shade — the 'pure' hue.","value":"var(--sf-color-base)","aliasOf":"--sf-color-base","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Mid-dark base shade. Text on light surfaces.","value":"color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Dark base shade.","value":"color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Very dark base shade.","value":"color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Near-black base shade.","value":"color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Darkest base tint.","value":"color-mix(in oklab, var(--sf-color-base) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"10% opacity base tint.","value":"oklch(from var(--sf-color-base) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"30% opacity base tint.","value":"oklch(from var(--sf-color-base) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"5% opacity base tint.","value":"oklch(from var(--sf-color-base) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"50% opacity base tint.","value":"oklch(from var(--sf-color-base) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"80% opacity base tint.","value":"oklch(from var(--sf-color-base) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Deep base shade.","value":"var(--sf-color-base-600)","aliasOf":"--sf-color-base-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Near-transparent base tint for ghost-button hover backgrounds.","value":"var(--sf-color-base-a5)","aliasOf":"--sf-color-base-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Light base shade.","value":"var(--sf-color-base-400)","aliasOf":"--sf-color-base-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Medium base fill.","value":"var(--sf-color-base-a30)","aliasOf":"--sf-color-base-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-base.","value":"oklch(0.22 0.003 250)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the base color.","note":"OKLCH lightness source for the base color.","value":"oklch(0.96 0.006 250)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Lightest base tint.","value":"var(--sf-color-base-a10)","aliasOf":"--sf-color-base-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Near-black base shade.","value":"var(--sf-color-base-950)","aliasOf":"--sf-color-base-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Near-white base shade.","value":"var(--sf-color-base-50)","aliasOf":"--sf-color-base-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Extra-dark base shade.","value":"var(--sf-color-base-800)","aliasOf":"--sf-color-base-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Extra-light base shade.","value":"var(--sf-color-base-200)","aliasOf":"--sf-color-base-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Base page / component background. The canvas all other surfaces layer on top of.","value":"oklch(from var(--sf-color-base) calc(l + 0.02) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background tint for pressed/active interactive elements.","value":"oklch(from var(--sf-color-neutral) l c h / 0.12)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background for disabled interactive elements.","value":"var(--sf-color-inset)","aliasOf":"--sf-color-inset","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--focus","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background tint for focused interactive elements.","value":"oklch(from var(--sf-color-action) l c h / 0.06)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background tint for hovered interactive elements (rows, list items, etc.).","value":"oklch(from var(--sf-color-neutral) l c h / 0.08)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--selected","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background for selected items (checked rows, active nav links).","value":"oklch(from var(--sf-color-action) l c h / 0.1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-black","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Absolute black reference value.","value":"oklch(0% 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Default border for dividers and component edges.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.70, calc(l + 0.35), 0.95) 0.005 h), oklch(from var(--sf-color-neutral) clamp(0.25, calc(l - 0.3), 0.55) 0.005 h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Border alpha tokens","description":"Semi-transparent border variants for overlays and glass-morphism effects.","note":"Semi-transparent border for disabled element edges.","value":"oklch(from var(--sf-color-border--subtle) l 0 h / 0.5)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--focus","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Focus indicator border, used alongside --sf-focus-ring-color.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Stronger border for visually prominent edges and active outlines.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.55, calc(l + 0.1), 0.85) 0.02 h), oklch(from var(--sf-color-neutral) clamp(0.38, calc(l - 0.1), 0.65) 0.02 h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Low-contrast border for subtle separation without strong visual weight.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.75, calc(l + 0.4), 0.97) 0.005 h), oklch(from var(--sf-color-neutral) clamp(0.20, calc(l - 0.38), 0.45) 0.005 h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--translucent","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Border alpha tokens","description":"Semi-transparent border variants for overlays and glass-morphism effects.","note":"Translucent border for glass-morphism and frosted surfaces.","value":"oklch(from var(--sf-color-neutral) l c h / 0.15)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-code-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background for inline  elements. Usually a subtle tint of the inset surface.","value":"var(--sf-color-inset)","aliasOf":"--sf-color-inset","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-code-text","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Text color for inline code and monospace preformatted text.","value":"oklch(from var(--sf-color-code-bg) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Destructive / danger state color. Used for delete actions, error alerts, and critical warnings.","value":"light-dark(var(--sf-color-danger-source-light), var(--sf-color-danger-source-dark, oklch(from var(--sf-color-danger-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium danger fill for icon backgrounds and badge fills.","value":"oklch(from var(--sf-color-danger) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-danger.","value":"oklch(0.71 0.198 12)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the danger status color (covers destructive actions and form validation errors).","note":"OKLCH lightness source for the danger status color (covers destructive actions and form validation errors).","value":"oklch(0.48 0.22 12)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast danger color for alert body text and icons.","value":"light-dark( oklch(from var(--sf-color-danger-source-light) calc(l - 0.1) c h), oklch(from var(--sf-color-danger) clamp(0.70, calc(l + 0.15), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light danger tint for error row backgrounds and alert container fills.","value":"oklch(from var(--sf-color-danger) l c h / 0.1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-dim","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Backdrop overlay color for modals, drawers, and lightboxes.","value":"oklch(0 0 0 / 0.5)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-heading","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Heading text color. Slightly stronger contrast than body text for visual hierarchy.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.05, calc(l - 0.4 - var(--sf-contrast-bias)), 0.35) c h), oklch(from var(--sf-color-neutral) clamp(0.70, calc(l + 0.25 + var(--sf-contrast-bias)), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Informational color for neutral tips, hints, and non-urgent notices.","value":"light-dark(var(--sf-color-info-source-light), var(--sf-color-info-source-dark, oklch(from var(--sf-color-info-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium info fill for info icons and hint chips.","value":"oklch(from var(--sf-color-info) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-info.","value":"oklch(0.71 0.162 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the info status color.","note":"OKLCH lightness source for the info status color.","value":"oklch(0.48 0.18 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast info color for hint body text.","value":"light-dark( oklch(from var(--sf-color-info-source-light) calc(l - 0.1) c h), oklch(from var(--sf-color-info) clamp(0.70, calc(l + 0.15), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light info tint for informational note backgrounds.","value":"oklch(from var(--sf-color-info) l c h / 0.1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-inset","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Slightly inset surface for nested areas — inputs, code blocks, sidebar panels.","value":"oklch(from var(--sf-color-base) calc(l - 0.02) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-inverse","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Inverted (dark-on-light / light-on-dark) surface for high-contrast banners or tooltips.","value":"oklch(from var(--sf-color-base) calc(1 - l) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Default hyperlink color.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.07, 0.48), 1) c h), oklch(from var(--sf-color-action) clamp(0.68, l, 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Link color when actively pressed.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.21, 0.34), 1) c h), oklch(from var(--sf-color-action) clamp(0, max(l + 0.15, 0.74), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Disabled link color (low contrast, no interaction).","value":"var(--sf-color-text--disabled)","aliasOf":"--sf-color-text--disabled","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Link color on hover.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.15, 0.40), 1) c h), oklch(from var(--sf-color-action) clamp(0, max(l + 0.10, 0.68), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--underline","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Link alpha token","description":"Semi-transparent underline color token used to tint the link underline independently from the link text color.","note":"Color of the link underline decoration. Defaults to a semi-transparent variant of the link color.","value":"oklch(from var(--sf-color-action) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--visited","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Visited link color.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.07, 0.48), 1) c calc(h + 60)), oklch(from var(--sf-color-action) clamp(0.68, l, 1) c calc(h + 60)) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-mark-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Selection & mark","description":"Background and text colors for browser text selections and  highlights. Adapts automatically in dark mode.","note":"Background color for highlighted  elements.","value":"oklch(from var(--sf-color-warning) l c h / 0.25)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-mark-text","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Text color inside highlighted  elements.","value":"inherit","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Neutral interactive color for low-emphasis actions and tertiary buttons.","value":"light-dark(var(--sf-color-neutral-source-light), var(--sf-color-neutral-source-dark, oklch(from var(--sf-color-neutral-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Neutral color at pressed/active brightness.","value":"var(--sf-color-neutral-xdark)","aliasOf":"--sf-color-neutral-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Neutral color at hover brightness.","value":"var(--sf-color-neutral-darker)","aliasOf":"--sf-color-neutral-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Very light neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Light neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Light-mid neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Mid-light neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Lightest neutral tint.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Mid neutral shade — the 'pure' hue.","value":"var(--sf-color-neutral)","aliasOf":"--sf-color-neutral","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Mid-dark neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Dark neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Very dark neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-black neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Darkest neutral tint.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"10% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"30% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"5% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"50% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"80% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Deep neutral shade for high-contrast contexts.","value":"var(--sf-color-neutral-600)","aliasOf":"--sf-color-neutral-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-transparent neutral tint for ghost-button hover backgrounds.","value":"var(--sf-color-neutral-a5)","aliasOf":"--sf-color-neutral-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Light neutral shade.","value":"var(--sf-color-neutral-400)","aliasOf":"--sf-color-neutral-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Muted neutral fill for low-emphasis contexts.","value":"var(--sf-color-neutral-a30)","aliasOf":"--sf-color-neutral-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-neutral.","value":"oklch(0.69 0.0225 260)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the neutral color.","note":"OKLCH lightness source for the neutral color.","value":"oklch(0.52 0.025 260)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Lightest neutral semantic tint.","value":"var(--sf-color-neutral-a10)","aliasOf":"--sf-color-neutral-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-black neutral shade.","value":"var(--sf-color-neutral-950)","aliasOf":"--sf-color-neutral-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-white neutral shade.","value":"var(--sf-color-neutral-50)","aliasOf":"--sf-color-neutral-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Extra-dark neutral shade.","value":"var(--sf-color-neutral-800)","aliasOf":"--sf-color-neutral-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Extra-light neutral shade.","value":"var(--sf-color-neutral-200)","aliasOf":"--sf-color-neutral-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-overlay","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Overlay surface for floating panels, sheets, and modals.","value":"oklch(from var(--sf-color-base) l c h / 0.9)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Raw primary palette token aliased from the action role by default. Override to decouple primary from action.","value":"light-dark(var(--sf-color-primary-source-light), var(--sf-color-primary-source-dark, oklch(from var(--sf-color-primary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Primary color at pressed/active brightness.","value":"var(--sf-color-primary-xdark)","aliasOf":"--sf-color-primary-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Primary color at hover brightness.","value":"var(--sf-color-primary-darker)","aliasOf":"--sf-color-primary-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Very light primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Light primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Light-mid primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Mid-light primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Lightest primary tint.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Mid primary shade — the 'pure' hue.","value":"var(--sf-color-primary)","aliasOf":"--sf-color-primary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Mid-dark primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Dark primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Very dark primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-black primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Darkest primary tint.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"10% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"30% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"5% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"50% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"80% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Deep primary shade.","value":"var(--sf-color-primary-600)","aliasOf":"--sf-color-primary-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-transparent primary tint for ghost-button hover backgrounds.","value":"var(--sf-color-primary-a5)","aliasOf":"--sf-color-primary-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Light primary shade.","value":"var(--sf-color-primary-400)","aliasOf":"--sf-color-primary-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Muted primary fill.","value":"var(--sf-color-primary-a30)","aliasOf":"--sf-color-primary-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-primary.","value":"oklch(0.715 0.243 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the primary color.","note":"OKLCH lightness source for the primary color.","value":"oklch(0.47 0.27 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Lightest primary semantic tint.","value":"var(--sf-color-primary-a10)","aliasOf":"--sf-color-primary-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-black primary shade.","value":"var(--sf-color-primary-950)","aliasOf":"--sf-color-primary-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-white primary shade.","value":"var(--sf-color-primary-50)","aliasOf":"--sf-color-primary-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Extra-dark primary shade.","value":"var(--sf-color-primary-800)","aliasOf":"--sf-color-primary-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Extra-light primary shade.","value":"var(--sf-color-primary-200)","aliasOf":"--sf-color-primary-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-raised","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Elevated card surface that floats above the page background.","value":"oklch(from var(--sf-color-base) calc(l + 0.04) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-scheme","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Color scheme","description":"Preferred color-scheme hint sent to the browser (light / dark / normal).","note":"Preferred color scheme hint (light / dark / normal). Sent to the browser to influence UA chrome styling.","value":"light dark","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Raw secondary palette token for the secondary brand color.","value":"light-dark(var(--sf-color-secondary-source-light), var(--sf-color-secondary-source-dark, oklch(from var(--sf-color-secondary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Secondary color at pressed/active brightness.","value":"var(--sf-color-secondary-xdark)","aliasOf":"--sf-color-secondary-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Secondary color at hover brightness.","value":"var(--sf-color-secondary-darker)","aliasOf":"--sf-color-secondary-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Very light secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Light secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Light-mid secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Mid-light secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Lightest secondary tint.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Mid secondary shade — the 'pure' hue.","value":"var(--sf-color-secondary)","aliasOf":"--sf-color-secondary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Mid-dark secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Dark secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Very dark secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-black secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Darkest secondary tint.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"10% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"30% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"5% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"50% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"80% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Deep secondary shade.","value":"var(--sf-color-secondary-600)","aliasOf":"--sf-color-secondary-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-transparent secondary tint for ghost-button hover backgrounds.","value":"var(--sf-color-secondary-a5)","aliasOf":"--sf-color-secondary-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Light secondary shade.","value":"var(--sf-color-secondary-400)","aliasOf":"--sf-color-secondary-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Muted secondary fill.","value":"var(--sf-color-secondary-a30)","aliasOf":"--sf-color-secondary-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-secondary.","value":"oklch(0.84 0.036 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the secondary color.","note":"OKLCH lightness source for the secondary color.","value":"oklch(0.22 0.04 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Lightest secondary semantic tint.","value":"var(--sf-color-secondary-a10)","aliasOf":"--sf-color-secondary-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-black secondary shade.","value":"var(--sf-color-secondary-950)","aliasOf":"--sf-color-secondary-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-white secondary shade.","value":"var(--sf-color-secondary-50)","aliasOf":"--sf-color-secondary-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Extra-dark secondary shade.","value":"var(--sf-color-secondary-800)","aliasOf":"--sf-color-secondary-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Extra-light secondary shade.","value":"var(--sf-color-secondary-200)","aliasOf":"--sf-color-secondary-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-selection-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Selection","description":"Text-selection background color.","note":"Background color applied to browser text selections.","value":"light-dark( oklch(from var(--sf-color-action-source-light) l c h / 0.28), oklch(from var(--sf-color-action-source-dark) clamp(0.62, calc(0.93 - l * 0.4), 0.78) c h / 0.55) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-selection-text","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Text color inside browser text selections.","value":"inherit","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Positive / success color for confirmation messages and completed-state indicators.","value":"light-dark(var(--sf-color-success-source-light), var(--sf-color-success-source-dark, oklch(from var(--sf-color-success-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium success fill for success icons and status chips.","value":"oklch(from var(--sf-color-success) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-success.","value":"oklch(0.70 0.144 145)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the success status color.","note":"OKLCH lightness source for the success status color.","value":"oklch(0.50 0.16 145)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast success color for confirmation message text.","value":"light-dark( oklch(from var(--sf-color-success-source-light) calc(l - 0.15) c h), oklch(from var(--sf-color-success) clamp(0.70, calc(l + 0.15), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light success tint for confirmation backgrounds.","value":"oklch(from var(--sf-color-success) l c h / 0.12)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-surface","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Resolved color tokens","description":"High-level semantic color aliases. Each resolves to the matching palette source token and adapts automatically between light and dark mode. Start here when applying your brand palette.","note":"Elevated surface color (e.g. card background one step above page background).","value":"var(--sf-color-base)","aliasOf":"--sf-color-base","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Raw tertiary palette token for the third brand color.","value":"light-dark(var(--sf-color-tertiary-source-light), var(--sf-color-tertiary-source-dark, oklch(from var(--sf-color-tertiary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Tertiary color at pressed/active brightness.","value":"var(--sf-color-tertiary-xdark)","aliasOf":"--sf-color-tertiary-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Tertiary color at hover brightness.","value":"var(--sf-color-tertiary-darker)","aliasOf":"--sf-color-tertiary-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Very light tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Light tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Light-mid tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Mid-light tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Lightest tertiary tint.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Mid tertiary shade — the 'pure' hue.","value":"var(--sf-color-tertiary)","aliasOf":"--sf-color-tertiary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Mid-dark tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Dark tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Very dark tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-black tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Darkest tertiary tint.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"10% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"30% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"5% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"50% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"80% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Deep tertiary shade.","value":"var(--sf-color-tertiary-600)","aliasOf":"--sf-color-tertiary-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-transparent tertiary tint for ghost-button hover backgrounds.","value":"var(--sf-color-tertiary-a5)","aliasOf":"--sf-color-tertiary-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Light tertiary shade.","value":"var(--sf-color-tertiary-400)","aliasOf":"--sf-color-tertiary-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Muted tertiary fill.","value":"var(--sf-color-tertiary-a30)","aliasOf":"--sf-color-tertiary-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-tertiary.","value":"oklch(0.74 0.198 295)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the tertiary color.","note":"OKLCH lightness source for the tertiary color.","value":"oklch(0.42 0.22 295)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Lightest tertiary semantic tint.","value":"var(--sf-color-tertiary-a10)","aliasOf":"--sf-color-tertiary-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-black tertiary shade.","value":"var(--sf-color-tertiary-950)","aliasOf":"--sf-color-tertiary-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-white tertiary shade.","value":"var(--sf-color-tertiary-50)","aliasOf":"--sf-color-tertiary-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Extra-dark tertiary shade.","value":"var(--sf-color-tertiary-800)","aliasOf":"--sf-color-tertiary-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Extra-light tertiary shade.","value":"var(--sf-color-tertiary-200)","aliasOf":"--sf-color-tertiary-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Primary text color. Contrasts against --sf-color-bg for body copy.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.05, calc(l - 0.4 - var(--sf-contrast-bias)), 0.35) c h), oklch(from var(--sf-color-neutral) clamp(0.70, calc(l + 0.25 + var(--sf-contrast-bias)), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Text color for disabled UI elements. Intentionally low contrast.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.55, calc(l + 0.25), 0.82) c h), oklch(from var(--sf-color-neutral) clamp(0.25, calc(l - 0.2), 0.55) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--inverse","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Text color for use on dark/inverted backgrounds.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.85, calc(l + 0.4), 0.98) c h), oklch(from var(--sf-color-neutral) clamp(0.05, calc(l - 0.4), 0.35) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Muted text for metadata, timestamps, and low-priority annotations.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.35, calc(l - var(--sf-contrast-bias)), 0.62) c h), oklch(from var(--sf-color-neutral) clamp(0.48, calc(l + var(--sf-contrast-bias)), 0.74) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-action","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground color for text on action-colored backgrounds.","value":"oklch(from var(--sf-color-action) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-base","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on base-colored backgrounds.","value":"var(--sf-color-text)","aliasOf":"--sf-color-text","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-danger","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on danger-colored backgrounds.","value":"oklch(from var(--sf-color-danger) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-info","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on info-colored backgrounds.","value":"oklch(from var(--sf-color-info) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-inverse","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on inverted (dark-on-light / light-on-dark) backgrounds.","value":"oklch(from var(--sf-color-inverse) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-neutral","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on neutral-colored backgrounds.","value":"oklch(from var(--sf-color-neutral) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-primary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on primary-colored backgrounds.","value":"oklch(from var(--sf-color-primary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-secondary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on secondary-colored backgrounds.","value":"oklch(from var(--sf-color-secondary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-success","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on success-colored backgrounds.","value":"oklch(from var(--sf-color-success) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-tertiary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on tertiary-colored backgrounds.","value":"oklch(from var(--sf-color-tertiary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-warning","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on warning-colored backgrounds.","value":"oklch(from var(--sf-color-warning) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--placeholder","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Placeholder text color for inputs and textareas.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.45, calc(l + 0.15), 0.75) c h), oklch(from var(--sf-color-neutral) clamp(0.35, calc(l - 0.1), 0.65) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--secondary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"De-emphasised secondary text (captions, labels, supporting copy).","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.15, calc(l - 0.25 - var(--sf-contrast-bias)), 0.45) c h), oklch(from var(--sf-color-neutral) clamp(0.55, calc(l + 0.1 + var(--sf-contrast-bias)), 0.90) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Warning / caution color for non-critical alerts and degraded-state indicators.","value":"light-dark(var(--sf-color-warning-source-light), var(--sf-color-warning-source-dark, oklch(from var(--sf-color-warning-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium warning fill for icons and caution chips.","value":"oklch(from var(--sf-color-warning) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-warning.","value":"oklch(0.65 0.153 80)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the warning status color.","note":"OKLCH lightness source for the warning status color.","value":"oklch(0.75 0.17 80)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast warning color for caution text.","value":"light-dark( oklch(from var(--sf-color-warning-source-light) calc(l - 0.25) c h), oklch(from var(--sf-color-warning) clamp(0.70, calc(l + 0.05), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light warning tint for warning notification backgrounds.","value":"oklch(from var(--sf-color-warning) l c h / 0.12)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-white","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Absolute white reference value.","value":"oklch(100% 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-component-pad","tier":"PUBLIC","role":"consumption","namespace":"component","category":"Core tokens","group":"Output token @property registrations","description":"Standard inner padding for interactive components (buttons, form inputs, chips).","note":"Standard inner padding for interactive components (buttons, form inputs, chips).","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-default","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Default content container max-width (~1200px).","value":"75rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-full","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Full-width container — removes the max-width constraint.","value":"100%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-narrow","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Narrow content max-width — ideal for article body and blog posts (~65ch).","value":"38rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-prose","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Prose max-width — optimised for readability (~75ch).","value":"65ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-wide","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Wide container for marketing / dashboard layouts (~1440px).","value":"90rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-content-gap","tier":"PUBLIC","role":"consumption","namespace":"content","category":"Core tokens","group":"Output token @property registrations","description":"Tight gap within related content (stack, flow, prose). Override globally to retune all tight primitives at once.","note":"Tight gap within related content (stack, flow, prose). Override globally to retune all tight primitives at once.","value":"var(--sf-space-s)","aliasOf":"--sf-space-s","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-content-intrinsic-size","tier":"PUBLIC","role":"knob","namespace":"content","category":"Macro tokens","group":"Content visibility","description":"intrinsic-size hint for content-visibility: auto (lazy off-screen rendering).","note":"Intrinsic-size hint for content-visibility: auto (prevents layout shift on first reveal).","value":"500px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-content-width","tier":"PUBLIC","role":"consumption","namespace":"content","category":"Layout tokens","group":"Content grid (breakout pattern)","description":"Breakout width and content width for the content-grid pattern (full-bleed breakouts inside a constrained column).","note":"Max-width of the main content column in a content grid.","value":"var(--sf-container-default)","aliasOf":"--sf-container-default","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-contrast-bias","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"contrast","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Global text-contrast nudge. Positive values push derived reading-text colors toward the extremes (darker in light mode, lighter in dark). Default 0 (neutral).","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-contrast-threshold","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"contrast","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"OKLCH lightness crossover for auto-contrast on colored surfaces. Colors with L above this get dark text; below get light text. Default 0.6.","value":"0.6","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cover-min-height","tier":"PUBLIC","role":"knob","namespace":"cover","category":"Layout tokens","group":"Cover","description":"Min-height and padding for the full-viewport cover layout.","note":"Minimum height of the cover layout (typically 100svh).","value":"100dvh","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cover-padding","tier":"PUBLIC","role":"consumption","namespace":"cover","category":"Layout tokens","group":"Cover","description":"Min-height and padding for the full-viewport cover layout.","note":"Inner padding for the cover layout.","value":"var(--sf-section-pad)","aliasOf":"--sf-section-pad","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-current-font-weight","tier":"PUBLIC","role":"consumption","namespace":"current","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Inherits the current font-weight from context. Useful as a reset.","value":"var(--sf-font-weight-bold)","aliasOf":"--sf-font-weight-bold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-display-l-line-height","tier":"PUBLIC","role":"knob","namespace":"display","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Line height for large display text (--sf-text-display-l). Very tight to avoid excessive gaps at oversized sizes.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-display-m-line-height","tier":"PUBLIC","role":"knob","namespace":"display","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Line height for medium display text (--sf-text-display-m).","value":"1.05","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-display-s-line-height","tier":"PUBLIC","role":"consumption","namespace":"display","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Line height for small display text (--sf-text-display-s).","value":"var(--sf-leading-tight)","aliasOf":"--sf-leading-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-color","tier":"PUBLIC","role":"consumption","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Color of horizontal/vertical divider rules.","value":"var(--sf-color-border)","aliasOf":"--sf-color-border","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-gap","tier":"PUBLIC","role":"consumption","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Spacing (margin) around divider elements.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-style","tier":"PUBLIC","role":"knob","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Border style of dividers.","value":"solid","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-width","tier":"PUBLIC","role":"consumption","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Stroke width of horizontal and vertical divider rules.","value":"var(--sf-border-width-1)","aliasOf":"--sf-border-width-1","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-drop-shadow-l","tier":"PUBLIC","role":"consumption","namespace":"drop","category":"Core tokens","group":"Output token @property registrations","description":"Large CSS filter: drop-shadow for prominent illustrated or cut-out elements.","note":"Large CSS filter: drop-shadow for prominent illustrated or cut-out elements.","value":"drop-shadow(0 8px 16px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7)))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-drop-shadow-m","tier":"PUBLIC","role":"consumption","namespace":"drop","category":"Core tokens","group":"Output token @property registrations","description":"Medium CSS filter: drop-shadow for elevated icons and card thumbnails.","note":"Medium CSS filter: drop-shadow for elevated icons and card thumbnails.","value":"drop-shadow(0 4px 6px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7)))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-drop-shadow-s","tier":"PUBLIC","role":"consumption","namespace":"drop","category":"Core tokens","group":"Output token @property registrations","description":"Small CSS filter: drop-shadow. Use filter (not box-shadow) for elements with transparent areas — SVGs, PNGs, cutout images.","note":"Small CSS filter: drop-shadow. Use filter (not box-shadow) for elements with transparent areas — SVGs, PNGs, cutout images.","value":"drop-shadow(0 1px 2px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1.5), 0.7)))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-fast","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Fast duration (~100ms). Hover transitions, tooltip appear.","value":"calc(150ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-instant","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Near-instant duration (~50ms). Micro-interactions and cursor-follow effects.","value":"calc(100ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-none","tier":"PUBLIC","role":"knob","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"0ms duration. Disables transitions (respects prefers-reduced-motion).","value":"0ms","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-normal","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Normal duration (~200ms). Default for most transitions.","value":"calc(250ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-slow","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Slow duration (~350ms). Emphasis transitions, drawers.","value":"calc(400ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-slower","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Extra-slow duration (~600ms). Page-level enter/exit transitions.","value":"calc(600ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-bounce","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Bounce easing. Playful overshooting effect.","value":"linear(0, 0.35 18%, 1 32%, 0.86 42%, 1.02 56%, 0.98 72%, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-elastic","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Elastic easing. Spring-like overshooting effect.","value":"linear(0, 0.3, 1.2, 0.9, 1.05, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-in","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Accelerating easing. Use for elements leaving the viewport.","value":"cubic-bezier(0.5, 0, 0.75, 0.25)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-in-out","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Symmetric easing. Use for elements that move within the viewport.","value":"cubic-bezier(0.4, 0, 0.2, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-linear","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Linear easing. Use for progress indicators and spinner rotations.","value":"linear","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-out","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Decelerating easing. Use for elements entering the viewport.","value":"cubic-bezier(0.25, 0, 0.15, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-overshoot","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Subtle overshoot easing. Softer spring effect.","value":"linear(0, 0.6 30%, 1.08 55%, 0.98 75%, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-spring","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Spring easing. Natural physics-based motion.","value":"linear(0, 0.5, 1.1, 0.95, 1.02, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-gap","tier":"PUBLIC","role":"consumption","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Gap between equal columns.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the default auto-fill equal-columns layout. Columns fill the row until this width is reached, then wrap to the next line.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-2","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 2-column equal preset.","value":"28rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-3","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 3-column equal preset.","value":"15rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-4","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 4-column equal preset.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-6","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 6-column equal preset.","value":"10rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-field-block","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Core tokens","group":"Output token @property registrations","description":"Vertical (block) padding inside form fields.","note":"Vertical (block) padding inside form fields.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-field-padding-block","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Component tokens","group":"FIELD TOKENS","description":"Padding and radius tokens that control form field geometry. Override these to give inputs a distinct visual language from buttons.","note":"Vertical (block) inner padding for form field inputs.","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-field-padding-inline","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Component tokens","group":"FIELD TOKENS","description":"Padding and radius tokens that control form field geometry. Override these to give inputs a distinct visual language from buttons.","note":"Horizontal (inline) inner padding for form field inputs.","value":"var(--sf-space-s)","aliasOf":"--sf-space-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-field-radius","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Component tokens","group":"FIELD TOKENS","description":"Padding and radius tokens that control form field geometry. Override these to give inputs a distinct visual language from buttons.","note":"Border radius for form field inputs. Defaults to --sf-radius-m; override to reshape all inputs at once.","value":"var(--sf-radius-m)","aliasOf":"--sf-radius-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-field-required-marker","tier":"PUBLIC","role":"knob","namespace":"field","category":"Core tokens","group":"Semantic gap tokens","description":"CSS content value for required-field markers (e.g. \\" *\\"). Used by pseudo-elements in the .required utility pattern.","note":"CSS content value for required-field markers (e.g. \\" *\\"). Used by pseudo-elements in the .required utility pattern.","value":"\\" *\\"","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-flow-space","tier":"PUBLIC","role":"consumption","namespace":"flow","category":"Macro tokens","group":"Flow","description":"Vertical rhythm gap between flow children (margin-block-start on all but the first child).","note":"Margin-block-start applied to all flow children except the first.","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-fluid-max-vw","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"fluid","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum viewport width (in rem) at which the fluid scale clamps to its largest values. Default 90rem (~1440px). Part of the fluid scale engine.","value":"90","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-fluid-min-vw","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"fluid","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum viewport width (in rem) at which the fluid scale clamps to its smallest values. Default 22.5rem (~360px). Part of the fluid scale engine.","value":"22.5","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-color","tier":"PUBLIC","role":"consumption","namespace":"focus","category":"Core tokens","group":"Focus / form colors","description":"Focus ring and form caret colors. Centralised here so keyboard navigation is consistently styled.","note":"Color of the keyboard focus ring. Ensure sufficient contrast against all background surfaces.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-offset","tier":"PUBLIC","role":"knob","namespace":"focus","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Gap between the element edge and the focus ring.","value":"2px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-shadow","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"focus","category":"Core tokens","group":"Focus / form colors","description":"Focus ring and form caret colors. Centralised here so keyboard navigation is consistently styled.","note":"Computed box-shadow value for the focus ring — two-layer technique: offset shadow in bg color, then ring shadow in focus-ring color. Tune via --sf-focus-ring-width and --sf-focus-ring-color instead of overriding this directly.","value":"0 0 0 var(--sf-focus-ring-offset) var(--sf-color-bg, var(--sf-color-base-source-light, #fff)), 0 0 0 calc(var(--sf-focus-ring-offset) + var(--sf-focus-ring-width)) var(--sf-focus-ring-color)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-style","tier":"PUBLIC","role":"knob","namespace":"focus","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Border style of the focus ring (solid, dashed, dotted).","value":"solid","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-width","tier":"PUBLIC","role":"knob","namespace":"focus","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Stroke width of the focus ring outline.","value":"2px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-body","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Font family stack for body text. Override to set your primary typeface.","value":"system-ui, -apple-system, sans-serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-display","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Font family for display/marketing text. Override for large headline typefaces.","value":"var(--sf-font-heading)","aliasOf":"--sf-font-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-features","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"OpenType feature-settings string for body text (e.g. 'ss01', 'cv11'). Default 'normal'. Override on :root or a subtree to enable ligatures, alternate glyphs, etc.","value":"normal","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-geometric","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Geometric sans-serif slot — circular letterforms for brand alternates.","value":"\\"Avenir\\", \\"Montserrat\\", \\"Corbel\\", \\"URW Gothic\\", source-sans-pro, sans-serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-heading","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Font family for headings. Defaults to display if not overridden separately.","value":"var(--sf-font-body)","aliasOf":"--sf-font-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-humanist","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Humanist sans-serif slot — warm, readable alternate typeface.","value":"\\"Seravek\\", \\"Gill Sans Nova\\", \\"Ubuntu\\", \\"Calibri\\", \\"DejaVu Sans\\", source-sans-pro, sans-serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-mono","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Monospace font family for code, pre, and kbd elements.","value":"ui-monospace, monospace","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-numeric","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"font-variant-numeric shorthand (e.g. tabular-nums) for aligned numeric data.","value":"tabular-nums","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-slab","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Slab-serif slot for editorial or display headings.","value":"\\"Rockwell\\", \\"Rockwell Nova\\", \\"Roboto Slab\\", \\"DejaVu Serif\\", \\"Sitka Small\\", serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-variation","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Variable-font axis settings for body text (e.g. \\"wght\\" 450). Default 'normal'. Override on :root or a subtree to activate variable-font axes.","value":"normal","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-body","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for body text (typically 400 / normal).","value":"var(--sf-font-weight-normal)","aliasOf":"--sf-font-weight-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-bold","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Strong emphasis weight (700).","value":"700","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-display","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for display-size text.","value":"var(--sf-font-weight-bold)","aliasOf":"--sf-font-weight-bold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-heading","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for headings (typically 600–700).","value":"var(--sf-font-weight-semibold)","aliasOf":"--sf-font-weight-semibold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-interactive","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for interactive role text — buttons, badges, and navigation labels. Defaults to semibold.","value":"var(--sf-font-weight-semibold)","aliasOf":"--sf-font-weight-semibold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-light","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Light weight (300). Use sparingly — check contrast at small sizes.","value":"300","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-medium","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Medium weight (500). Subtle emphasis without full bold.","value":"500","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-normal","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Normal / regular weight (400).","value":"400","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-semibold","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Semibold weight (600). Common for labels and subheadings.","value":"600","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-strong","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for strong/emphasis inline role. Defaults to bold.","value":"var(--sf-font-weight-bold)","aliasOf":"--sf-font-weight-bold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-frame-ratio","tier":"PUBLIC","role":"knob","namespace":"frame","category":"Layout tokens","group":"Frame","description":"Aspect ratio for the frame layout primitive (media container).","note":"Aspect ratio for the frame (media container) layout.","value":"16 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gap","tier":"PUBLIC","role":"consumption","namespace":"gap","category":"Core tokens","group":"Output token @property registrations","description":"Default gap between components (the loose rhythm). Layout primitives like cluster/grid/sidebar default to it. Override globally to retune them all at once, or set a primitive token (e.g. --sf-cluster-gap) for one element.","note":"Default gap between components (the loose rhythm). Layout primitives like cluster/grid/sidebar default to it. Override globally to retune them all at once, or set a primitive token (e.g. --sf-cluster-gap) for one element.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-brand","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Multi-stop brand gradient spanning primary and secondary palette colors. Use for hero backgrounds and brand accents.","value":"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) l c calc(h + 30)))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--b","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-bottom gradient (transparent → surface). Use to fade content into a background below (infinite scroll fade, content cutoff).","value":"linear-gradient(in oklch to bottom, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--l","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-left gradient. Use to indicate left-side scrollable overflow.","value":"linear-gradient(in oklch to left, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--r","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-right gradient. Use to indicate right-side scrollable overflow.","value":"linear-gradient(in oklch to right, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--t","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-top gradient (transparent → surface). Use to fade content into a background above.","value":"linear-gradient(in oklch to top, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-primary","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Gradient using primary palette colors (light to saturated).","value":"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) calc(l - 0.08) c h))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-secondary","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Gradient using secondary palette colors.","value":"linear-gradient(in oklch 135deg, var(--sf-color-secondary), oklch(from var(--sf-color-secondary) calc(l - 0.08) c h))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-surface","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Subtle surface-color gradient for depth layering and glass effects.","value":"linear-gradient(in oklab 180deg, var(--sf-color-surface), var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-tertiary","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Gradient using tertiary palette colors.","value":"linear-gradient(in oklch 135deg, var(--sf-color-tertiary), oklch(from var(--sf-color-tertiary) calc(l - 0.08) c h))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-gap","tier":"PUBLIC","role":"consumption","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Gap between auto-fill grid cells.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Minimum column width for the auto-fill grid.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-2xl","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Minimum column width at the 2× breakpoint.","value":"28rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-l","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Large minimum column width for the auto-fill grid.","value":"20rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-m","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Medium minimum column width for the auto-fill grid.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-s","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Small minimum column width for the auto-fill grid.","value":"13rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-xl","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Extra-large minimum column width for the auto-fill grid. Use for wide content cards.","value":"24rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-xs","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Extra-small minimum column width for the auto-fill grid. Use for very compact tile layouts (icon grids).","value":"10rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gutter","tier":"PUBLIC","role":"consumption","namespace":"gutter","category":"Core tokens","group":"Output token @property registrations","description":"Wide page/section-edge gutter (used by center/container). Override to set the page-edge breathing room across breakpoints.","note":"Wide page/section-edge gutter (used by center/container). Override to set the page-edge breathing room across breakpoints.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for 

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

. Typically slightly negative at large sizes.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-line-height","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

. Tighter than body to avoid excessive whitespace at large sizes.","value":"var(--sf-leading-tight)","aliasOf":"--sf-leading-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-max-width","tier":"PUBLIC","role":"knob","namespace":"h1","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none (unconstrained). Set to a ch value (e.g. 20ch) to prevent wide headings from spanning the full column on large screens.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-size","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-4xl)","aliasOf":"--sf-text-4xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-line-height","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

.","value":"var(--sf-leading-tight)","aliasOf":"--sf-leading-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-max-width","tier":"PUBLIC","role":"knob","namespace":"h2","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-size","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-3xl)","aliasOf":"--sf-text-3xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-line-height","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

.","value":"var(--sf-leading-snug)","aliasOf":"--sf-leading-snug","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-max-width","tier":"PUBLIC","role":"knob","namespace":"h3","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-size","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-2xl)","aliasOf":"--sf-text-2xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-line-height","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

.","value":"var(--sf-leading-snug)","aliasOf":"--sf-leading-snug","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-max-width","tier":"PUBLIC","role":"knob","namespace":"h4","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-size","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-xl)","aliasOf":"--sf-text-xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for
.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-line-height","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for
.","value":"var(--sf-leading-normal)","aliasOf":"--sf-leading-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-max-width","tier":"PUBLIC","role":"knob","namespace":"h5","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for
. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-size","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for
.","value":"var(--sf-text-l)","aliasOf":"--sf-text-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for
.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for
.","value":"var(--sf-tracking-wide)","aliasOf":"--sf-tracking-wide","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-line-height","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for
.","value":"var(--sf-leading-normal)","aliasOf":"--sf-leading-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-max-width","tier":"PUBLIC","role":"knob","namespace":"h6","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for
. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-size","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for
.","value":"var(--sf-text-m)","aliasOf":"--sf-text-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-header-height","tier":"PUBLIC","role":"consumption","namespace":"header","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Total height of the sticky page header. Used by --sf-sticky-offset to prevent content from hiding under it.","value":"clamp( var(--sf-header-height-mobile), calc((var(--sf-header-height-desktop) - var(--sf-header-height-mobile)) / ((var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * 1rem) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-header-height-mobile)), var(--sf-header-height-desktop))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-header-height-desktop","tier":"PUBLIC","role":"knob","namespace":"header","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Header height at desktop breakpoints.","value":"5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-header-height-mobile","tier":"PUBLIC","role":"knob","namespace":"header","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Header height at mobile breakpoints.","value":"3.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-heading-color","tier":"PUBLIC","role":"consumption","namespace":"heading","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Text color for all headings (h1–h6). Alias of --sf-color-heading.","value":"var(--sf-color-heading)","aliasOf":"--sf-color-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-heading-font-family","tier":"PUBLIC","role":"consumption","namespace":"heading","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font family for all headings. Alias of --sf-font-heading.","value":"var(--sf-font-heading)","aliasOf":"--sf-font-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-heading-text-wrap","tier":"PUBLIC","role":"knob","namespace":"heading","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"text-wrap for headings. 'balance' prevents orphaned short last lines in multi-line headings.","value":"balance","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-2xl","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"2× large icon size (~40px+). Hero or onboarding icons.","value":"4em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-bg","tier":"PUBLIC","role":"consumption","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Background color for boxed icon containers.","value":"var(--sf-color-inset)","aliasOf":"--sf-color-inset","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-border","tier":"PUBLIC","role":"consumption","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Border for boxed icon containers.","value":"var(--sf-border-width-1) solid var(--sf-color-border)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-pad","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Padding inside boxed icon containers.","value":"0.5em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-radius","tier":"PUBLIC","role":"consumption","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Border radius for boxed icon containers.","value":"var(--sf-radius-s)","aliasOf":"--sf-radius-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-l","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Large icon size (~24px). Standalone icon buttons.","value":"2em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-m","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Medium icon size (~20px). Default for inline and button icons.","value":"1.5em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-s","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Small icon size (~16px). Dense UI chrome.","value":"1em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-xl","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Extra-large icon size (~32px). Feature icons.","value":"3em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-xs","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Extra-small icon size (~12px). Inline indicators.","value":"0.875em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-imposter-margin","tier":"PUBLIC","role":"consumption","namespace":"imposter","category":"Layout tokens","group":"Imposter (centered absolute/fixed overlay)","description":"Margin for the imposter layout (centered fixed/absolute overlay).","note":"Margin between the imposter overlay and the viewport edges.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-active","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the active state. Set to 1 (via JS or .is-active) to drive branching calc() expressions. 0 = default (inactive).","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-current","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the current/selected state. Set to 1 (via .is-current) to drive branching calc() expressions. 0 = default.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-dark","tier":"INTERNAL","role":"knob","namespace":"is","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Mode flag — 0 in light mode, 1 in dark mode. Set automatically by [data-theme='dark'] and prefers-color-scheme. Drives dark-mode formula branches in calc().","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-open","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the open/expanded state. Set to 1 (via .is-open) to drive branching calc() expressions. 0 = default (closed).","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-pressed","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the pressed state. Set to 1 (via .is-pressed) to drive branching calc() expressions. 0 = default.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-normal","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Normal line height (~1.5). Default for body text.","value":"1.5","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-relaxed","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Relaxed line height (~1.65). Long-form reading text.","value":"1.625","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-snug","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Snug line height (~1.35). Use for sub-headings.","value":"1.3","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-taper","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Progressive leading tightener: each step up the type scale subtracts step-index × taper from its per-size line-height token. Default 0 keeps the curated defaults.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-tight","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Tight line height (~1.2). Use for large display headings.","value":"1.1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-line-clamp","tier":"PUBLIC","role":"knob","namespace":"line","category":"Macro tokens","group":"Line clamp","description":"Number of lines before text truncates with an ellipsis.","note":"Number of visible lines before text is clipped with an ellipsis.","value":"3","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-link-external-marker","tier":"PUBLIC","role":"knob","namespace":"link","category":"Core tokens","group":"Semantic gap tokens","description":"CSS content value appended to external links (e.g. \\" ↗\\"). Used by the .external-link pseudo-element pattern.","note":"CSS content value appended to external links (e.g. \\" ↗\\"). Used by the .external-link pseudo-element pattern.","value":"\\" \\\\2197\\"","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-link-underline-offset","tier":"PUBLIC","role":"knob","namespace":"link","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Vertical offset of the link underline from the text baseline.","value":"0.15em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-link-underline-thickness","tier":"PUBLIC","role":"knob","namespace":"link","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Stroke width of the link underline.","value":"auto","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-lumlocker","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"lumlocker","category":"Core tokens","group":"LumLocker","description":"OKLCH lightness lock for the data-lumlocker attribute. Pins surface brightness to a fixed L value — useful for always-dark or always-light sections that must stay stable while the rest of the page switches color-scheme.","note":"OKLCH lightness lock value. When :root has [data-lumlocker], brand colors (primary, secondary, action, base) are remapped to this L so their contrast remains constant as hues shift.","value":"0.65","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-mask-scrim-end","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"mask","category":"Core tokens","group":"Mask scrim","description":"Edge-fade stop positions for the scroll-shadow mask effect on overflowing containers. Expressed as percentages or lengths; consumed by mask-image gradients.","note":"End stop for edge-fade mask gradients. Mirrors --sf-mask-scrim-start for the trailing edge of a scroll container.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-mask-scrim-start","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"mask","category":"Core tokens","group":"Mask scrim","description":"Edge-fade stop positions for the scroll-shadow mask effect on overflowing containers. Expressed as percentages or lengths; consumed by mask-image gradients.","note":"Start stop for edge-fade mask gradients on scroll reels / overflow containers. Use in mask-image: linear-gradient(..., transparent var(--sf-mask-scrim-start)) to fade content near the leading edge.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-motion-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"motion","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global motion multiplier. All transition and animation durations multiply by this factor. Set to 0 to disable all motion; reduce below 1 for snappier feel.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-object-fit","tier":"PUBLIC","role":"knob","namespace":"object","category":"Core tokens","group":"Object fit / position","description":"Defaults for object-fit and object-position on replaced elements (img, video).","note":"Default object-fit value for replaced elements (img, video).","value":"cover","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-object-position","tier":"PUBLIC","role":"knob","namespace":"object","category":"Core tokens","group":"Object fit / position","description":"Defaults for object-fit and object-position on replaced elements (img, video).","note":"Default object-position for replaced elements.","value":"50% 50%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-opacity-disabled","tier":"PUBLIC","role":"knob","namespace":"opacity","category":"Core tokens","group":"Opacity","description":"Opacity tokens for specific UI states: --sf-opacity-disabled dims non-interactive elements; --sf-state-pending-opacity dims elements in an async/loading state.","note":"Opacity for disabled UI elements (typically 0.4–0.5).","value":"0.45","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-opacity-muted","tier":"PUBLIC","role":"knob","namespace":"opacity","category":"Core tokens","group":"Blur & opacity","description":"Backdrop-filter blur scale and background-opacity tokens.","note":"General de-emphasis opacity for secondary content, ghost elements, or non-primary layers. Default 0.5.","value":"0.5","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-optical-sizing","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"optical","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"CSS font-optical-sizing value. 'auto' lets the browser optimize letterforms for the rendered size. Set 'none' to disable optical sizing.","value":"auto","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-100","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 100. Controls blend depth toward the surface. Default 8%.","note":"Color-mix percentage for palette step 100. Controls blend depth toward the surface. Default 8%.","value":"8%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-200","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 200. Controls blend depth toward the surface. Default 20%.","note":"Color-mix percentage for palette step 200. Controls blend depth toward the surface. Default 20%.","value":"20%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-300","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 300. Controls blend depth toward the surface. Default 40%.","note":"Color-mix percentage for palette step 300. Controls blend depth toward the surface. Default 40%.","value":"40%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-400","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 400 (near-mid tint). Controls blend depth. Default 65%.","note":"Color-mix percentage for palette step 400 (near-mid tint). Controls blend depth. Default 65%.","value":"65%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-50","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for the lightest palette step (50). Controls how far step 50 blends toward the surface. Default 4%.","note":"Color-mix percentage for the lightest palette step (50). Controls how far step 50 blends toward the surface. Default 4%.","value":"4%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-600","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 600 (near-mid shade). Controls blend depth toward the text color. Default 82%.","note":"Color-mix percentage for palette step 600 (near-mid shade). Controls blend depth toward the text color. Default 82%.","value":"82%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-700","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 700. Controls blend depth toward the text color. Default 62%.","note":"Color-mix percentage for palette step 700. Controls blend depth toward the text color. Default 62%.","value":"62%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-800","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 800 (dark shade). Controls blend depth toward text. Default 38%.","note":"Color-mix percentage for palette step 800 (dark shade). Controls blend depth toward text. Default 38%.","value":"38%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-900","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 900 (very dark shade). Controls blend depth toward text. Default 18%.","note":"Color-mix percentage for palette step 900 (very dark shade). Controls blend depth toward text. Default 18%.","value":"18%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-950","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for the darkest palette step (950). Controls how far step 950 blends toward the text color. Default 8%.","note":"Color-mix percentage for the darkest palette step (950). Controls how far step 950 blends toward the text color. Default 8%.","value":"8%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-print-base-size","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"print","category":"Core tokens","group":"Print","description":"Page-layout tokens for printed output: paper size, margins, and base font size. These correspond to the @page values in core/print.css.","note":"Base font size for @media print stylesheets. Default 11pt. Override on :root to adjust printed body text size.","value":"11pt","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-print-page-margin","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"print","category":"Core tokens","group":"Print","description":"Page-layout tokens for printed output: paper size, margins, and base font size. These correspond to the @page values in core/print.css.","note":"Page margin for printed output. Default 2cm. Maps to @page margin.","value":"2cm","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-print-page-size","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"print","category":"Core tokens","group":"Print","description":"Page-layout tokens for printed output: paper size, margins, and base font size. These correspond to the @page values in core/print.css.","note":"Target paper size for printing. Default 'a4'. Maps to @page size. Common values: a4, letter, legal.","value":"a4","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-block-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin between prose elements (h2, p, ul, etc.).","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-blockquote-border","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Left border style for blockquotes inside prose.","value":"var(--sf-border-width-2) solid var(--sf-color-border--subtle)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-blockquote-padding","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Inner padding for blockquotes inside prose.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-figcaption-size","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Font size for figure captions inside .prose. Typically smaller than body text.","value":"var(--sf-text-s)","aliasOf":"--sf-text-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-figure-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin around
elements inside .prose.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-heading-gap","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Space between a heading and the content that follows it inside .prose.","value":"var(--sf-space-s)","aliasOf":"--sf-space-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-hr-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin around
rules inside .prose.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-list-gap","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Gap between list items inside .prose.","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-marker-color","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Color of list bullets and ordered-list numbers inside .prose.","value":"var(--sf-color-primary)","aliasOf":"--sf-color-primary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-media-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin around images, video, and figures inside .prose.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-media-radius","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Border radius applied to images and media inside .prose.","value":"var(--sf-radius-m)","aliasOf":"--sf-radius-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-nested-list-gap","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Gap between items in nested lists inside .prose.","value":"var(--sf-space-2xs)","aliasOf":"--sf-space-2xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-paragraph","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Layout tokens","group":"Prose","description":"Max-width for the prose layout primitive (long-form reading column).","note":"Max width of prose paragraphs (layout token for the prose layout).","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-table-pad","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Cell padding for tables inside .prose.","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-2xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"2× large radius (~20px). Rounded card variants.","note":"2× large radius (~20px). Rounded card variants.","value":"calc(24px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-2xs","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Extra-extra-small radius (~1px). Minimal rounding for very tight UI elements.","note":"Extra-extra-small radius (~1px). Minimal rounding for very tight UI elements.","value":"calc(1px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-3xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"3× large radius (~24px). Large rounded surfaces.","note":"3× large radius (~24px). Large rounded surfaces.","value":"calc(32px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-4xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"4× large radius (~32px). Near-pill rounding.","note":"4× large radius (~32px). Near-pill rounding.","value":"calc(48px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-full","tier":"PUBLIC","role":"knob","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Full rounding (50%). For circular elements like avatars.","note":"Full rounding (50%). For circular elements like avatars.","value":"9999px","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-l","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Large radius (~12px). Modals, popovers, panels.","note":"Large radius (~12px). Modals, popovers, panels.","value":"calc(12px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-m","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Medium radius (~6–8px). Default — inputs, standard buttons, cards.","note":"Medium radius (~6–8px). Default — inputs, standard buttons, cards.","value":"calc(8px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-none","tier":"PUBLIC","role":"knob","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Zero border radius — square corners.","note":"Zero border radius — square corners.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-outer","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Concentric corner helper: outer radius for a container that wraps content with inner radius of --sf-radius-m. Computed as --sf-radius-m + --sf-component-pad so corners align visually.","note":"Concentric corner helper: outer radius for a container that wraps content with inner radius of --sf-radius-m. Computed as --sf-radius-m + --sf-component-pad so corners align visually.","value":"calc(var(--sf-radius-m) + var(--sf-component-pad))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-pill","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Pill rounding (9999px). Tags, toggle pills, status badges.","note":"Pill rounding (9999px). Tags, toggle pills, status badges.","value":"var(--sf-radius-full)","aliasOf":"--sf-radius-full","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-s","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Small radius (~4px). Badges, chips, small buttons.","note":"Small radius (~4px). Badges, chips, small buttons.","value":"calc(4px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"radius","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global border-radius multiplier. Scales the entire radius ramp up (>1) or down (<1) from one knob. Set to 0 for sharp corners everywhere.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Extra-large radius (~16px). Prominent cards and feature blocks.","note":"Extra-large radius (~16px). Prominent cards and feature blocks.","value":"calc(16px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-xs","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Hairline radius (~2px). Subtle rounding for tight components.","note":"Hairline radius (~2px). Subtle rounding for tight components.","value":"calc(2px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-3-2","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"3:2 aspect ratio. Common for landscape photography.","value":"3 / 2","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-4-3","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"4:3 aspect ratio. Classic screen ratio.","value":"4 / 3","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-cinema","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"2.39:1 cinematic widescreen aspect ratio.","value":"21 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-golden","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"1.618:1 golden ratio. Harmonious proportions.","value":"1.618 / 1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-portrait","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"2:3 portrait aspect ratio.","value":"3 / 4","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-square","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"1:1 square aspect ratio. Use for avatars, icon containers, and square thumbnails.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-video","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"16:9 widescreen video aspect ratio. Use for video embeds and video-thumbnail containers.","value":"16 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-reel-gap","tier":"PUBLIC","role":"consumption","namespace":"reel","category":"Layout tokens","group":"Reel","description":"Configuration tokens for the reel layout (horizontal scroll container).","note":"Gap between items in the horizontal reel.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-reel-height","tier":"PUBLIC","role":"knob","namespace":"reel","category":"Layout tokens","group":"Reel","description":"Configuration tokens for the reel layout (horizontal scroll container).","note":"Fixed height of the reel container.","value":"auto","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-reel-item-width","tier":"PUBLIC","role":"knob","namespace":"reel","category":"Layout tokens","group":"Reel","description":"Configuration tokens for the reel layout (horizontal scroll container).","note":"Width of each item in the reel.","value":"max-content","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-bottom","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the bottom edge (home indicator, gesture bar). Resolves to env(safe-area-inset-bottom, 0px). Use for fixed footers.","value":"env(safe-area-inset-bottom, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-left","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the left edge. Resolves to env(safe-area-inset-left, 0px).","value":"env(safe-area-inset-left, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-right","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the right edge (rounded corners, home indicator). Resolves to env(safe-area-inset-right, 0px).","value":"env(safe-area-inset-right, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-top","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the top edge (notch, Dynamic Island). Resolves to env(safe-area-inset-top, 0px). Use for fixed headers on notched devices.","value":"env(safe-area-inset-top, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-color","tier":"PUBLIC","role":"knob","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Base color of the gradient scrim overlay.","value":"oklch(0 0 0 / 0.55)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-direction","tier":"PUBLIC","role":"knob","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Direction of the scrim gradient (to bottom, to top, etc.).","value":"to top","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-gradient","tier":"PUBLIC","role":"consumption","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Full gradient shorthand for the scrim. Override to customise the fade.","value":"linear-gradient(var(--sf-scrim-direction), var(--sf-scrim-color), transparent)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-text-shadow","tier":"PUBLIC","role":"knob","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Text-shadow layered over the scrim gradient to ensure legibility for text placed directly on image backgrounds.","value":"0 1px 3px oklch(0 0 0 / 0.6)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scroll-shadow-size","tier":"PUBLIC","role":"knob","namespace":"scroll","category":"Macro tokens","group":"Scroll shadow / overflow fade","description":"Size of the scroll-shadow fade effect on overflowing containers.","note":"Size of the scroll-shadow fade effect on overflowing containers.","value":"2rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scroll-timeline-range-end","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"scroll","category":"Core tokens","group":"Scroll-driven animation range","description":"animation-range start and end positions for scroll-driven entrance effects (animation-timeline: view()). Controls how far into the viewport an element must scroll before its entrance animation starts and ends.","note":"animation-range end value for scroll-driven entrance effects. Default 'cover 30%'. Override on an element to control when its entrance animation finishes.","value":"cover 30%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scroll-timeline-range-start","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"scroll","category":"Core tokens","group":"Scroll-driven animation range","description":"animation-range start and end positions for scroll-driven entrance effects (animation-timeline: view()). Controls how far into the viewport an element must scroll before its entrance animation starts and ends.","note":"animation-range start value for scroll-driven entrance effects. Default 'entry 0%'. Override on an element to control when its entrance animation begins.","value":"entry 0%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrollbar-thumb","tier":"PUBLIC","role":"consumption","namespace":"scrollbar","category":"Core tokens","group":"Scrollbar","description":"Custom scrollbar thumb and track colors.","note":"Color of the custom scrollbar thumb.","value":"var(--sf-color-neutral)","aliasOf":"--sf-color-neutral","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrollbar-track","tier":"PUBLIC","role":"knob","namespace":"scrollbar","category":"Core tokens","group":"Scrollbar","description":"Custom scrollbar thumb and track colors.","note":"Color of the custom scrollbar track.","value":"transparent","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Section padding","description":"Vertical padding for full-width page sections at each responsive tier.","note":"Default vertical padding for full-width page sections.","value":"var(--sf-section-pad--m)","aliasOf":"--sf-section-pad--m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--2xl","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"2× large section vertical padding for hero areas.","note":"2× large section vertical padding for hero areas.","value":"calc(var(--sf-space-4xl) * 2 * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--l","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Large section vertical padding.","note":"Large section vertical padding.","value":"calc(var(--sf-space-4xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--m","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Medium section vertical padding.","note":"Medium section vertical padding.","value":"calc(var(--sf-space-3xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--s","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Small section vertical padding.","note":"Small section vertical padding.","value":"calc(var(--sf-space-2xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--xl","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Extra-large vertical section padding for hero and feature sections.","note":"Extra-large vertical section padding for hero and feature sections.","value":"calc(var(--sf-space-4xl) * 1.5 * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--xs","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Extra-small vertical section padding for compact in-page modules.","note":"Extra-small vertical section padding for compact in-page modules.","value":"calc(var(--sf-space-xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"section","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global multiplier applied to every --sf-section-pad--* size — one dial re-rhythms all section padding (default 1).","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-2xl","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Largest shadow for hero cards, feature highlights, and marketing surfaces.","note":"Largest shadow for hero cards, feature highlights, and marketing surfaces.","value":"0 4px 12px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.6), 0.7)), 0 20px 60px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 4), 0.7)), 0 40px 100px -8px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-color","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Shadow ramp (box-shadow, text-shadow, drop-shadow)","description":"Elevation box-shadow ramp from xs to 2xl plus inner, text-shadow, and drop-shadow presets. All opacity values scale with --sf-shadow-strength so dark-mode contrast boost is automatic.","note":"Near-black shadow tint derived from the neutral palette. Inherits the neutral's chroma and hue so colorless neutrals produce colorless shadows.","value":"oklch(from var(--sf-color-neutral) var(--sf-shadow-lightness) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-glow","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Glow box-shadow shorthand for decorative glow effects.","note":"Glow box-shadow shorthand for decorative glow effects.","value":"0 0 15px 2px oklch(from var(--sf-shadow-glow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-glow-color","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Shadow glow color","description":"Tint color used by --sf-shadow-glow. Override to retint glows; opacity and dark-mode adaptation are handled automatically.","note":"Ambient glow tint used by --sf-shadow-glow. Override to retint all glow shadows; opacity and dark-mode boost are controlled by --sf-shadow-strength.","value":"var(--sf-color-primary)","aliasOf":"--sf-color-primary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-inner","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Inset shadow for pressed states, inset inputs, and recessed surfaces.","note":"Inset shadow for pressed states, inset inputs, and recessed surfaces.","value":"inset 0 2px 4px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-l","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Large shadow for drawers, sidebars, and prominent elevated surfaces.","note":"Large shadow for drawers, sidebars, and prominent elevated surfaces.","value":"0 2px 4px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 8px 24px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3), 0.7)), 0 16px 48px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-lightness","tier":"PUBLIC","role":"knob","namespace":"shadow","category":"Core tokens","group":"Shadow strength","description":"Base opacity for the shadow ramp. --sf-shadow-lightness controls tonal density; --sf-shadow-strength is auto-boosted in dark mode so elevation reads on dark surfaces.","note":"OKLCH lightness component of the shadow color. Lower = denser-looking shadows. Tune this independently of --sf-shadow-strength to control tonal weight without affecting opacity.","value":"0.15","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-m","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Medium shadow for cards and content panels.","note":"Medium shadow for cards and content panels.","value":"0 1px 3px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 4px 12px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-none","tier":"PUBLIC","role":"knob","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"No box-shadow (resets inherited shadows). Use to explicitly remove elevation.","note":"No box-shadow (resets inherited shadows). Use to explicitly remove elevation.","value":"none","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-s","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Small shadow for chips, tags, and inline elevated surfaces.","note":"Small shadow for chips, tags, and inline elevated surfaces.","value":"0 1px 2px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 2px 6px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, var(--sf-shadow-strength), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-strength","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"shadow","category":"Core tokens","group":"Shadow strength","description":"Base opacity for the shadow ramp. --sf-shadow-lightness controls tonal density; --sf-shadow-strength is auto-boosted in dark mode so elevation reads on dark surfaces.","note":"Base opacity for the entire shadow ramp. Auto-boosted in dark mode via --sf-is-dark. Override with calc() to preserve the adaptation: e.g. calc(0.12 + var(--sf-is-dark) * 0.17).","value":"calc(0.08 + var(--sf-is-dark) * 0.17)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-xl","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Extra-large shadow for modals, dialogs, and high-elevation sheets.","note":"Extra-large shadow for modals, dialogs, and high-elevation sheets.","value":"0 2px 8px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 12px 36px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3.5), 0.7)), 0 24px 72px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-xs","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Extra-small shadow for barely-elevated elements (focused inputs, small chips).","note":"Extra-small shadow for barely-elevated elements (focused inputs, small chips).","value":"0 1px 2px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sidebar-gap","tier":"PUBLIC","role":"consumption","namespace":"sidebar","category":"Layout tokens","group":"Sidebar","description":"Configuration tokens for the sidebar layout pattern (main content + fixed-width aside).","note":"Gap between sidebar and main content column.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sidebar-min-width","tier":"PUBLIC","role":"knob","namespace":"sidebar","category":"Layout tokens","group":"Sidebar","description":"Configuration tokens for the sidebar layout pattern (main content + fixed-width aside).","note":"Minimum sidebar width before the layout collapses to stacking.","value":"50%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sidebar-width","tier":"PUBLIC","role":"knob","namespace":"sidebar","category":"Layout tokens","group":"Sidebar","description":"Configuration tokens for the sidebar layout pattern (main content + fixed-width aside).","note":"Preferred width of the sidebar column.","value":"18rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-l","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Large UI component height (~44px). Touch-friendly interactive elements.","value":"2.75rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-m","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Medium UI component height (~36px). Default size for buttons and inputs.","value":"2.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-s","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Small UI component height (~28px). Compact buttons and input variants.","value":"2rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-xl","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Extra-large interactive component height (~52px). For oversized or prominently touch-friendly controls.","value":"3.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-xs","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Extra-small interactive component height (~24px). For very compact inline elements and micro-controls.","value":"1.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-2xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"48px-equivalent spacing. Large section spacing.","note":"48px-equivalent spacing. Large section spacing.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 3) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 3) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-2xs","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"4px-equivalent spacing. Tight inline gaps, icon-to-text padding.","note":"4px-equivalent spacing. Tight inline gaps, icon-to-text padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -3) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -3) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-3xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"64px-equivalent spacing. Extra-large layout gaps.","note":"64px-equivalent spacing. Extra-large layout gaps.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 4) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 4) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-4xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"96px-equivalent spacing. Hero / page-level section padding.","note":"96px-equivalent spacing. Hero / page-level section padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 5) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 5) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-base-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum base spacing unit (rem) at the widest viewport. Drives the top of the fluid spacing ramp. Part of the fluid scale engine.","value":"2","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-base-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum base spacing unit (rem) at the narrowest viewport. Drives the bottom of the fluid spacing ramp. Part of the fluid scale engine.","value":"1","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-l","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"24px-equivalent spacing. Card padding, section dividers.","note":"24px-equivalent spacing. Card padding, section dividers.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 1) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 1) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-m","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"16px-equivalent spacing. Default unit, widely applicable.","note":"16px-equivalent spacing. Default unit, widely applicable.","value":"calc(clamp(calc(var(--sf-space-base-min) * 1rem), calc((var(--sf-space-base-max) - var(--sf-space-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * 1rem), calc(var(--sf-space-base-max) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-none","tier":"PUBLIC","role":"knob","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"Zero spacing. Explicit alias for clarity in utility classes.","note":"Zero spacing. Explicit alias for clarity in utility classes.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-px","tier":"PUBLIC","role":"knob","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"1px spacing. Hairline offset for fine adjustments.","note":"1px spacing. Hairline offset for fine adjustments.","value":"1px","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-ratio-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular spacing ratio at the widest viewport. Controls step-to-step growth in the spacing ramp. Default 1.333 (perfect fourth). Part of the fluid scale engine.","value":"1.333","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-ratio-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular spacing ratio at the narrowest viewport. Controls step-to-step growth in the spacing ramp. Default 1.25 (major third). Part of the fluid scale engine.","value":"1.25","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-s","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"12px-equivalent spacing. Form field inner padding, narrow gaps.","note":"12px-equivalent spacing. Form field inner padding, narrow gaps.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -1) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -1) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global spacing multiplier. Scales the fluid spacing ramp. Increase above 1 for airier layouts; reduce below 1 for compact UIs.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"32px-equivalent spacing. Feature row gaps, generous section padding.","note":"32px-equivalent spacing. Feature row gaps, generous section padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 2) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 2) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-xs","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"8px-equivalent spacing. Compact list rows, tab padding.","note":"8px-equivalent spacing. Compact list rows, tab padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -2) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -2) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-stack-gap","tier":"PUBLIC","role":"consumption","namespace":"stack","category":"Layout tokens","group":"Stack","description":"Gap for the stack layout primitive (vertically stacked blocks).","note":"Vertical gap between stacked block-level elements in the stack layout.","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-state-pending-opacity","tier":"PUBLIC","role":"knob","namespace":"state","category":"Core tokens","group":"Opacity","description":"Opacity tokens for specific UI states: --sf-opacity-disabled dims non-interactive elements; --sf-state-pending-opacity dims elements in an async/loading state.","note":"Opacity for pending / loading state elements.","value":"0.7","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sticky-offset","tier":"PUBLIC","role":"consumption","namespace":"sticky","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"top offset for position: sticky elements, accounting for the header height.","value":"clamp( var(--sf-sticky-offset-mobile), calc((var(--sf-sticky-offset-desktop) - var(--sf-sticky-offset-mobile)) / ((var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * 1rem) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-sticky-offset-mobile)), var(--sf-sticky-offset-desktop))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sticky-offset-desktop","tier":"PUBLIC","role":"consumption","namespace":"sticky","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Sticky offset at desktop breakpoints.","value":"var(--sf-header-height-desktop)","aliasOf":"--sf-header-height-desktop","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sticky-offset-mobile","tier":"PUBLIC","role":"consumption","namespace":"sticky","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Sticky offset at mobile breakpoints.","value":"var(--sf-header-height-mobile)","aliasOf":"--sf-header-height-mobile","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-surface-color","tier":"PUBLIC","role":"consumption","namespace":"surface","category":"Macro tokens","group":"Surface color","description":"Input color for the generic .sf-surface macro. Set any color value; the macro derives the background, auto-contrast foreground, and contextual token set from it.","note":"Input for the generic .sf-surface macro. Set any color (including palette shades); the macro derives background, auto-contrast foreground, and the contextual token set from it.","value":"var(--sf-color-base)","aliasOf":"--sf-color-base","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-switcher-gap","tier":"PUBLIC","role":"consumption","namespace":"switcher","category":"Layout tokens","group":"Switcher","description":"Configuration tokens for the switcher layout (horizontal → vertical breakpoint).","note":"Gap between switcher columns / rows.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-switcher-threshold","tier":"PUBLIC","role":"knob","namespace":"switcher","category":"Layout tokens","group":"Switcher","description":"Configuration tokens for the switcher layout (horizontal → vertical breakpoint).","note":"Inline-size threshold below which the switcher flips from horizontal to vertical.","value":"30rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"2× large font size (~24px). Section headings.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 3) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 3) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 2×-large text.","note":"Font weight for 2×-large text.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 2×-large text.","note":"Letter-spacing for 2×-large text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 2×-large text.","note":"Line height for 2×-large text.","value":"calc(var(--sf-leading-snug) - 6 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for 2×-large text.","note":"Optimal line length for 2×-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Extra-extra-small font size (~11px). Fine print, badges.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -3) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -3) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 2×-extra-small text. Override to deviate from the global weight at this size.","note":"Font weight for 2×-extra-small text. Override to deviate from the global weight at this size.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 2×-extra-small text.","note":"Letter-spacing for 2×-extra-small text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 2×-extra-small text.","note":"Line height for 2×-extra-small text.","value":"var(--sf-leading-relaxed)","aliasOf":"--sf-leading-relaxed","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length (max-width in ch) for 2×-extra-small text.","note":"Optimal line length (max-width in ch) for 2×-extra-small text.","value":"55ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"3× large font size (~30px). Major headings.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 4) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 4) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 3×-large text.","note":"Font weight for 3×-large text.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 3×-large text. Typically negative to tighten large headings.","note":"Letter-spacing for 3×-large text. Typically negative to tighten large headings.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 3×-large text.","note":"Line height for 3×-large text.","value":"calc(var(--sf-leading-tight) - 7 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for 3×-large text.","note":"Optimal line length for 3×-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"4× large font size (~36px). Display-level headings.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 5) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 5) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 4×-large text.","note":"Font weight for 4×-large text.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 4×-large text.","note":"Letter-spacing for 4×-large text.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 4×-large text.","note":"Line height for 4×-large text.","value":"calc(var(--sf-leading-tight) - 8 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for 4×-large text.","note":"Optimal line length for 4×-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-base-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum base font size (rem) at the widest viewport. End point for the fluid type scale at wide screens. Part of the fluid scale engine.","value":"1.25","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-base-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum base font size (rem) at the narrowest viewport. Starting point for the fluid type scale at narrow screens. Part of the fluid scale engine.","value":"1","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-base-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum display/hero font size (rem) at the widest viewport. Drives the ceiling of the fluid display type scale. Part of the fluid scale engine.","value":"3","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-base-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum display/hero font size (rem) at the narrowest viewport. Drives the floor of the fluid display type scale. Part of the fluid scale engine.","value":"2.4","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-l","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Large display font size (~68px+). Oversized hero text.","value":"calc(clamp(calc(var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc((var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 2) - var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc(var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 2) * 1rem)) * var(--sf-text-display-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-m","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Medium display font size (~54px). Hero headings.","value":"calc(clamp(calc(var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc((var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 1) - var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc(var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 1) * 1rem)) * var(--sf-text-display-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-s","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Small display font size (~42px). Hero sub-headings.","value":"calc(clamp(calc(var(--sf-text-display-base-min) * 1rem), calc((var(--sf-text-display-base-max) - var(--sf-text-display-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * 1rem), calc(var(--sf-text-display-base-max) * 1rem)) * var(--sf-text-display-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Multiplier applied only to the display/hero type scale (--sf-text-display-*). Tune headline impact independently of body text.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Large font size (~18px). Lead paragraphs, prominent labels.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 1) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 1) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for large text.","note":"Font weight for large text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for large text.","note":"Letter-spacing for large text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for large text.","note":"Line height for large text.","value":"calc(var(--sf-leading-normal) - 4 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for large text.","note":"Optimal line length for large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Medium / base font size (~16px). Typical body text.","value":"calc(clamp(calc(var(--sf-text-base-min) * 1rem), calc((var(--sf-text-base-max) - var(--sf-text-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * 1rem), calc(var(--sf-text-base-max) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for medium (body) text.","note":"Font weight for medium (body) text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for medium text.","note":"Letter-spacing for medium text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for medium text.","note":"Line height for medium text.","value":"calc(var(--sf-leading-normal) - 3 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal reading line length for medium text (~65–75ch).","note":"Optimal reading line length for medium text (~65–75ch).","value":"65ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-ratio-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular type scale ratio at the widest viewport. Controls step-to-step size growth. Default 1.333. Part of the fluid scale engine.","value":"1.333","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-ratio-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular type scale ratio at the narrowest viewport. Controls step-to-step size growth in the fluid type ramp. Default 1.25. Part of the fluid scale engine.","value":"1.25","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Small font size (~14px). Secondary content, UI annotations.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -1) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -1) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for small text.","note":"Font weight for small text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for small text.","note":"Letter-spacing for small text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for small text.","note":"Line height for small text.","value":"calc(var(--sf-leading-relaxed) - 2 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for small text.","note":"Optimal line length for small text.","value":"65ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global type-size multiplier. Scales the entire fluid type scale. 1.08 gives noticeably larger body text without breaking layout.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-l","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Large text-shadow for high-contrast text over busy or dark image backgrounds.","note":"Large text-shadow for high-contrast text over busy or dark image backgrounds.","value":"0 4px 8px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-m","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Medium text-shadow. Use for text overlaid on images to improve legibility.","note":"Medium text-shadow. Use for text overlaid on images to improve legibility.","value":"0 2px 4px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-none","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Removes text-shadow (use to explicitly reset inherited shadows).","note":"Removes text-shadow (use to explicitly reset inherited shadows).","value":"none","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-s","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Small text-shadow for subtle depth on display headings.","note":"Small text-shadow for subtle depth on display headings.","value":"0 1px 2px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Extra-large font size (~20px). Sub-headings, callout text.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 2) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 2) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for extra-large text.","note":"Font weight for extra-large text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for extra-large text.","note":"Letter-spacing for extra-large text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for extra-large text.","note":"Line height for extra-large text.","value":"calc(var(--sf-leading-snug) - 5 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for extra-large text.","note":"Optimal line length for extra-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Extra-small font size (~12px). Labels, captions, metadata.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -2) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -2) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for extra-small text.","note":"Font weight for extra-small text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for extra-small text.","note":"Letter-spacing for extra-small text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for extra-small text.","note":"Line height for extra-small text.","value":"calc(var(--sf-leading-relaxed) - 1 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for extra-small text.","note":"Optimal line length for extra-small text.","value":"60ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-theme-transition-duration","tier":"PUBLIC","role":"consumption","namespace":"theme","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Duration of the .sf-theme-transition animated color-scheme crossfade. Scales with --sf-motion-scale so reduced-motion preferences are respected. Default 300ms.","value":"calc(300ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-touch-target","tier":"PUBLIC","role":"consumption","namespace":"touch","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Minimum touch-target size for interactive elements per WCAG 2.5.5.","value":"var(--sf-size-l)","aliasOf":"--sf-size-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-normal","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Normal letter-spacing (0). Default for body text.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-tight","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Tight letter-spacing (slightly negative). Suitable for large headings.","value":"-0.025em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-wide","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Wide letter-spacing. Use for small-caps labels.","value":"0.025em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-wider","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Wider letter-spacing for strongly spaced labels.","value":"0.05em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-widest","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Widest letter-spacing for all-caps microcopy.","value":"0.1em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-colors","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for color-related properties (color, background, border-color).","value":"color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-normal) var(--sf-ease-out), text-decoration-color var(--sf-duration-normal) var(--sf-ease-out), fill var(--sf-duration-normal) var(--sf-ease-out), stroke var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-enter","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Enter-phase transition (ease-out). Use on elements appearing in the viewport.","value":"color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-normal) var(--sf-ease-out), box-shadow var(--sf-duration-normal) var(--sf-ease-out), opacity var(--sf-duration-normal) var(--sf-ease-out), transform var(--sf-duration-normal) var(--sf-ease-out), filter var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-exit","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Exit-phase transition (ease-in). Use on elements leaving the viewport.","value":"color var(--sf-duration-fast) var(--sf-ease-in), background-color var(--sf-duration-fast) var(--sf-ease-in), border-color var(--sf-duration-fast) var(--sf-ease-in), box-shadow var(--sf-duration-fast) var(--sf-ease-in), opacity var(--sf-duration-fast) var(--sf-ease-in), transform var(--sf-duration-fast) var(--sf-ease-in), filter var(--sf-duration-fast) var(--sf-ease-in)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-fast","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Fast-duration transition shorthand.","value":"color var(--sf-duration-fast) var(--sf-ease-out), background-color var(--sf-duration-fast) var(--sf-ease-out), border-color var(--sf-duration-fast) var(--sf-ease-out), box-shadow var(--sf-duration-fast) var(--sf-ease-out), opacity var(--sf-duration-fast) var(--sf-ease-out), transform var(--sf-duration-fast) var(--sf-ease-out), filter var(--sf-duration-fast) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-form-field","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand optimised for form fields: color and background at normal pace so label color shifts feel natural; border, shadow, and opacity at fast pace so focus rings appear crisply.","value":"color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), text-decoration-color var(--sf-duration-normal) var(--sf-ease-out), fill var(--sf-duration-normal) var(--sf-ease-out), stroke var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-fast) var(--sf-ease-out), box-shadow var(--sf-duration-fast) var(--sf-ease-out), opacity var(--sf-duration-fast) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-opacity","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for opacity.","value":"opacity var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-overlay","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for overlay fades (opacity + visibility).","value":"overlay var(--sf-duration-normal) allow-discrete, display var(--sf-duration-normal) allow-discrete","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-shadow","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for box-shadow.","value":"box-shadow var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-slow","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Slow-duration transition shorthand.","value":"color var(--sf-duration-slow) var(--sf-ease-in-out), background-color var(--sf-duration-slow) var(--sf-ease-in-out), border-color var(--sf-duration-slow) var(--sf-ease-in-out), box-shadow var(--sf-duration-slow) var(--sf-ease-in-out), opacity var(--sf-duration-slow) var(--sf-ease-in-out), transform var(--sf-duration-slow) var(--sf-ease-in-out), filter var(--sf-duration-slow) var(--sf-ease-in-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-transform","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for transform.","value":"transform var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-base","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Base stacking level (1). Establishes a stacking context without elevation.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-below","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index below stacking context base. For decorative pseudo-elements.","value":"-1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-dropdown","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for dropdown menus and select popups.","value":"1020","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-fixed","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for position: fixed elements.","value":"1010","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-modal","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for modal dialogs and their non-top-layer backdrop scrims. Sits above overlays and dropdowns. Default 1040.","value":"1040","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-overlay","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for modal / dialog backdrops.","value":"1030","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-raised","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Raised elevation (50). Cards, sticky headers.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-sticky","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for position: sticky elements (navbars, table headers).","value":"1000","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-toast","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for toast / snackbar notifications.","value":"1050","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-tooltip","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for tooltips and transient floating notifications. Highest named layer in the z-index stack. Default 1060.","value":"1060","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]}]`),Bs={_sync:Oh,tokens:Sh};var Xn=g('
'),Qn=g('
'),Lh=g(" "),Ph=g('optional'),$n=g('
'),Ih=g('
'),el=g('
',1),tl=g('
',1),Bh=g('knob'),Uh=g('advanced'),zh=g('
'),Ah=g('
'),Eh=g('
Classes & Variables
');function Rh(a,e){Qt(e,!0);const o=Ch.classes,n=Bs.tokens.filter(M=>M.tier==="PUBLIC"||M.tier==="PUBLIC-ADVANCED");let l=j(""),i=j("classes"),c=j(""),d=u(()=>()=>{const M=t(l).trim().toLowerCase();return M?o.filter(Q=>Q.name.toLowerCase().includes(M)||Q.selector?.toLowerCase().includes(M)||Q.description?.toLowerCase().includes(M)||Q.group?.toLowerCase().includes(M)):o}),p=u(()=>()=>{const M=t(l).trim().toLowerCase();return M?n.filter(Q=>Q.name.toLowerCase().includes(M)||Q.description?.toLowerCase().includes(M)||Q.group?.toLowerCase().includes(M)||Q.value?.toLowerCase().includes(M)):n});function m(M){const Q=new Map;for(const He of M){const ee=He.category||"Other",be=He.group||"";Q.has(ee)||Q.set(ee,new Map);const Ie=Q.get(ee);Ie.has(be)||Ie.set(be,[]),Ie.get(be).push(He)}return Q}let h=u(()=>m(t(d)())),v=u(()=>m(t(p)())),b=null;async function k(M){try{await navigator.clipboard.writeText(M),C(c,M,!0),b&&clearTimeout(b),b=setTimeout(()=>{t(c)===M&&C(c,""),b=null},1500)}catch{}}const _={layout:"text-violet-400",macro:"text-sky-400",state:"text-amber-400",accessibility:"text-emerald-400",motion:"text-pink-400",print:"text-slate-400",form:"text-orange-400",component:"text-indigo-400",theme:"text-teal-400"};var E=Eh(),B=s(E),U=r(s(B),2),S=r(U,2),z=s(S),L=s(z),P=r(z,2),w=s(P),R=r(B,2),D=s(R);{var A=M=>{var Q=Bt(),He=de(Q);{var ee=pe=>{var he=Xn(),Ne=s(he);O(()=>y(Ne,`No classes match "${t(l)??""}"`)),f(pe,he)},be=u(()=>t(d)().length===0),Ie=pe=>{var he=Bt(),Ne=de(he);re(Ne,17,()=>[...t(h).entries()],([at,et])=>at,(at,et)=>{var N=u(()=>Pa(t(et),2));let W=()=>t(N)[0],ye=()=>t(N)[1];var ge=tl(),Z=de(ge),we=s(Z),Ge=s(we),nt=r(Z,2);re(nt,17,()=>[...ye().entries()],([Oe,Be])=>Oe,(Oe,Be)=>{var te=u(()=>Pa(t(Be),2));let q=()=>t(te)[0],ke=()=>t(te)[1];var Ze=el(),ne=de(Ze);{var fe=De=>{var ze=Qn(),Le=s(ze);O(()=>y(Le,q())),f(De,ze)};I(ne,De=>{q()&&De(fe)})}var Pe=r(ne,2);re(Pe,21,ke,De=>De.name,(De,ze)=>{var Le=Ih(),qe=s(Le),je=s(qe),lt=s(je),dt=s(lt),Ot=r(lt,2);{var vt=St=>{var Et=Lh(),ct=s(Et);O(()=>{Ye(Et,1,`text-[8px] font-bold uppercase ${_[t(ze).kind]??"text-slate-500"}`),y(ct,t(ze).kind)}),f(St,Et)};I(Ot,St=>{t(ze).kind&&St(vt)})}var oe=r(Ot,2);{var xe=St=>{var Et=Ph();f(St,Et)};I(oe,St=>{t(ze).optional&&St(xe)})}var Ee=r(je,2);{var ot=St=>{var Et=$n(),ct=s(Et);O(()=>y(ct,t(ze).description)),f(St,Et)};I(Ee,St=>{t(ze).description&&St(ot)})}var ft=r(qe,2),_t=s(ft);{var xt=St=>{Fo(St,{class:"w-3 h-3 text-emerald-400"})},Nt=St=>{jr(St,{class:"w-3 h-3 text-slate-500"})};I(_t,St=>{t(c)===t(ze).selector?St(xt):St(Nt,-1)})}O(()=>y(dt,t(ze).selector)),x("click",ft,()=>k(t(ze).selector)),f(De,Le)}),f(Oe,Ze)}),O(()=>y(Ge,W())),f(at,ge)}),f(pe,he)};I(He,pe=>{t(be)?pe(ee):pe(Ie,-1)})}f(M,Q)},T=M=>{var Q=Bt(),He=de(Q);{var ee=pe=>{var he=Xn(),Ne=s(he);O(()=>y(Ne,`No tokens match "${t(l)??""}"`)),f(pe,he)},be=u(()=>t(p)().length===0),Ie=pe=>{var he=Bt(),Ne=de(he);re(Ne,17,()=>[...t(v).entries()],([at,et])=>at,(at,et)=>{var N=u(()=>Pa(t(et),2));let W=()=>t(N)[0],ye=()=>t(N)[1];var ge=tl(),Z=de(ge),we=s(Z),Ge=s(we),nt=r(Z,2);re(nt,17,()=>[...ye().entries()],([Oe,Be])=>Oe,(Oe,Be)=>{var te=u(()=>Pa(t(Be),2));let q=()=>t(te)[0],ke=()=>t(te)[1];var Ze=el(),ne=de(Ze);{var fe=De=>{var ze=Qn(),Le=s(ze);O(()=>y(Le,q())),f(De,ze)};I(ne,De=>{q()&&De(fe)})}var Pe=r(ne,2);re(Pe,21,ke,De=>De.name,(De,ze)=>{var Le=Ah(),qe=s(Le),je=s(qe),lt=s(je),dt=s(lt),Ot=r(lt,2);{var vt=ct=>{var Gt=Bh();f(ct,Gt)};I(Ot,ct=>{t(ze).role==="knob"&&ct(vt)})}var oe=r(Ot,2);{var xe=ct=>{var Gt=Uh();f(ct,Gt)};I(oe,ct=>{t(ze).tier==="PUBLIC-ADVANCED"&&ct(xe)})}var Ee=r(je,2);{var ot=ct=>{var Gt=zh(),ea=s(Gt);O(()=>y(ea,t(ze).value)),f(ct,Gt)};I(Ee,ct=>{t(ze).value&&ct(ot)})}var ft=r(Ee,2);{var _t=ct=>{var Gt=$n(),ea=s(Gt);O(()=>y(ea,t(ze).description)),f(ct,Gt)};I(ft,ct=>{t(ze).description&&ct(_t)})}var xt=r(qe,2),Nt=s(xt);{var St=ct=>{Fo(ct,{class:"w-3 h-3 text-emerald-400"})},Et=ct=>{jr(ct,{class:"w-3 h-3 text-slate-500"})};I(Nt,ct=>{t(c)===`var(${t(ze).name})`?ct(St):ct(Et,-1)})}O(()=>y(dt,t(ze).name)),x("click",xt,()=>k(`var(${t(ze).name})`)),f(De,Le)}),f(Oe,Ze)}),O(()=>y(Ge,W())),f(at,ge)}),f(pe,he)};I(He,pe=>{t(be)?pe(ee):pe(Ie,-1)})}f(M,Q)};I(D,M=>{t(i)==="classes"?M(A):M(T,-1)})}O((M,Q)=>{Ye(z,1,`flex-1 py-1.5 rounded text-[10px] font-bold transition-all cursor-pointer ${t(i)==="classes"?"bg-indigo-600/30 text-indigo-200 border border-indigo-500/30":"text-slate-500 hover:text-slate-300"}`),y(L,`CSS classes (${M??""})`),Ye(P,1,`flex-1 py-1.5 rounded text-[10px] font-bold transition-all cursor-pointer ${t(i)==="tokens"?"bg-indigo-600/30 text-indigo-200 border border-indigo-500/30":"text-slate-500 hover:text-slate-300"}`),y(w,`CSS vars (${Q??""})`)},[()=>t(d)().length,()=>t(p)().length]),ai(U,()=>t(l),M=>C(l,M)),x("click",z,()=>{C(i,"classes")}),x("click",P,()=>{C(i,"tokens")}),f(a,E),$t()}aa(["click"]);var Th=g('
'),Dh=g('
'),Mh=g('
'),Nh=g(''),Fh=g(' '),jh=g(''),Gh=g(''),Hh=g('
');function Di(a,e){Qt(e,!0);let o=j(!1);function n(A){const T=A.name;if(T.includes("color")||T.includes("source")||T.includes("-bg")||T.includes("-border"))return"color";if(T.includes("font")||T.includes("family"))return"font";const M=A.syntax?.toLowerCase()??"";return M.includes("number")||M.includes("length")||M.includes("integer")?"number":"text"}let l=u(()=>e.overrideValue??e.token.value),i=u(()=>e.overrideValue!==void 0),c=u(()=>n(e.token)),d=u(()=>e.token.name.replace("--sf-",""));function p(A){return ja.value,bo(A)||bo(`var(${e.token.name})`)||A}let m=u(()=>t(c)==="color"?p(t(l)):"");var h=Hh(),v=s(h),b=r(v,2);{var k=A=>{var T=Th();O(()=>it(T,`background: ${t(m)}`)),f(A,T)},_=A=>{var T=Dh();f(A,T)};I(b,A=>{t(c)==="color"?A(k):A(_,-1)})}var E=r(b,2),B=s(E),U=s(B),S=r(B,2);{var z=A=>{var T=Mh(),M=s(T);O(()=>y(M,e.token.description)),f(A,T)};I(S,A=>{e.token.description&&A(z)})}var L=r(E,2);{var P=A=>{var T=Nh();O(()=>Xt(T,t(l))),co("blur",T,M=>{const Q=M.target.value.trim();Q&&Q!==e.token.value?e.onSet(Q):(!Q||Q===e.token.value)&&e.onReset(),C(o,!1)}),x("keydown",T,M=>{M.key==="Enter"&&M.currentTarget.blur(),M.key==="Escape"&&C(o,!1)}),f(A,T)},w=A=>{var T=jh(),M=s(T);{var Q=ee=>{var be=Fh(),Ie=s(be);O(()=>y(Ie,t(l))),f(ee,be)},He=ee=>{var be=lr();O(()=>y(be,t(l))),f(ee,be)};I(M,ee=>{t(i)?ee(Q):ee(He,-1)})}O(()=>Y(T,"title",t(l))),x("click",T,()=>{C(o,!0)}),f(A,T)};I(L,A=>{t(o)?A(P):A(w,-1)})}var R=r(L,2);{var D=A=>{var T=Gh();x("click",T,function(...M){e.onReset?.apply(this,M)}),f(A,T)};I(R,A=>{t(i)&&A(D)})}O(()=>{Ye(h,1,`flex items-center gap-2 px-3 py-1.5 rounded-lg transition-colors group ${t(i)?"bg-indigo-500/8 border border-indigo-500/15":"hover:bg-white/4"}`),Ye(v,1,`w-1.5 h-1.5 rounded-full shrink-0 ${t(i)?"bg-indigo-500":"bg-transparent"}`),Y(B,"title",e.token.name),y(U,t(d))}),f(a,h),$t()}aa(["keydown","click"]);var qh=g(' '),Vh=g('

No tokens found

'),Kh=g('

'),Wh=g('
'),Yh=g('
');function Zh(a,e){Qt(e,!0);let o=j(""),n=u(()=>()=>{const U=e.patterns??[e.domain];return e.tokens.filter(S=>U.some(z=>S.name.includes(z))&&S.tier!=="INTERNAL")}),l=u(()=>()=>{if(!t(o))return t(n)();const U=t(o).toLowerCase();return t(n)().filter(S=>S.name.toLowerCase().includes(U)||S.description?.toLowerCase().includes(U))}),i=u(()=>t(l)().filter(U=>U.name in e.overrides).length);var c=Yh(),d=s(c),p=s(d),m=s(p),h=r(p,2);{var v=U=>{var S=qh(),z=s(S);O(()=>y(z,`${t(i)??""} modified`)),f(U,S)};I(h,U=>{t(i)>0&&U(v)})}var b=r(d,2),k=r(b,2);{var _=U=>{var S=Vh();f(U,S)},E=u(()=>t(l)().length===0),B=U=>{var S=Wh(),z=s(S);re(z,17,()=>t(l)().slice(0,60),R=>R.name,(R,D)=>{Di(R,{get token(){return t(D)},get overrideValue(){return e.overrides[t(D).name]},onSet:A=>e.onSet(t(D).name,A),onReset:()=>e.onReset(t(D).name)})});var L=r(z,2);{var P=R=>{var D=Kh(),A=s(D);O(T=>y(A,`${T??""} more — refine your search`),[()=>t(l)().length-60]),f(R,D)},w=u(()=>t(l)().length>60);I(L,R=>{t(w)&&R(P)})}f(U,S)};I(k,U=>{t(E)?U(_):U(B,-1)})}O(()=>{y(m,`${e.domain??""} tokens`),Y(b,"placeholder",`Search ${e.domain} tokens…`),Xt(b,t(o))}),x("input",b,U=>{C(o,U.target.value,!0)}),f(a,c),$t()}aa(["input"]);var al=g('
'),Jh=g('
'),Xh=g('
'),Qh=g('
'),$h=g('
'),eg=g('
'),tg=g('
'),ag=g('
');function og(a,e){Qt(e,!0);const o={PUBLIC:0,"PUBLIC-ADVANCED":1,INTERNAL:2};let n=j(""),l=j(!1),i=j(!1),c=u(()=>e.tokens.filter(Z=>e.patterns.some(we=>Z.name.includes(we))).sort((Z,we)=>{const Ge=o[Z.tier??"INTERNAL"]??2,nt=o[we.tier??"INTERNAL"]??2;return Ge!==nt?Ge-nt:Z.name.localeCompare(we.name)})),d=u(()=>()=>{let Z=t(c);if(t(l)||(Z=Z.filter(we=>we.tier!=="INTERNAL")),t(i)&&(Z=Z.filter(we=>we.name in e.overrides)),t(n)){const we=t(n).toLowerCase();Z=Z.filter(Ge=>Ge.name.toLowerCase().includes(we)||Ge.description?.toLowerCase().includes(we))}return Z}),p=u(()=>t(c).filter(Z=>Z.name in e.overrides).length),m=u(()=>t(c).filter(Z=>Z.tier==="PUBLIC").length),h=u(()=>t(c).filter(Z=>Z.tier==="PUBLIC-ADVANCED").length),v=u(()=>t(c).filter(Z=>Z.tier==="INTERNAL").length);var b=ag(),k=s(b),_=s(k),E=r(_,2),B=s(E),U=s(B),S=s(U);{var z=Z=>{var we=al();f(Z,we)};I(S,Z=>{t(i)&&Z(z)})}var L=r(U),P=r(B,2),w=s(P),R=s(w);{var D=Z=>{var we=al();f(Z,we)};I(R,Z=>{t(l)&&Z(D)})}var A=r(w),T=r(P,2),M=s(T),Q=r(E,2),He=s(Q),ee=r(s(He),2),be=s(ee),Ie=r(He,2),pe=r(s(Ie),2),he=s(pe),Ne=r(Ie,2);{var at=Z=>{var we=Jh(),Ge=r(s(we),2),nt=s(Ge);O(()=>y(nt,`Internal (${t(v)??""})`)),f(Z,we)};I(Ne,Z=>{t(l)&&Z(at)})}var et=r(k,4),N=s(et);{var W=Z=>{var we=Xh(),Ge=s(we);O(()=>y(Ge,t(i)?"No modified tokens in this domain":"No tokens found")),f(Z,we)},ye=u(()=>t(d)().length===0),ge=Z=>{var we=tg();re(we,21,()=>t(d)(),Ge=>Ge.name,(Ge,nt)=>{var Oe=eg(),Be=s(Oe);{var te=ne=>{var fe=Qh();f(ne,fe)};I(Be,ne=>{t(nt).tier==="PUBLIC-ADVANCED"&&ne(te)})}var q=r(Be,2);{var ke=ne=>{var fe=$h();f(ne,fe)};I(q,ne=>{t(nt).tier==="INTERNAL"&&ne(ke)})}var Ze=r(q,2);Di(Ze,{get token(){return t(nt)},get overrideValue(){return e.overrides[t(nt).name]},onSet:ne=>e.onSet(t(nt).name,ne),onReset:()=>e.onReset(t(nt).name)}),f(Ge,Oe)}),f(Z,we)};I(N,Z=>{t(ye)?Z(W):Z(ge,-1)})}O(Z=>{Xt(_,t(n)),Ye(B,1,`flex items-center gap-1 text-[9px] font-bold transition-colors cursor-pointer ${t(i)?"text-indigo-400":"text-slate-600 hover:text-slate-400"}`),Ye(U,1,`w-2.5 h-2.5 rounded border flex items-center justify-center transition-colors ${t(i)?"bg-indigo-600 border-indigo-500":"border-white/20"}`),y(L,` Modified only ${t(p)>0?`(${t(p)})`:""}`),Y(P,"aria-expanded",t(l)),Ye(P,1,`flex items-center gap-1 text-[9px] font-bold transition-colors cursor-pointer ${t(l)?"text-amber-400":"text-slate-600 hover:text-slate-400"}`),Ye(w,1,`w-2.5 h-2.5 rounded border flex items-center justify-center transition-colors ${t(l)?"bg-amber-600 border-amber-500":"border-white/20"}`),y(A,` Internal (${t(v)??""})`),y(M,`${Z??""}/${t(c).length??""}`),y(be,`Public (${t(m)??""})`),y(he,`Advanced (${t(h)??""})`)},[()=>t(d)().length]),x("input",_,Z=>{C(n,Z.target.value,!0)}),x("click",B,()=>{C(i,!t(i))}),x("click",P,()=>{C(l,!t(l))}),f(a,b),$t()}aa(["input","click"]);var ol=g(''),sg=g('
'),rg=g('
Waiting for live preview…
'),ng=g(""),lg=g('

Pick an editable brand/status (base) color as the foreground to enable auto-fix.

'),ig=g('

'),cg=g('
'),dg=g('

'),fg=g('
Foreground
Background
Aa Bb Cc
Auto-fix to pass
',1),ug=g(' '),pg=g(''),mg=g('·'),vg=g(' '),hg=g('

Foreground (rows) × background (cols). Click a cell to load it above.

',1),gg=g('
Contrast checker

Live WCAG ratios computed from the actual rendered preview colors — including derived steps and your overrides.

');function bg(a,e){Qt(e,!0);const o=[{label:"Text",expr:"var(--sf-color-text)"},{label:"Text secondary",expr:"var(--sf-color-text--secondary)"},{label:"Text muted",expr:"var(--sf-color-text--muted)"},{label:"White",expr:"#ffffff"},{label:"Black",expr:"#000000"}],n=[{label:"Surface",expr:"var(--sf-color-surface)"},{label:"Bg",expr:"var(--sf-color-bg)"},{label:"Border",expr:"var(--sf-color-border)"}],l=[{key:"primary",srcLight:"--sf-color-primary-source-light",defLight:"oklch(0.47 0.27 264)",srcDark:"--sf-color-primary-source-dark",defDark:"oklch(0.715 0.243 264)"},{key:"secondary",srcLight:"--sf-color-secondary-source-light",defLight:"oklch(0.22 0.04 264)",srcDark:"--sf-color-secondary-source-dark",defDark:"oklch(0.84 0.036 264)"},{key:"tertiary",srcLight:"--sf-color-tertiary-source-light",defLight:"oklch(0.42 0.22 295)",srcDark:"--sf-color-tertiary-source-dark",defDark:"oklch(0.74 0.198 295)"},{key:"action",srcLight:"--sf-color-action-source-light",defLight:"oklch(0.50 0.22 235)",srcDark:"--sf-color-action-source-dark",defDark:"oklch(0.70 0.198 235)"},{key:"neutral",srcLight:"--sf-color-neutral-source-light",defLight:"oklch(0.52 0.025 260)",srcDark:"--sf-color-neutral-source-dark",defDark:"oklch(0.69 0.0225 260)"},{key:"success",srcLight:"--sf-color-success-source-light",defLight:"oklch(0.50 0.16 145)",srcDark:"--sf-color-success-source-dark",defDark:"oklch(0.70 0.144 145)"},{key:"warning",srcLight:"--sf-color-warning-source-light",defLight:"oklch(0.75 0.17 80)",srcDark:"--sf-color-warning-source-dark",defDark:"oklch(0.65 0.153 80)"},{key:"danger",srcLight:"--sf-color-danger-source-light",defLight:"oklch(0.48 0.22 12)",srcDark:"--sf-color-danger-source-dark",defDark:"oklch(0.71 0.198 12)"},{key:"info",srcLight:"--sf-color-info-source-light",defLight:"oklch(0.48 0.18 235)",srcDark:"--sf-color-info-source-dark",defDark:"oklch(0.71 0.162 235)"}],i=l.flatMap(W=>[{label:`${W.key} (base)`,expr:`var(--sf-color-${W.key})`,editKey:W.key},{label:`${W.key}-100`,expr:`var(--sf-color-${W.key}-100)`},{label:`${W.key}-600`,expr:`var(--sf-color-${W.key}-600)`},{label:`${W.key}-900`,expr:`var(--sf-color-${W.key}-900)`}]),c=[...o,...n,...i],d=Object.fromEntries(l.map(W=>[W.key,W])),p=[{label:"text",expr:"var(--sf-color-text)"},{label:"white",expr:"#ffffff"},{label:"black",expr:"#000000"},{label:"primary",expr:"var(--sf-color-primary)",editKey:"primary"}],m=[{label:"surface",expr:"var(--sf-color-surface)"},{label:"primary",expr:"var(--sf-color-primary)"},{label:"neutral-100",expr:"var(--sf-color-neutral-100)"},{label:"success",expr:"var(--sf-color-success)"},{label:"warning",expr:"var(--sf-color-warning)"},{label:"danger",expr:"var(--sf-color-danger)"}];let h=j("White"),v=j("primary (base)"),b=j("AA"),k=u(()=>c.find(W=>W.label===t(h))??c[0]),_=u(()=>c.find(W=>W.label===t(v))??c[0]);function E(W,ye){ja.value;const ge=Cs(W),Z=Cs(ye);return!ge||!Z?null:qs(Uo(...ge),Uo(...Z))}function B(W){return W>=7?{tag:"AAA",cls:"bg-emerald-500/25 text-emerald-200"}:W>=4.5?{tag:"AA",cls:"bg-emerald-500/15 text-emerald-300"}:W>=3?{tag:"AA-L",cls:"bg-amber-500/20 text-amber-300"}:{tag:"Fail",cls:"bg-rose-500/20 text-rose-300"}}let U=u(()=>E(t(k).expr,t(_).expr));function S(){const W=t(h);C(h,t(v),!0),C(v,W,!0)}function z(W,ye){const ge=c.find(we=>we.expr===W),Z=c.find(we=>we.expr===ye);ge&&C(h,ge.label,!0),Z&&C(v,Z.label,!0)}function L(W){return ja.value,bo(W)||W}let P=j(!1),w=j(!1),R=j(null);function D(){C(R,null);const W=t(k).editKey?d[t(k).editKey]:null;if(!W)return;const ye=jn()==="dark",ge=ye?W.srcDark:W.srcLight,Z=ye?W.defDark:W.defLight,we=e.overrides[ge]??Z,{c:Ge,h:nt,l:Oe,valid:Be}=Vs(we);if(!Be)return;const te=Cs(t(_).expr);if(!te)return;const q=Uo(...te),ke=t(b)==="AAA"?7:4.5;let Ze=null;for(let ze=0;ze<=1.0001;ze+=.005){const[Le,qe,je]=Gn(ze,Ge,nt);qs(Uo(Le,qe,je),q)>=ke&&(Ze===null||Math.abs(ze-Oe){if(!t(P)){C(R,null);return}ja.value,t(h),t(v),t(b),t(k).editKey&&t(U)!==null&&t(U)<(t(b)==="AAA"?7:4.5)?D():C(R,null)});var T=gg(),M=r(s(T),2),Q=s(M),He=r(s(Q),2),ee=s(He),be=r(Q,2);{var Ie=W=>{var ye=fg(),ge=de(ye),Z=s(ge),we=r(s(Z),2);re(we,21,()=>c,oe=>oe.label,(oe,xe)=>{var Ee=ol(),ot=s(Ee),ft={};O(()=>{y(ot,t(xe).label),ft!==(ft=t(xe).label)&&(Ee.value=(Ee.__value=t(xe).label)??"")}),f(oe,Ee)});var Ge=r(Z,2),nt=r(Ge,2),Oe=r(s(nt),2);re(Oe,21,()=>c,oe=>oe.label,(oe,xe)=>{var Ee=ol(),ot=s(Ee),ft={};O(()=>{y(ot,t(xe).label),ft!==(ft=t(xe).label)&&(Ee.value=(Ee.__value=t(xe).label)??"")}),f(oe,Ee)});var Be=r(ge,2),te=s(Be),q=s(te),ke=r(te,2);{var Ze=oe=>{const xe=u(()=>B(t(U)));var Ee=sg(),ot=s(Ee),ft=s(ot),_t=r(ot,2),xt=s(_t),Nt=r(_t,4),St=s(Nt),Et=s(St),ct=r(St,2),Gt=s(ct),ea=r(ct,2),ia=s(ea),Xe=r(ea,2),ut=s(Xe);O(Lt=>{y(ft,`${Lt??""}:1`),Ye(_t,1,`text-[10px] font-bold px-2 py-0.5 rounded ${t(xe).cls}`),y(xt,t(xe).tag),Ye(St,1,lo(t(U)>=4.5?"text-emerald-300":"text-rose-300")),y(Et,`${t(U)>=4.5?"✓":"✗"} AA normal`),Ye(ct,1,lo(t(U)>=3?"text-emerald-300":"text-rose-300")),y(Gt,`${t(U)>=3?"✓":"✗"} AA large`),Ye(ea,1,lo(t(U)>=7?"text-emerald-300":"text-rose-300")),y(ia,`${t(U)>=7?"✓":"✗"} AAA normal`),Ye(Xe,1,lo(t(U)>=4.5?"text-emerald-300":"text-rose-300")),y(ut,`${t(U)>=4.5?"✓":"✗"} AAA large`)},[()=>t(U).toFixed(2)]),f(oe,Ee)},ne=oe=>{var xe=rg();f(oe,xe)};I(ke,oe=>{t(U)!==null?oe(Ze):oe(ne,-1)})}var fe=r(Be,2),Pe=s(fe),De=s(Pe),ze=r(s(De)),Le=s(ze),qe=r(De,2);re(qe,20,()=>["AA","AAA"],oe=>oe,(oe,xe)=>{var Ee=ng(),ot=s(Ee);O(()=>{Ye(Ee,1,`px-2 py-0.5 rounded-md text-[10px] font-bold cursor-pointer ${t(b)===xe?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(ot,xe)}),x("click",Ee,()=>{C(b,xe,!0)}),f(oe,Ee)});var je=r(Pe,2);{var lt=oe=>{var xe=lg();f(oe,xe)},dt=oe=>{var xe=ig(),Ee=s(xe);O(()=>y(Ee,`Already passes ${t(b)??""}. 🎉`)),f(oe,xe)},Ot=oe=>{var xe=cg(),Ee=s(xe),ot=r(Ee,2),ft=s(ot),_t=s(ft),xt=r(ft,2),Nt=s(xt),St=r(ot,2);O((Et,ct)=>{it(Ee,Et),y(_t,t(R).value),y(Nt,`→ ${ct??""}:1 (${t(b)??""} ✓)`)},[()=>`background:${L(t(R).value)}`,()=>t(R).ratio.toFixed(2)]),x("click",St,A),f(oe,xe)},vt=oe=>{var xe=dg(),Ee=s(xe);O(()=>y(Ee,`No lightness of this hue reaches ${t(b)??""} on this background — try a different background or hue.`)),f(oe,xe)};I(je,oe=>{t(k).editKey?t(U)!==null&&t(U)>=(t(b)==="AAA"?7:4.5)?oe(dt,1):t(R)?oe(Ot,2):oe(vt,-1):oe(lt)})}O((oe,xe,Ee)=>{it(te,oe),it(q,xe),y(Le,`(for ${Ee??""} mode)`)},[()=>`background:${L(t(_).expr)}`,()=>`color:${L(t(k).expr)}`,()=>jn()]),Sn(we,()=>t(h),oe=>C(h,oe)),x("click",Ge,S),Sn(Oe,()=>t(v),oe=>C(v,oe)),f(W,ye)};I(be,W=>{t(P)&&W(Ie)})}var pe=r(M,4),he=s(pe),Ne=r(s(he),2),at=s(Ne),et=r(he,2);{var N=W=>{var ye=hg(),ge=r(de(ye),2),Z=s(ge),we=s(Z),Ge=s(we),nt=r(s(Ge));re(nt,17,()=>m,Be=>Be.label,(Be,te)=>{var q=ug(),ke=s(q);O(()=>y(ke,t(te).label)),f(Be,q)});var Oe=r(we);re(Oe,21,()=>p,Be=>Be.label,(Be,te)=>{var q=vg(),ke=s(q),Ze=s(ke),ne=r(ke);re(ne,17,()=>m,fe=>fe.label,(fe,Pe)=>{const De=u(()=>E(t(te).expr,t(Pe).expr));var ze=Bt(),Le=de(ze);{var qe=lt=>{const dt=u(()=>B(t(De)));var Ot=pg(),vt=s(Ot),oe=s(vt);O((xe,Ee)=>{Y(vt,"title",xe),Ye(vt,1,`w-full px-1.5 py-1 rounded font-mono font-bold cursor-pointer ${t(dt).cls}`),y(oe,Ee)},[()=>`${t(te).label} on ${t(Pe).label} — ${t(De).toFixed(2)}:1`,()=>t(De).toFixed(1)]),x("click",vt,()=>z(t(te).expr,t(Pe).expr)),f(lt,Ot)},je=lt=>{var dt=mg();f(lt,dt)};I(Le,lt=>{t(De)!==null?lt(qe):lt(je,-1)})}f(fe,ze)}),O(()=>y(Ze,t(te).label)),f(Be,q)}),f(W,ye)};I(et,W=>{t(w)&&W(N)})}O(()=>{Y(Q,"aria-expanded",t(P)),y(ee,t(P)?"▲":"▼"),Y(he,"aria-expanded",t(w)),y(at,t(w)?"▲":"▼")}),x("click",Q,()=>{C(P,!t(P))}),x("click",he,()=>{C(w,!t(w))}),f(a,T),$t()}aa(["click"]);var yg=g('
'),xg=g(' '),kg=g('
');function Mi(a,e){Qt(e,!0);const o=new Set(["home","themes","wcag","setup","cheatsheet"]);let n=j("controls");ha(()=>{e.domain,C(n,"controls")});let l=u(()=>Ei[e.domain]??[e.domain]),i=u(()=>e.tokens.filter(v=>t(l).some(b=>v.name.includes(b))&&v.name in e.overrides).length);var c=Bt(),d=de(c);{var p=v=>{var b=Bt(),k=de(b);{var _=z=>{Su(z,{get overrides(){return e.overrides},get onSelect(){return e.onSelectDomain},get onApplyTheme(){return e.onApplyTheme},get onResetAll(){return e.onResetAll}})},E=z=>{bh(z,{get overrides(){return e.overrides},get onApplyTheme(){return e.onApplyTheme},get onResetAll(){return e.onResetAll}})},B=z=>{bg(z,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onBulkChange(){return e.onBulkChange}})},U=z=>{wh(z,{get overrides(){return e.overrides}})},S=z=>{Rh(z,{})};I(k,z=>{e.domain==="home"?z(_):e.domain==="themes"?z(E,1):e.domain==="wcag"?z(B,2):e.domain==="setup"?z(U,3):e.domain==="cheatsheet"&&z(S,4)})}f(v,b)},m=u(()=>o.has(e.domain)),h=v=>{var b=kg(),k=s(b),_=s(k);{var E=D=>{var A=yg(),T=s(A);{var M=N=>{Pp(N,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange},get onSelectDomain(){return e.onSelectDomain}})},Q=N=>{lm(N,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},He=N=>{vm(N,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},ee=N=>{Um(N,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},be=N=>{Jm(N,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},Ie=N=>{sv(N,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},pe=N=>{wv(N,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},he=N=>{zv(N,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})},Ne=N=>{Gv(N,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})},at=N=>{ch(N,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},et=N=>{Zh(N,{get domain(){return e.domain},get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})};I(T,N=>{e.domain==="colors"?N(M):e.domain==="typography"?N(Q,1):e.domain==="spacing"?N(He,2):e.domain==="layout"?N(ee,3):e.domain==="borders"?N(be,4):e.domain==="shadows"?N(Ie,5):e.domain==="motion"?N(pe,6):e.domain==="effects"?N(he,7):e.domain==="macros"?N(Ne,8):e.domain==="misc"?N(at,9):N(et,-1)})}f(D,A)},B=D=>{og(D,{get tokens(){return e.tokens},get overrides(){return e.overrides},get patterns(){return t(l)},get onSet(){return e.onSet},get onReset(){return e.onReset}})};I(_,D=>{t(n)==="controls"?D(E):D(B,-1)})}var U=r(k,2),S=s(U),z=s(S);Wd(z,{class:"w-3 h-3"});var L=r(S,4),P=s(L);Nd(P,{class:"w-3 h-3"});var w=r(P,2);{var R=D=>{var A=xg(),T=s(A);O(()=>y(T,t(i))),f(D,A)};I(w,D=>{t(i)>0&&D(R)})}O(()=>{Ye(S,1,`flex-1 flex items-center justify-center gap-1.5 py-2 text-[10px] font-bold transition-all cursor-pointer ${t(n)==="controls"?"text-indigo-300 bg-indigo-600/10 border-t-2 border-t-indigo-500 -mt-px":"text-slate-500 hover:text-slate-300"}`),Ye(L,1,`flex-1 flex items-center justify-center gap-1.5 py-2 text-[10px] font-bold transition-all cursor-pointer ${t(n)==="tokens"?"text-indigo-300 bg-indigo-600/10 border-t-2 border-t-indigo-500 -mt-px":"text-slate-500 hover:text-slate-300"}`)}),x("click",S,()=>{C(n,"controls")}),x("click",L,()=>{C(n,"tokens")}),f(v,b)};I(d,v=>{t(m)?v(p):v(h,-1)})}f(a,c),$t()}aa(["click"]);var wg=g('
'),_g=g('
Type to search tokens by name or description
'),Cg=g('overridden'),Og=g('
'),Sg=g(''),Lg=g('
↑↓ navigate open panel Esc close
'),Pg=g('');function Ni(a,e){Qt(e,!0);let o=j(""),n=j(0),l=j(null);const i={colors:"Colors",typography:"Typography",spacing:"Spacing",layout:"Layout",borders:"Borders",shadows:"Shadows",motion:"Motion",effects:"Effects",macros:"Macros",misc:"Misc"};let c=u(()=>(()=>{const w=t(o).trim().toLowerCase();if(!w)return[];const R=[];for(const D of e.tokens){if(D.tier==="INTERNAL")continue;const A=D.name.toLowerCase().includes(w),T=D.description?.toLowerCase().includes(w)??!1;if((A||T)&&(R.push({token:D,domain:fn(D.name),overridden:D.name in e.overrides}),R.length>=40))break}return R})());ha(()=>{t(o),C(n,0)}),ha(()=>{t(l)&&t(l).focus()});function d(w){e.onNavigate(w),e.onClose()}function p(w){if(w.key==="Escape"){w.preventDefault(),e.onClose();return}if(t(c).length===0&&(w.key==="ArrowDown"||w.key==="ArrowUp")){w.preventDefault(),C(n,0);return}if(w.key==="ArrowDown"){w.preventDefault(),C(n,Math.min(t(n)+1,t(c).length-1),!0);return}if(w.key==="ArrowUp"){w.preventDefault(),C(n,Math.max(t(n)-1,0),!0);return}w.key==="Enter"&&t(c)[t(n)]&&(w.preventDefault(),d(t(c)[t(n)].domain))}var m=Pg(),h=s(m),v=s(h),b=r(s(v),2);Do(b,w=>C(l,w),()=>t(l));var k=r(v,2),_=s(k);{var E=w=>{var R=wg(),D=s(R);O(()=>y(D,`No tokens matching "${t(o)??""}"`)),f(w,R)},B=u(()=>t(o).trim()&&t(c).length===0),U=w=>{var R=_g();f(w,R)},S=u(()=>!t(o).trim()),z=w=>{var R=Bt(),D=de(R);re(D,19,()=>t(c),A=>A.token.name,(A,T,M)=>{var Q=Sg(),He=s(Q),ee=s(He),be=s(ee),Ie=s(be),pe=r(be,2);{var he=Z=>{var we=Cg();f(Z,we)};I(pe,Z=>{t(T).overridden&&Z(he)})}var Ne=r(ee,2);{var at=Z=>{var we=Og(),Ge=s(we);O(()=>y(Ge,t(T).token.description)),f(Z,we)};I(Ne,Z=>{t(T).token.description&&Z(at)})}var et=r(He,2),N=s(et),W=s(N),ye=r(N,2),ge=s(ye);O(()=>{Ye(Q,1,`w-full flex items-center gap-3 px-4 py-2.5 text-left transition-colors cursor-pointer ${t(n)===t(M)?"bg-indigo-500/15":"hover:bg-white/4"}`),y(Ie,t(T).token.name),y(W,t(T).overridden?e.overrides[t(T).token.name]:t(T).token.value),y(ge,i[t(T).domain]??t(T).domain)}),co("mouseenter",Q,()=>{C(n,t(M),!0)}),x("click",Q,()=>d(t(T).domain)),f(A,Q)}),f(w,R)};I(_,w=>{t(B)?w(E):t(S)?w(U,1):w(z,-1)})}var L=r(k,2);{var P=w=>{var R=Lg();f(w,R)};I(L,w=>{t(c).length>0&&w(P)})}x("mousedown",m,w=>{w.target===w.currentTarget&&e.onClose()}),x("keydown",b,p),ai(b,()=>t(o),w=>C(o,w)),f(a,m),$t()}aa(["mousedown","keydown","click"]);var Ig=g('
');function Bg(a,e){Qt(e,!0);const o=Bs.tokens??Bs,n={home:"Home",colors:"Colors",typography:"Typography",spacing:"Spacing",layout:"Layout",borders:"Borders",shadows:"Shadows",motion:"Motion",effects:"Effects",macros:"Macros",misc:"Misc",themes:"Themes",wcag:"WCAG",setup:"Install",cheatsheet:"Classes"};function l(te){const q={};for(const ke of Object.keys(te)){const Ze=fn(ke);q[Ze]=(q[Ze]??0)+1}return q}let i=j(da(Bi())),c=j(da([])),d=j(da([])),p=j("home"),m=j(!1),h=j("light"),v=j("fluid"),b=j("normal"),k=j("marketing"),_=u(()=>Object.keys(t(i)).length),E=u(()=>l(t(i))),B=u(()=>t(c).length>0),U=u(()=>t(d).length>0),S=j(da(ao(()=>JSON.stringify(t(i))))),z=j("idle"),L=u(()=>JSON.stringify(t(i))!==t(S)),P=null;ha(()=>{Ui(t(i))});function w(te){const q=t(i),ke=typeof te=="function"?te(q):te;JSON.stringify(q)!==JSON.stringify(ke)&&(C(c,[...t(c).slice(-49),q],!0),C(d,[],!0),t(z)==="saved"&&C(z,"idle")),C(i,ke,!0)}async function R(){if(!t(L)||t(z)==="saving")return;const te=JSON.stringify(t(i));C(z,"saving");try{await zi(t(i)),JSON.stringify(t(i))===te?(C(S,te,!0),C(z,"saved"),P&&clearTimeout(P),P=setTimeout(()=>{t(z)==="saved"&&C(z,"idle"),P=null},2e3)):C(z,"idle")}catch(q){console.warn("slashed: save failed",q),C(z,"idle")}}function D(te,q){w(ke=>({...ke,[te]:q}))}function A(te){w(q=>{const ke={...q};return delete ke[te],ke})}function T(te){w(q=>{const ke={...q};for(const[Ze,ne]of Object.entries(te))ne===null?delete ke[Ze]:ke[Ze]=ne;return ke})}function M(te){te.id==="default"?w({}):T(te.overrides)}function Q(){w({})}function He(){if(t(c).length===0)return;const te=t(c)[t(c).length-1],q=t(i);C(c,t(c).slice(0,-1),!0),C(d,[q,...t(d)],!0),C(i,te,!0)}function ee(){if(t(d).length===0)return;const te=t(d)[0],q=t(i);C(d,t(d).slice(1),!0),C(c,[...t(c),q],!0),C(i,te,!0)}function be(){const te=document.createElement("input");te.type="file",te.accept=".css,.json",te.onchange=q=>{const ke=q.target.files?.[0];if(!ke)return;const Ze=new FileReader;Ze.onload=ne=>{const fe=ne.target?.result;if(fe)if(ke.name.endsWith(".json"))try{const Pe=JSON.parse(fe);if(Pe!==null&&typeof Pe=="object"&&!Array.isArray(Pe)){const De=Object.fromEntries(Object.entries(Pe).filter(([,ze])=>typeof ze=="string"));w(De)}}catch{}else{const Pe={},De=/(--sf-[\w-]+)\s*:\s*([^;]+);/g;let ze;for(;(ze=De.exec(fe))!==null;)Pe[ze[1].trim()]=ze[2].trim();Object.keys(Pe).length>0&&w(Le=>({...Le,...Pe}))}},Ze.readAsText(ke)},te.click()}function Ie(){const te=Mo(t(i),{mode:"layer",banner:!0}),q=new Blob([te],{type:"text/css"}),ke=URL.createObjectURL(q),Ze=document.createElement("a");Ze.href=ke,Ze.download="slashed-overrides.css",Ze.click(),URL.revokeObjectURL(ke)}oi(()=>{const te=q=>{(q.ctrlKey||q.metaKey)&&!q.shiftKey&&q.key==="z"&&(q.preventDefault(),He()),(q.ctrlKey||q.metaKey)&&(q.shiftKey&&q.key==="z"||q.key==="y")&&(q.preventDefault(),ee()),(q.ctrlKey||q.metaKey)&&!q.shiftKey&&q.key.toLowerCase()==="s"&&(q.preventDefault(),R()),(q.ctrlKey||q.metaKey)&&!q.repeat&&q.key.toLowerCase()==="k"&&(q.preventDefault(),C(m,!t(m)))};return window.addEventListener("keydown",te),()=>{window.removeEventListener("keydown",te),P&&clearTimeout(P)}});var pe=Ig(),he=s(pe);af(he,{get overridesCount(){return t(_)},get canUndo(){return t(B)},get canRedo(){return t(U)},get hasPendingChanges(){return t(L)},get saveState(){return t(z)},onUndo:He,onRedo:ee,onResetAll:Q,onImport:be,onExport:Ie,onSave:R});var Ne=r(he,2),at=s(Ne);gi(at,{get activeId(){return t(p)},onSelect:te=>{C(p,te,!0)},get overridesByDomain(){return t(E)}});var et=r(at,2),N=s(et),W=s(N),ye=s(W),ge=r(N,2),Z=s(ge);Mi(Z,{get domain(){return t(p)},get tokens(){return o},get overrides(){return t(i)},onSet:D,onReset:A,onBulkChange:T,onApplyTheme:M,onSelectDomain:te=>{C(p,te,!0)},onResetAll:Q});var we=r(et,2),Ge=s(we);iu(Ge,{get overrides(){return t(i)},get previewTheme(){return t(h)},get previewWidth(){return t(v)},get previewMotion(){return t(b)},get previewTemplate(){return t(k)},onThemeChange:te=>{C(h,te,!0)},onWidthChange:te=>{C(v,te,!0)},onMotionChange:te=>{C(b,te,!0)},onTemplateChange:te=>{C(k,te,!0)}});var nt=r(Ne,2);{let te=u(()=>n[t(p)]??t(p));nf(nt,{get overridesCount(){return t(_)},get domain(){return t(te)}})}var Oe=r(nt,2);{var Be=te=>{Ni(te,{get tokens(){return o},get overrides(){return t(i)},onNavigate:q=>{C(p,q,!0)},onClose:()=>{C(m,!1)}})};I(Oe,te=>{t(m)&&te(Be)})}O(()=>y(ye,n[t(p)]??t(p))),f(a,pe),$t()}const Lr=document.getElementById("app")??document.getElementById("slashed-admin-app");Lr&&(Lr.innerHTML="",Xl(Bg,{target:Lr}));var Ug=g(''),zg=g(' '),Ag=g(''),Eg=g('
/
SLASHED
',1);function Rg(a,e){Qt(e,!0);const o=Bs.tokens??Bs,n="slashed-overlay/open",l="slashed-overlay/domain",i={home:"Home",colors:"Colors",typography:"Typography",spacing:"Spacing",layout:"Layout",borders:"Borders",shadows:"Shadows",motion:"Motion",effects:"Effects",macros:"Macros",misc:"Misc",themes:"Themes",wcag:"WCAG",setup:"Install",cheatsheet:"Classes"};function c(me){const Je={};for(const mt of Object.keys(me)){const Ut=fn(mt);Je[Ut]=(Je[Ut]??0)+1}return Je}function d(me,Je){try{const mt=localStorage.getItem(me);return mt===null?Je:mt!=="false"}catch{return Je}}function p(me,Je){try{return localStorage.getItem(me)??Je}catch{return Je}}let m=j(da(d(n,!0))),h=j(da(typeof window<"u"?window.matchMedia("(max-width: 768px)").matches:!1)),v=j(da(Bi())),b=j(da([])),k=j(da([])),_=j(da(p(l,"home"))),E=j(!1),B=j(!1),U=j(null),S=j(null);ha(()=>{t(B)&&rn().then(()=>t(U)?.focus())});let z=u(()=>Object.keys(t(v)).length),L=u(()=>c(t(v))),P=u(()=>t(b).length>0),w=u(()=>t(k).length>0);function R(me,Je){const mt=Object.keys(me);return mt.length!==Object.keys(Je).length?!1:mt.every(Ut=>me[Ut]===Je[Ut])}let D=j(da(ao(()=>({...t(v)})))),A=j("idle"),T=u(()=>!R(t(v),t(D))),M=null;function Q(){const me=document.getElementById("slashed-frontend-overlay");if(!me)return;const Je="var(--wp-admin--admin-bar--height, 32px)";me.style.position="fixed",me.style.right="0",me.style.zIndex="100000",me.style.pointerEvents="auto",t(m)?(me.style.top=Je,me.style.width=t(h)?"100vw":"420px",me.style.height=`calc(100vh - ${Je})`):(me.style.top=`calc(${Je} + 16px)`,me.style.width="40px",me.style.height="64px")}ha(()=>{Ui(t(v))}),ha(()=>{!t(h)&&t(m)?document.documentElement.classList.add("sf-panel-active"):document.documentElement.classList.remove("sf-panel-active")}),ha(()=>{Q()}),ha(()=>{try{localStorage.setItem(n,String(t(m)))}catch{}}),ha(()=>{try{localStorage.setItem(l,t(_))}catch{}});function He(){C(m,!t(m))}function ee(me){const Je=t(v),mt=typeof me=="function"?me(Je):me;R(Je,mt)||(C(b,[...t(b).slice(-49),Je],!0),C(k,[],!0),t(A)==="saved"&&C(A,"idle")),C(v,mt,!0)}async function be(){if(!t(T)||t(A)==="saving")return;const me={...t(v)};C(A,"saving");try{await zi(t(v)),R(t(v),me)?(C(D,me,!0),C(A,"saved"),M&&clearTimeout(M),M=setTimeout(()=>{t(A)==="saved"&&C(A,"idle"),M=null},2e3)):C(A,"idle")}catch(Je){console.warn("slashed: save failed",Je),C(A,"idle")}}function Ie(me,Je){ee(mt=>({...mt,[me]:Je}))}function pe(me){ee(Je=>{const mt={...Je};return delete mt[me],mt})}function he(me){ee(Je=>{const mt={...Je};for(const[Ut,Ue]of Object.entries(me))Ue===null?delete mt[Ut]:mt[Ut]=Ue;return mt})}function Ne(me){me.id==="default"?ee({}):he(me.overrides)}function at(){C(B,!0)}function et(){C(B,!1),ee({})}function N(){C(B,!1)}function W(){if(!t(b).length)return;const me=t(b)[t(b).length-1];C(k,[t(v),...t(k)],!0),C(b,t(b).slice(0,-1),!0),C(v,me,!0)}function ye(){if(!t(k).length)return;const me=t(k)[0];C(b,[...t(b),t(v)],!0),C(k,t(k).slice(1),!0),C(v,me,!0)}function ge(){const me=Mo(t(v),{mode:"layer",banner:!0}),Je=new Blob([me],{type:"text/css"}),mt=URL.createObjectURL(Je),Ut=document.createElement("a");Ut.href=mt,Ut.download="slashed-overrides.css",Ut.click(),URL.revokeObjectURL(mt)}function Z(){const me=document.createElement("input");me.type="file",me.accept=".css,.json",me.onchange=Je=>{const mt=Je.target.files?.[0];if(!mt)return;const Ut=new FileReader;Ut.onload=Ue=>{const Ae=Ue.target?.result;if(Ae)if(mt.name.endsWith(".json"))try{const Ve=JSON.parse(Ae);if(Ve!==null&&typeof Ve=="object"&&!Array.isArray(Ve)){const tt=Object.fromEntries(Object.entries(Ve).filter(([,Ct])=>typeof Ct=="string"));ee(tt)}}catch{}else{const Ve={},tt=/(--sf-[\w-]+)\s*:\s*([^;]+);/g;let Ct;for(;(Ct=tt.exec(Ae))!==null;)Ve[Ct[1].trim()]=Ct[2].trim();Object.keys(Ve).length&&ee(ta=>({...ta,...Ve}))}},Ut.readAsText(mt)},me.click()}oi(()=>{const me=document.createElement("style");me.id="sf-panel-push",me.textContent=["html { transition: padding-right 200ms ease-in-out; }","html.sf-panel-active { padding-right: 420px !important; overflow-x: clip; }"].join(` -`),document.head.appendChild(me);const Je=window.matchMedia("(max-width: 768px)"),mt=Ae=>{C(h,Ae.matches,!0)};Je.addEventListener("change",mt);const Ut=Ae=>{const Ve=Ae.key.toLowerCase();t(m)&&((Ae.ctrlKey||Ae.metaKey)&&!Ae.shiftKey&&Ve==="z"&&(Ae.preventDefault(),W()),(Ae.ctrlKey||Ae.metaKey)&&(Ae.shiftKey&&Ve==="z"||Ve==="y")&&(Ae.preventDefault(),ye()),(Ae.ctrlKey||Ae.metaKey)&&!Ae.repeat&&Ve==="k"&&(Ae.preventDefault(),C(E,!t(E))),(Ae.ctrlKey||Ae.metaKey)&&!Ae.shiftKey&&Ve==="s"&&(Ae.preventDefault(),be()))},Ue=()=>He();return window.addEventListener("keydown",Ut),document.addEventListener("slashed:toggle-overlay",Ue),()=>{me.remove(),document.documentElement.classList.remove("sf-panel-active"),Je.removeEventListener("change",mt),window.removeEventListener("keydown",Ut),document.removeEventListener("slashed:toggle-overlay",Ue),M&&clearTimeout(M)}});var we=Eg(),Ge=de(we);{var nt=me=>{var Je=Ug(),mt=r(s(Je),2);Bn(mt,{class:"w-3 h-3 opacity-70 rotate-180"}),x("click",Je,He),f(me,Je)};I(Ge,me=>{t(m)||me(nt)})}var Oe=r(Ge,2);let Be,te;var q=s(Oe),ke=r(s(q),4),Ze=s(ke),ne=r(ke,2);{var fe=me=>{var Je=zg(),mt=s(Je);O(()=>y(mt,t(z))),f(me,Je)};I(ne,me=>{t(z)>0&&me(fe)})}var Pe=r(ne,4),De=s(Pe);{var ze=me=>{ni(me,{class:"w-3 h-3 animate-spin"})},Le=me=>{Fo(me,{class:"w-3 h-3"})},qe=me=>{di(me,{class:"w-3 h-3"})};I(De,me=>{t(A)==="saving"?me(ze):t(A)==="saved"?me(Le,1):me(qe,-1)})}var je=r(Pe,2),lt=s(je);vi(lt,{class:"w-3 h-3"});var dt=r(je,2),Ot=s(dt);ii(Ot,{class:"w-3 h-3"});var vt=r(dt,4),oe=s(vt);si(oe,{class:"w-3 h-3"});var xe=r(vt,2),Ee=s(xe);Gr(Ee,{class:"w-3 h-3"});var ot=r(xe,2),ft=s(ot);pi(ft,{class:"w-3 h-3"});var _t=r(ot,4),xt=s(_t);Bn(xt,{class:"w-3 h-3"});var Nt=r(q,2),St=s(Nt);gi(St,{get activeId(){return t(_)},onSelect:me=>{C(_,me,!0)},get overridesByDomain(){return t(L)}});var Et=r(St,2),ct=s(Et),Gt=s(ct),ea=s(Gt),ia=r(ct,2),Xe=s(ia);Mi(Xe,{get domain(){return t(_)},get tokens(){return o},get overrides(){return t(v)},onSet:Ie,onReset:pe,onBulkChange:he,onApplyTheme:Ne,onSelectDomain:me=>{C(_,me,!0)},onResetAll:at});var ut=r(Nt,2);{var Lt=me=>{Ni(me,{get tokens(){return o},get overrides(){return t(v)},onNavigate:Je=>{C(_,Je,!0)},onClose:()=>{C(E,!1)}})};I(ut,me=>{t(E)&&me(Lt)})}var Dt=r(ut,2);{var Rt=me=>{var Je=Ag(),mt=s(Je),Ut=r(s(mt),2),Ue=s(Ut),Ae=r(Ut,2),Ve=s(Ae);Do(Ve,Ct=>C(U,Ct),()=>t(U));var tt=r(Ve,2);Do(tt,Ct=>C(S,Ct),()=>t(S)),O(()=>y(Ue,`This will clear all ${t(z)??""} customisation${t(z)!==1?"s":""}. - You can still undo this before saving.`)),x("keydown",Je,Ct=>{Ct.key==="Escape"&&(Ct.stopPropagation(),N()),Ct.key==="Tab"&&(Ct.preventDefault(),document.activeElement===t(U)?t(S)?.focus():t(U)?.focus())}),x("click",Ve,N),x("click",tt,et),f(me,Je)};I(Dt,me=>{t(B)&&me(Rt)})}O(me=>{Be=Ye(Oe,1,"fixed right-0 z-[100000] pointer-events-auto flex flex-col bg-[#0a0a0f] text-slate-200 font-sans shadow-2xl shadow-black/60 border-l border-white/8 transition-transform duration-200 ease-in-out",null,Be,{"translate-x-full":!t(m),"translate-x-0":t(m),"pointer-events-none":!t(m)}),te=it(Oe,`top: var(--wp-admin--admin-bar--height, 32px); width: ${t(h)?"100vw":"420px"}; height: calc(100vh - var(--wp-admin--admin-bar--height, 32px));`,te,{visibility:t(m)?void 0:"hidden"}),Y(Oe,"aria-hidden",!t(m)),Oe.inert=!t(m)||void 0,y(Ze,i[t(_)]??t(_)),Pe.disabled=!t(T)||t(A)==="saving",Y(Pe,"title",t(T)?"Save changes (Ctrl+S)":"No unsaved changes"),Y(Pe,"aria-label",t(A)==="saving"?"Saving changes":t(T)?"Save changes":"No unsaved changes"),Ye(Pe,1,me),je.disabled=!t(P),dt.disabled=!t(w),xe.disabled=t(z)===0,ot.disabled=t(z)===0,y(ea,i[t(_)]??t(_))},[()=>lo(["p-1 rounded transition-colors cursor-pointer shrink-0 disabled:pointer-events-none",t(A)==="saved"?"text-emerald-300":t(T)?"text-emerald-400 hover:text-emerald-300 hover:bg-emerald-500/10":"text-slate-500 opacity-40"].join(" "))]),x("click",Pe,be),x("click",je,W),x("click",dt,ye),x("click",vt,Z),x("click",xe,ge),x("click",ot,at),x("click",_t,He),f(a,we),$t()}aa(["click","keydown"]);function sl(){const a=document.getElementById("slashed-frontend-overlay");if(!a||a.shadowRoot)return;const e=a.attachShadow({mode:"open"}),o=document.createElement("div");e.appendChild(o);let n=!1;const l=()=>{n||(Xl(Rg,{target:o}),n=!0,a.setAttribute("data-slashed-ready",""))},i=window.slashedApp?.cssUrl;if(i){const c=document.createElement("link");c.rel="stylesheet",c.href=i;const d=setTimeout(l,5e3),p=()=>{clearTimeout(d),l()};c.addEventListener("load",p),c.addEventListener("error",p),e.appendChild(c)}else l()}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",sl):sl(); + itself and can't be shown in the static canvas.

`);function kh(a,e){$t(e,!0);const o=[{label:"Below",token:"--sf-z-below",note:"Behind content (e.g. decorative BG)"},{label:"Raised",token:"--sf-z-raised",note:"Slightly above flow"},{label:"Dropdown",token:"--sf-z-dropdown",note:"Dropdowns, popovers"},{label:"Sticky",token:"--sf-z-sticky",note:"Sticky headers, toolbars"},{label:"Fixed",token:"--sf-z-fixed",note:"Fixed UI chrome"},{label:"Overlay",token:"--sf-z-overlay",note:"Modals, drawers backdrop"},{label:"Modal",token:"--sf-z-modal",note:"Modal dialogs"},{label:"Popover",token:"--sf-z-popover",note:"Tooltips, menus"},{label:"Tooltip",token:"--sf-z-tooltip",note:"Inline tooltips"},{label:"Toast",token:"--sf-z-toast",note:"Notifications"}],n=[{label:"Smooth",value:"smooth"},{label:"Auto",value:"auto"}],l=[{label:"XS",token:"--sf-size-xs",default:1.5},{label:"S",token:"--sf-size-s",default:2},{label:"M",token:"--sf-size-m",default:2.5},{label:"L",token:"--sf-size-l",default:2.75},{label:"XL",token:"--sf-size-xl",default:3.5}];function i(vt,Ie,Ye){if(!vt)return Ie;const nt=parseFloat(Ye?vt.replace(Ye,""):vt);return isNaN(nt)?Ie:nt}let c=u(()=>i(e.overrides["--sf-touch-target"],44,"px")),f=u(()=>e.overrides["--sf-scroll-behavior"]??"smooth"),p=u(()=>i(e.overrides["--sf-z-base"],0)),m=u(()=>e.overrides["--sf-caret-color"]??""),h=u(()=>i(e.overrides["--sf-link-underline-offset"]?.replace("em",""),.15)),v=u(()=>e.overrides["--sf-link-underline-thickness"]??"auto"),b=u(()=>e.overrides["--sf-focus-ring-style"]??"solid"),k=K(!1),S=K(!1),R=K(!1),P=K(!1),A=K(!1),B=K(!1),q=K(!1),T=K(!1),E=K(!1),C=K(!1),z=K(!1),G=K(!1);function O(vt){return i(e.overrides[vt.token]?.replace("rem",""),vt.default)}var j=xh(),M=s(j),Y=s(M),Oe=r(s(Y),2),De=s(Oe),Me=r(Y,2);{var xe=vt=>{var Ie=th(),Ye=fe(Ie);{let ct=u(()=>"--sf-touch-target"in e.overrides);yt(Ye,{label:"Min touch size",get value(){return t(c)},min:32,max:64,step:1,unit:"px",help:"--sf-touch-target — minimum tappable area for interactive elements (WCAG 2.5.5)",get overridden(){return t(ct)},onChange:tt=>e.onSet("--sf-touch-target",`${tt}px`),onReset:()=>e.onReset("--sf-touch-target")})}var nt=r(Ye,2),Le=s(nt),Fe=s(Le);_(()=>{lt(Le,`width: ${t(c)}px; height: ${t(c)}px`),y(Fe,`${t(c)??""}px`)}),d(vt,Ie)};L(Me,vt=>{t(k)&&vt(xe)})}var be=r(M,4),Q=s(be),se=r(s(Q),2),Se=s(se),Ce=r(Q,2);{var H=vt=>{var Ie=ah();oe(Ie,21,()=>n,Ye=>Ye.value,(Ye,nt)=>{var Le=ys(),Fe=s(Le);_(()=>{Ve(Le,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer ${t(f)===t(nt).value?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(Fe,t(nt).label)}),x("click",Le,()=>t(nt).value==="smooth"?e.onReset("--sf-scroll-behavior"):e.onSet("--sf-scroll-behavior",t(nt).value)),d(Ye,Le)}),d(vt,Ie)};L(Ce,vt=>{t(S)&&vt(H)})}var D=r(be,4),ee=s(D),le=r(s(ee),2),W=s(le),me=r(ee,2);{var ke=vt=>{var Ie=sh(),Ye=fe(Ie);{let Le=u(()=>"--sf-z-base"in e.overrides);yt(Ye,{label:"Base offset",get value(){return t(p)},min:0,max:1e3,step:10,help:"--sf-z-base — added to all z-index tokens to avoid conflicts with existing stacking contexts",get overridden(){return t(Le)},onChange:Fe=>e.onSet("--sf-z-base",String(Fe)),onReset:()=>e.onReset("--sf-z-base")})}var nt=r(Ye,2);oe(nt,21,()=>o,Le=>Le.token,(Le,Fe)=>{const ct=u(()=>t(Fe).token in e.overrides);var tt=oh(),Ae=s(tt),U=r(Ae,2),J=s(U),ge=r(U,2),F=s(ge),Z=r(ge,2),ne=s(Z);_(re=>{Ve(Ae,1,`w-1.5 h-1.5 rounded-full shrink-0 ${t(ct)?"bg-amber-400":"bg-white/20"}`),y(J,t(Fe).label),y(F,t(Fe).note),y(ne,re)},[()=>t(Fe).token.replace("--sf-z-","")]),d(Le,tt)}),d(vt,Ie)};L(me,vt=>{t(R)&&vt(ke)})}var he=r(D,4),ie=s(he),Ue=r(s(ie),2),Ne=s(Ue),Xe=r(ie,2);{var We=vt=>{var Ie=rh(),Ye=s(Ie),nt=r(s(Ye),2);{let Ae=u(()=>e.overrides["--sf-color-selection-bg"]??""),U=u(()=>"--sf-color-selection-bg"in e.overrides);Ja(nt,{token:"--sf-color-selection-bg",get value(){return t(Ae)},placeholder:"default",get isOverridden(){return t(U)},onSet:J=>e.onSet("--sf-color-selection-bg",J),onReset:()=>e.onReset("--sf-color-selection-bg")})}var Le=r(Ye,2),Fe=r(s(Le),2);{let Ae=u(()=>e.overrides["--sf-color-selection-text"]??""),U=u(()=>"--sf-color-selection-text"in e.overrides);Ja(Fe,{token:"--sf-color-selection-text",get value(){return t(Ae)},placeholder:"default",get isOverridden(){return t(U)},onSet:J=>e.onSet("--sf-color-selection-text",J),onReset:()=>e.onReset("--sf-color-selection-text")})}var ct=r(Le,2),tt=s(ct);_(()=>lt(tt,`--sf-color-selection-bg: ${e.overrides["--sf-color-selection-bg"]??"#6366f1"}; --sf-color-selection-text: ${e.overrides["--sf-color-selection-text"]??"#ffffff"}`)),d(vt,Ie)};L(Xe,vt=>{t(P)&&vt(We)})}var Qe=r(he,4),dt=s(Qe),gt=r(s(dt),2),kt=s(gt),wt=r(dt,2);{var mt=vt=>{var Ie=nh(),Ye=fe(Ie);oe(Ye,20,()=>["solid","dashed","dotted"],ct=>ct,(ct,tt)=>{const Ae=u(()=>e.overrides["--sf-focus-ring-style"]??"solid");var U=ys(),J=s(U);_(()=>{Ve(U,1,`flex-1 py-2 rounded-lg text-[10px] border transition-all cursor-pointer capitalize ${t(Ae)===tt?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y(J,tt)}),x("click",U,()=>tt==="solid"?e.onReset("--sf-focus-ring-style"):e.onSet("--sf-focus-ring-style",tt)),d(ct,U)});var nt=r(Ye,2),Le=s(nt),Fe=s(Le);_(()=>{lt(Le,`outline: 2px ${t(b)} ${e.overrides["--sf-focus-ring-color"]||"oklch(0.7 0.2 235)"}; outline-offset: 2px`),y(Fe,`Focus ring · ${t(b)??""}`)}),d(vt,Ie)};L(wt,vt=>{t(A)&&vt(mt)})}var te=r(Qe,4),N=s(te),V=r(s(N),2),ue=s(V),ye=r(N,2);{var st=vt=>{var Ie=ih(),Ye=r(fe(Ie),2);oe(Ye,21,()=>l,Le=>Le.token,(Le,Fe)=>{const ct=u(()=>O(t(Fe)));{let tt=u(()=>`${t(Fe).token} — component size step ${t(Fe).label}`),Ae=u(()=>t(Fe).token in e.overrides);yt(Le,{get label(){return t(Fe).label},get value(){return t(ct)},min:1,max:5,step:.05,unit:"rem",get help(){return t(tt)},get overridden(){return t(Ae)},onChange:U=>e.onSet(t(Fe).token,`${U}rem`),onReset:()=>e.onReset(t(Fe).token)})}});var nt=r(Ye,2);oe(nt,21,()=>l,Le=>Le.token,(Le,Fe)=>{const ct=u(()=>O(t(Fe)));var tt=lh(),Ae=s(tt),U=r(Ae,2),J=s(U);_(ge=>{lt(Ae,ge),y(J,t(Fe).label)},[()=>`height: ${Math.min(t(ct)*14,64)}px`]),d(Le,tt)}),d(vt,Ie)};L(ye,vt=>{t(B)&&vt(st)})}var Ke=r(te,4),I=s(Ke),X=r(s(I),2),ae=s(X),Pe=r(I,2);{var Te=vt=>{var Ie=dh(),Ye=fe(Ie),nt=r(s(Ye),2);{let ne=u(()=>"--sf-caret-color"in e.overrides);Ja(nt,{token:"--sf-caret-color",get value(){return t(m)},placeholder:"default (action color)",get isOverridden(){return t(ne)},onSet:re=>e.onSet("--sf-caret-color",re),onReset:()=>e.onReset("--sf-caret-color")})}var Le=r(Ye,2);{let ne=u(()=>"--sf-link-underline-offset"in e.overrides);yt(Le,{label:"Underline offset",get value(){return t(h)},min:0,max:.5,step:.01,unit:"em",help:"--sf-link-underline-offset — gap between text baseline and underline",get overridden(){return t(ne)},onChange:re=>e.onSet("--sf-link-underline-offset",`${re}em`),onReset:()=>e.onReset("--sf-link-underline-offset")})}var Fe=r(Le,2),ct=s(Fe),tt=r(s(ct),2);{var Ae=ne=>{var re=ch();x("click",re,()=>e.onReset("--sf-link-underline-thickness")),d(ne,re)};L(tt,ne=>{"--sf-link-underline-thickness"in e.overrides&&ne(Ae)})}var U=r(ct,2);oe(U,20,()=>[["auto","auto"],["1px","1px"],["2px","2px"],["3px","3px"]],([ne,re])=>re,(ne,re)=>{var ve=u(()=>Ea(re,2));let Be=()=>t(ve)[0],pe=()=>t(ve)[1];var ze=ys(),$e=s(ze);_(()=>{Ve(ze,1,`flex-1 py-1.5 rounded-lg text-[10px] border transition-all cursor-pointer ${t(v)===pe()?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5 hover:text-slate-200"}`),y($e,Be())}),x("click",ze,()=>pe()==="auto"?e.onReset("--sf-link-underline-thickness"):e.onSet("--sf-link-underline-thickness",pe())),d(ne,ze)});var J=r(Fe,2),ge=s(J),F=r(ge,2),Z=r(s(F));_(()=>{lt(ge,`caret-color:${t(m)||"#6366f1"}`),lt(Z,`text-decoration:underline;text-underline-offset:${t(h)}em;text-decoration-thickness:${t(v)}`)}),x("click",Z,ne=>ne.preventDefault()),d(vt,Ie)};L(Pe,vt=>{t(q)&&vt(Te)})}var ut=r(Ke,4),je=s(ut),it=r(s(je),2),at=s(it),ft=r(je,2);{var Ge=vt=>{var Ie=fh(),Ye=r(fe(Ie),2);oe(Ye,20,()=>[{label:"xs",token:"--sf-icon-xs",def:.875},{label:"s",token:"--sf-icon-s",def:1},{label:"m",token:"--sf-icon-m",def:1.5},{label:"l",token:"--sf-icon-l",def:2},{label:"xl",token:"--sf-icon-xl",def:3},{label:"2xl",token:"--sf-icon-2xl",def:4}],Le=>Le.token,(Le,Fe)=>{{let ct=u(()=>i(e.overrides[Fe.token]?.replace("em",""),Fe.def)),tt=u(()=>Fe.token in e.overrides);yt(Le,{get label(){return Fe.label},get value(){return t(ct)},min:.5,max:6,step:.125,unit:"em",get overridden(){return t(tt)},onChange:Ae=>e.onSet(Fe.token,`${Ae}em`),onReset:()=>e.onReset(Fe.token)})}});var nt=r(Ye,2);{let Le=u(()=>i(e.overrides["--sf-icon-box-pad"]?.replace("em",""),.5)),Fe=u(()=>"--sf-icon-box-pad"in e.overrides);yt(nt,{label:"Box padding",get value(){return t(Le)},min:0,max:2,step:.125,unit:"em",help:"--sf-icon-box-pad — padding around icon when using .sf-icon-box",get overridden(){return t(Fe)},onChange:ct=>e.onSet("--sf-icon-box-pad",`${ct}em`),onReset:()=>e.onReset("--sf-icon-box-pad")})}d(vt,Ie)};L(ft,vt=>{t(T)&&vt(Ge)})}var Pt=r(ut,4),jt=s(Pt),ta=r(s(jt),2),Dt=s(ta),zt=r(jt,2);{var ia=vt=>{var Ie=ph(),Ye=r(fe(Ie),2),nt=r(s(Ye),2);oe(nt,20,()=>["cover","contain","fill","none"],J=>J,(J,ge)=>{const F=u(()=>e.overrides["--sf-object-fit"]??"cover");var Z=ys(),ne=s(Z);_(()=>{Ve(Z,1,`flex-1 py-1.5 rounded-lg text-[9px] border transition-all cursor-pointer ${t(F)===ge?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5"}`),y(ne,ge)}),x("click",Z,()=>ge==="cover"?e.onReset("--sf-object-fit"):e.onSet("--sf-object-fit",ge)),d(J,Z)});var Le=r(nt,2);{var Fe=J=>{var ge=uh();x("click",ge,()=>e.onReset("--sf-object-fit")),d(J,ge)};L(Le,J=>{"--sf-object-fit"in e.overrides&&J(Fe)})}var ct=r(Ye,2),tt=r(s(ct),2),Ae=r(tt,2);{var U=J=>{var ge=xs();x("click",ge,()=>e.onReset("--sf-object-position")),d(J,ge)};L(Ae,J=>{"--sf-object-position"in e.overrides&&J(U)})}_(()=>Xt(tt,e.overrides["--sf-object-position"]??"")),x("input",tt,J=>{const ge=J.target.value.trim();ge?e.onSet("--sf-object-position",ge):e.onReset("--sf-object-position")}),d(vt,Ie)};L(zt,vt=>{t(E)&&vt(ia)})}var ca=r(Pt,4),da=s(ca),_e=r(s(da),2),bt=s(_e),Et=r(da,2);{var Je=vt=>{var Ie=vh(),Ye=r(fe(Ie),2);oe(Ye,20,()=>[{label:"Top",token:"--sf-safe-top",placeholder:"env(safe-area-inset-top, 0px)"},{label:"Right",token:"--sf-safe-right",placeholder:"env(safe-area-inset-right, 0px)"},{label:"Bottom",token:"--sf-safe-bottom",placeholder:"env(safe-area-inset-bottom, 0px)"},{label:"Left",token:"--sf-safe-left",placeholder:"env(safe-area-inset-left, 0px)"}],nt=>nt.token,(nt,Le)=>{var Fe=mh(),ct=s(Fe),tt=s(ct),Ae=r(ct,2),U=r(Ae,2);{var J=ge=>{var F=xs();x("click",F,()=>e.onReset(Le.token)),d(ge,F)};L(U,ge=>{Le.token in e.overrides&&ge(J)})}_(()=>{y(tt,Le.label),Xt(Ae,e.overrides[Le.token]??""),$(Ae,"placeholder",Le.placeholder)}),x("input",Ae,ge=>{const F=ge.target.value.trim();F?e.onSet(Le.token,F):e.onReset(Le.token)}),d(nt,Fe)}),d(vt,Ie)};L(Et,vt=>{t(z)&&vt(Je)})}var St=r(ca,4),ot=s(St),rt=r(s(ot),2),Gt=s(rt),Mt=r(ot,2);{var Nt=vt=>{var Ie=gh(),Ye=r(fe(Ie),2),nt=r(s(Ye),2);oe(nt,20,()=>["a4","letter","legal","a3"],Fe=>Fe,(Fe,ct)=>{const tt=u(()=>e.overrides["--sf-print-page-size"]??"a4");var Ae=ys(),U=s(Ae);_(()=>{Ve(Ae,1,`flex-1 py-1.5 rounded-lg text-[9px] border transition-all cursor-pointer ${t(tt)===ct?"bg-indigo-500/15 border-indigo-500/40 text-indigo-200":"border-white/8 text-slate-400 hover:bg-white/5"}`),y(U,ct)}),x("click",Ae,()=>ct==="a4"?e.onReset("--sf-print-page-size"):e.onSet("--sf-print-page-size",ct)),d(Fe,Ae)});var Le=r(Ye,2);oe(Le,16,()=>[{label:"Base size",token:"--sf-print-base-size",placeholder:"11pt"},{label:"Page margin",token:"--sf-print-page-margin",placeholder:"2cm"}],Fe=>Fe.token,(Fe,ct)=>{var tt=hh(),Ae=s(tt),U=s(Ae),J=r(Ae,2),ge=r(J,2);{var F=Z=>{var ne=xs();x("click",ne,()=>e.onReset(ct.token)),d(Z,ne)};L(ge,Z=>{ct.token in e.overrides&&Z(F)})}_(()=>{y(U,ct.label),Xt(J,e.overrides[ct.token]??""),$(J,"placeholder",ct.placeholder)}),x("input",J,Z=>{const ne=Z.target.value.trim();ne?e.onSet(ct.token,ne):e.onReset(ct.token)}),d(Fe,tt)}),d(vt,Ie)};L(Mt,vt=>{t(C)&&vt(Nt)})}var Vt=r(St,4),Wt=s(Vt),fa=r(s(Wt),2),La=s(fa),ka=r(Wt,2);{var Va=vt=>{var Ie=yh(),Ye=r(fe(Ie),2);oe(Ye,20,()=>[{label:"is-active",token:"--sf-is-active",note:"Active/selected state"},{label:"is-current",token:"--sf-is-current",note:"Current page/item"},{label:"is-open",token:"--sf-is-open",note:"Open/expanded state"},{label:"is-pressed",token:"--sf-is-pressed",note:"Pressed/depressed state"}],tt=>tt.token,(tt,Ae)=>{const U=u(()=>e.overrides[Ae.token]??"0");var J=bh(),ge=s(J),F=s(ge),Z=r(ge,2),ne=s(Z),re=r(Z,2),ve=s(re),Be=r(re,2);{var pe=ze=>{var $e=xs();x("click",$e,()=>e.onReset(Ae.token)),d(ze,$e)};L(Be,ze=>{Ae.token in e.overrides&&ze(pe)})}_(()=>{$(ge,"aria-label",Ae.label),$(ge,"aria-pressed",t(U)==="1"),Ve(ge,1,`w-8 h-4 rounded-full transition-colors relative cursor-pointer shrink-0 ${t(U)==="1"?"bg-indigo-600":"bg-white/10"}`),Ve(F,1,`absolute top-0.5 w-3 h-3 bg-white rounded-full shadow transition-transform ${t(U)==="1"?"translate-x-4":"translate-x-0.5"}`),y(ne,Ae.label),y(ve,Ae.note)}),x("click",ge,()=>t(U)==="1"?e.onReset(Ae.token):e.onSet(Ae.token,"1")),d(tt,J)});var nt=r(Ye,2),Le=r(s(nt),2),Fe=r(Le,2);{var ct=tt=>{var Ae=xs();x("click",Ae,()=>e.onReset("--sf-field-required-marker")),d(tt,Ae)};L(Fe,tt=>{"--sf-field-required-marker"in e.overrides&&tt(ct)})}_(()=>Xt(Le,e.overrides["--sf-field-required-marker"]??"")),x("input",Le,tt=>{const Ae=tt.target.value;Ae?e.onSet("--sf-field-required-marker",Ae):e.onReset("--sf-field-required-marker")}),d(vt,Ie)};L(ka,vt=>{t(G)&&vt(Va)})}_(()=>{$(Y,"aria-expanded",t(k)),y(De,t(k)?"▲":"▼"),$(Q,"aria-expanded",t(S)),y(Se,t(S)?"▲":"▼"),$(ee,"aria-expanded",t(R)),y(W,t(R)?"▲":"▼"),$(ie,"aria-expanded",t(P)),y(Ne,t(P)?"▲":"▼"),$(dt,"aria-expanded",t(A)),y(kt,t(A)?"▲":"▼"),$(N,"aria-expanded",t(B)),y(ue,t(B)?"▲":"▼"),$(I,"aria-expanded",t(q)),y(ae,t(q)?"▲":"▼"),$(je,"aria-expanded",t(T)),y(at,t(T)?"▲":"▼"),$(jt,"aria-expanded",t(E)),y(Dt,t(E)?"▲":"▼"),$(da,"aria-expanded",t(z)),y(bt,t(z)?"▲":"▼"),$(ot,"aria-expanded",t(C)),y(Gt,t(C)?"▲":"▼"),$(Wt,"aria-expanded",t(G)),y(La,t(G)?"▲":"▼")}),x("click",Y,()=>{w(k,!t(k))}),x("click",Q,()=>{w(S,!t(S))}),x("click",ee,()=>{w(R,!t(R))}),x("click",ie,()=>{w(P,!t(P))}),x("click",dt,()=>{w(A,!t(A))}),x("click",N,()=>{w(B,!t(B))}),x("click",I,()=>{w(q,!t(q))}),x("click",je,()=>{w(T,!t(T))}),x("click",jt,()=>{w(E,!t(E))}),x("click",da,()=>{w(z,!t(z))}),x("click",ot,()=>{w(C,!t(C))}),x("click",Wt,()=>{w(G,!t(G))}),d(a,j),ea()}oa(["click","input"]);var wh=g('

No saved themes yet.

Configure your tokens, then save them above.

'),_h=g('
'),Ch=g('
'),Oh=g(' '),Sh=g('
'),Lh=g('
'),Ph=g(''),Ih=g(`
Themes

Save your current configuration as a named theme, then re-apply it any time. + Themes are stored in this browser.

Save current

`);function Bh(a,e){$t(e,!0);let o=K(ma(Yi())),n=K(""),l=u(()=>Object.keys(e.overrides).length);function i(O,j){const M=Object.keys(O);return M.length!==Object.keys(j).length?!1:M.every(Y=>O[Y]===j[Y])}let c=u(()=>t(o).find(O=>i(O.overrides,e.overrides))?.id??"");function f(){t(l)!==0&&(w(o,Zi(t(n),e.overrides),!0),w(n,""))}function p(O){w(o,Bu(O),!0)}var m=Ih(),h=r(s(m),4),v=r(s(h),2),b=s(v),k=r(b,2),S=s(k);mr(S,{class:"w-3 h-3"});var R=r(v,2),P=s(R);{var A=O=>{var j=ns("No active overrides yet — adjust some tokens first.");d(O,j)},B=O=>{var j=ns();_(()=>y(j,`Captures all ${t(l)??""} active override${t(l)===1?"":"s"}.`)),d(O,j)};L(P,O=>{t(l)===0?O(A):O(B,-1)})}var q=r(h,2),T=s(q);{var E=O=>{var j=wh();d(O,j)},C=O=>{var j=At(),M=fe(j);oe(M,17,()=>t(o),Y=>Y.id,(Y,Oe)=>{const De=u(()=>Object.keys(t(Oe).overrides).length);var Me=Lh(),xe=s(Me),be=s(xe),Q=s(be),se=r(be,2),Se=s(se),Ce=s(Se),H=r(Ce);{var D=Ne=>{Bo(Ne,{class:"w-3 h-3 text-indigo-400"})};L(H,Ne=>{t(c)===t(Oe).id&&Ne(D)})}var ee=r(Se,2),le=s(ee),W=r(se,2),me=s(W),ke=r(me,2),he=s(ke);pn(he,{class:"w-3.5 h-3.5"});var ie=r(xe,2);{var Ue=Ne=>{var Xe=Sh(),We=s(Xe);oe(We,17,()=>Object.entries(t(Oe).overrides).slice(0,5),([gt,kt])=>gt,(gt,kt)=>{var wt=u(()=>Ea(t(kt),2));let mt=()=>t(wt)[0],te=()=>t(wt)[1];var N=Ch(),V=s(N);{var ue=I=>{var X=_h();let ae;_(()=>ae=lt(X,"",ae,{background:te()})),d(I,X)},ye=u(()=>mt().includes("color")||mt().includes("source"));L(V,I=>{t(ye)&&I(ue)})}var st=r(V,2),Ke=s(st);_(I=>y(Ke,I),[()=>mt().replace("--sf-","")]),d(gt,N)});var Qe=r(We,2);{var dt=gt=>{var kt=Oh(),wt=s(kt);_(()=>y(wt,`+${t(De)-5} more`)),d(gt,kt)};L(Qe,gt=>{t(De)>5&>(dt)})}d(Ne,Xe)};L(ie,Ne=>{t(De)>0&&Ne(Ue)})}_(()=>{Ve(Me,1,`group rounded-xl border transition-all overflow-hidden ${t(c)===t(Oe).id?"border-indigo-500/40 bg-indigo-500/10":"border-white/8 bg-white/4 hover:bg-white/6 hover:border-white/14"}`),y(Q,t(Oe).icon),y(Ce,`${t(Oe).name??""} `),y(le,`${t(De)??""} override${t(De)===1?"":"s"}`)}),x("click",me,()=>e.onApplyTheme(t(Oe).overrides)),x("click",ke,()=>p(t(Oe).id)),d(Y,Me)}),d(O,j)};L(T,O=>{t(o).length===0?O(E):O(C,-1)})}var z=r(q,2);{var G=O=>{var j=Ph();x("click",j,function(...M){e.onResetAll?.apply(this,M)}),d(O,j)};L(z,O=>{t(l)>0&&O(G)})}_(()=>k.disabled=t(l)===0),x("keydown",b,O=>{O.key==="Enter"&&f()}),pr(b,()=>t(n),O=>w(n,O)),x("click",k,f),d(a,m),ea()}oa(["keydown","click"]);var Uh=g(' Link copied!',1),Ah=g(" Copy shareable link",1),zh=g('
Export

CSS output
 
Usage
Paste this CSS into your project after the SLASHED import.
');function Eh(a,e){$t(e,!0);let o=K("layer"),n=K(!1),l=K(!1),i=u(()=>Go(e.overrides,{mode:t(o),banner:!0})),c=u(()=>Object.keys(e.overrides).length);async function f(){try{await navigator.clipboard.writeText(t(i)),w(n,!0),setTimeout(()=>{w(n,!1)},2e3)}catch{}}async function p(){try{const H=Kf(e.overrides);await navigator.clipboard.writeText(H),w(l,!0),setTimeout(()=>{w(l,!1)},2e3)}catch{}}function m(){const H=new Blob([t(i)],{type:"text/css"}),D=URL.createObjectURL(H),ee=document.createElement("a");ee.href=D,ee.download="slashed-overrides.css",ee.click(),URL.revokeObjectURL(D)}function h(H){return H.includes("color")||H.includes("scrim-color")||H.includes("shadow-color")?"color":H.includes("duration")||H.includes("delay")||H.includes("transition-duration")?"duration":H.includes("radius")||H.includes("space")||H.includes("size")||H.includes("width")||H.includes("height")||H.includes("gap")||H.includes("blur")||H.includes("text-")||H.includes("leading")||H.includes("tracking")?"dimension":H.includes("font-family")||H.includes("font-mono")||H.includes("font-body")||H.includes("font-heading")||H.includes("font-code")?"fontFamily":H.includes("font-weight")||H.includes("weight")?"fontWeight":"string"}function v(){const H={};for(const[me,ke]of Object.entries(e.overrides)){const he=me.replace(/^--sf-/,"").replace(/-/g,".");H[he]={$value:ke,$type:h(me)}}const D=JSON.stringify({$schema:"https://design-tokens.github.io/community-group/format/",...H},null,2),ee=new Blob([D],{type:"application/json"}),le=URL.createObjectURL(ee),W=document.createElement("a");W.href=le,W.download="slashed-tokens.w3c.json",W.click(),URL.revokeObjectURL(le)}var b=zh(),k=s(b),S=r(s(k),2),R=s(S),P=r(k,2),A=s(P);{var B=H=>{var D=Uh(),ee=fe(D);Bo(ee,{class:"w-3 h-3 text-emerald-400"}),d(H,D)},q=H=>{var D=Ah(),ee=fe(D);Jd(ee,{class:"w-3 h-3"}),d(H,D)};L(A,H=>{t(l)?H(B):H(q,-1)})}var T=r(P,2),E=r(s(T),2),C=s(E),z=r(C,2),G=r(T,2),O=s(G),j=s(O),M=r(O,2),Y=s(M),Oe=s(Y);{var De=H=>{Bo(H,{class:"w-3 h-3 text-emerald-400"})},Me=H=>{Vr(H,{class:"w-3 h-3"})};L(Oe,H=>{t(n)?H(De):H(Me,-1)})}var xe=r(Y,2),be=s(xe);Kr(be,{class:"w-3 h-3"});var Q=r(G,2),se=s(Q);Kr(se,{class:"w-3 h-3"});var Se=r(Q,2),Ce=r(s(Se),4);Ce.textContent=`@import 'slashed/slashed.full.css'; +@import './slashed-overrides.css';`,_(()=>{y(R,t(c)>0?`${t(c)} override${t(c)!==1?"s":""} ready to export.`:"No overrides yet. Customise tokens, then export."),P.disabled=t(c)===0,Ve(C,1,`flex-1 py-1.5 rounded-md text-[11px] font-bold transition-all cursor-pointer ${t(o)==="layer"?"bg-indigo-600 text-white":"text-slate-400 hover:text-slate-200"}`),Ve(z,1,`flex-1 py-1.5 rounded-md text-[11px] font-bold transition-all cursor-pointer ${t(o)==="root"?"bg-indigo-600 text-white":"text-slate-400 hover:text-slate-200"}`),y(j,t(i)||"/* No overrides */"),Q.disabled=t(c)===0}),x("click",P,p),x("click",C,()=>{w(o,"layer")}),x("click",z,()=>{w(o,"root")}),x("click",Y,f),x("click",xe,m),x("click",Q,v),d(a,b),ea()}oa(["click"]);const Rh=JSON.parse(`[{"name":"is-active","selector":".is-active","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Active state — applied to the currently interacted-with element (e.g. pressed button, active menu item). Sets --sf-is-active to 1 for calc() branching.","optional":false,"layer":"slashed.states"},{"name":"is-busy","selector":".is-busy","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Busy state — shows a progress cursor to indicate background processing. Does not mask content; use is-loading when content should be hidden during loading.","optional":false,"layer":"slashed.states"},{"name":"is-clickable","selector":".is-clickable","kind":"state","category":"State classes","group":"FOCUS / INTERACTION MODIFIERS","description":"Makes the element appear interactive (pointer cursor). Use when an element has a click handler but no native button or link role.","optional":false,"layer":"slashed.states"},{"name":"is-clipped","selector":".is-clipped","kind":"state","category":"State classes","group":"OVERFLOW / CLIPPING","description":"Clips overflowing content (overflow: hidden). Use to constrain media or tooltips within a container boundary.","optional":false,"layer":"slashed.states"},{"name":"is-collapsed","selector":".is-collapsed","kind":"state","category":"State classes","group":"OPEN / CLOSED","description":"Collapsed state for disclosure widgets — hides the expandable region. Pair with is-expanded or is-open. Components add transitions.","optional":false,"layer":"slashed.states"},{"name":"is-current","selector":".is-current","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Current/selected state — marks the active page in navigation or the selected item in a list. Sets --sf-is-current to 1 for calc() branching.","optional":false,"layer":"slashed.states"},{"name":"is-danger","selector":".is-danger","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Danger status state — applies danger color tokens for destructive actions (e.g. a delete confirmation dialog) and form validation errors.","optional":false,"layer":"slashed.states"},{"name":"is-disabled","selector":".is-disabled","kind":"state","category":"State classes","group":"INTERACTIVITY","description":"Disabled state — dims the element (--sf-opacity-disabled), removes pointer events, and sets cursor: not-allowed. Inherited by child elements that re-enable pointer events.","optional":false,"layer":"slashed.states"},{"name":"is-draggable","selector":".is-draggable","kind":"state","category":"State classes","group":"DRAG & DROP","description":"Draggable state — shows a grab cursor to indicate the element can be dragged. Apply before a drag interaction begins.","optional":false,"layer":"slashed.states"},{"name":"is-dragging","selector":".is-dragging","kind":"state","category":"State classes","group":"DRAG & DROP","description":"Active drag state — shows a grabbing cursor while the element is being dragged. Apply during the drag event.","optional":false,"layer":"slashed.states"},{"name":"is-drop-target","selector":".is-drop-target","kind":"state","category":"State classes","group":"DRAG & DROP","description":"Drop-target state — applies a visual highlight to indicate a valid drag-and-drop destination. Toggle on drag-over events.","optional":false,"layer":"slashed.states"},{"name":"is-empty","selector":".is-empty","kind":"state","category":"State classes","group":"EMPTY STATE","description":"Empty state — hides the element when it has no child nodes (:empty). Used for dynamic lists or containers that may render empty.","optional":false,"layer":"slashed.states"},{"name":"is-error","selector":".is-error","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Error state — alias for is-danger. Applies danger color tokens to indicate a validation failure or system error. Visual styling is identical to is-invalid.","optional":false,"layer":"slashed.states"},{"name":"is-expanded","selector":".is-expanded","kind":"state","category":"State classes","group":"OPEN / CLOSED","description":"Expanded state for disclosure widgets — shows the expandable region. Inverse of is-collapsed. Components add transitions.","optional":false,"layer":"slashed.states"},{"name":"is-fixed","selector":".is-fixed","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Fixed positioning state — removes the element from the document flow and positions it relative to the viewport. Respects writing-mode (logical variant of fixed positioning).","optional":false,"layer":"slashed.states"},{"name":"is-focused","selector":".is-focused","kind":"state","category":"State classes","group":"FOCUS / INTERACTION MODIFIERS","description":"Programmatic focus state — applies the focus ring to an element that should appear focused. Use when :focus-visible alone is insufficient (e.g. custom select).","optional":false,"layer":"slashed.states"},{"name":"is-fullscreen","selector":".is-fullscreen","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Fullscreen positioning state — stretches the element to cover the viewport. Bare positioning only; consumers supply inset values.","optional":false,"layer":"slashed.states"},{"name":"is-hidden","selector":".is-hidden","kind":"state","category":"State classes","group":"VISIBILITY","description":"Hidden state — removes the element from layout and accessibility tree (display: none !important).","optional":false,"layer":"slashed.states"},{"name":"is-highlighted","selector":".is-highlighted","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Highlighted state — applies a highlight background. Useful for search result highlighting and keyboard-navigated lists.","optional":false,"layer":"slashed.states"},{"name":"is-info","selector":".is-info","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Info status state — applies info color tokens. Use for neutral informational messages and hints.","optional":false,"layer":"slashed.states"},{"name":"is-invalid","selector":".is-invalid","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Invalid state — applies danger color tokens to form fields with validation failures. Identical visual output to is-error; the name signals form-field context.","optional":false,"layer":"slashed.states"},{"name":"is-invisible","selector":".is-invisible","kind":"state","category":"State classes","group":"VISIBILITY","description":"Invisible state — hides the element visually but keeps it in the layout and accessibility tree (visibility: hidden).","optional":false,"layer":"slashed.states"},{"name":"is-loading","selector":".is-loading","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Loading state — hides the element's text (color: transparent), removes pointer events, and renders a spinner via ::after. Use for buttons and containers awaiting async results.","optional":false,"layer":"slashed.states"},{"name":"is-open","selector":".is-open","kind":"state","category":"State classes","group":"OPEN / CLOSED","description":"Open/shown state for modals, dropdowns, and drawers — counterpart to is-collapsed/is-hidden. Sets --sf-is-open to 1 for calc() branching.","optional":false,"layer":"slashed.states"},{"name":"is-overlay","selector":".is-overlay","kind":"state","category":"State classes","group":"OVERLAY / BACKDROP","description":"Overlay positioning state — renders the element as a full-screen fixed overlay with a backdrop scrim. Use for modal backgrounds.","optional":false,"layer":"slashed.states"},{"name":"is-pending","selector":".is-pending","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Pending state for optimistic UI — content remains visible but dimmed while an async request is in flight. Differs from is-loading (which hides content entirely).","optional":false,"layer":"slashed.states"},{"name":"is-pinned","selector":".is-pinned","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Pinned / sticky state — applies a visual affordance (e.g. border or shadow) to indicate the element is in its stuck (sticky) position. Toggle via IntersectionObserver.","optional":false,"layer":"slashed.states"},{"name":"is-pressed","selector":".is-pressed","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Pressed/toggled-on state for toggle buttons. Sets --sf-is-pressed to 1 for calc() branching and signals the selected state to components.","optional":false,"layer":"slashed.states"},{"name":"is-readonly","selector":".is-readonly","kind":"state","category":"State classes","group":"INTERACTIVITY","description":"Readonly state — removes pointer events and text selection. Use for fields that display data but cannot be edited.","optional":false,"layer":"slashed.states"},{"name":"is-resizable","selector":".is-resizable","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Resizable state — enables user resize handle on the element (resize: both). Typically applied to textareas or panels.","optional":false,"layer":"slashed.states"},{"name":"is-scrollable","selector":".is-scrollable","kind":"state","category":"State classes","group":"OVERFLOW / CLIPPING","description":"Makes the element scrollable (overflow: auto) when its content overflows. Applies to both axes.","optional":false,"layer":"slashed.states"},{"name":"is-selected","selector":".is-selected","kind":"state","category":"State classes","group":"ACTIVE / SELECTED / CURRENT","description":"Selected state — marks an item as selected in a list, table row, or grid cell. Visual specifics (background, border) are applied by component styles.","optional":false,"layer":"slashed.states"},{"name":"is-skeleton","selector":".is-skeleton","kind":"state","category":"State classes","group":"LOADING / ASYNC FEEDBACK","description":"Skeleton loading placeholder state. Applies a shimmer animation over the element to indicate that content is loading. Works on both img and non-media elements.","optional":false,"layer":"slashed.states"},{"name":"is-sticky","selector":".is-sticky","kind":"state","category":"State classes","group":"POSITION / STICKINESS","description":"Sticky positioning state — sets position: sticky with a top offset from --sf-sticky-offset. Useful for sticky headers and sidebar sub-menus.","optional":false,"layer":"slashed.states"},{"name":"is-success","selector":".is-success","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Success status state — applies success color tokens. Use for confirmation messages, completed form steps, and positive feedback.","optional":false,"layer":"slashed.states"},{"name":"is-truncated","selector":".is-truncated","kind":"state","category":"State classes","group":"OVERFLOW / CLIPPING","description":"Single-line truncation state — clips overflowing text with an ellipsis (overflow: hidden, text-overflow: ellipsis, white-space: nowrap).","optional":false,"layer":"slashed.states"},{"name":"is-unselectable","selector":".is-unselectable","kind":"state","category":"State classes","group":"FOCUS / INTERACTION MODIFIERS","description":"Prevents text selection (user-select: none) on the element. Use on interactive drag handles, labels, and UI chrome that shouldn't be selected.","optional":false,"layer":"slashed.states"},{"name":"is-valid","selector":".is-valid","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Valid state — applies success color tokens to form fields that have passed validation. Visual styling is identical to is-success; the name signals form-field context.","optional":false,"layer":"slashed.states"},{"name":"is-visible","selector":".is-visible","kind":"state","category":"State classes","group":"VISIBILITY","description":"Visible state — forces the element to be visible (visibility: visible). Use to un-hide an element that inherited visibility: hidden from a parent.","optional":false,"layer":"slashed.states"},{"name":"is-warning","selector":".is-warning","kind":"state","category":"State classes","group":"VALIDATION / FEEDBACK","description":"Warning status state — applies warning color tokens. Use for cautionary messages and non-critical alerts.","optional":false,"layer":"slashed.states"},{"name":"no-motion","selector":".no-motion","kind":"accessibility","category":"Accessibility","group":"Reduced motion. Token override helps components that read","description":"Suppresses all animations and transitions within the subtree. Apply to a container to create a reduced-motion zone without relying on the system preference.","optional":false,"layer":"slashed.accessibility"},{"name":"no-print","selector":".no-print","kind":"print","category":"Print","group":"Print visibility utilities","description":"Hides the element in @media print. Use on sidebars, navigation bars, and decorative elements that should not appear on paper.","optional":false,"layer":"slashed.print"},{"name":"print-color-exact","selector":".print-color-exact","kind":"print","category":"Print","group":"Opt-in colour treatment","description":"Forces exact color rendering in print (print-color-adjust: exact). Use on charts and colored badges that must preserve their fill colors in print.","optional":false,"layer":"slashed.print"},{"name":"print-no-color","selector":".print-no-color","kind":"print","category":"Print","group":"Opt-in colour treatment","description":"Strips color information in print (print-color-adjust: economy). Defers to the printer's ink-saving mode for backgrounds and non-critical color fills.","optional":false,"layer":"slashed.print"},{"name":"print-only","selector":".print-only","kind":"print","category":"Print","group":"Print visibility utilities","description":"Hides the element on screen (display: none) but shows it in @media print. Use for print-only headers, footers, and supplementary content not needed on screen.","optional":false,"layer":"slashed.print"},{"name":"sf-alternate","selector":".sf-alternate","kind":"layout","category":"Layout primitives","group":"Alternate (zigzag / media-object)","description":"Zigzag / alternating two-column layout. Even children align image-left/text-right; odd children flip. Collapses to a single column below the breakpoint.","optional":false,"layer":"slashed.layout"},{"name":"sf-aspect","selector":".sf-aspect","kind":"macro","category":"Macro classes","group":"Aspect","description":"Sets aspect-ratio from a --sf-aspect-ratio scoped token. Override the token inline to get any ratio without a new class.","optional":false,"layer":"slashed.macros"},{"name":"sf-bento","selector":".sf-bento","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Auto-fill bento grid for card dashboards. Children span 1 column by default; use span modifiers (sf-bento-wide, sf-bento-tall, sf-bento-full, sf-bento-featured) to break the grid.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--2","selector":".sf-bento--2","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with a 2-column base layout.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--3","selector":".sf-bento--3","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with a 3-column base layout.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--6","selector":".sf-bento--6","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with a 6-column base layout.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--compact","selector":".sf-bento--compact","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with shorter default row height.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento--tall","selector":".sf-bento--tall","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Bento grid variant with taller default row height.","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-featured","selector":".sf-bento-featured","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: takes up 2×2 cells (featured hero placement).","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-full","selector":".sf-bento-full","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: stretches across all columns (full-width banner).","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-tall","selector":".sf-bento-tall","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: doubles the row height (tall card).","optional":false,"layer":"slashed.layout"},{"name":"sf-bento-wide","selector":".sf-bento-wide","kind":"layout","category":"Layout primitives","group":"Bento grid","description":"Span modifier for a bento item: spans 2 columns (wide card).","optional":false,"layer":"slashed.layout"},{"name":"sf-bg","selector":".sf-bg","kind":"layout","category":"Layout primitives","group":"Background","description":"Background layer — absolutely-positioned cover media that sits behind a parent's content. The parent is auto-promoted to a positioned, isolated stacking context via :has(), so .sf-bg composes natively under .sf-scrim (background → scrim gradient → content). Works as a bare or as a wrapper with a nested > img / > video / > picture.","optional":false,"layer":"slashed.layout"},{"name":"sf-box","selector":".sf-box","kind":"layout","category":"Layout primitives","group":"Box","description":"Minimal padding container that applies --sf-component-pad on all sides. The simplest layout primitive for adding breathing room.","optional":false,"layer":"slashed.layout"},{"name":"sf-breakout","selector":".sf-breakout","kind":"layout","category":"Layout primitives","group":"Content grid (breakout pattern)","description":"Breaks a child element out of a parent sf-content-grid, spanning full bleed (or a named grid area) regardless of the parent column. Useful for full-width sections inside constrained prose.","optional":false,"layer":"slashed.layout"},{"name":"sf-center","selector":".sf-center","kind":"layout","category":"Layout primitives","group":"Center","description":"Centers children both horizontally and vertically using flexbox. Optionally add sf-center--intrinsic to size the container to its content.","optional":false,"layer":"slashed.layout"},{"name":"sf-center--intrinsic","selector":".sf-center--intrinsic","kind":"layout","category":"Layout primitives","group":"Center","description":"Modifier for sf-center: constrains the container to the natural width of its children (no stretching to fill available space).","optional":false,"layer":"slashed.layout"},{"name":"sf-clickable-parent","selector":".sf-clickable-parent","kind":"accessibility","category":"Accessibility","group":"Clickable-parent","description":"Makes the entire card or list-item clickable via an absolutely-positioned child overlay link. Apply to the container; place sf-clickable-parent__overlay on the
.","optional":false,"layer":"slashed.accessibility"},{"name":"sf-clickable-parent__overlay","selector":".sf-clickable-parent__overlay","kind":"accessibility","category":"Accessibility","group":"Clickable-parent","description":"The full-bleed overlay link inside an sf-clickable-parent. Stretches to cover the parent and uses pointer-events to let interactive children keep their own clicks.","optional":false,"layer":"slashed.accessibility"},{"name":"sf-cluster","selector":".sf-cluster","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Flex-wrap row of variable-width items with automatic gap. Children wrap when the container is too narrow. Use for tag lists, button groups, and icon rows.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--2xl","selector":".sf-cluster--2xl","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with 2xl gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--between","selector":".sf-cluster--between","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that distributes items with space-between alignment.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--center","selector":".sf-cluster--center","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that centers the item row horizontally.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--end","selector":".sf-cluster--end","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that aligns items to the inline end (right in LTR).","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--l","selector":".sf-cluster--l","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with large (l) gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--m","selector":".sf-cluster--m","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with medium (m) gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--no-wrap","selector":".sf-cluster--no-wrap","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant that prevents item wrapping (single-line row).","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--s","selector":".sf-cluster--s","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with small (s) gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--xl","selector":".sf-cluster--xl","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with xl gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-cluster--xs","selector":".sf-cluster--xs","kind":"layout","category":"Layout primitives","group":"Cluster","description":"Cluster variant with xs gap between items.","optional":false,"layer":"slashed.layout"},{"name":"sf-color-pulse","selector":".sf-color-pulse","kind":"motion","category":"Motion / animation","group":"@property color animation","description":"Applies a gentle color-pulse animation to draw attention to a dynamic value change (e.g. a counter updating). Scoped to users who have not requested reduced motion.","optional":false,"layer":"slashed.motion"},{"name":"sf-container","selector":".sf-container","kind":"layout","category":"Layout primitives","group":"Section","description":"Max-width page container, centered with auto side gutters. Establishes a named inline-size container (cq-container) for container queries. Default width is --sf-container-m.","optional":false,"layer":"slashed.layout"},{"name":"sf-container--full","selector":".sf-container--full","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant that spans the full viewport width (no max-width cap).","optional":false,"layer":"slashed.layout"},{"name":"sf-container--narrow","selector":".sf-container--narrow","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant with a narrower max-width (--sf-container-s). Use for single-column prose and forms.","optional":false,"layer":"slashed.layout"},{"name":"sf-container--prose","selector":".sf-container--prose","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant with a prose-optimised max-width (--sf-container-prose). Ideal for long-form reading content.","optional":false,"layer":"slashed.layout"},{"name":"sf-container--wide","selector":".sf-container--wide","kind":"layout","category":"Layout primitives","group":"Container","description":"Container variant with a wider max-width (--sf-container-l). Use for dashboards and wide media.","optional":false,"layer":"slashed.layout"},{"name":"sf-content-auto","selector":".sf-content-auto","kind":"macro","category":"Macro classes","group":"Content visibility","description":"Sets content-visibility: auto on the element. The browser skips rendering off-screen content, improving LCP for long pages.","optional":false,"layer":"slashed.macros"},{"name":"sf-content-grid","selector":".sf-content-grid","kind":"layout","category":"Layout primitives","group":"Content grid (breakout pattern)","description":"Holy-grail content grid with named areas: full-bleed, popout, and content columns. Use sf-breakout on children to escape the content column.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover","selector":".sf-cover","kind":"layout","category":"Layout primitives","group":"Cover","description":"Vertically stretches to at least a viewport height with a centered element (sf-cover__center). Typical use: hero sections.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover__center","selector":".sf-cover__center","kind":"layout","category":"Layout primitives","group":"Cover","description":"The centered focal element inside an sf-cover. Stays vertically centered even when the cover content is shorter than the viewport.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--max","selector":".sf-cover--max","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant that uses a max-height instead of min-height for the viewport constraint.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--min","selector":".sf-cover--min","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant that reduces the minimum height to half a viewport.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--padding-l","selector":".sf-cover--padding-l","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant with large vertical padding above and below the centered content.","optional":false,"layer":"slashed.layout"},{"name":"sf-cover--padding-s","selector":".sf-cover--padding-s","kind":"layout","category":"Layout primitives","group":"Cover","description":"Cover variant with small vertical padding above and below the centered content.","optional":false,"layer":"slashed.layout"},{"name":"sf-cq","selector":".sf-cq","kind":"layout","category":"Layout primitives","group":"Container query context","description":"Assigns an inline-size container context to any element. Children can then use @container rules or container-query-aware tokens.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider","selector":".sf-divider","kind":"layout","category":"Layout primitives","group":"Divider","description":"Horizontal rule (divider line). Uses --sf-divider-* tokens for color, width, and style. Modifiers change dash style or orientation.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--dashed","selector":".sf-divider--dashed","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with a dashed stroke.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--dotted","selector":".sf-divider--dotted","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with a dotted stroke.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--gradient","selector":".sf-divider--gradient","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant rendered as a gradient that fades to transparent at both ends.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--soft","selector":".sf-divider--soft","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with reduced opacity (subtle separator).","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--strong","selector":".sf-divider--strong","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant with stronger/darker color for a more prominent separator.","optional":false,"layer":"slashed.layout"},{"name":"sf-divider--vertical","selector":".sf-divider--vertical","kind":"layout","category":"Layout primitives","group":"Divider","description":"Divider variant rendered as a vertical line. Use inside flex or grid containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-entrance--fade","selector":".sf-entrance--fade","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in as it enters the viewport. Animation tied to scroll progress via animation-timeline.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-down","selector":".sf-entrance--fade-down","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving downward into position.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-left","selector":".sf-entrance--fade-left","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving from the right toward the left.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-right","selector":".sf-entrance--fade-right","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving from the left toward the right.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--fade-up","selector":".sf-entrance--fade-up","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while moving upward into position.","optional":false,"layer":"slashed.motion"},{"name":"sf-entrance--scale-up","selector":".sf-entrance--scale-up","kind":"motion","category":"Motion / animation","group":"Scroll-driven entrances","description":"Scroll-driven entrance: element fades in while scaling up from a slightly smaller size.","optional":false,"layer":"slashed.motion"},{"name":"sf-equal","selector":".sf-equal","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Auto-fill equal-columns grid. Columns fill the row and wrap when they hit --sf-equal-min-col. No breakpoints needed.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--2","selector":".sf-equal--2","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 2 columns using --sf-equal-min-col-2.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--3","selector":".sf-equal--3","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 3 columns using --sf-equal-min-col-3.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--4","selector":".sf-equal--4","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 4 columns using --sf-equal-min-col-4.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal--6","selector":".sf-equal--6","kind":"layout","category":"Layout primitives","group":"Equal columns (intrinsically responsive)","description":"Equal-columns variant locked to 6 columns using --sf-equal-min-col-6.","optional":false,"layer":"slashed.layout"},{"name":"sf-equal-height","selector":".sf-equal-height","kind":"macro","category":"Macro classes","group":"Equal height","description":"Forces all flex children to equal height (align-items: stretch). Use on a flex row to make cards in a grid share the tallest card's height.","optional":false,"layer":"slashed.macros"},{"name":"sf-fade-in","selector":".sf-fade-in","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot fade-in animation (opacity 0 → 1). Scoped to no-preference so it stops automatically for reduced-motion users.","optional":false,"layer":"slashed.motion"},{"name":"sf-fade-out","selector":".sf-fade-out","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot fade-out animation (opacity 1 → 0). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-flow","selector":".sf-flow","kind":"macro","category":"Macro classes","group":"Flow","description":"Applies --sf-flow-space as margin-block-start to all direct children except the first. Establishes consistent vertical rhythm in prose-like containers.","optional":false,"layer":"slashed.macros"},{"name":"sf-focus-parent","selector":".sf-focus-parent","kind":"accessibility","category":"Accessibility","group":"Focus-parent","description":"Forwards focus-visible styling to this container when any descendant is keyboard-focused. Useful for custom controls that wrap a visually-hidden .","optional":false,"layer":"slashed.accessibility"},{"name":"sf-focus-shadow","selector":".sf-focus-shadow","kind":"accessibility","category":"Accessibility","group":"Focus-shadow opt-in","description":"Applies the standard focus ring as a box-shadow to any element. Use on custom controls where the native :focus-visible ring doesn't render correctly.","optional":false,"layer":"slashed.accessibility"},{"name":"sf-frame","selector":".sf-frame","kind":"layout","category":"Layout primitives","group":"Frame","description":"Aspect-ratio container for media (images, video, maps). Children fill and cover the fixed-ratio box. Default ratio is 16:9.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--3-2","selector":".sf-frame--3-2","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a 3:2 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--4-3","selector":".sf-frame--4-3","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a 4:3 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--cinema","selector":".sf-frame--cinema","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a cinematic 21:9 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--golden","selector":".sf-frame--golden","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to the golden ratio (1.618:1).","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--portrait","selector":".sf-frame--portrait","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a portrait 2:3 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--square","selector":".sf-frame--square","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to a square 1:1 aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-frame--video","selector":".sf-frame--video","kind":"layout","category":"Layout primitives","group":"Frame","description":"Frame variant locked to the standard 16:9 video aspect ratio.","optional":false,"layer":"slashed.layout"},{"name":"sf-full-bleed","selector":".sf-full-bleed","kind":"layout","category":"Layout primitives","group":"Content grid (breakout pattern)","description":"Forces an element to span the full viewport width, breaking out of any centered container. Use for full-bleed images and section backgrounds.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap","selector":".sf-gap","kind":"layout","category":"Layout primitives","group":"Gap","description":"Injects the default --sf-gap into an existing flex or grid container without imposing display:flex itself. Use when the parent is already a flex or grid.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--2xl","selector":".sf-gap--2xl","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with 2xl gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--l","selector":".sf-gap--l","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with large (l) gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--m","selector":".sf-gap--m","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with medium (m) gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--s","selector":".sf-gap--s","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with small (s) gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--xl","selector":".sf-gap--xl","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with xl gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-gap--xs","selector":".sf-gap--xs","kind":"layout","category":"Layout primitives","group":"Gap","description":"Gap injection variant with xs gap value.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid","selector":".sf-grid","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Auto-fill CSS grid. Columns are sized with RAM pattern (Repeat, Auto-fill, Minmax) and wrap automatically. Default column min-width is --sf-grid-min-col.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--2xl","selector":".sf-grid--2xl","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a 2xl minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--dense","selector":".sf-grid--dense","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with grid-auto-flow: dense, allowing the grid to fill holes created by span modifiers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--fit","selector":".sf-grid--fit","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant that switches from auto-fill to auto-fit, collapsing empty columns.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--l","selector":".sf-grid--l","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a large (l) minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--m","selector":".sf-grid--m","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a medium (m) minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--s","selector":".sf-grid--s","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with a small (s) minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--xl","selector":".sf-grid--xl","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with an xl minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid--xs","selector":".sf-grid--xs","kind":"layout","category":"Layout primitives","group":"Grid (auto)","description":"Grid variant with an xs minimum column width.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-1","selector":".sf-grid-cols-1","kind":"layout","category":"Layout primitives","group":"Single-column grid","description":"Single-column layout (forces all children to one column).","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-1-2","selector":".sf-grid-cols-1-2","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 1fr, second takes 2fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-1-3","selector":".sf-grid-cols-1-3","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 1fr, second takes 3fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-2","selector":".sf-grid-cols-2","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 2-column fixed grid. Uses container queries to collapse to one column on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-2-1","selector":".sf-grid-cols-2-1","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 2fr, second takes 1fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-3","selector":".sf-grid-cols-3","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 3-column fixed grid. Collapses progressively on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-3-1","selector":".sf-grid-cols-3-1","kind":"layout","category":"Layout primitives","group":"Ratio grids","description":"Two-column ratio grid: first child takes 3fr, second takes 1fr. Container-query responsive.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-4","selector":".sf-grid-cols-4","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 4-column fixed grid. Collapses progressively on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-grid-cols-6","selector":".sf-grid-cols-6","kind":"layout","category":"Layout primitives","group":"Fixed column grids (container-query responsive)","description":"Responsive 6-column fixed grid. Collapses progressively on narrow containers.","optional":false,"layer":"slashed.layout"},{"name":"sf-icon","selector":".sf-icon","kind":"layout","category":"Layout primitives","group":"Icon","description":"Inline icon sizing primitive. Sets width and height to --sf-icon-m via em-based tokens so the icon scales with the surrounding text.","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--2xl","selector":".sf-icon--2xl","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-2xl (extra-extra-large).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--boxed","selector":".sf-icon--boxed","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant with a square bordered box background. Useful for standalone icon buttons and feature icons.","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--l","selector":".sf-icon--l","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-l (large).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--m","selector":".sf-icon--m","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-m (medium, same as base sf-icon).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--s","selector":".sf-icon--s","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-s (small).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--xl","selector":".sf-icon--xl","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-xl (extra-large).","optional":false,"layer":"slashed.layout"},{"name":"sf-icon--xs","selector":".sf-icon--xs","kind":"layout","category":"Layout primitives","group":"Icon","description":"Icon variant sized to --sf-icon-xs (extra-small).","optional":false,"layer":"slashed.layout"},{"name":"sf-imposter","selector":".sf-imposter","kind":"layout","category":"Layout primitives","group":"Imposter","description":"Absolutely positions an element at the center of its nearest positioned ancestor. Use for overlays, badges, and floating labels.","optional":false,"layer":"slashed.layout"},{"name":"sf-imposter--contain","selector":".sf-imposter--contain","kind":"layout","category":"Layout primitives","group":"Imposter","description":"Imposter variant that clamps the element within the bounds of its parent using overflow:hidden on the parent.","optional":false,"layer":"slashed.layout"},{"name":"sf-imposter--fixed","selector":".sf-imposter--fixed","kind":"layout","category":"Layout primitives","group":"Imposter","description":"Imposter variant that uses position:fixed instead of absolute. Use for viewport-level overlays and modals.","optional":false,"layer":"slashed.layout"},{"name":"sf-line-clamp-2","selector":".sf-line-clamp-2","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Clamps text to 2 lines with an ellipsis. Applies -webkit-line-clamp: 2.","optional":false,"layer":"slashed.macros"},{"name":"sf-line-clamp-3","selector":".sf-line-clamp-3","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Clamps text to 3 lines with an ellipsis. Applies -webkit-line-clamp: 3.","optional":false,"layer":"slashed.macros"},{"name":"sf-line-clamp-N","selector":".sf-line-clamp-N","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Clamps text to a custom N lines. Set --sf-line-clamp on the element to control the number of visible lines.","optional":false,"layer":"slashed.macros"},{"name":"sf-link--reverse","selector":".sf-link--reverse","kind":"macro","category":"Macro classes","group":"Link variants","description":"Link color modifier: reverses the default link color to work on dark/inverted backgrounds. Sets color to --sf-color-text--inverse.","optional":false,"layer":"slashed.macros"},{"name":"sf-link--subtle","selector":".sf-link--subtle","kind":"macro","category":"Macro classes","group":"Link variants","description":"Link color modifier: renders the link in the body text color instead of the default action color. Underline still indicates the link on hover.","optional":false,"layer":"slashed.macros"},{"name":"sf-link-external","selector":".sf-link-external","kind":"macro","category":"Macro classes","group":"External link indication","description":"Automatically appends an external-link icon (via ::after content) to indicate the link opens in a new tab or goes to an external domain.","optional":false,"layer":"slashed.macros"},{"name":"sf-no-tap-highlight","selector":".sf-no-tap-highlight","kind":"macro","category":"Macro classes","group":"No tap highlight","description":"Removes the mobile tap highlight color (-webkit-tap-highlight-color: transparent). Use on interactive elements with a custom active state.","optional":false,"layer":"slashed.macros"},{"name":"sf-not-prose","selector":".sf-not-prose","kind":"macro","category":"Macro classes","group":"Prose","description":"Opt-out of sf-prose typography styles within a prose block. Apply to an element that should keep default browser or component styles.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade","selector":".sf-overflow-fade","kind":"macro","category":"Macro classes","group":"Overflow fade","description":"Adds a gradient fade at the inline-end of an overflowing element to hint at hidden content. Use inside sf-reel or any scroll container.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--block","selector":".sf-overflow-fade--block","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades both the top and bottom edges simultaneously (block axis).","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--bottom","selector":".sf-overflow-fade--bottom","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the bottom (block-end) edge.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--inline","selector":".sf-overflow-fade--inline","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades both the left and right edges simultaneously (inline axis).","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--left","selector":".sf-overflow-fade--left","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the left (inline-start) edge.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--right","selector":".sf-overflow-fade--right","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the right (inline-end) edge. Explicit alias for the default sf-overflow-fade behaviour.","optional":false,"layer":"slashed.macros"},{"name":"sf-overflow-fade--top","selector":".sf-overflow-fade--top","kind":"macro","category":"Macro classes","group":"","description":"Overflow fade variant: fades the top (block-start) edge.","optional":false,"layer":"slashed.macros"},{"name":"sf-pancake","selector":".sf-pancake","kind":"layout","category":"Layout primitives","group":"Pancake (sticky footer)","description":"Three-row layout (header, main, footer) where main takes all remaining vertical space via flex-grow. The footer always sticks to the bottom on tall viewports.","optional":false,"layer":"slashed.layout"},{"name":"sf-prose","selector":".sf-prose","kind":"macro","category":"Macro classes","group":"Prose","description":"Opinionated typographic defaults for long-form content: heading hierarchy, paragraph spacing, blockquote, code, and list styling. Override with sf-not-prose.","optional":false,"layer":"slashed.macros"},{"name":"sf-reel","selector":".sf-reel","kind":"layout","category":"Layout primitives","group":"Reel","description":"Horizontally scrollable row of fixed-height items with snap scrolling. Children don't shrink below their intrinsic width, creating a card carousel effect.","optional":false,"layer":"slashed.layout"},{"name":"sf-scale-down","selector":".sf-scale-down","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot scale-down animation (element shrinks from full size). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-scale-up","selector":".sf-scale-up","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot scale-up animation (element grows from smaller size). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-scrim","selector":".sf-scrim","kind":"macro","category":"Macro classes","group":"Scrim","description":"Overlay container with a gradient darkening scrim behind text placed on an image or colored background.","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim__content","selector":".sf-scrim__content","kind":"macro","category":"Macro classes","group":"Scrim","description":"Content area inside an sf-scrim. Positioned above the gradient overlay layer.","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim--bottom","selector":".sf-scrim--bottom","kind":"macro","category":"Macro classes","group":"Scrim","description":"Scrim variant with the gradient emanating from the bottom edge (bottom-to-top fade).","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim--full","selector":".sf-scrim--full","kind":"macro","category":"Macro classes","group":"Scrim","description":"Scrim variant that covers the entire surface with a uniform translucent overlay.","optional":false,"layer":"slashed.macros"},{"name":"sf-scrim--top","selector":".sf-scrim--top","kind":"macro","category":"Macro classes","group":"Scrim","description":"Scrim variant with the gradient emanating from the top edge (top-to-bottom fade).","optional":false,"layer":"slashed.macros"},{"name":"sf-scroll-shadow","selector":".sf-scroll-shadow","kind":"macro","category":"Macro classes","group":"Scroll shadow","description":"Adds inset box-shadows at the top and bottom of a scrollable container to indicate hidden overflow above or below.","optional":false,"layer":"slashed.macros"},{"name":"sf-scroll-snap","selector":".sf-scroll-snap","kind":"macro","category":"Macro classes","group":"Scroll snap","description":"Enables CSS scroll-snap-type: x mandatory on a horizontal scroll container. Children should have scroll-snap-align.","optional":false,"layer":"slashed.macros"},{"name":"sf-section","selector":".sf-section","kind":"layout","category":"Layout primitives","group":"Section","description":"Full-width page section with vertical padding (--sf-section-pad-default). Use to create visually distinct content bands.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--2xl","selector":".sf-section--2xl","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with 2xl vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--collapse","selector":".sf-section--collapse","kind":"layout","category":"Layout primitives","group":"Collapse modifier","description":"Section variant that removes vertical padding (zero-padding section for adjacent same-color blocks).","optional":false,"layer":"slashed.layout"},{"name":"sf-section--guttered","selector":".sf-section--guttered","kind":"layout","category":"Layout primitives","group":"Section","description":"Adds horizontal page gutters directly to a section — use when you want to skip a separate .sf-container wrapper (gutterless layout inside section). Neutralises container gutter to prevent double padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--l","selector":".sf-section--l","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with large (l) vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--m","selector":".sf-section--m","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with medium (m) vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--s","selector":".sf-section--s","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with small (s) vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--xl","selector":".sf-section--xl","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with xl vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section--xs","selector":".sf-section--xs","kind":"layout","category":"Layout primitives","group":"Section","description":"Section variant with xs vertical padding.","optional":false,"layer":"slashed.layout"},{"name":"sf-section-group","selector":".sf-section-group","kind":"layout","category":"Layout primitives","group":"Section","description":"Groups adjacent sf-section elements so their combined padding collapses correctly at the top and bottom edges.","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar","selector":".sf-sidebar","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Two-column sidebar layout: first child is the sidebar, second child is main content. The sidebar collapses below the breakpoint (--sf-sidebar-min-width). Default sidebar on the left.","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar--narrow","selector":".sf-sidebar--narrow","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Sidebar variant with a narrower sidebar column.","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar--right","selector":".sf-sidebar--right","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Sidebar variant with the sidebar on the right (second child becomes the sidebar).","optional":false,"layer":"slashed.layout"},{"name":"sf-sidebar--wide","selector":".sf-sidebar--wide","kind":"layout","category":"Layout primitives","group":"Sidebar","description":"Sidebar variant with a wider sidebar column.","optional":false,"layer":"slashed.layout"},{"name":"sf-slide-in-down","selector":".sf-slide-in-down","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-above animation. Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-slide-in-left","selector":".sf-slide-in-left","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-right animation (slides to the left). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-slide-in-right","selector":".sf-slide-in-right","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-left animation (slides to the right). Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-slide-in-up","selector":".sf-slide-in-up","kind":"motion","category":"Motion / animation","group":"Animation presets","description":"One-shot slide-in-from-below animation. Scoped to no-preference.","optional":false,"layer":"slashed.motion"},{"name":"sf-stack","selector":".sf-stack","kind":"layout","category":"Layout primitives","group":"Stack","description":"Flex column with even vertical spacing between children (--sf-stack-gap). Stacking context for vertical rhythm.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--2xl","selector":".sf-stack--2xl","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with 2xl gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--center","selector":".sf-stack--center","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant that centers children on the cross axis.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--end","selector":".sf-stack--end","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant that aligns children to the cross-axis end (right in LTR).","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--l","selector":".sf-stack--l","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with large (l) gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--m","selector":".sf-stack--m","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with medium (m) gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--s","selector":".sf-stack--s","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with small (s) gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--stretch","selector":".sf-stack--stretch","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant that stretches children to fill the full available width.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--xl","selector":".sf-stack--xl","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with xl gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-stack--xs","selector":".sf-stack--xs","kind":"layout","category":"Layout primitives","group":"Stack","description":"Stack variant with xs gap between children.","optional":false,"layer":"slashed.layout"},{"name":"sf-subgrid","selector":".sf-subgrid","kind":"layout","category":"Layout primitives","group":"Subgrid","description":"Passes the parent grid columns through to children via subgrid. Place on a grid item that should align its own children to the outer grid columns.","optional":false,"layer":"slashed.layout"},{"name":"sf-subgrid-rows","selector":".sf-subgrid-rows","kind":"layout","category":"Layout primitives","group":"Subgrid","description":"Passes the parent grid rows through to children via subgrid. Place on a grid item that should align its own children to the outer grid rows.","optional":false,"layer":"slashed.layout"},{"name":"sf-surface","selector":".sf-surface","kind":"macro","category":"Macro classes","group":"Surface","description":"Generic semantic surface: applies --sf-surface-color as the background and automatically sets a contrasting text color. Tone variants (--primary, --action, etc.) activate preset palettes.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--action","selector":".sf-surface--action","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the action color palette (button/CTA primary color).","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--danger","selector":".sf-surface--danger","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the danger status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--info","selector":".sf-surface--info","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the info status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--inverse","selector":".sf-surface--inverse","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant that inverts light/dark, creating an always-dark surface in light mode and always-light in dark mode.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--neutral","selector":".sf-surface--neutral","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the neutral palette (muted/gray).","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--primary","selector":".sf-surface--primary","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the primary brand color palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--secondary","selector":".sf-surface--secondary","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the secondary brand color palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--success","selector":".sf-surface--success","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the success status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--tertiary","selector":".sf-surface--tertiary","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the tertiary brand color palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-surface--warning","selector":".sf-surface--warning","kind":"macro","category":"Macro classes","group":"Surface","description":"Surface variant using the warning status palette.","optional":false,"layer":"slashed.macros"},{"name":"sf-switcher","selector":".sf-switcher","kind":"layout","category":"Layout primitives","group":"Switcher","description":"Flex layout that switches from a horizontal row to a vertical column when the container is narrower than --sf-switcher-threshold.","optional":false,"layer":"slashed.layout"},{"name":"sf-switcher--no-wrap","selector":".sf-switcher--no-wrap","kind":"layout","category":"Layout primitives","group":"Switcher","description":"Switcher variant that stays horizontal and never wraps (single-line regardless of container width).","optional":false,"layer":"slashed.layout"},{"name":"sf-switcher--vertical","selector":".sf-switcher--vertical","kind":"layout","category":"Layout primitives","group":"Switcher","description":"Switcher variant that starts in the vertical (stacked) direction on all sizes.","optional":false,"layer":"slashed.layout"},{"name":"sf-tabular-nums","selector":".sf-tabular-nums","kind":"macro","category":"Macro classes","group":"Tabular figures","description":"Forces tabular (monospaced) number rendering. Use on price tables, counters, and anywhere numbers need to align vertically across rows.","optional":false,"layer":"slashed.macros"},{"name":"sf-text-gradient","selector":".sf-text-gradient","kind":"macro","category":"Macro classes","group":"Text gradient","description":"Applies a brand gradient to inline text. Sets the background to the gradient, clips it to the text, and makes the text color transparent.","optional":false,"layer":"slashed.macros"},{"name":"sf-text-protect","selector":".sf-text-protect","kind":"macro","category":"Macro classes","group":"Text protect","description":"Wraps text in a translucent dark gradient overlay to ensure legibility when placed over a light or variable background image.","optional":false,"layer":"slashed.macros"},{"name":"sf-theme-transition","selector":".sf-theme-transition","kind":"theme","category":"Theme utilities","group":"OPT-IN THEME CROSS-FADE","description":"Opt-in animated light/dark theme crossfade. Apply to (or a subtree) so color tokens transition smoothly when [data-theme] changes. Duration controlled by --sf-theme-transition-duration.","optional":false,"layer":"slashed.themes"},{"name":"sf-truncate","selector":".sf-truncate","kind":"macro","category":"Macro classes","group":"Truncate / line-clamp","description":"Single-line text overflow with ellipsis. Equivalent to the classic text-overflow: ellipsis trio (white-space nowrap, overflow hidden, text-overflow ellipsis).","optional":false,"layer":"slashed.macros"},{"name":"skip-link","selector":".skip-link","kind":"accessibility","category":"Accessibility","group":"Skip link","description":"Accessible skip-navigation link. Hidden until focused; jumps keyboard users past repeated navigation blocks. Place as the very first element in .","optional":false,"layer":"slashed.accessibility"},{"name":"sr-only","selector":".sr-only","kind":"accessibility","category":"Accessibility","group":"Screen-reader-only. Atomic contract: a partial override","description":"Visually hides content while keeping it accessible to screen readers. Use for labels, descriptions, and off-screen text that assistive technology needs.","optional":false,"layer":"slashed.accessibility"},{"name":"sr-only-focusable","selector":".sr-only-focusable","kind":"accessibility","category":"Accessibility","group":"Screen-reader-only. Atomic contract: a partial override","description":"Extends sr-only — also reveals the element when it receives keyboard focus. Typical use: skip links and visually-hidden focus targets.","optional":false,"layer":"slashed.accessibility"},{"name":"theme-transition","selector":".theme-transition","kind":"theme","category":"Theme example","group":"5. SMOOTH THEME-TRANSITION HELPER","description":"Internal helper class used by the sf-theme-transition macro. Applies per-property transitions to registered color tokens during light/dark mode switches.","optional":true,"layer":"slashed.themes"}]`),Th={classes:Rh},Dh={generatedBy:"configurator/scripts/sync-api.mjs",source:"docs/api-index.json",tokensHash:"29dec6de6d0c",bundles:["full","optimal","optimal-components","optimal-utilities"],counts:{tokens:685,byTier:{PUBLIC:629,"PUBLIC-ADVANCED":55,INTERNAL:1},byCategory:{"Layout tokens":54,"Core tokens":602,"Macro tokens":23,"Component tokens":6}}},Mh=JSON.parse(`[{"name":"--sf-alternate-gap","tier":"PUBLIC","role":"consumption","namespace":"alternate","category":"Layout tokens","group":"Alternate (zigzag)","description":"Gap tokens for the alternating content/media (zigzag) layout.","note":"Gap between items in the alternating zigzag layout.","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-alternate-inner-gap","tier":"PUBLIC","role":"consumption","namespace":"alternate","category":"Layout tokens","group":"Alternate (zigzag)","description":"Gap tokens for the alternating content/media (zigzag) layout.","note":"Gap between content and media within each zigzag item.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-blink","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Blinking visibility loop. Use for cursor indicators or critical attention cues. Respect prefers-reduced-motion.","value":"sf-blink calc(1s * var(--sf-motion-scale)) steps(1, end) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-color-pulse","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Pulsing color loop. Use for live-status badges (recording, live). Respect prefers-reduced-motion.","value":"sf-color-pulse var(--sf-duration-slow) var(--sf-ease-in-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-1","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Shortest stagger delay. Apply to the first element in a sequentially animated group.","value":"calc(75ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-2","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Second stagger delay step.","value":"calc(150ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-3","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Third stagger delay step.","value":"calc(225ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-4","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Fourth stagger delay step.","value":"calc(300ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-delay-5","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Longest stagger delay. Apply to the last element in a sequentially animated group.","value":"calc(375ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-fade-in","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Fade-in entrance animation shorthand. Use directly as animation property value.","value":"sf-fade-in var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-fade-out","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Fade-out exit animation shorthand.","value":"sf-fade-out var(--sf-duration-normal) var(--sf-ease-in) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-float","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Gentle floating / levitating loop. Use for hero illustrations or floating UI elements. Decorative — disable for prefers-reduced-motion.","value":"sf-float calc(3s * var(--sf-motion-scale)) var(--sf-ease-in-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-ping","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Expanding ping / ripple loop. Use for notification badges and live-indicator dots.","value":"sf-ping var(--sf-duration-slow) var(--sf-ease-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-scale-down","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Scale-down exit animation. Pairs with --sf-animation-scale-up for enter/leave transitions.","value":"sf-scale-down var(--sf-duration-normal) var(--sf-ease-in) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-scale-up","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Scale-up entrance animation. Use for modals, popovers, and tooltips appearing.","value":"sf-scale-up var(--sf-duration-normal) var(--sf-ease-overshoot) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-shimmer","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Shimmer / skeleton-loading sweep. Apply on placeholder elements while content loads.","value":"sf-shimmer calc(1.5s * var(--sf-motion-scale)) var(--sf-ease-in-out) infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-down","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from above. Use for dropdown menus and top-attached sheets.","value":"sf-slide-in-down var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-left","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from the left. Use for left-side drawers and navigation panels.","value":"sf-slide-in-left var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-right","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from the right. Use for right-side drawers and detail panels.","value":"sf-slide-in-right var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-slide-in-up","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Slide-in from below. Use for bottom sheets, toasts, and floating action buttons.","value":"sf-slide-in-up var(--sf-duration-normal) var(--sf-ease-out) both","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-animation-spin","tier":"PUBLIC","role":"consumption","namespace":"animation","category":"Core tokens","group":"Animation presets","description":"Complete animation shorthand values — pair named @keyframes with duration and easing. Use directly as animation property values.","note":"Continuous rotation loop. Use for loading spinners and progress indicators.","value":"sf-spin var(--sf-duration-slower) linear infinite","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-aspect","tier":"PUBLIC","role":"knob","namespace":"aspect","category":"Macro tokens","group":"Aspect ratio","description":"Aspect-ratio value for the .aspect-ratio macro.","note":"Aspect ratio value for the .aspect-ratio macro.","value":"16 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-cols-default","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Default column count for the bento grid.","value":"4","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-gap","tier":"PUBLIC","role":"consumption","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Gap between bento grid cells.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-row-compact","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Row height for compact-variant bento items.","value":"6rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-row-default","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Default row height for standard bento grid cells.","value":"10rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bento-row-tall","tier":"PUBLIC","role":"knob","namespace":"bento","category":"Layout tokens","group":"Bento grid","description":"Configuration tokens for the bento-grid layout primitive.","note":"Tall row height for visually prominent or hero bento cells.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-fit","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"object-fit applied to .sf-bg when used as a bare media element, and to .sf-bg > img / video / picture children. Defaults to cover.","note":"object-fit applied to .sf-bg when used as a bare media element, and to .sf-bg > img / video / picture children. Defaults to cover.","value":"cover","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-inset","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"Inset from every edge of the parent. A single length applied uniformly; the layer size is derived from it so a non-zero inset still fills correctly.","note":"Inset from every edge of the parent. A single length applied uniformly; the layer size is derived from it so a non-zero inset still fills correctly.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-position","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"object-position controlling where the media is anchored within the layer. Defaults to center (50% 50%).","note":"object-position controlling where the media is anchored within the layer. Defaults to center (50% 50%).","value":"50% 50%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-radius","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"border-radius applied to the .sf-bg layer and its img/video/picture children. Defaults to 0; set to match the parent's radius when clipping is needed.","note":"border-radius applied to the .sf-bg layer and its img/video/picture children. Defaults to 0; set to match the parent's radius when clipping is needed.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-bg-z","tier":"PUBLIC","role":"knob","namespace":"bg","category":"Layout tokens","group":"Background layer (.sf-bg)","description":"z-index of the background layer. Defaults to -2 so it sits behind sibling content but above the parent's own background.","note":"z-index of the background layer. Defaults to -2 so it sits behind sibling content but above the parent's own background.","value":"-2","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-blur","tier":"PUBLIC","role":"knob","namespace":"blur","category":"Core tokens","group":"Blur & opacity","description":"Backdrop-filter blur scale and background-opacity tokens.","note":"Backdrop-filter blur amount for frosted-glass surfaces (navbars, overlays, dialogs). Default 12px. Pair with a semi-transparent background.","value":"12px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-color","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Text color for body copy. Alias of --sf-color-text. Override here to deviate body text from the global text color.","value":"var(--sf-color-text)","aliasOf":"--sf-color-text","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-em-style","tier":"PUBLIC","role":"knob","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"font-style for inside body text (italic by default). Override to suppress italics if your typeface has no italic variant.","value":"italic","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-font-family","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font family for body text. Alias of --sf-font-body.","value":"var(--sf-font-body)","aliasOf":"--sf-font-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-font-size","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Base font size for body paragraphs. Alias of --sf-text-m.","value":"var(--sf-text-m)","aliasOf":"--sf-text-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-font-weight","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for body text. Alias of --sf-font-weight-body.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-line-height","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for body paragraphs. Alias of --sf-leading-normal.","value":"var(--sf-leading-normal)","aliasOf":"--sf-leading-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-strong-weight","tier":"PUBLIC","role":"consumption","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for inside body text. Override to choose a specific weight instead of inheriting bold.","value":"var(--sf-font-weight-strong)","aliasOf":"--sf-font-weight-strong","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-body-text-wrap","tier":"PUBLIC","role":"knob","namespace":"body","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"text-wrap mode for body paragraphs. 'pretty' prevents orphaned last words; 'balance' equalises line lengths.","value":"pretty","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border shorthands","description":"Ready-to-use border shorthand values (width + style + color) for the three most common border weights.","note":"Default border shorthand (width + solid + color). Apply directly to border property.","value":"var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-scale","tier":"PUBLIC","role":"knob","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Global border-width multiplier. Set to 0 for borderless UI; 0.5 for hairline-only; 2 to double all border widths across the system.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-strong","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border shorthands","description":"Ready-to-use border shorthand values (width + style + color) for the three most common border weights.","note":"Strong-emphasis border shorthand.","value":"var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border--strong)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-style","tier":"PUBLIC","role":"knob","namespace":"border","category":"Core tokens","group":"Border style","description":"Global border-style default (solid, dashed, etc.).","note":"Global border-style default applied across all border tokens.","value":"solid","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-subtle","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border shorthands","description":"Ready-to-use border shorthand values (width + style + color) for the three most common border weights.","note":"Low-contrast subtle border shorthand.","value":"var(--sf-border-width-1) var(--sf-border-style) var(--sf-color-border--subtle)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-1","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Standard 1px border width.","value":"calc(1px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-2","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Medium 2px border width. Common for focus outlines.","value":"calc(2px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-3","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Thick 3px border width.","value":"calc(3px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-4","tier":"PUBLIC","role":"consumption","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"Extra-thick 4px border width for decorative borders.","value":"calc(4px * var(--sf-border-scale, 1))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-border-width-hairline","tier":"PUBLIC","role":"knob","namespace":"border","category":"Core tokens","group":"Border widths","description":"Raw border-width values. Use the shorthands above unless you need to override just the width.","note":"1px border width (hairline).","value":"0.5px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-box-border-color","tier":"PUBLIC","role":"consumption","namespace":"box","category":"Layout tokens","group":"Box","description":"Border, background, and padding tokens for the box layout primitive.","note":"Border color for the box layout primitive.","value":"var(--sf-color-border)","aliasOf":"--sf-color-border","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-box-border-width","tier":"PUBLIC","role":"knob","namespace":"box","category":"Layout tokens","group":"Box","description":"Border, background, and padding tokens for the box layout primitive.","note":"Border width for the box layout primitive.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-box-padding","tier":"PUBLIC","role":"consumption","namespace":"box","category":"Layout tokens","group":"Box","description":"Border, background, and padding tokens for the box layout primitive.","note":"Inner padding for the box layout primitive.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-breakout-width","tier":"PUBLIC","role":"consumption","namespace":"breakout","category":"Layout tokens","group":"Content grid (breakout pattern)","description":"Breakout width and content width for the content-grid pattern (full-bleed breakouts inside a constrained column).","note":"Width of full-bleed breakout elements inside a content grid.","value":"var(--sf-container-wide)","aliasOf":"--sf-container-wide","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-btn-padding-block","tier":"PUBLIC","role":"consumption","namespace":"btn","category":"Component tokens","group":"BUTTON TOKENS","description":"Padding and radius tokens that control button geometry. Override these to give buttons a distinct visual language from form fields.","note":"","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-btn-padding-inline","tier":"PUBLIC","role":"consumption","namespace":"btn","category":"Component tokens","group":"BUTTON TOKENS","description":"Padding and radius tokens that control button geometry. Override these to give buttons a distinct visual language from form fields.","note":"","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-btn-radius","tier":"PUBLIC","role":"consumption","namespace":"btn","category":"Component tokens","group":"BUTTON TOKENS","description":"Padding and radius tokens that control button geometry. Override these to give buttons a distinct visual language from form fields.","note":"","value":"var(--sf-radius-m)","aliasOf":"--sf-radius-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-caret-color","tier":"PUBLIC","role":"consumption","namespace":"caret","category":"Core tokens","group":"Focus / form colors","description":"Focus ring and form caret colors. Centralised here so keyboard navigation is consistently styled.","note":"Cursor caret color inside text inputs and contenteditable elements.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-center-gutter","tier":"PUBLIC","role":"consumption","namespace":"center","category":"Layout tokens","group":"Center","description":"Max-width and gutter for the center layout primitive.","note":"Minimum side gutter for the center layout.","value":"var(--sf-gutter)","aliasOf":"--sf-gutter","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-center-max","tier":"PUBLIC","role":"consumption","namespace":"center","category":"Layout tokens","group":"Center","description":"Max-width and gutter for the center layout primitive.","note":"Maximum width for the center layout.","value":"var(--sf-container-default)","aliasOf":"--sf-container-default","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cluster-align","tier":"PUBLIC","role":"knob","namespace":"cluster","category":"Layout tokens","group":"Cluster","description":"Configuration tokens for the cluster layout (inline wrapped items).","note":"Vertical alignment of cluster items (align-items value).","value":"center","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cluster-gap","tier":"PUBLIC","role":"consumption","namespace":"cluster","category":"Layout tokens","group":"Cluster","description":"Configuration tokens for the cluster layout (inline wrapped items).","note":"Gap between wrapped inline items in the cluster layout.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cluster-justify","tier":"PUBLIC","role":"knob","namespace":"cluster","category":"Layout tokens","group":"Cluster","description":"Configuration tokens for the cluster layout (inline wrapped items).","note":"Horizontal justification of the cluster (justify-content value).","value":"flex-start","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-code-font-size","tier":"PUBLIC","role":"knob","namespace":"code","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for inline and
. Usually slightly smaller than body text so monospace doesn't feel oversized.","value":"0.875em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Primary interactive color. Applied to filled buttons, active indicators, and brand accent surfaces.","value":"light-dark(var(--sf-color-action-source-light), var(--sf-color-action-source-dark, oklch(from var(--sf-color-action-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Action color at pressed/active brightness.","value":"var(--sf-color-action-xdark)","aliasOf":"--sf-color-action-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Action color at hover brightness.","value":"var(--sf-color-action-darker)","aliasOf":"--sf-color-action-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Very light action shade. Hover fills on white surfaces, badge backgrounds.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Light action shade. Subtle fills and outlined badge backgrounds.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Light-mid action shade. Borders on light backgrounds, low-emphasis fills.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Mid-light action shade. Disabled state fills, decorative accents.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Lightest action tint. Background fill for subtle action-tinted surfaces.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Mid action shade — the 'pure' hue. Accessible on both light and dark backgrounds.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Mid-dark action shade. Text on light surfaces, icon fills.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Dark action shade. Strong text and icon fills on light backgrounds.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Very dark action shade. High-contrast text on white.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-black action shade. Extreme contrast on white surfaces.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Darkest action tint. Near-black for dark-theme surface accents.","value":"color-mix(in oklab, var(--sf-color-action) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"10% opacity action tint. Subtle hover or selected-row background.","value":"oklch(from var(--sf-color-action) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"30% opacity action tint.","value":"oklch(from var(--sf-color-action) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"5% opacity action tint. Barely-there hover highlight.","value":"oklch(from var(--sf-color-action) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"50% opacity action tint. Mid-transparency badge or overlay.","value":"oklch(from var(--sf-color-action) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"80% opacity action tint.","value":"oklch(from var(--sf-color-action) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Deep action shade for high-contrast contexts.","value":"var(--sf-color-action-600)","aliasOf":"--sf-color-action-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-transparent action tint for ghost-button hover backgrounds.","value":"var(--sf-color-action-a5)","aliasOf":"--sf-color-action-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Light action shade for soft accents.","value":"var(--sf-color-action-400)","aliasOf":"--sf-color-action-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Medium action fill — outlined button hover backgrounds.","value":"var(--sf-color-action-a30)","aliasOf":"--sf-color-action-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-action. Enables smooth CSS transitions when toggling between light and dark mode; without  registration the browser cannot interpolate and transitions snap at 50%.","value":"oklch(0.70 0.198 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the action color. Animate this to smoothly transition between light and dark brand themes.","note":"OKLCH lightness source for the action color. Animate this to smoothly transition between light and dark brand themes.","value":"oklch(0.50 0.22 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Lightest action tint — selected rows, active nav, chips.","value":"var(--sf-color-action-a10)","aliasOf":"--sf-color-action-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-black action shade for maximum contrast on light surfaces.","value":"var(--sf-color-action-950)","aliasOf":"--sf-color-action-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Near-white action shade for maximum contrast on dark surfaces.","value":"var(--sf-color-action-50)","aliasOf":"--sf-color-action-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Extra-dark action shade.","value":"var(--sf-color-action-800)","aliasOf":"--sf-color-action-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-action-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"action","description":"Semantic action-color scale derived from --sf-color-action. Covers fills, hover/active states, and ghost variants for primary interactive elements.","note":"Extra-light action shade.","value":"var(--sf-color-action-200)","aliasOf":"--sf-color-action-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Mode-adaptive base surface color. Drives the page canvas and the surface elevation family; not an interactive/brand role.","value":"light-dark(var(--sf-color-base-source-light), var(--sf-color-base-source-dark, oklch(from var(--sf-color-base-source-light) clamp(0.16, calc(1.18 - l), 0.24) calc(c * 0.5) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Pressed/active surface derived from --sf-color-base for subtle background interactions.","value":"oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.08 + var(--sf-is-dark) * 0.16), 0.99) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Hover-state surface derived from --sf-color-base for subtle background interactions.","value":"oklch(from var(--sf-color-base) clamp(0.01, calc(l - 0.04 + var(--sf-is-dark) * 0.08), 0.99) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Very light base-surface level.","value":"oklch(from var(--sf-color-base) 0.94 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Light base-surface level.","value":"oklch(from var(--sf-color-base) 0.88 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Light-mid base-surface level.","value":"oklch(from var(--sf-color-base) 0.78 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Mid-light base-surface level.","value":"oklch(from var(--sf-color-base) 0.65 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Lightest base-surface level.","value":"oklch(from var(--sf-color-base) 0.97 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Mid base-surface level.","value":"oklch(from var(--sf-color-base) 0.50 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Mid-dark base-surface level.","value":"oklch(from var(--sf-color-base) 0.37 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Dark base-surface level.","value":"oklch(from var(--sf-color-base) 0.27 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Very dark base-surface level.","value":"oklch(from var(--sf-color-base) 0.17 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Near-black base-surface level.","value":"oklch(from var(--sf-color-base) 0.11 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Darkest base-surface level.","value":"oklch(from var(--sf-color-base) 0.06 c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"10% opacity base-surface tint.","value":"oklch(from var(--sf-color-base) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"30% opacity base-surface tint.","value":"oklch(from var(--sf-color-base) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"5% opacity base-surface tint.","value":"oklch(from var(--sf-color-base) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"50% opacity base-surface tint.","value":"oklch(from var(--sf-color-base) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"80% opacity base-surface tint.","value":"oklch(from var(--sf-color-base) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Near-transparent base-surface tint for ghost backgrounds.","value":"var(--sf-color-base-a5)","aliasOf":"--sf-color-base-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Medium base-surface fill for muted containers or overlays.","value":"var(--sf-color-base-a30)","aliasOf":"--sf-color-base-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-base. Keep near-black for dark-mode surfaces and elevation offsets.","value":"oklch(0.22 0.003 250)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH source color for the light-mode base surface. Keep near-white so --sf-color-bg, --sf-color-surface, and raised/inset levels have room to separate.","note":"OKLCH source color for the light-mode base surface. Keep near-white so --sf-color-bg, --sf-color-surface, and raised/inset levels have room to separate.","value":"oklch(0.96 0.006 250)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-base-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"base","description":"Semantic base-color scale derived from --sf-color-base. Covers fills, hover/active states, and ghost variants for secondary interactive elements.","note":"Subtle base-surface tint for low-emphasis backgrounds.","value":"var(--sf-color-base-a10)","aliasOf":"--sf-color-base-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Base page / component background. The canvas all other surfaces layer on top of.","value":"oklch(from var(--sf-color-base) calc(l + 0.02) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background tint for pressed/active interactive elements.","value":"oklch(from var(--sf-color-neutral) l c h / 0.12)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background for disabled interactive elements.","value":"var(--sf-color-inset)","aliasOf":"--sf-color-inset","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--focus","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background tint for focused interactive elements.","value":"oklch(from var(--sf-color-action) l c h / 0.06)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background tint for hovered interactive elements (rows, list items, etc.).","value":"oklch(from var(--sf-color-neutral) l c h / 0.08)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-bg--selected","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background for selected items (checked rows, active nav links).","value":"oklch(from var(--sf-color-action) l c h / 0.1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-black","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Absolute black reference value.","value":"oklch(0% 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Default border for dividers and component edges.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.70, calc(l + 0.35), 0.95) 0.005 h), oklch(from var(--sf-color-neutral) clamp(0.25, calc(l - 0.3), 0.55) 0.005 h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Border alpha tokens","description":"Semi-transparent border variants for overlays and glass-morphism effects.","note":"Semi-transparent border for disabled element edges.","value":"oklch(from var(--sf-color-border--subtle) l 0 h / 0.5)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--focus","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Focus indicator border, used alongside --sf-focus-ring-color.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Stronger border for visually prominent edges and active outlines.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.55, calc(l + 0.1), 0.85) 0.02 h), oklch(from var(--sf-color-neutral) clamp(0.38, calc(l - 0.1), 0.65) 0.02 h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Borders","description":"Semantic border colors for dividers, component edges, and focus indicators.","note":"Low-contrast border for subtle separation without strong visual weight.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.75, calc(l + 0.4), 0.97) 0.005 h), oklch(from var(--sf-color-neutral) clamp(0.20, calc(l - 0.38), 0.45) 0.005 h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-border--translucent","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Border alpha tokens","description":"Semi-transparent border variants for overlays and glass-morphism effects.","note":"Translucent border for glass-morphism and frosted surfaces.","value":"oklch(from var(--sf-color-neutral) l c h / 0.15)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-code-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Interactive states","description":"Background fills for generic interactive states (hover, focus, active, selected, disabled). Apply to any element that needs state feedback.","note":"Background for inline  elements. Usually a subtle tint of the inset surface.","value":"var(--sf-color-inset)","aliasOf":"--sf-color-inset","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-code-text","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Text color for inline code and monospace preformatted text.","value":"oklch(from var(--sf-color-code-bg) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Destructive / danger state color. Used for delete actions, error alerts, and critical warnings.","value":"light-dark(var(--sf-color-danger-source-light), var(--sf-color-danger-source-dark, oklch(from var(--sf-color-danger-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium danger fill for icon backgrounds and badge fills.","value":"oklch(from var(--sf-color-danger) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-danger.","value":"oklch(0.71 0.198 12)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the danger status color (covers destructive actions and form validation errors).","note":"OKLCH lightness source for the danger status color (covers destructive actions and form validation errors).","value":"oklch(0.48 0.22 12)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast danger color for alert body text and icons.","value":"light-dark( oklch(from var(--sf-color-danger-source-light) calc(l - 0.1) c h), oklch(from var(--sf-color-danger) clamp(0.70, calc(l + 0.15), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-danger-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light danger tint for error row backgrounds and alert container fills.","value":"oklch(from var(--sf-color-danger) l c h / 0.1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-dim","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Backdrop overlay color for modals, drawers, and lightboxes.","value":"oklch(0 0 0 / 0.5)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-heading","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Heading text color. Slightly stronger contrast than body text for visual hierarchy.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.05, calc(l - 0.4 - var(--sf-contrast-bias)), 0.35) c h), oklch(from var(--sf-color-neutral) clamp(0.70, calc(l + 0.25 + var(--sf-contrast-bias)), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Informational color for neutral tips, hints, and non-urgent notices.","value":"light-dark(var(--sf-color-info-source-light), var(--sf-color-info-source-dark, oklch(from var(--sf-color-info-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium info fill for info icons and hint chips.","value":"oklch(from var(--sf-color-info) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-info.","value":"oklch(0.71 0.162 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the info status color.","note":"OKLCH lightness source for the info status color.","value":"oklch(0.48 0.18 235)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast info color for hint body text.","value":"light-dark( oklch(from var(--sf-color-info-source-light) calc(l - 0.1) c h), oklch(from var(--sf-color-info) clamp(0.70, calc(l + 0.15), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-info-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light info tint for informational note backgrounds.","value":"oklch(from var(--sf-color-info) l c h / 0.1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-inset","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Slightly inset surface for nested areas — inputs, code blocks, sidebar panels.","value":"oklch(from var(--sf-color-base) calc(l - 0.02) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-inverse","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Inverted (dark-on-light / light-on-dark) surface for high-contrast banners or tooltips.","value":"oklch(from var(--sf-color-base) calc(1 - l) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Default hyperlink color.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.07, 0.48), 1) c h), oklch(from var(--sf-color-action) clamp(0.68, l, 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Link color when actively pressed.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.21, 0.34), 1) c h), oklch(from var(--sf-color-action) clamp(0, max(l + 0.15, 0.74), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Disabled link color (low contrast, no interaction).","value":"var(--sf-color-text--disabled)","aliasOf":"--sf-color-text--disabled","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Link color on hover.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.15, 0.40), 1) c h), oklch(from var(--sf-color-action) clamp(0, max(l + 0.10, 0.68), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--underline","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Link alpha token","description":"Semi-transparent underline color token used to tint the link underline independently from the link text color.","note":"Color of the link underline decoration. Defaults to a semi-transparent variant of the link color.","value":"oklch(from var(--sf-color-action) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-link--visited","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Visited link color.","value":"light-dark( oklch(from var(--sf-color-action) clamp(0, min(l - 0.07, 0.48), 1) c calc(h + 60)), oklch(from var(--sf-color-action) clamp(0.68, l, 1) c calc(h + 60)) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-mark-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Selection & mark","description":"Background and text colors for browser text selections and  highlights. Adapts automatically in dark mode.","note":"Background color for highlighted  elements.","value":"oklch(from var(--sf-color-warning) l c h / 0.25)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-mark-text","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Text color inside highlighted  elements.","value":"inherit","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Neutral interactive color for low-emphasis actions and tertiary buttons.","value":"light-dark(var(--sf-color-neutral-source-light), var(--sf-color-neutral-source-dark, oklch(from var(--sf-color-neutral-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Neutral color at pressed/active brightness.","value":"var(--sf-color-neutral-xdark)","aliasOf":"--sf-color-neutral-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Neutral color at hover brightness.","value":"var(--sf-color-neutral-darker)","aliasOf":"--sf-color-neutral-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Very light neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Light neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Light-mid neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Mid-light neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Lightest neutral tint.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Mid neutral shade — the 'pure' hue.","value":"var(--sf-color-neutral)","aliasOf":"--sf-color-neutral","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Mid-dark neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Dark neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Very dark neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-black neutral shade.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Darkest neutral tint.","value":"color-mix(in oklab, var(--sf-color-neutral) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"10% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"30% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"5% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"50% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"80% opacity neutral tint.","value":"oklch(from var(--sf-color-neutral) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Deep neutral shade for high-contrast contexts.","value":"var(--sf-color-neutral-600)","aliasOf":"--sf-color-neutral-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-transparent neutral tint for ghost-button hover backgrounds.","value":"var(--sf-color-neutral-a5)","aliasOf":"--sf-color-neutral-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Light neutral shade.","value":"var(--sf-color-neutral-400)","aliasOf":"--sf-color-neutral-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Muted neutral fill for low-emphasis contexts.","value":"var(--sf-color-neutral-a30)","aliasOf":"--sf-color-neutral-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-neutral.","value":"oklch(0.69 0.0225 260)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the neutral color.","note":"OKLCH lightness source for the neutral color.","value":"oklch(0.52 0.025 260)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Lightest neutral semantic tint.","value":"var(--sf-color-neutral-a10)","aliasOf":"--sf-color-neutral-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-black neutral shade.","value":"var(--sf-color-neutral-950)","aliasOf":"--sf-color-neutral-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Near-white neutral shade.","value":"var(--sf-color-neutral-50)","aliasOf":"--sf-color-neutral-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Extra-dark neutral shade.","value":"var(--sf-color-neutral-800)","aliasOf":"--sf-color-neutral-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-neutral-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"neutral","description":"Semantic neutral-color scale derived from --sf-color-neutral. Useful for muted UI chrome.","note":"Extra-light neutral shade.","value":"var(--sf-color-neutral-200)","aliasOf":"--sf-color-neutral-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-overlay","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Overlay surface for floating panels, sheets, and modals.","value":"oklch(from var(--sf-color-base) l c h / 0.9)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Primary brand palette color. Independent from --sf-color-action by default; override either source token to couple or separate brand and action roles.","value":"light-dark(var(--sf-color-primary-source-light), var(--sf-color-primary-source-dark, oklch(from var(--sf-color-primary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Primary color at pressed/active brightness.","value":"var(--sf-color-primary-xdark)","aliasOf":"--sf-color-primary-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Primary color at hover brightness.","value":"var(--sf-color-primary-darker)","aliasOf":"--sf-color-primary-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Very light primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Light primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Light-mid primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Mid-light primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Lightest primary tint.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Mid primary shade — the 'pure' hue.","value":"var(--sf-color-primary)","aliasOf":"--sf-color-primary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Mid-dark primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Dark primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Very dark primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-black primary shade.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Darkest primary tint.","value":"color-mix(in oklab, var(--sf-color-primary) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"10% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"30% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"5% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"50% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"80% opacity primary tint.","value":"oklch(from var(--sf-color-primary) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Deep primary shade.","value":"var(--sf-color-primary-600)","aliasOf":"--sf-color-primary-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-transparent primary tint for ghost-button hover backgrounds.","value":"var(--sf-color-primary-a5)","aliasOf":"--sf-color-primary-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Light primary shade.","value":"var(--sf-color-primary-400)","aliasOf":"--sf-color-primary-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Muted primary fill.","value":"var(--sf-color-primary-a30)","aliasOf":"--sf-color-primary-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-primary.","value":"oklch(0.715 0.243 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the primary color.","note":"OKLCH lightness source for the primary color.","value":"oklch(0.47 0.27 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Lightest primary semantic tint.","value":"var(--sf-color-primary-a10)","aliasOf":"--sf-color-primary-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-black primary shade.","value":"var(--sf-color-primary-950)","aliasOf":"--sf-color-primary-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Near-white primary shade.","value":"var(--sf-color-primary-50)","aliasOf":"--sf-color-primary-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Extra-dark primary shade.","value":"var(--sf-color-primary-800)","aliasOf":"--sf-color-primary-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-primary-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"primary","description":"Semantic primary-color scale derived from --sf-color-primary. Covers fills, hover/active states, and ghost variants for the primary palette role.","note":"Extra-light primary shade.","value":"var(--sf-color-primary-200)","aliasOf":"--sf-color-primary-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-raised","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Surfaces","description":"Background surface tokens from page-level to raised cards. Layer these to communicate visual depth.","note":"Elevated card surface that floats above the page background.","value":"oklch(from var(--sf-color-base) calc(l + 0.04) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-scheme","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Color scheme","description":"Preferred color-scheme hint sent to the browser (light / dark / normal).","note":"Preferred color scheme hint (light / dark / normal). Sent to the browser to influence UA chrome styling.","value":"light dark","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Raw secondary palette token for the secondary brand color.","value":"light-dark(var(--sf-color-secondary-source-light), var(--sf-color-secondary-source-dark, oklch(from var(--sf-color-secondary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Secondary color at pressed/active brightness.","value":"var(--sf-color-secondary-xdark)","aliasOf":"--sf-color-secondary-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Secondary color at hover brightness.","value":"var(--sf-color-secondary-darker)","aliasOf":"--sf-color-secondary-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Very light secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Light secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Light-mid secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Mid-light secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Lightest secondary tint.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Mid secondary shade — the 'pure' hue.","value":"var(--sf-color-secondary)","aliasOf":"--sf-color-secondary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Mid-dark secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Dark secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Very dark secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-black secondary shade.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Darkest secondary tint.","value":"color-mix(in oklab, var(--sf-color-secondary) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"10% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"30% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"5% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"50% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"80% opacity secondary tint.","value":"oklch(from var(--sf-color-secondary) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Deep secondary shade.","value":"var(--sf-color-secondary-600)","aliasOf":"--sf-color-secondary-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-transparent secondary tint for ghost-button hover backgrounds.","value":"var(--sf-color-secondary-a5)","aliasOf":"--sf-color-secondary-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Light secondary shade.","value":"var(--sf-color-secondary-400)","aliasOf":"--sf-color-secondary-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Muted secondary fill.","value":"var(--sf-color-secondary-a30)","aliasOf":"--sf-color-secondary-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-secondary.","value":"oklch(0.84 0.036 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the secondary color.","note":"OKLCH lightness source for the secondary color.","value":"oklch(0.22 0.04 264)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Lightest secondary semantic tint.","value":"var(--sf-color-secondary-a10)","aliasOf":"--sf-color-secondary-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-black secondary shade.","value":"var(--sf-color-secondary-950)","aliasOf":"--sf-color-secondary-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Near-white secondary shade.","value":"var(--sf-color-secondary-50)","aliasOf":"--sf-color-secondary-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Extra-dark secondary shade.","value":"var(--sf-color-secondary-800)","aliasOf":"--sf-color-secondary-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-secondary-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"secondary","description":"Semantic secondary-color scale derived from --sf-color-secondary.","note":"Extra-light secondary shade.","value":"var(--sf-color-secondary-200)","aliasOf":"--sf-color-secondary-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-selection-bg","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Selection","description":"Text-selection background color.","note":"Background color applied to browser text selections.","value":"light-dark( oklch(from var(--sf-color-action-source-light) l c h / 0.28), oklch(from var(--sf-color-action-source-dark) clamp(0.62, calc(0.93 - l * 0.4), 0.78) c h / 0.55) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-selection-text","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Text color inside browser text selections.","value":"inherit","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Positive / success color for confirmation messages and completed-state indicators.","value":"light-dark(var(--sf-color-success-source-light), var(--sf-color-success-source-dark, oklch(from var(--sf-color-success-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium success fill for success icons and status chips.","value":"oklch(from var(--sf-color-success) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-success.","value":"oklch(0.70 0.144 145)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the success status color.","note":"OKLCH lightness source for the success status color.","value":"oklch(0.50 0.16 145)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast success color for confirmation message text.","value":"light-dark( oklch(from var(--sf-color-success-source-light) calc(l - 0.15) c h), oklch(from var(--sf-color-success) clamp(0.70, calc(l + 0.15), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-success-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light success tint for confirmation backgrounds.","value":"oklch(from var(--sf-color-success) l c h / 0.12)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-surface","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Resolved color tokens","description":"High-level semantic color aliases. Each resolves to the matching palette source token and adapts automatically between light and dark mode. Start here when applying your brand palette.","note":"Default component surface color. Alias of --sf-color-base; use --sf-color-raised for an elevated card/background level.","value":"var(--sf-color-base)","aliasOf":"--sf-color-base","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Raw tertiary palette token for the third brand color.","value":"light-dark(var(--sf-color-tertiary-source-light), var(--sf-color-tertiary-source-dark, oklch(from var(--sf-color-tertiary-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary--active","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Tertiary color at pressed/active brightness.","value":"var(--sf-color-tertiary-xdark)","aliasOf":"--sf-color-tertiary-xdark","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary--hover","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Tertiary color at hover brightness.","value":"var(--sf-color-tertiary-darker)","aliasOf":"--sf-color-tertiary-darker","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-100","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Very light tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-100), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-200","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Light tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-200), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-300","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Light-mid tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-300), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-400","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Mid-light tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-400), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Lightest tertiary tint.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-50), var(--sf-color-surface))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-500","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Mid tertiary shade — the 'pure' hue.","value":"var(--sf-color-tertiary)","aliasOf":"--sf-color-tertiary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-600","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Mid-dark tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-600), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-700","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Dark tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-700), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-800","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Very dark tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-800), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-900","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-black tertiary shade.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-900), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-950","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Darkest tertiary tint.","value":"color-mix(in oklab, var(--sf-color-tertiary) var(--sf-palette-mix-950), var(--sf-color-text))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a10","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"10% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.10)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a30","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"30% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.30)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a5","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"5% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.05)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a50","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"50% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.50)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-a80","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"80% opacity tertiary tint.","value":"oklch(from var(--sf-color-tertiary) l c h / 0.80)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-darker","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Deep tertiary shade.","value":"var(--sf-color-tertiary-600)","aliasOf":"--sf-color-tertiary-600","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-ghost","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-transparent tertiary tint for ghost-button hover backgrounds.","value":"var(--sf-color-tertiary-a5)","aliasOf":"--sf-color-tertiary-a5","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-lighter","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Light tertiary shade.","value":"var(--sf-color-tertiary-400)","aliasOf":"--sf-color-tertiary-400","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Muted tertiary fill.","value":"var(--sf-color-tertiary-a30)","aliasOf":"--sf-color-tertiary-a30","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-tertiary.","value":"oklch(0.74 0.198 295)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"BRAND COLORS (-source-light source tokens, animatable)","description":"OKLCH lightness source for the tertiary color.","note":"OKLCH lightness source for the tertiary color.","value":"oklch(0.42 0.22 295)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Lightest tertiary semantic tint.","value":"var(--sf-color-tertiary-a10)","aliasOf":"--sf-color-tertiary-a10","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-superdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-black tertiary shade.","value":"var(--sf-color-tertiary-950)","aliasOf":"--sf-color-tertiary-950","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-superlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Near-white tertiary shade.","value":"var(--sf-color-tertiary-50)","aliasOf":"--sf-color-tertiary-50","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-xdark","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Extra-dark tertiary shade.","value":"var(--sf-color-tertiary-800)","aliasOf":"--sf-color-tertiary-800","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-tertiary-xlight","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"tertiary","description":"Semantic tertiary-color scale derived from --sf-color-tertiary.","note":"Extra-light tertiary shade.","value":"var(--sf-color-tertiary-200)","aliasOf":"--sf-color-tertiary-200","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Primary text color. Contrasts against --sf-color-bg for body copy.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.05, calc(l - 0.4 - var(--sf-contrast-bias)), 0.35) c h), oklch(from var(--sf-color-neutral) clamp(0.70, calc(l + 0.25 + var(--sf-contrast-bias)), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--disabled","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Text color for disabled UI elements. Intentionally low contrast.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.55, calc(l + 0.25), 0.82) c h), oklch(from var(--sf-color-neutral) clamp(0.25, calc(l - 0.2), 0.55) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--inverse","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Text color for use on dark/inverted backgrounds.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.85, calc(l + 0.4), 0.98) c h), oklch(from var(--sf-color-neutral) clamp(0.05, calc(l - 0.4), 0.35) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Muted text for metadata, timestamps, and low-priority annotations.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.35, calc(l - var(--sf-contrast-bias)), 0.62) c h), oklch(from var(--sf-color-neutral) clamp(0.48, calc(l + var(--sf-contrast-bias)), 0.74) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-action","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground color for text on action-colored backgrounds.","value":"oklch(from var(--sf-color-action) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-base","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on base-colored backgrounds.","value":"var(--sf-color-text)","aliasOf":"--sf-color-text","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-danger","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on danger-colored backgrounds.","value":"oklch(from var(--sf-color-danger) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-info","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on info-colored backgrounds.","value":"oklch(from var(--sf-color-info) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-inverse","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on inverted (dark-on-light / light-on-dark) backgrounds.","value":"oklch(from var(--sf-color-inverse) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-neutral","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on neutral-colored backgrounds.","value":"oklch(from var(--sf-color-neutral) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-primary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on primary-colored backgrounds.","value":"oklch(from var(--sf-color-primary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-secondary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on secondary-colored backgrounds.","value":"oklch(from var(--sf-color-secondary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-success","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on success-colored backgrounds.","value":"oklch(from var(--sf-color-success) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-tertiary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text placed on tertiary-colored backgrounds.","value":"oklch(from var(--sf-color-tertiary) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--on-warning","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text-on-color","description":"Accessible foreground colors guaranteed to pass WCAG contrast on each colored background surface.","note":"Accessible foreground for text on warning-colored backgrounds.","value":"oklch(from var(--sf-color-warning) clamp(0.1, sign(var(--sf-contrast-threshold) - l) * 999, 0.95) 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--placeholder","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"Placeholder text color for inputs and textareas.","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.45, calc(l + 0.15), 0.75) c h), oklch(from var(--sf-color-neutral) clamp(0.35, calc(l - 0.1), 0.65) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-text--secondary","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Text","description":"Semantic text colors for every content role. All tokens adapt to light and dark mode automatically.","note":"De-emphasised secondary text (captions, labels, supporting copy).","value":"light-dark( oklch(from var(--sf-color-neutral-source-light) clamp(0.15, calc(l - 0.25 - var(--sf-contrast-bias)), 0.45) c h), oklch(from var(--sf-color-neutral) clamp(0.55, calc(l + 0.1 + var(--sf-contrast-bias)), 0.90) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Warning / caution color for non-critical alerts and degraded-state indicators.","value":"light-dark(var(--sf-color-warning-source-light), var(--sf-color-warning-source-dark, oklch(from var(--sf-color-warning-source-light) clamp(0.65, calc(0.95 - l * 0.5), 0.88) calc(c * 0.9) h)))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-muted","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Medium warning fill for icons and caution chips.","value":"oklch(from var(--sf-color-warning) l c h / 0.3)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-source-dark","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed  so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Registered  dark counterpart of --sf-color-warning.","value":"oklch(0.65 0.153 80)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-source-light","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"STATUS COLORS (-source-light source tokens)","description":"OKLCH lightness source for the warning status color.","note":"OKLCH lightness source for the warning status color.","value":"oklch(0.75 0.17 80)","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-strong","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"High-contrast warning color for caution text.","value":"light-dark( oklch(from var(--sf-color-warning-source-light) calc(l - 0.25) c h), oklch(from var(--sf-color-warning) clamp(0.70, calc(l + 0.05), 1) c h) )","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-warning-subtle","tier":"PUBLIC","role":"consumption","namespace":"color","category":"Core tokens","group":"Status triplets","description":"Three-shade status triplets (subtle / muted / strong) for each status role. Use subtle for backgrounds, muted for fills, strong for text on light surfaces.","note":"Light warning tint for warning notification backgrounds.","value":"oklch(from var(--sf-color-warning) l c h / 0.12)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-color-white","tier":"PUBLIC","role":"knob","namespace":"color","category":"Core tokens","group":"Selection & backdrop","description":"Absolute reference colors and overlay tints for selections, marks, and backdrops.","note":"Absolute white reference value.","value":"oklch(100% 0 0)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-component-pad","tier":"PUBLIC","role":"consumption","namespace":"component","category":"Core tokens","group":"Output token @property registrations","description":"Standard inner padding for interactive components (buttons, form inputs, chips).","note":"Standard inner padding for interactive components (buttons, form inputs, chips).","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-default","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Default content container max-width (~1200px).","value":"75rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-full","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Full-width container — removes the max-width constraint.","value":"100%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-narrow","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Narrow content max-width — ideal for article body and blog posts (~65ch).","value":"38rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-prose","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Prose max-width — optimised for readability (~75ch).","value":"65ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-container-wide","tier":"PUBLIC","role":"knob","namespace":"container","category":"Core tokens","group":"Containers","description":"Max-width container tokens for page-level layout.","note":"Wide container for marketing / dashboard layouts (~1440px).","value":"90rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-content-gap","tier":"PUBLIC","role":"consumption","namespace":"content","category":"Core tokens","group":"Output token @property registrations","description":"Tight gap within related content (stack, flow, prose). Override globally to retune all tight primitives at once.","note":"Tight gap within related content (stack, flow, prose). Override globally to retune all tight primitives at once.","value":"var(--sf-space-s)","aliasOf":"--sf-space-s","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-content-intrinsic-size","tier":"PUBLIC","role":"knob","namespace":"content","category":"Macro tokens","group":"Content visibility","description":"intrinsic-size hint for content-visibility: auto (lazy off-screen rendering).","note":"Intrinsic-size hint for content-visibility: auto (prevents layout shift on first reveal).","value":"500px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-content-width","tier":"PUBLIC","role":"consumption","namespace":"content","category":"Layout tokens","group":"Content grid (breakout pattern)","description":"Breakout width and content width for the content-grid pattern (full-bleed breakouts inside a constrained column).","note":"Max-width of the main content column in a content grid.","value":"var(--sf-container-default)","aliasOf":"--sf-container-default","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-contrast-bias","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"contrast","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Global text-contrast nudge. Positive values push derived reading-text colors toward the extremes (darker in light mode, lighter in dark). Default 0 (neutral).","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-contrast-threshold","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"contrast","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"OKLCH lightness crossover for auto-contrast on colored surfaces. Colors with L above this get dark text; below get light text. Default 0.6.","value":"0.6","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cover-min-height","tier":"PUBLIC","role":"knob","namespace":"cover","category":"Layout tokens","group":"Cover","description":"Min-height and padding for the full-viewport cover layout.","note":"Minimum height of the cover layout (typically 100svh).","value":"100dvh","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-cover-padding","tier":"PUBLIC","role":"consumption","namespace":"cover","category":"Layout tokens","group":"Cover","description":"Min-height and padding for the full-viewport cover layout.","note":"Inner padding for the cover layout.","value":"var(--sf-section-pad)","aliasOf":"--sf-section-pad","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-current-font-weight","tier":"PUBLIC","role":"consumption","namespace":"current","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Inherits the current font-weight from context. Useful as a reset.","value":"var(--sf-font-weight-bold)","aliasOf":"--sf-font-weight-bold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-display-l-line-height","tier":"PUBLIC","role":"knob","namespace":"display","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Line height for large display text (--sf-text-display-l). Very tight to avoid excessive gaps at oversized sizes.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-display-m-line-height","tier":"PUBLIC","role":"knob","namespace":"display","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Line height for medium display text (--sf-text-display-m).","value":"1.05","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-display-s-line-height","tier":"PUBLIC","role":"consumption","namespace":"display","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Line height for small display text (--sf-text-display-s).","value":"var(--sf-leading-tight)","aliasOf":"--sf-leading-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-color","tier":"PUBLIC","role":"consumption","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Color of horizontal/vertical divider rules.","value":"var(--sf-color-border)","aliasOf":"--sf-color-border","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-gap","tier":"PUBLIC","role":"consumption","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Spacing (margin) around divider elements.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-style","tier":"PUBLIC","role":"knob","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Border style of dividers.","value":"solid","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-divider-width","tier":"PUBLIC","role":"consumption","namespace":"divider","category":"Core tokens","group":"Divider","description":"Horizontal/vertical rule (divider) properties.","note":"Stroke width of horizontal and vertical divider rules.","value":"var(--sf-border-width-1)","aliasOf":"--sf-border-width-1","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-drop-shadow-l","tier":"PUBLIC","role":"consumption","namespace":"drop","category":"Core tokens","group":"Output token @property registrations","description":"Large CSS filter: drop-shadow for prominent illustrated or cut-out elements.","note":"Large CSS filter: drop-shadow for prominent illustrated or cut-out elements.","value":"drop-shadow(0 8px 16px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7)))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-drop-shadow-m","tier":"PUBLIC","role":"consumption","namespace":"drop","category":"Core tokens","group":"Output token @property registrations","description":"Medium CSS filter: drop-shadow for elevated icons and card thumbnails.","note":"Medium CSS filter: drop-shadow for elevated icons and card thumbnails.","value":"drop-shadow(0 4px 6px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7)))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-drop-shadow-s","tier":"PUBLIC","role":"consumption","namespace":"drop","category":"Core tokens","group":"Output token @property registrations","description":"Small CSS filter: drop-shadow. Use filter (not box-shadow) for elements with transparent areas — SVGs, PNGs, cutout images.","note":"Small CSS filter: drop-shadow. Use filter (not box-shadow) for elements with transparent areas — SVGs, PNGs, cutout images.","value":"drop-shadow(0 1px 2px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1.5), 0.7)))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-fast","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Fast duration (~100ms). Hover transitions, tooltip appear.","value":"calc(150ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-instant","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Near-instant duration (~50ms). Micro-interactions and cursor-follow effects.","value":"calc(100ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-none","tier":"PUBLIC","role":"knob","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"0ms duration. Disables transitions (respects prefers-reduced-motion).","value":"0ms","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-normal","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Normal duration (~200ms). Default for most transitions.","value":"calc(250ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-slow","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Slow duration (~350ms). Emphasis transitions, drawers.","value":"calc(400ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-duration-slower","tier":"PUBLIC","role":"consumption","namespace":"duration","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Extra-slow duration (~600ms). Page-level enter/exit transitions.","value":"calc(600ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-bounce","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Bounce easing. Playful overshooting effect.","value":"linear(0, 0.35 18%, 1 32%, 0.86 42%, 1.02 56%, 0.98 72%, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-elastic","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Elastic easing. Spring-like overshooting effect.","value":"linear(0, 0.3, 1.2, 0.9, 1.05, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-in","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Accelerating easing. Use for elements leaving the viewport.","value":"cubic-bezier(0.5, 0, 0.75, 0.25)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-in-out","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Symmetric easing. Use for elements that move within the viewport.","value":"cubic-bezier(0.4, 0, 0.2, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-linear","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Linear easing. Use for progress indicators and spinner rotations.","value":"linear","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-out","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Decelerating easing. Use for elements entering the viewport.","value":"cubic-bezier(0.25, 0, 0.15, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-overshoot","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Subtle overshoot easing. Softer spring effect.","value":"linear(0, 0.6 30%, 1.08 55%, 0.98 75%, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ease-spring","tier":"PUBLIC","role":"knob","namespace":"ease","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Spring easing. Natural physics-based motion.","value":"linear(0, 0.5, 1.1, 0.95, 1.02, 1)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-gap","tier":"PUBLIC","role":"consumption","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Gap between equal columns.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the default auto-fill equal-columns layout. Columns fill the row until this width is reached, then wrap to the next line.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-2","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 2-column equal preset.","value":"28rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-3","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 3-column equal preset.","value":"15rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-4","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 4-column equal preset.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-equal-min-col-6","tier":"PUBLIC","role":"knob","namespace":"equal","category":"Layout tokens","group":"Equal columns (intrinsically responsive RAM)","description":"Minimum column-width tokens for the equal-columns layout. The RAM pattern (repeat(auto-fill, minmax(min, 1fr))) auto-fills columns; the actual count emerges from the minimum width and available space.","note":"Minimum column width for the 6-column equal preset.","value":"10rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-field-block","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Core tokens","group":"Output token @property registrations","description":"Vertical (block) padding inside form fields.","note":"Vertical (block) padding inside form fields.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-field-padding-block","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Component tokens","group":"FIELD TOKENS","description":"Padding and radius tokens that control form field geometry. Override these to give inputs a distinct visual language from buttons.","note":"Vertical (block) inner padding for form field inputs.","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-field-padding-inline","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Component tokens","group":"FIELD TOKENS","description":"Padding and radius tokens that control form field geometry. Override these to give inputs a distinct visual language from buttons.","note":"Horizontal (inline) inner padding for form field inputs.","value":"var(--sf-space-s)","aliasOf":"--sf-space-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-field-radius","tier":"PUBLIC","role":"consumption","namespace":"field","category":"Component tokens","group":"FIELD TOKENS","description":"Padding and radius tokens that control form field geometry. Override these to give inputs a distinct visual language from buttons.","note":"Border radius for form field inputs. Defaults to --sf-radius-m; override to reshape all inputs at once.","value":"var(--sf-radius-m)","aliasOf":"--sf-radius-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":true,"layer":"slashed.tokens","bundles":["full","optimal-components"]},{"name":"--sf-field-required-marker","tier":"PUBLIC","role":"knob","namespace":"field","category":"Core tokens","group":"Semantic gap tokens","description":"CSS content value for required-field markers (e.g. \\" *\\"). Used by pseudo-elements in the .required utility pattern.","note":"CSS content value for required-field markers (e.g. \\" *\\"). Used by pseudo-elements in the .required utility pattern.","value":"\\" *\\"","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-flow-space","tier":"PUBLIC","role":"consumption","namespace":"flow","category":"Macro tokens","group":"Flow","description":"Vertical rhythm gap between flow children (margin-block-start on all but the first child).","note":"Margin-block-start applied to all flow children except the first.","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-fluid-max-vw","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"fluid","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum viewport width (in rem) at which the fluid scale clamps to its largest values. Default 90rem (~1440px). Part of the fluid scale engine.","value":"90","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-fluid-min-vw","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"fluid","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum viewport width (in rem) at which the fluid scale clamps to its smallest values. Default 22.5rem (~360px). Part of the fluid scale engine.","value":"22.5","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-color","tier":"PUBLIC","role":"consumption","namespace":"focus","category":"Core tokens","group":"Focus / form colors","description":"Focus ring and form caret colors. Centralised here so keyboard navigation is consistently styled.","note":"Color of the keyboard focus ring. Ensure sufficient contrast against all background surfaces.","value":"var(--sf-color-action)","aliasOf":"--sf-color-action","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-offset","tier":"PUBLIC","role":"knob","namespace":"focus","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Gap between the element edge and the focus ring.","value":"2px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-shadow","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"focus","category":"Core tokens","group":"Focus / form colors","description":"Focus ring and form caret colors. Centralised here so keyboard navigation is consistently styled.","note":"Computed box-shadow value for the focus ring — two-layer technique: offset shadow in bg color, then ring shadow in focus-ring color. Tune via --sf-focus-ring-width and --sf-focus-ring-color instead of overriding this directly.","value":"0 0 0 var(--sf-focus-ring-offset) var(--sf-color-bg, var(--sf-color-base-source-light, #fff)), 0 0 0 calc(var(--sf-focus-ring-offset) + var(--sf-focus-ring-width)) var(--sf-focus-ring-color)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-style","tier":"PUBLIC","role":"knob","namespace":"focus","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Border style of the focus ring (solid, dashed, dotted).","value":"solid","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-focus-ring-width","tier":"PUBLIC","role":"knob","namespace":"focus","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Stroke width of the focus ring outline.","value":"2px","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-body","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Font family stack for body text. Override to set your primary typeface.","value":"system-ui, -apple-system, sans-serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-display","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Font family for display/marketing text. Override for large headline typefaces.","value":"var(--sf-font-heading)","aliasOf":"--sf-font-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-features","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"OpenType feature-settings string for body text (e.g. 'ss01', 'cv11'). Default 'normal'. Override on :root or a subtree to enable ligatures, alternate glyphs, etc.","value":"normal","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-geometric","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Geometric sans-serif slot — circular letterforms for brand alternates.","value":"\\"Avenir\\", \\"Montserrat\\", \\"Corbel\\", \\"URW Gothic\\", source-sans-pro, sans-serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-heading","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Font family for headings. Defaults to display if not overridden separately.","value":"var(--sf-font-body)","aliasOf":"--sf-font-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-humanist","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Humanist sans-serif slot — warm, readable alternate typeface.","value":"\\"Seravek\\", \\"Gill Sans Nova\\", \\"Ubuntu\\", \\"Calibri\\", \\"DejaVu Sans\\", source-sans-pro, sans-serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-mono","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Monospace font family for code, pre, and kbd elements.","value":"ui-monospace, monospace","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-numeric","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"font-variant-numeric shorthand (e.g. tabular-nums) for aligned numeric data.","value":"tabular-nums","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-slab","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Slab-serif slot for editorial or display headings.","value":"\\"Rockwell\\", \\"Rockwell Nova\\", \\"Roboto Slab\\", \\"DejaVu Serif\\", \\"Sitka Small\\", serif","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-variation","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"font","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"Variable-font axis settings for body text (e.g. \\"wght\\" 450). Default 'normal'. Override on :root or a subtree to activate variable-font axes.","value":"normal","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-body","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for body text (typically 400 / normal).","value":"var(--sf-font-weight-normal)","aliasOf":"--sf-font-weight-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-bold","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Strong emphasis weight (700).","value":"700","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-display","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for display-size text.","value":"var(--sf-font-weight-bold)","aliasOf":"--sf-font-weight-bold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-heading","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for headings (typically 600–700).","value":"var(--sf-font-weight-semibold)","aliasOf":"--sf-font-weight-semibold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-interactive","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for interactive role text — buttons, badges, and navigation labels. Defaults to semibold.","value":"var(--sf-font-weight-semibold)","aliasOf":"--sf-font-weight-semibold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-light","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Light weight (300). Use sparingly — check contrast at small sizes.","value":"300","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-medium","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Medium weight (500). Subtle emphasis without full bold.","value":"500","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-normal","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Normal / regular weight (400).","value":"400","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-semibold","tier":"PUBLIC","role":"knob","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Semibold weight (600). Common for labels and subheadings.","value":"600","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-font-weight-strong","tier":"PUBLIC","role":"consumption","namespace":"font","category":"Core tokens","group":"Font weights","description":"Numeric font-weight scale plus named aliases for common roles.","note":"Font weight for strong/emphasis inline role. Defaults to bold.","value":"var(--sf-font-weight-bold)","aliasOf":"--sf-font-weight-bold","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-frame-ratio","tier":"PUBLIC","role":"knob","namespace":"frame","category":"Layout tokens","group":"Frame","description":"Aspect ratio for the frame layout primitive (media container).","note":"Aspect ratio for the frame (media container) layout.","value":"16 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gap","tier":"PUBLIC","role":"consumption","namespace":"gap","category":"Core tokens","group":"Output token @property registrations","description":"Default gap between components (the loose rhythm). Layout primitives like cluster/grid/sidebar default to it. Override globally to retune them all at once, or set a primitive token (e.g. --sf-cluster-gap) for one element.","note":"Default gap between components (the loose rhythm). Layout primitives like cluster/grid/sidebar default to it. Override globally to retune them all at once, or set a primitive token (e.g. --sf-cluster-gap) for one element.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-brand","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Multi-stop brand gradient spanning primary and secondary palette colors. Use for hero backgrounds and brand accents.","value":"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) l c calc(h + 30)))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--b","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-bottom gradient (transparent → surface). Use to fade content into a background below (infinite scroll fade, content cutoff).","value":"linear-gradient(in oklch to bottom, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--l","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-left gradient. Use to indicate left-side scrollable overflow.","value":"linear-gradient(in oklch to left, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--r","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-right gradient. Use to indicate right-side scrollable overflow.","value":"linear-gradient(in oklch to right, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-fade--t","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Fade-to-top gradient (transparent → surface). Use to fade content into a background above.","value":"linear-gradient(in oklch to top, transparent, var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-primary","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Gradient using primary palette colors (light to saturated).","value":"linear-gradient(in oklch 135deg, var(--sf-color-primary), oklch(from var(--sf-color-primary) calc(l - 0.08) c h))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-secondary","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Gradient using secondary palette colors.","value":"linear-gradient(in oklch 135deg, var(--sf-color-secondary), oklch(from var(--sf-color-secondary) calc(l - 0.08) c h))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-surface","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Subtle surface-color gradient for depth layering and glass effects.","value":"linear-gradient(in oklab 180deg, var(--sf-color-surface), var(--sf-color-bg))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gradient-tertiary","tier":"PUBLIC","role":"consumption","namespace":"gradient","category":"Core tokens","group":"Gradients","description":"Pre-built gradient shorthands for brand fills and directional fade effects.","note":"Gradient using tertiary palette colors.","value":"linear-gradient(in oklch 135deg, var(--sf-color-tertiary), oklch(from var(--sf-color-tertiary) calc(l - 0.08) c h))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-gap","tier":"PUBLIC","role":"consumption","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Gap between auto-fill grid cells.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Minimum column width for the auto-fill grid.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-2xl","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Minimum column width at the 2× breakpoint.","value":"28rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-l","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Large minimum column width for the auto-fill grid.","value":"20rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-m","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Medium minimum column width for the auto-fill grid.","value":"16rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-s","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Small minimum column width for the auto-fill grid.","value":"13rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-xl","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Extra-large minimum column width for the auto-fill grid. Use for wide content cards.","value":"24rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-grid-min-xs","tier":"PUBLIC","role":"knob","namespace":"grid","category":"Layout tokens","group":"Grid (auto-fill, breakpoint-free)","description":"Configuration tokens for the responsive auto-fill grid. Set --sf-grid-min to control the minimum column width.","note":"Extra-small minimum column width for the auto-fill grid. Use for very compact tile layouts (icon grids).","value":"10rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-gutter","tier":"PUBLIC","role":"consumption","namespace":"gutter","category":"Core tokens","group":"Output token @property registrations","description":"Wide page/section-edge gutter (used by center/container). Override to set the page-edge breathing room across breakpoints.","note":"Wide page/section-edge gutter (used by center/container). Override to set the page-edge breathing room across breakpoints.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for 

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

. Typically slightly negative at large sizes.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-line-height","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

. Tighter than body to avoid excessive whitespace at large sizes.","value":"var(--sf-leading-tight)","aliasOf":"--sf-leading-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-max-width","tier":"PUBLIC","role":"knob","namespace":"h1","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none (unconstrained). Set to a ch value (e.g. 20ch) to prevent wide headings from spanning the full column on large screens.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h1-size","tier":"PUBLIC","role":"consumption","namespace":"h1","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-4xl)","aliasOf":"--sf-text-4xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-line-height","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

.","value":"var(--sf-leading-tight)","aliasOf":"--sf-leading-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-max-width","tier":"PUBLIC","role":"knob","namespace":"h2","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h2-size","tier":"PUBLIC","role":"consumption","namespace":"h2","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-3xl)","aliasOf":"--sf-text-3xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-line-height","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

.","value":"var(--sf-leading-snug)","aliasOf":"--sf-leading-snug","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-max-width","tier":"PUBLIC","role":"knob","namespace":"h3","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h3-size","tier":"PUBLIC","role":"consumption","namespace":"h3","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-2xl)","aliasOf":"--sf-text-2xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for

.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-line-height","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for

.","value":"var(--sf-leading-snug)","aliasOf":"--sf-leading-snug","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-max-width","tier":"PUBLIC","role":"knob","namespace":"h4","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for

. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h4-size","tier":"PUBLIC","role":"consumption","namespace":"h4","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for

.","value":"var(--sf-text-xl)","aliasOf":"--sf-text-xl","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for

.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for
.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-line-height","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for
.","value":"var(--sf-leading-normal)","aliasOf":"--sf-leading-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-max-width","tier":"PUBLIC","role":"knob","namespace":"h5","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for
. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h5-size","tier":"PUBLIC","role":"consumption","namespace":"h5","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for
.","value":"var(--sf-text-l)","aliasOf":"--sf-text-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-font-weight","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font weight for
.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Letter-spacing for
.","value":"var(--sf-tracking-wide)","aliasOf":"--sf-tracking-wide","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-line-height","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Line height for
.","value":"var(--sf-leading-normal)","aliasOf":"--sf-leading-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-max-width","tier":"PUBLIC","role":"knob","namespace":"h6","category":"Core tokens","group":"Heading line-length constraints","description":"Per-heading max-inline-size caps. Default none (unconstrained). Set to a ch value to cap a heading level's line length for readability on wide screens.","note":"Max-inline-size cap for
. Default none.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-h6-size","tier":"PUBLIC","role":"consumption","namespace":"h6","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font size for
.","value":"var(--sf-text-m)","aliasOf":"--sf-text-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-header-height","tier":"PUBLIC","role":"consumption","namespace":"header","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Total height of the sticky page header. Used by --sf-sticky-offset to prevent content from hiding under it.","value":"clamp( var(--sf-header-height-mobile), calc((var(--sf-header-height-desktop) - var(--sf-header-height-mobile)) / ((var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * 1rem) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-header-height-mobile)), var(--sf-header-height-desktop))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-header-height-desktop","tier":"PUBLIC","role":"knob","namespace":"header","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Header height at desktop breakpoints.","value":"5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-header-height-mobile","tier":"PUBLIC","role":"knob","namespace":"header","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Header height at mobile breakpoints.","value":"3.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-heading-color","tier":"PUBLIC","role":"consumption","namespace":"heading","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Text color for all headings (h1–h6). Alias of --sf-color-heading.","value":"var(--sf-color-heading)","aliasOf":"--sf-color-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-heading-font-family","tier":"PUBLIC","role":"consumption","namespace":"heading","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"Font family for all headings. Alias of --sf-font-heading.","value":"var(--sf-font-heading)","aliasOf":"--sf-font-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-heading-text-wrap","tier":"PUBLIC","role":"knob","namespace":"heading","category":"Core tokens","group":"TYPOGRAPHY ALIASES","description":"Part of the per-style typography bundle for a named text role (body, code, heading, h1–h6, display). The full bundle spans font-family, size, weight, line-height, and letter-spacing across related tokens.","note":"text-wrap for headings. 'balance' prevents orphaned short last lines in multi-line headings.","value":"balance","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-2xl","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"2× large icon size (~40px+). Hero or onboarding icons.","value":"4em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-bg","tier":"PUBLIC","role":"consumption","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Background color for boxed icon containers.","value":"var(--sf-color-inset)","aliasOf":"--sf-color-inset","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-border","tier":"PUBLIC","role":"consumption","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Border for boxed icon containers.","value":"var(--sf-border-width-1) solid var(--sf-color-border)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-pad","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Padding inside boxed icon containers.","value":"0.5em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-box-radius","tier":"PUBLIC","role":"consumption","namespace":"icon","category":"Layout tokens","group":"Icon (boxed variant)","description":"Background, border, and padding for boxed icon containers.","note":"Border radius for boxed icon containers.","value":"var(--sf-radius-s)","aliasOf":"--sf-radius-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-l","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Large icon size (~24px). Standalone icon buttons.","value":"2em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-m","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Medium icon size (~20px). Default for inline and button icons.","value":"1.5em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-s","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Small icon size (~16px). Dense UI chrome.","value":"1em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-xl","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Extra-large icon size (~32px). Feature icons.","value":"3em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-icon-xs","tier":"PUBLIC","role":"knob","namespace":"icon","category":"Core tokens","group":"Icon sizes","description":"Standard icon sizes tied to the type scale.","note":"Extra-small icon size (~12px). Inline indicators.","value":"0.875em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-imposter-margin","tier":"PUBLIC","role":"consumption","namespace":"imposter","category":"Layout tokens","group":"Imposter (centered absolute/fixed overlay)","description":"Margin for the imposter layout (centered fixed/absolute overlay).","note":"Margin between the imposter overlay and the viewport edges.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-active","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the active state. Set to 1 (via JS or .is-active) to drive branching calc() expressions. 0 = default (inactive).","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-current","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the current/selected state. Set to 1 (via .is-current) to drive branching calc() expressions. 0 = default.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-dark","tier":"INTERNAL","role":"knob","namespace":"is","category":"Core tokens","group":"DARK SOURCE TOKENS (-dark, animatable)","description":"OKLCH dark source tokens for brand and status colors. Registered as typed so scoped [data-theme=\\"dark\\"] sections inherit correct absolute values rather than an unresolved var() text string.","note":"Mode flag — 0 in light mode, 1 in dark mode. Set automatically by [data-theme='dark'] and prefers-color-scheme. Drives dark-mode formula branches in calc().","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-open","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the open/expanded state. Set to 1 (via .is-open) to drive branching calc() expressions. 0 = default (closed).","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-is-pressed","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"is","category":"Core tokens","group":"INTERACTION STATE FLAGS","description":"Integer flags toggled by JS or CSS :has() to drive numeric branching in calc() expressions. Set to 1 to activate the state; 0 is the default off state.","note":"Integer state flag for the pressed state. Set to 1 (via .is-pressed) to drive branching calc() expressions. 0 = default.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-normal","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Normal line height (~1.5). Default for body text.","value":"1.5","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-relaxed","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Relaxed line height (~1.65). Long-form reading text.","value":"1.625","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-snug","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Snug line height (~1.35). Use for sub-headings.","value":"1.3","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-taper","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Progressive leading tightener: each step up the type scale subtracts step-index × taper from its per-size line-height token. Default 0 keeps the curated defaults.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-leading-tight","tier":"PUBLIC","role":"knob","namespace":"leading","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Tight line height (~1.2). Use for large display headings.","value":"1.1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-line-clamp","tier":"PUBLIC","role":"knob","namespace":"line","category":"Macro tokens","group":"Line clamp","description":"Number of lines before text truncates with an ellipsis.","note":"Number of visible lines before text is clipped with an ellipsis.","value":"3","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-link-external-marker","tier":"PUBLIC","role":"knob","namespace":"link","category":"Core tokens","group":"Semantic gap tokens","description":"CSS content value appended to external links (e.g. \\" ↗\\"). Used by the .external-link pseudo-element pattern.","note":"CSS content value appended to external links (e.g. \\" ↗\\"). Used by the .external-link pseudo-element pattern.","value":"\\" \\\\2197\\"","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-link-underline-offset","tier":"PUBLIC","role":"knob","namespace":"link","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Vertical offset of the link underline from the text baseline.","value":"0.15em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-link-underline-thickness","tier":"PUBLIC","role":"knob","namespace":"link","category":"Core tokens","group":"Links","description":"Colors and text-decoration properties for hyperlinks in every interactive state.","note":"Stroke width of the link underline.","value":"auto","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-lumlocker","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"lumlocker","category":"Core tokens","group":"LumLocker","description":"OKLCH lightness lock for the data-lumlocker attribute. Pins surface brightness to a fixed L value — useful for always-dark or always-light sections that must stay stable while the rest of the page switches color-scheme.","note":"OKLCH lightness lock value. When :root has [data-lumlocker], brand colors (primary, secondary, action, base) are remapped to this L so their contrast remains constant as hues shift.","value":"0.65","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-mask-scrim-end","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"mask","category":"Core tokens","group":"Mask scrim","description":"Edge-fade stop positions for the scroll-shadow mask effect on overflowing containers. Expressed as percentages or lengths; consumed by mask-image gradients.","note":"End stop for edge-fade mask gradients. Mirrors --sf-mask-scrim-start for the trailing edge of a scroll container.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-mask-scrim-start","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"mask","category":"Core tokens","group":"Mask scrim","description":"Edge-fade stop positions for the scroll-shadow mask effect on overflowing containers. Expressed as percentages or lengths; consumed by mask-image gradients.","note":"Start stop for edge-fade mask gradients on scroll reels / overflow containers. Use in mask-image: linear-gradient(..., transparent var(--sf-mask-scrim-start)) to fade content near the leading edge.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-motion-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"motion","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global motion multiplier. All transition and animation durations multiply by this factor. Set to 0 to disable all motion; reduce below 1 for snappier feel.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-object-fit","tier":"PUBLIC","role":"knob","namespace":"object","category":"Core tokens","group":"Object fit / position","description":"Defaults for object-fit and object-position on replaced elements (img, video).","note":"Default object-fit value for replaced elements (img, video).","value":"cover","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-object-position","tier":"PUBLIC","role":"knob","namespace":"object","category":"Core tokens","group":"Object fit / position","description":"Defaults for object-fit and object-position on replaced elements (img, video).","note":"Default object-position for replaced elements.","value":"50% 50%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-opacity-disabled","tier":"PUBLIC","role":"knob","namespace":"opacity","category":"Core tokens","group":"Opacity","description":"Opacity tokens for specific UI states: --sf-opacity-disabled dims non-interactive elements; --sf-state-pending-opacity dims elements in an async/loading state.","note":"Opacity for disabled UI elements (typically 0.4–0.5).","value":"0.45","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-opacity-muted","tier":"PUBLIC","role":"knob","namespace":"opacity","category":"Core tokens","group":"Blur & opacity","description":"Backdrop-filter blur scale and background-opacity tokens.","note":"General de-emphasis opacity for secondary content, ghost elements, or non-primary layers. Default 0.5.","value":"0.5","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-optical-sizing","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"optical","category":"Core tokens","group":"Font families","description":"Font family stacks for every typographic role. Override these to swap typefaces without touching individual text styles.","note":"CSS font-optical-sizing value. 'auto' lets the browser optimize letterforms for the rendered size. Set 'none' to disable optical sizing.","value":"auto","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-100","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 100. Controls blend depth toward the surface. Default 8%.","note":"Color-mix percentage for palette step 100. Controls blend depth toward the surface. Default 8%.","value":"8%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-200","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 200. Controls blend depth toward the surface. Default 20%.","note":"Color-mix percentage for palette step 200. Controls blend depth toward the surface. Default 20%.","value":"20%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-300","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 300. Controls blend depth toward the surface. Default 40%.","note":"Color-mix percentage for palette step 300. Controls blend depth toward the surface. Default 40%.","value":"40%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-400","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 400 (near-mid tint). Controls blend depth. Default 65%.","note":"Color-mix percentage for palette step 400 (near-mid tint). Controls blend depth. Default 65%.","value":"65%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-50","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for the lightest palette step (50). Controls how far step 50 blends toward the surface. Default 4%.","note":"Color-mix percentage for the lightest palette step (50). Controls how far step 50 blends toward the surface. Default 4%.","value":"4%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-600","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 600 (near-mid shade). Controls blend depth toward the text color. Default 82%.","note":"Color-mix percentage for palette step 600 (near-mid shade). Controls blend depth toward the text color. Default 82%.","value":"82%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-700","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 700. Controls blend depth toward the text color. Default 62%.","note":"Color-mix percentage for palette step 700. Controls blend depth toward the text color. Default 62%.","value":"62%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-800","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 800 (dark shade). Controls blend depth toward text. Default 38%.","note":"Color-mix percentage for palette step 800 (dark shade). Controls blend depth toward text. Default 38%.","value":"38%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-900","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for palette step 900 (very dark shade). Controls blend depth toward text. Default 18%.","note":"Color-mix percentage for palette step 900 (very dark shade). Controls blend depth toward text. Default 18%.","value":"18%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-palette-mix-950","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"palette","category":"Core tokens","group":"Palette shade mix percentages","description":"Color-mix percentage for the darkest palette step (950). Controls how far step 950 blends toward the text color. Default 8%.","note":"Color-mix percentage for the darkest palette step (950). Controls how far step 950 blends toward the text color. Default 8%.","value":"8%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-print-base-size","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"print","category":"Core tokens","group":"Print","description":"Page-layout tokens for printed output: paper size, margins, and base font size. These correspond to the @page values in core/print.css.","note":"Base font size for @media print stylesheets. Default 11pt. Override on :root to adjust printed body text size.","value":"11pt","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-print-page-margin","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"print","category":"Core tokens","group":"Print","description":"Page-layout tokens for printed output: paper size, margins, and base font size. These correspond to the @page values in core/print.css.","note":"Page margin for printed output. Default 2cm. Maps to @page margin.","value":"2cm","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-print-page-size","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"print","category":"Core tokens","group":"Print","description":"Page-layout tokens for printed output: paper size, margins, and base font size. These correspond to the @page values in core/print.css.","note":"Target paper size for printing. Default 'a4'. Maps to @page size. Common values: a4, letter, legal.","value":"a4","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-block-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin between prose elements (h2, p, ul, etc.).","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-blockquote-border","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Left border style for blockquotes inside prose.","value":"var(--sf-border-width-2) solid var(--sf-color-border--subtle)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-blockquote-padding","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Inner padding for blockquotes inside prose.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-figcaption-size","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Font size for figure captions inside .prose. Typically smaller than body text.","value":"var(--sf-text-s)","aliasOf":"--sf-text-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-figure-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin around
elements inside .prose.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-heading-gap","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Space between a heading and the content that follows it inside .prose.","value":"var(--sf-space-s)","aliasOf":"--sf-space-s","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-hr-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin around
rules inside .prose.","value":"var(--sf-space-l)","aliasOf":"--sf-space-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-list-gap","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Gap between list items inside .prose.","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-marker-color","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Color of list bullets and ordered-list numbers inside .prose.","value":"var(--sf-color-primary)","aliasOf":"--sf-color-primary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-media-margin","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Block margin around images, video, and figures inside .prose.","value":"var(--sf-space-m)","aliasOf":"--sf-space-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-media-radius","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Border radius applied to images and media inside .prose.","value":"var(--sf-radius-m)","aliasOf":"--sf-radius-m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-nested-list-gap","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Gap between items in nested lists inside .prose.","value":"var(--sf-space-2xs)","aliasOf":"--sf-space-2xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-paragraph","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Layout tokens","group":"Prose","description":"Max-width for the prose layout primitive (long-form reading column).","note":"Max width of prose paragraphs (layout token for the prose layout).","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-prose-table-pad","tier":"PUBLIC","role":"consumption","namespace":"prose","category":"Macro tokens","group":"Prose","description":"Fine-grained typography controls for the .prose macro (margins, blockquote style, link decoration, etc.).","note":"Cell padding for tables inside .prose.","value":"var(--sf-space-xs)","aliasOf":"--sf-space-xs","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-2xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"2× large radius (~20px). Rounded card variants.","note":"2× large radius (~20px). Rounded card variants.","value":"calc(24px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-2xs","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Extra-extra-small radius (~1px). Minimal rounding for very tight UI elements.","note":"Extra-extra-small radius (~1px). Minimal rounding for very tight UI elements.","value":"calc(1px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-3xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"3× large radius (~24px). Large rounded surfaces.","note":"3× large radius (~24px). Large rounded surfaces.","value":"calc(32px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-4xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"4× large radius (~32px). Near-pill rounding.","note":"4× large radius (~32px). Near-pill rounding.","value":"calc(48px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-full","tier":"PUBLIC","role":"knob","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Full rounding (50%). For circular elements like avatars.","note":"Full rounding (50%). For circular elements like avatars.","value":"9999px","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-l","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Large radius (~12px). Modals, popovers, panels.","note":"Large radius (~12px). Modals, popovers, panels.","value":"calc(12px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-m","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Medium radius (~6–8px). Default — inputs, standard buttons, cards.","note":"Medium radius (~6–8px). Default — inputs, standard buttons, cards.","value":"calc(8px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-none","tier":"PUBLIC","role":"knob","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Zero border radius — square corners.","note":"Zero border radius — square corners.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-outer","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Concentric corner helper: outer radius for a container that wraps content with inner radius of --sf-radius-m. Computed as --sf-radius-m + --sf-component-pad so corners align visually.","note":"Concentric corner helper: outer radius for a container that wraps content with inner radius of --sf-radius-m. Computed as --sf-radius-m + --sf-component-pad so corners align visually.","value":"calc(var(--sf-radius-m) + var(--sf-component-pad))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-pill","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Pill rounding (9999px). Tags, toggle pills, status badges.","note":"Pill rounding (9999px). Tags, toggle pills, status badges.","value":"var(--sf-radius-full)","aliasOf":"--sf-radius-full","registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-s","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Small radius (~4px). Badges, chips, small buttons.","note":"Small radius (~4px). Badges, chips, small buttons.","value":"calc(4px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"radius","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global border-radius multiplier. Scales the entire radius ramp up (>1) or down (<1) from one knob. Set to 0 for sharp corners everywhere.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-xl","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Extra-large radius (~16px). Prominent cards and feature blocks.","note":"Extra-large radius (~16px). Prominent cards and feature blocks.","value":"calc(16px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-radius-xs","tier":"PUBLIC","role":"consumption","namespace":"radius","category":"Core tokens","group":"Output token @property registrations","description":"Hairline radius (~2px). Subtle rounding for tight components.","note":"Hairline radius (~2px). Subtle rounding for tight components.","value":"calc(2px * var(--sf-radius-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-3-2","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"3:2 aspect ratio. Common for landscape photography.","value":"3 / 2","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-4-3","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"4:3 aspect ratio. Classic screen ratio.","value":"4 / 3","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-cinema","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"2.39:1 cinematic widescreen aspect ratio.","value":"21 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-golden","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"1.618:1 golden ratio. Harmonious proportions.","value":"1.618 / 1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-portrait","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"2:3 portrait aspect ratio.","value":"3 / 4","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-square","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"1:1 square aspect ratio. Use for avatars, icon containers, and square thumbnails.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-ratio-video","tier":"PUBLIC","role":"knob","namespace":"ratio","category":"Core tokens","group":"Aspect ratios","description":"Named aspect-ratio values for images, video embeds, and card thumbnails.","note":"16:9 widescreen video aspect ratio. Use for video embeds and video-thumbnail containers.","value":"16 / 9","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-reel-gap","tier":"PUBLIC","role":"consumption","namespace":"reel","category":"Layout tokens","group":"Reel","description":"Configuration tokens for the reel layout (horizontal scroll container).","note":"Gap between items in the horizontal reel.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-reel-height","tier":"PUBLIC","role":"knob","namespace":"reel","category":"Layout tokens","group":"Reel","description":"Configuration tokens for the reel layout (horizontal scroll container).","note":"Fixed height of the reel container.","value":"auto","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-reel-item-width","tier":"PUBLIC","role":"knob","namespace":"reel","category":"Layout tokens","group":"Reel","description":"Configuration tokens for the reel layout (horizontal scroll container).","note":"Width of each item in the reel.","value":"max-content","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-bottom","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the bottom edge (home indicator, gesture bar). Resolves to env(safe-area-inset-bottom, 0px). Use for fixed footers.","value":"env(safe-area-inset-bottom, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-left","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the left edge. Resolves to env(safe-area-inset-left, 0px).","value":"env(safe-area-inset-left, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-right","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the right edge (rounded corners, home indicator). Resolves to env(safe-area-inset-right, 0px).","value":"env(safe-area-inset-right, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-safe-top","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"safe","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Device safe-area inset at the top edge (notch, Dynamic Island). Resolves to env(safe-area-inset-top, 0px). Use for fixed headers on notched devices.","value":"env(safe-area-inset-top, 0px)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-color","tier":"PUBLIC","role":"knob","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Base color of the gradient scrim overlay.","value":"oklch(0 0 0 / 0.55)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-direction","tier":"PUBLIC","role":"knob","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Direction of the scrim gradient (to bottom, to top, etc.).","value":"to top","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-gradient","tier":"PUBLIC","role":"consumption","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Full gradient shorthand for the scrim. Override to customise the fade.","value":"linear-gradient(var(--sf-scrim-direction), var(--sf-scrim-color), transparent)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrim-text-shadow","tier":"PUBLIC","role":"knob","namespace":"scrim","category":"Macro tokens","group":"Scrim","description":"Gradient scrim configuration (direction, size, color) for overlaying images with readable text.","note":"Text-shadow layered over the scrim gradient to ensure legibility for text placed directly on image backgrounds.","value":"0 1px 3px oklch(0 0 0 / 0.6)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scroll-shadow-size","tier":"PUBLIC","role":"knob","namespace":"scroll","category":"Macro tokens","group":"Scroll shadow / overflow fade","description":"Size of the scroll-shadow fade effect on overflowing containers.","note":"Size of the scroll-shadow fade effect on overflowing containers.","value":"2rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scroll-timeline-range-end","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"scroll","category":"Core tokens","group":"Scroll-driven animation range","description":"animation-range start and end positions for scroll-driven entrance effects (animation-timeline: view()). Controls how far into the viewport an element must scroll before its entrance animation starts and ends.","note":"animation-range end value for scroll-driven entrance effects. Default 'cover 30%'. Override on an element to control when its entrance animation finishes.","value":"cover 30%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scroll-timeline-range-start","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"scroll","category":"Core tokens","group":"Scroll-driven animation range","description":"animation-range start and end positions for scroll-driven entrance effects (animation-timeline: view()). Controls how far into the viewport an element must scroll before its entrance animation starts and ends.","note":"animation-range start value for scroll-driven entrance effects. Default 'entry 0%'. Override on an element to control when its entrance animation begins.","value":"entry 0%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrollbar-thumb","tier":"PUBLIC","role":"consumption","namespace":"scrollbar","category":"Core tokens","group":"Scrollbar","description":"Custom scrollbar thumb and track colors.","note":"Color of the custom scrollbar thumb.","value":"var(--sf-color-neutral)","aliasOf":"--sf-color-neutral","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-scrollbar-track","tier":"PUBLIC","role":"knob","namespace":"scrollbar","category":"Core tokens","group":"Scrollbar","description":"Custom scrollbar thumb and track colors.","note":"Color of the custom scrollbar track.","value":"transparent","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Section padding","description":"Vertical padding for full-width page sections at each responsive tier.","note":"Default vertical padding for full-width page sections.","value":"var(--sf-section-pad--m)","aliasOf":"--sf-section-pad--m","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--2xl","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"2× large section vertical padding for hero areas.","note":"2× large section vertical padding for hero areas.","value":"calc(var(--sf-space-4xl) * 2 * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--l","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Large section vertical padding.","note":"Large section vertical padding.","value":"calc(var(--sf-space-4xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--m","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Medium section vertical padding.","note":"Medium section vertical padding.","value":"calc(var(--sf-space-3xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--s","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Small section vertical padding.","note":"Small section vertical padding.","value":"calc(var(--sf-space-2xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--xl","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Extra-large vertical section padding for hero and feature sections.","note":"Extra-large vertical section padding for hero and feature sections.","value":"calc(var(--sf-space-4xl) * 1.5 * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-pad--xs","tier":"PUBLIC","role":"consumption","namespace":"section","category":"Core tokens","group":"Output token @property registrations","description":"Extra-small vertical section padding for compact in-page modules.","note":"Extra-small vertical section padding for compact in-page modules.","value":"calc(var(--sf-space-xl) * var(--sf-section-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-section-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"section","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global multiplier applied to every --sf-section-pad--* size — one dial re-rhythms all section padding (default 1).","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-2xl","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Largest shadow for hero cards, feature highlights, and marketing surfaces.","note":"Largest shadow for hero cards, feature highlights, and marketing surfaces.","value":"0 4px 12px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.6), 0.7)), 0 20px 60px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 4), 0.7)), 0 40px 100px -8px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-color","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Shadow ramp (box-shadow, text-shadow, drop-shadow)","description":"Elevation box-shadow ramp from xs to 2xl plus inner, text-shadow, and drop-shadow presets. All opacity values scale with --sf-shadow-strength so dark-mode contrast boost is automatic.","note":"Near-black shadow tint derived from the neutral palette. Inherits the neutral's chroma and hue so colorless neutrals produce colorless shadows.","value":"oklch(from var(--sf-color-neutral) var(--sf-shadow-lightness) c h)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-glow","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Glow box-shadow shorthand for decorative glow effects.","note":"Glow box-shadow shorthand for decorative glow effects.","value":"0 0 15px 2px oklch(from var(--sf-shadow-glow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-glow-color","tier":"PUBLIC-ADVANCED","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Shadow glow color","description":"Tint color used by --sf-shadow-glow. Override to retint glows; opacity and dark-mode adaptation are handled automatically.","note":"Ambient glow tint used by --sf-shadow-glow. Override to retint all glow shadows; opacity and dark-mode boost are controlled by --sf-shadow-strength.","value":"var(--sf-color-primary)","aliasOf":"--sf-color-primary","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-inner","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Inset shadow for pressed states, inset inputs, and recessed surfaces.","note":"Inset shadow for pressed states, inset inputs, and recessed surfaces.","value":"inset 0 2px 4px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-l","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Large shadow for drawers, sidebars, and prominent elevated surfaces.","note":"Large shadow for drawers, sidebars, and prominent elevated surfaces.","value":"0 2px 4px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 8px 24px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3), 0.7)), 0 16px 48px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-lightness","tier":"PUBLIC","role":"knob","namespace":"shadow","category":"Core tokens","group":"Shadow strength","description":"Base opacity for the shadow ramp. --sf-shadow-lightness controls tonal density; --sf-shadow-strength is auto-boosted in dark mode so elevation reads on dark surfaces.","note":"OKLCH lightness component of the shadow color. Lower = denser-looking shadows. Tune this independently of --sf-shadow-strength to control tonal weight without affecting opacity.","value":"0.15","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-m","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Medium shadow for cards and content panels.","note":"Medium shadow for cards and content panels.","value":"0 1px 3px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 4px 12px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-none","tier":"PUBLIC","role":"knob","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"No box-shadow (resets inherited shadows). Use to explicitly remove elevation.","note":"No box-shadow (resets inherited shadows). Use to explicitly remove elevation.","value":"none","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-s","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Small shadow for chips, tags, and inline elevated surfaces.","note":"Small shadow for chips, tags, and inline elevated surfaces.","value":"0 1px 2px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 2px 6px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, var(--sf-shadow-strength), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-strength","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"shadow","category":"Core tokens","group":"Shadow strength","description":"Base opacity for the shadow ramp. --sf-shadow-lightness controls tonal density; --sf-shadow-strength is auto-boosted in dark mode so elevation reads on dark surfaces.","note":"Base opacity for the entire shadow ramp. Auto-boosted in dark mode via --sf-is-dark. Override with calc() to preserve the adaptation: e.g. calc(0.12 + var(--sf-is-dark) * 0.17).","value":"calc(0.08 + var(--sf-is-dark) * 0.17)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-xl","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Extra-large shadow for modals, dialogs, and high-elevation sheets.","note":"Extra-large shadow for modals, dialogs, and high-elevation sheets.","value":"0 2px 8px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7)), 0 12px 36px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 3.5), 0.7)), 0 24px 72px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-shadow-xs","tier":"PUBLIC","role":"consumption","namespace":"shadow","category":"Core tokens","group":"Output token @property registrations","description":"Extra-small shadow for barely-elevated elements (focused inputs, small chips).","note":"Extra-small shadow for barely-elevated elements (focused inputs, small chips).","value":"0 1px 2px 0 oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 0.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sidebar-gap","tier":"PUBLIC","role":"consumption","namespace":"sidebar","category":"Layout tokens","group":"Sidebar","description":"Configuration tokens for the sidebar layout pattern (main content + fixed-width aside).","note":"Gap between sidebar and main content column.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sidebar-min-width","tier":"PUBLIC","role":"knob","namespace":"sidebar","category":"Layout tokens","group":"Sidebar","description":"Configuration tokens for the sidebar layout pattern (main content + fixed-width aside).","note":"Minimum sidebar width before the layout collapses to stacking.","value":"50%","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sidebar-width","tier":"PUBLIC","role":"knob","namespace":"sidebar","category":"Layout tokens","group":"Sidebar","description":"Configuration tokens for the sidebar layout pattern (main content + fixed-width aside).","note":"Preferred width of the sidebar column.","value":"18rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-l","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Large UI component height (~44px). Touch-friendly interactive elements.","value":"2.75rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-m","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Medium UI component height (~36px). Default size for buttons and inputs.","value":"2.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-s","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Small UI component height (~28px). Compact buttons and input variants.","value":"2rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-xl","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Extra-large interactive component height (~52px). For oversized or prominently touch-friendly controls.","value":"3.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-size-xs","tier":"PUBLIC","role":"knob","namespace":"size","category":"Core tokens","group":"UI sizes","description":"Fixed sizes for interactive components (buttons, inputs, chips) at S / M / L.","note":"Extra-small interactive component height (~24px). For very compact inline elements and micro-controls.","value":"1.5rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-2xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"48px-equivalent spacing. Large section spacing.","note":"48px-equivalent spacing. Large section spacing.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 3) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 3) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 3) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-2xs","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"4px-equivalent spacing. Tight inline gaps, icon-to-text padding.","note":"4px-equivalent spacing. Tight inline gaps, icon-to-text padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -3) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -3) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -3) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-3xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"64px-equivalent spacing. Extra-large layout gaps.","note":"64px-equivalent spacing. Extra-large layout gaps.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 4) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 4) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 4) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-4xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"96px-equivalent spacing. Hero / page-level section padding.","note":"96px-equivalent spacing. Hero / page-level section padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 5) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 5) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 5) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-base-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum base spacing unit (rem) at the widest viewport. Drives the top of the fluid spacing ramp. Part of the fluid scale engine.","value":"2","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-base-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum base spacing unit (rem) at the narrowest viewport. Drives the bottom of the fluid spacing ramp. Part of the fluid scale engine.","value":"1","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-l","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"24px-equivalent spacing. Card padding, section dividers.","note":"24px-equivalent spacing. Card padding, section dividers.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 1) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 1) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 1) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-m","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"16px-equivalent spacing. Default unit, widely applicable.","note":"16px-equivalent spacing. Default unit, widely applicable.","value":"calc(clamp(calc(var(--sf-space-base-min) * 1rem), calc((var(--sf-space-base-max) - var(--sf-space-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * 1rem), calc(var(--sf-space-base-max) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-none","tier":"PUBLIC","role":"knob","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"Zero spacing. Explicit alias for clarity in utility classes.","note":"Zero spacing. Explicit alias for clarity in utility classes.","value":"0","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-px","tier":"PUBLIC","role":"knob","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"1px spacing. Hairline offset for fine adjustments.","note":"1px spacing. Hairline offset for fine adjustments.","value":"1px","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-ratio-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular spacing ratio at the widest viewport. Controls step-to-step growth in the spacing ramp. Default 1.333 (perfect fourth). Part of the fluid scale engine.","value":"1.333","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-ratio-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular spacing ratio at the narrowest viewport. Controls step-to-step growth in the spacing ramp. Default 1.25 (major third). Part of the fluid scale engine.","value":"1.25","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-s","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"12px-equivalent spacing. Form field inner padding, narrow gaps.","note":"12px-equivalent spacing. Form field inner padding, narrow gaps.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -1) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -1) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -1) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"space","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global spacing multiplier. Scales the fluid spacing ramp. Increase above 1 for airier layouts; reduce below 1 for compact UIs.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-xl","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"32px-equivalent spacing. Feature row gaps, generous section padding.","note":"32px-equivalent spacing. Feature row gaps, generous section padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 2) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), 2) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), 2) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-space-xs","tier":"PUBLIC","role":"consumption","namespace":"space","category":"Core tokens","group":"Output token @property registrations","description":"8px-equivalent spacing. Compact list rows, tab padding.","note":"8px-equivalent spacing. Compact list rows, tab padding.","value":"calc(clamp(calc(var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2) * 1rem), calc((var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -2) - var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-space-base-min) * pow(var(--sf-space-ratio-min), -2) * 1rem), calc(var(--sf-space-base-max) * pow(var(--sf-space-ratio-max), -2) * 1rem)) * var(--sf-space-scale))","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-stack-gap","tier":"PUBLIC","role":"consumption","namespace":"stack","category":"Layout tokens","group":"Stack","description":"Gap for the stack layout primitive (vertically stacked blocks).","note":"Vertical gap between stacked block-level elements in the stack layout.","value":"var(--sf-content-gap)","aliasOf":"--sf-content-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-state-pending-opacity","tier":"PUBLIC","role":"knob","namespace":"state","category":"Core tokens","group":"Opacity","description":"Opacity tokens for specific UI states: --sf-opacity-disabled dims non-interactive elements; --sf-state-pending-opacity dims elements in an async/loading state.","note":"Opacity for pending / loading state elements.","value":"0.7","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sticky-offset","tier":"PUBLIC","role":"consumption","namespace":"sticky","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"top offset for position: sticky elements, accounting for the header height.","value":"clamp( var(--sf-sticky-offset-mobile), calc((var(--sf-sticky-offset-desktop) - var(--sf-sticky-offset-mobile)) / ((var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * 1rem) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-sticky-offset-mobile)), var(--sf-sticky-offset-desktop))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sticky-offset-desktop","tier":"PUBLIC","role":"consumption","namespace":"sticky","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Sticky offset at desktop breakpoints.","value":"var(--sf-header-height-desktop)","aliasOf":"--sf-header-height-desktop","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-sticky-offset-mobile","tier":"PUBLIC","role":"consumption","namespace":"sticky","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Sticky offset at mobile breakpoints.","value":"var(--sf-header-height-mobile)","aliasOf":"--sf-header-height-mobile","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-surface-color","tier":"PUBLIC","role":"consumption","namespace":"surface","category":"Macro tokens","group":"Surface color","description":"Input color for the generic .sf-surface macro. Set any color value; the macro derives the background, auto-contrast foreground, and contextual token set from it.","note":"Input for the generic .sf-surface macro. Set any color (including palette shades); the macro derives background, auto-contrast foreground, and the contextual token set from it.","value":"var(--sf-color-base)","aliasOf":"--sf-color-base","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-switcher-gap","tier":"PUBLIC","role":"consumption","namespace":"switcher","category":"Layout tokens","group":"Switcher","description":"Configuration tokens for the switcher layout (horizontal → vertical breakpoint).","note":"Gap between switcher columns / rows.","value":"var(--sf-gap)","aliasOf":"--sf-gap","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-switcher-threshold","tier":"PUBLIC","role":"knob","namespace":"switcher","category":"Layout tokens","group":"Switcher","description":"Configuration tokens for the switcher layout (horizontal → vertical breakpoint).","note":"Inline-size threshold below which the switcher flips from horizontal to vertical.","value":"30rem","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"2× large font size (~24px). Section headings.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 3) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 3) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 3) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 2×-large text.","note":"Font weight for 2×-large text.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 2×-large text.","note":"Letter-spacing for 2×-large text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 2×-large text.","note":"Line height for 2×-large text.","value":"calc(var(--sf-leading-snug) - 6 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for 2×-large text.","note":"Optimal line length for 2×-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Extra-extra-small font size (~11px). Fine print, badges.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -3) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -3) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -3) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 2×-extra-small text. Override to deviate from the global weight at this size.","note":"Font weight for 2×-extra-small text. Override to deviate from the global weight at this size.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 2×-extra-small text.","note":"Letter-spacing for 2×-extra-small text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 2×-extra-small text.","note":"Line height for 2×-extra-small text.","value":"var(--sf-leading-relaxed)","aliasOf":"--sf-leading-relaxed","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-2xs-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length (max-width in ch) for 2×-extra-small text.","note":"Optimal line length (max-width in ch) for 2×-extra-small text.","value":"55ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"3× large font size (~30px). Major headings.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 4) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 4) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 4) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 3×-large text.","note":"Font weight for 3×-large text.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 3×-large text. Typically negative to tighten large headings.","note":"Letter-spacing for 3×-large text. Typically negative to tighten large headings.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 3×-large text.","note":"Line height for 3×-large text.","value":"calc(var(--sf-leading-tight) - 7 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-3xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for 3×-large text.","note":"Optimal line length for 3×-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"4× large font size (~36px). Display-level headings.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 5) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 5) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 5) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for 4×-large text.","note":"Font weight for 4×-large text.","value":"var(--sf-font-weight-heading)","aliasOf":"--sf-font-weight-heading","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for 4×-large text.","note":"Letter-spacing for 4×-large text.","value":"var(--sf-tracking-tight)","aliasOf":"--sf-tracking-tight","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for 4×-large text.","note":"Line height for 4×-large text.","value":"calc(var(--sf-leading-tight) - 8 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-4xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for 4×-large text.","note":"Optimal line length for 4×-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-base-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum base font size (rem) at the widest viewport. End point for the fluid type scale at wide screens. Part of the fluid scale engine.","value":"1.25","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-base-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum base font size (rem) at the narrowest viewport. Starting point for the fluid type scale at narrow screens. Part of the fluid scale engine.","value":"1","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-base-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Maximum display/hero font size (rem) at the widest viewport. Drives the ceiling of the fluid display type scale. Part of the fluid scale engine.","value":"3","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-base-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Minimum display/hero font size (rem) at the narrowest viewport. Drives the floor of the fluid display type scale. Part of the fluid scale engine.","value":"2.4","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-l","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Large display font size (~68px+). Oversized hero text.","value":"calc(clamp(calc(var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc((var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 2) - var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc(var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 2) * 1rem)) * var(--sf-text-display-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-m","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Medium display font size (~54px). Hero headings.","value":"calc(clamp(calc(var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc((var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 1) - var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc(var(--sf-text-display-base-max) * pow(var(--sf-text-ratio-max), 1) * 1rem)) * var(--sf-text-display-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-s","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Small display font size (~42px). Hero sub-headings.","value":"calc(clamp(calc(var(--sf-text-display-base-min) * 1rem), calc((var(--sf-text-display-base-max) - var(--sf-text-display-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-display-base-min) * 1rem), calc(var(--sf-text-display-base-max) * 1rem)) * var(--sf-text-display-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-display-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Multiplier applied only to the display/hero type scale (--sf-text-display-*). Tune headline impact independently of body text.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Large font size (~18px). Lead paragraphs, prominent labels.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 1) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 1) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 1) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for large text.","note":"Font weight for large text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for large text.","note":"Letter-spacing for large text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for large text.","note":"Line height for large text.","value":"calc(var(--sf-leading-normal) - 4 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-l-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for large text.","note":"Optimal line length for large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Medium / base font size (~16px). Typical body text.","value":"calc(clamp(calc(var(--sf-text-base-min) * 1rem), calc((var(--sf-text-base-max) - var(--sf-text-base-min)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * 1rem), calc(var(--sf-text-base-max) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for medium (body) text.","note":"Font weight for medium (body) text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for medium text.","note":"Letter-spacing for medium text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for medium text.","note":"Line height for medium text.","value":"calc(var(--sf-leading-normal) - 3 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-m-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal reading line length for medium text (~65–75ch).","note":"Optimal reading line length for medium text (~65–75ch).","value":"65ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-ratio-max","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular type scale ratio at the widest viewport. Controls step-to-step size growth. Default 1.333. Part of the fluid scale engine.","value":"1.333","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-ratio-min","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"FLUID SCALE ENGINE","description":"Generative inputs that drive all fluid clamp() type and spacing scales at runtime. Override the base, ratio, and viewport range tokens to globally rescale the entire system without touching individual step tokens.","note":"Modular type scale ratio at the narrowest viewport. Controls step-to-step size growth in the fluid type ramp. Default 1.25. Part of the fluid scale engine.","value":"1.25","aliasOf":null,"registered":true,"syntax":"","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Small font size (~14px). Secondary content, UI annotations.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -1) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -1) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -1) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for small text.","note":"Font weight for small text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for small text.","note":"Letter-spacing for small text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for small text.","note":"Line height for small text.","value":"calc(var(--sf-leading-relaxed) - 2 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-s-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for small text.","note":"Optimal line length for small text.","value":"65ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-scale","tier":"PUBLIC-ADVANCED","role":"knob","namespace":"text","category":"Core tokens","group":"Scale multipliers","description":"Global proportional multipliers for the four main design axes (type, space, radius, motion). Adjusting one multiplier uniformly scales every clamp() value in that dimension.","note":"Global type-size multiplier. Scales the entire fluid type scale. 1.08 gives noticeably larger body text without breaking layout.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-l","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Large text-shadow for high-contrast text over busy or dark image backgrounds.","note":"Large text-shadow for high-contrast text over busy or dark image backgrounds.","value":"0 4px 8px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-m","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Medium text-shadow. Use for text overlaid on images to improve legibility.","note":"Medium text-shadow. Use for text overlaid on images to improve legibility.","value":"0 2px 4px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 2), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-none","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Removes text-shadow (use to explicitly reset inherited shadows).","note":"Removes text-shadow (use to explicitly reset inherited shadows).","value":"none","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-shadow-s","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Output token @property registrations","description":"Small text-shadow for subtle depth on display headings.","note":"Small text-shadow for subtle depth on display headings.","value":"0 1px 2px oklch(from var(--sf-shadow-color) l c h / clamp(0, calc(var(--sf-shadow-strength) * 1.5), 0.7))","aliasOf":null,"registered":true,"syntax":"*","fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Extra-large font size (~20px). Sub-headings, callout text.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 2) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), 2) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), 2) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for extra-large text.","note":"Font weight for extra-large text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for extra-large text.","note":"Letter-spacing for extra-large text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for extra-large text.","note":"Line height for extra-large text.","value":"calc(var(--sf-leading-snug) - 5 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xl-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for extra-large text.","note":"Optimal line length for extra-large text.","value":"none","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Font sizes","description":"Fluid font-size scale. Values interpolate between mobile and desktop sizes, so prefer these over fixed rem values.","note":"Extra-small font size (~12px). Labels, captions, metadata.","value":"calc(clamp(calc(var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2) * 1rem), calc((var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -2) - var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2)) / (var(--sf-fluid-max-vw) - var(--sf-fluid-min-vw)) * (100vw - var(--sf-fluid-min-vw) * 1rem) + var(--sf-text-base-min) * pow(var(--sf-text-ratio-min), -2) * 1rem), calc(var(--sf-text-base-max) * pow(var(--sf-text-ratio-max), -2) * 1rem)) * var(--sf-text-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-font-weight","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Font weight for extra-small text.","note":"Font weight for extra-small text.","value":"var(--sf-font-weight-body)","aliasOf":"--sf-font-weight-body","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-letter-spacing","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Letter-spacing for extra-small text.","note":"Letter-spacing for extra-small text.","value":"var(--sf-tracking-normal)","aliasOf":"--sf-tracking-normal","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-line-height","tier":"PUBLIC","role":"consumption","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Line height for extra-small text.","note":"Line height for extra-small text.","value":"calc(var(--sf-leading-relaxed) - 1 * var(--sf-leading-taper))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-text-xs-max-width","tier":"PUBLIC","role":"knob","namespace":"text","category":"Core tokens","group":"Per-size typography sub-properties","description":"Optimal line length for extra-small text.","note":"Optimal line length for extra-small text.","value":"60ch","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-theme-transition-duration","tier":"PUBLIC","role":"consumption","namespace":"theme","category":"Core tokens","group":"Motion & easing","description":"Duration and easing tokens. Build all transitions and animations from these to ensure consistent motion across the system.","note":"Duration of the .sf-theme-transition animated color-scheme crossfade. Scales with --sf-motion-scale so reduced-motion preferences are respected. Default 300ms.","value":"calc(300ms * var(--sf-motion-scale))","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-touch-target","tier":"PUBLIC","role":"consumption","namespace":"touch","category":"Core tokens","group":"Layout & a11y","description":"Focus ring, header height, sticky offset, touch-target, text-contrast knobs, and device safe-area insets. These govern keyboard accessibility, scroll behaviour, and adaptive contrast globally.","note":"Minimum touch-target size for interactive elements per WCAG 2.5.5.","value":"var(--sf-size-l)","aliasOf":"--sf-size-l","registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-normal","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Normal letter-spacing (0). Default for body text.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-tight","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Tight letter-spacing (slightly negative). Suitable for large headings.","value":"-0.025em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-wide","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Wide letter-spacing. Use for small-caps labels.","value":"0.025em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-wider","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Wider letter-spacing for strongly spaced labels.","value":"0.05em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-tracking-widest","tier":"PUBLIC","role":"knob","namespace":"tracking","category":"Core tokens","group":"Line heights & letter spacing","description":"Typographic fine-tuning tokens: leading (line-height) and tracking (letter-spacing) for every weight class.","note":"Widest letter-spacing for all-caps microcopy.","value":"0.1em","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-colors","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for color-related properties (color, background, border-color).","value":"color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-normal) var(--sf-ease-out), text-decoration-color var(--sf-duration-normal) var(--sf-ease-out), fill var(--sf-duration-normal) var(--sf-ease-out), stroke var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-enter","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Enter-phase transition (ease-out). Use on elements appearing in the viewport.","value":"color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-normal) var(--sf-ease-out), box-shadow var(--sf-duration-normal) var(--sf-ease-out), opacity var(--sf-duration-normal) var(--sf-ease-out), transform var(--sf-duration-normal) var(--sf-ease-out), filter var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-exit","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Exit-phase transition (ease-in). Use on elements leaving the viewport.","value":"color var(--sf-duration-fast) var(--sf-ease-in), background-color var(--sf-duration-fast) var(--sf-ease-in), border-color var(--sf-duration-fast) var(--sf-ease-in), box-shadow var(--sf-duration-fast) var(--sf-ease-in), opacity var(--sf-duration-fast) var(--sf-ease-in), transform var(--sf-duration-fast) var(--sf-ease-in), filter var(--sf-duration-fast) var(--sf-ease-in)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-fast","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Fast-duration transition shorthand.","value":"color var(--sf-duration-fast) var(--sf-ease-out), background-color var(--sf-duration-fast) var(--sf-ease-out), border-color var(--sf-duration-fast) var(--sf-ease-out), box-shadow var(--sf-duration-fast) var(--sf-ease-out), opacity var(--sf-duration-fast) var(--sf-ease-out), transform var(--sf-duration-fast) var(--sf-ease-out), filter var(--sf-duration-fast) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-form-field","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand optimised for form fields: color and background at normal pace so label color shifts feel natural; border, shadow, and opacity at fast pace so focus rings appear crisply.","value":"color var(--sf-duration-normal) var(--sf-ease-out), background-color var(--sf-duration-normal) var(--sf-ease-out), text-decoration-color var(--sf-duration-normal) var(--sf-ease-out), fill var(--sf-duration-normal) var(--sf-ease-out), stroke var(--sf-duration-normal) var(--sf-ease-out), border-color var(--sf-duration-fast) var(--sf-ease-out), box-shadow var(--sf-duration-fast) var(--sf-ease-out), opacity var(--sf-duration-fast) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-opacity","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for opacity.","value":"opacity var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-overlay","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for overlay fades (opacity + visibility).","value":"overlay var(--sf-duration-normal) allow-discrete, display var(--sf-duration-normal) allow-discrete","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-shadow","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for box-shadow.","value":"box-shadow var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-slow","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Slow-duration transition shorthand.","value":"color var(--sf-duration-slow) var(--sf-ease-in-out), background-color var(--sf-duration-slow) var(--sf-ease-in-out), border-color var(--sf-duration-slow) var(--sf-ease-in-out), box-shadow var(--sf-duration-slow) var(--sf-ease-in-out), opacity var(--sf-duration-slow) var(--sf-ease-in-out), transform var(--sf-duration-slow) var(--sf-ease-in-out), filter var(--sf-duration-slow) var(--sf-ease-in-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-transition-transform","tier":"PUBLIC","role":"consumption","namespace":"transition","category":"Core tokens","group":"Transition shorthands","description":"Pre-built transition shorthand values for the most common animated properties.","note":"Transition shorthand for transform.","value":"transform var(--sf-duration-normal) var(--sf-ease-out)","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-base","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Base stacking level (1). Establishes a stacking context without elevation.","value":"0","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-below","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index below stacking context base. For decorative pseudo-elements.","value":"-1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-dropdown","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for dropdown menus and select popups.","value":"1020","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-fixed","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for position: fixed elements.","value":"1010","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-modal","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for modal dialogs and their non-top-layer backdrop scrims. Sits above overlays and dropdowns. Default 1040.","value":"1040","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-overlay","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for modal / dialog backdrops.","value":"1030","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-raised","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Raised elevation (50). Cards, sticky headers.","value":"1","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-sticky","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for position: sticky elements (navbars, table headers).","value":"1000","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-toast","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for toast / snackbar notifications.","value":"1050","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]},{"name":"--sf-z-tooltip","tier":"PUBLIC","role":"knob","namespace":"z","category":"Core tokens","group":"Z-index","description":"Z-index scale using named layers. Never use raw numbers — always reference a token from this scale.","note":"Z-index for tooltips and transient floating notifications. Highest named layer in the z-index stack. Default 1060.","value":"1060","aliasOf":null,"registered":false,"syntax":null,"fallbackOnly":false,"optional":false,"layer":"slashed.tokens","bundles":["full","optimal","optimal-components","optimal-utilities"]}]`),zs={_sync:Dh,tokens:Mh};var sl=g('
'),rl=g('
'),Nh=g(" "),Fh=g('optional'),nl=g('
'),jh=g('
'),ll=g('
',1),il=g('
',1),Gh=g('knob'),Hh=g('advanced'),qh=g('
'),Vh=g('
'),Kh=g('
Classes & Variables
');function Wh(a,e){$t(e,!0);const o=Th.classes,n=zs.tokens.filter(M=>M.tier==="PUBLIC"||M.tier==="PUBLIC-ADVANCED");let l=K(""),i=K("classes"),c=K(""),f=u(()=>()=>{const M=t(l).trim().toLowerCase();return M?o.filter(Y=>Y.name.toLowerCase().includes(M)||Y.selector?.toLowerCase().includes(M)||Y.description?.toLowerCase().includes(M)||Y.group?.toLowerCase().includes(M)):o}),p=u(()=>()=>{const M=t(l).trim().toLowerCase();return M?n.filter(Y=>Y.name.toLowerCase().includes(M)||Y.description?.toLowerCase().includes(M)||Y.group?.toLowerCase().includes(M)||Y.value?.toLowerCase().includes(M)):n});function m(M){const Y=new Map;for(const Oe of M){const De=Oe.category||"Other",Me=Oe.group||"";Y.has(De)||Y.set(De,new Map);const xe=Y.get(De);xe.has(Me)||xe.set(Me,[]),xe.get(Me).push(Oe)}return Y}let h=u(()=>m(t(f)())),v=u(()=>m(t(p)())),b=null;async function k(M){try{await navigator.clipboard.writeText(M),w(c,M,!0),b&&clearTimeout(b),b=setTimeout(()=>{t(c)===M&&w(c,""),b=null},1500)}catch{}}const S={layout:"text-violet-400",macro:"text-sky-400",state:"text-amber-400",accessibility:"text-emerald-400",motion:"text-pink-400",print:"text-slate-400",form:"text-orange-400",component:"text-indigo-400",theme:"text-teal-400"};var R=Kh(),P=s(R),A=r(s(P),2),B=r(A,2),q=s(B),T=s(q),E=r(q,2),C=s(E),z=r(P,2),G=s(z);{var O=M=>{var Y=At(),Oe=fe(Y);{var De=be=>{var Q=sl(),se=s(Q);_(()=>y(se,`No classes match "${t(l)??""}"`)),d(be,Q)},Me=u(()=>t(f)().length===0),xe=be=>{var Q=At(),se=fe(Q);oe(se,17,()=>[...t(h).entries()],([Se,Ce])=>Se,(Se,Ce)=>{var H=u(()=>Ea(t(Ce),2));let D=()=>t(H)[0],ee=()=>t(H)[1];var le=il(),W=fe(le),me=s(W),ke=s(me),he=r(W,2);oe(he,17,()=>[...ee().entries()],([ie,Ue])=>ie,(ie,Ue)=>{var Ne=u(()=>Ea(t(Ue),2));let Xe=()=>t(Ne)[0],We=()=>t(Ne)[1];var Qe=ll(),dt=fe(Qe);{var gt=wt=>{var mt=rl(),te=s(mt);_(()=>y(te,Xe())),d(wt,mt)};L(dt,wt=>{Xe()&&wt(gt)})}var kt=r(dt,2);oe(kt,21,We,wt=>wt.name,(wt,mt)=>{var te=jh(),N=s(te),V=s(N),ue=s(V),ye=s(ue),st=r(ue,2);{var Ke=at=>{var ft=Nh(),Ge=s(ft);_(()=>{Ve(ft,1,`text-[8px] font-bold uppercase ${S[t(mt).kind]??"text-slate-500"}`),y(Ge,t(mt).kind)}),d(at,ft)};L(st,at=>{t(mt).kind&&at(Ke)})}var I=r(st,2);{var X=at=>{var ft=Fh();d(at,ft)};L(I,at=>{t(mt).optional&&at(X)})}var ae=r(V,2);{var Pe=at=>{var ft=nl(),Ge=s(ft);_(()=>y(Ge,t(mt).description)),d(at,ft)};L(ae,at=>{t(mt).description&&at(Pe)})}var Te=r(N,2),ut=s(Te);{var je=at=>{Bo(at,{class:"w-3 h-3 text-emerald-400"})},it=at=>{Vr(at,{class:"w-3 h-3 text-slate-500"})};L(ut,at=>{t(c)===t(mt).selector?at(je):at(it,-1)})}_(()=>y(ye,t(mt).selector)),x("click",Te,()=>k(t(mt).selector)),d(wt,te)}),d(ie,Qe)}),_(()=>y(ke,D())),d(Se,le)}),d(be,Q)};L(Oe,be=>{t(Me)?be(De):be(xe,-1)})}d(M,Y)},j=M=>{var Y=At(),Oe=fe(Y);{var De=be=>{var Q=sl(),se=s(Q);_(()=>y(se,`No tokens match "${t(l)??""}"`)),d(be,Q)},Me=u(()=>t(p)().length===0),xe=be=>{var Q=At(),se=fe(Q);oe(se,17,()=>[...t(v).entries()],([Se,Ce])=>Se,(Se,Ce)=>{var H=u(()=>Ea(t(Ce),2));let D=()=>t(H)[0],ee=()=>t(H)[1];var le=il(),W=fe(le),me=s(W),ke=s(me),he=r(W,2);oe(he,17,()=>[...ee().entries()],([ie,Ue])=>ie,(ie,Ue)=>{var Ne=u(()=>Ea(t(Ue),2));let Xe=()=>t(Ne)[0],We=()=>t(Ne)[1];var Qe=ll(),dt=fe(Qe);{var gt=wt=>{var mt=rl(),te=s(mt);_(()=>y(te,Xe())),d(wt,mt)};L(dt,wt=>{Xe()&&wt(gt)})}var kt=r(dt,2);oe(kt,21,We,wt=>wt.name,(wt,mt)=>{var te=Vh(),N=s(te),V=s(N),ue=s(V),ye=s(ue),st=r(ue,2);{var Ke=Ge=>{var Pt=Gh();d(Ge,Pt)};L(st,Ge=>{t(mt).role==="knob"&&Ge(Ke)})}var I=r(st,2);{var X=Ge=>{var Pt=Hh();d(Ge,Pt)};L(I,Ge=>{t(mt).tier==="PUBLIC-ADVANCED"&&Ge(X)})}var ae=r(V,2);{var Pe=Ge=>{var Pt=qh(),jt=s(Pt);_(()=>y(jt,t(mt).value)),d(Ge,Pt)};L(ae,Ge=>{t(mt).value&&Ge(Pe)})}var Te=r(ae,2);{var ut=Ge=>{var Pt=nl(),jt=s(Pt);_(()=>y(jt,t(mt).description)),d(Ge,Pt)};L(Te,Ge=>{t(mt).description&&Ge(ut)})}var je=r(N,2),it=s(je);{var at=Ge=>{Bo(Ge,{class:"w-3 h-3 text-emerald-400"})},ft=Ge=>{Vr(Ge,{class:"w-3 h-3 text-slate-500"})};L(it,Ge=>{t(c)===`var(${t(mt).name})`?Ge(at):Ge(ft,-1)})}_(()=>y(ye,t(mt).name)),x("click",je,()=>k(`var(${t(mt).name})`)),d(wt,te)}),d(ie,Qe)}),_(()=>y(ke,D())),d(Se,le)}),d(be,Q)};L(Oe,be=>{t(Me)?be(De):be(xe,-1)})}d(M,Y)};L(G,M=>{t(i)==="classes"?M(O):M(j,-1)})}_((M,Y)=>{Ve(q,1,`flex-1 py-1.5 rounded text-[10px] font-bold transition-all cursor-pointer ${t(i)==="classes"?"bg-indigo-600/30 text-indigo-200 border border-indigo-500/30":"text-slate-500 hover:text-slate-300"}`),y(T,`CSS classes (${M??""})`),Ve(E,1,`flex-1 py-1.5 rounded text-[10px] font-bold transition-all cursor-pointer ${t(i)==="tokens"?"bg-indigo-600/30 text-indigo-200 border border-indigo-500/30":"text-slate-500 hover:text-slate-300"}`),y(C,`CSS vars (${Y??""})`)},[()=>t(f)().length,()=>t(p)().length]),pr(A,()=>t(l),M=>w(l,M)),x("click",q,()=>{w(i,"classes")}),x("click",E,()=>{w(i,"tokens")}),d(a,R),ea()}oa(["click"]);var Yh=g('
'),Zh=g('
'),Xh=g('
'),Jh=g(''),Qh=g(' '),$h=g(''),eg=g(''),tg=g('
');function Xi(a,e){$t(e,!0);let o=K(!1);function n(O){const j=O.name;if(j.includes("color")||j.includes("source")||j.includes("-bg")||j.includes("-border"))return"color";if(j.includes("font")||j.includes("family"))return"font";const M=O.syntax?.toLowerCase()??"";return M.includes("number")||M.includes("length")||M.includes("integer")?"number":"text"}let l=u(()=>e.overrideValue??e.token.value),i=u(()=>e.overrideValue!==void 0),c=u(()=>n(e.token)),f=u(()=>e.token.name.replace("--sf-",""));function p(O){return ja.value,vo(O)||vo(`var(${e.token.name})`)||O}let m=u(()=>t(c)==="color"?p(t(l)):"");var h=tg(),v=s(h),b=r(v,2);{var k=O=>{var j=Yh();let M;_(()=>M=lt(j,"",M,{background:t(m)})),d(O,j)},S=O=>{var j=Zh();d(O,j)};L(b,O=>{t(c)==="color"?O(k):O(S,-1)})}var R=r(b,2),P=s(R),A=s(P),B=r(P,2);{var q=O=>{var j=Xh(),M=s(j);_(()=>y(M,e.token.description)),d(O,j)};L(B,O=>{e.token.description&&O(q)})}var T=r(R,2);{var E=O=>{var j=Jh();_(()=>Xt(j,t(l))),go("blur",j,M=>{const Y=M.target.value.trim();Y&&Y!==e.token.value?e.onSet(Y):(!Y||Y===e.token.value)&&e.onReset(),w(o,!1)}),x("keydown",j,M=>{M.key==="Enter"&&M.currentTarget.blur(),M.key==="Escape"&&w(o,!1)}),d(O,j)},C=O=>{var j=$h(),M=s(j);{var Y=De=>{var Me=Qh(),xe=s(Me);_(()=>y(xe,t(l))),d(De,Me)},Oe=De=>{var Me=ns();_(()=>y(Me,t(l))),d(De,Me)};L(M,De=>{t(i)?De(Y):De(Oe,-1)})}_(()=>$(j,"title",t(l))),x("click",j,()=>{w(o,!0)}),d(O,j)};L(T,O=>{t(o)?O(E):O(C,-1)})}var z=r(T,2);{var G=O=>{var j=eg();x("click",j,function(...M){e.onReset?.apply(this,M)}),d(O,j)};L(z,O=>{t(i)&&O(G)})}_(()=>{Ve(h,1,`flex items-center gap-2 px-3 py-1.5 rounded-lg transition-colors group ${t(i)?"bg-indigo-500/8 border border-indigo-500/15":"hover:bg-white/4"}`),Ve(v,1,`w-1.5 h-1.5 rounded-full shrink-0 ${t(i)?"bg-indigo-500":"bg-transparent"}`),$(P,"title",e.token.name),y(A,t(f))}),d(a,h),ea()}oa(["keydown","click"]);var ag=g(' '),og=g('

No tokens found

'),sg=g('

'),rg=g('
'),ng=g('
');function lg(a,e){$t(e,!0);let o=K(""),n=u(()=>()=>{const A=e.patterns??[e.domain];return e.tokens.filter(B=>A.some(q=>B.name.includes(q))&&B.tier!=="INTERNAL")}),l=u(()=>()=>{if(!t(o))return t(n)();const A=t(o).toLowerCase();return t(n)().filter(B=>B.name.toLowerCase().includes(A)||B.description?.toLowerCase().includes(A))}),i=u(()=>t(l)().filter(A=>A.name in e.overrides).length);var c=ng(),f=s(c),p=s(f),m=s(p),h=r(p,2);{var v=A=>{var B=ag(),q=s(B);_(()=>y(q,`${t(i)??""} modified`)),d(A,B)};L(h,A=>{t(i)>0&&A(v)})}var b=r(f,2),k=r(b,2);{var S=A=>{var B=og();d(A,B)},R=u(()=>t(l)().length===0),P=A=>{var B=rg(),q=s(B);oe(q,17,()=>t(l)().slice(0,60),z=>z.name,(z,G)=>{Xi(z,{get token(){return t(G)},get overrideValue(){return e.overrides[t(G).name]},onSet:O=>e.onSet(t(G).name,O),onReset:()=>e.onReset(t(G).name)})});var T=r(q,2);{var E=z=>{var G=sg(),O=s(G);_(j=>y(O,`${j??""} more — refine your search`),[()=>t(l)().length-60]),d(z,G)},C=u(()=>t(l)().length>60);L(T,z=>{t(C)&&z(E)})}d(A,B)};L(k,A=>{t(R)?A(S):A(P,-1)})}_(()=>{y(m,`${e.domain??""} tokens`),$(b,"placeholder",`Search ${e.domain} tokens…`),Xt(b,t(o))}),x("input",b,A=>{w(o,A.target.value,!0)}),d(a,c),ea()}oa(["input"]);var cl=g('
'),ig=g('
'),cg=g('
'),dg=g('
'),fg=g('
'),ug=g('
'),pg=g('
'),mg=g('
');function vg(a,e){$t(e,!0);const o={PUBLIC:0,"PUBLIC-ADVANCED":1,INTERNAL:2};let n=K(""),l=K(!1),i=K(!1),c=u(()=>e.tokens.filter(W=>e.patterns.some(me=>W.name.includes(me))).sort((W,me)=>{const ke=o[W.tier??"INTERNAL"]??2,he=o[me.tier??"INTERNAL"]??2;return ke!==he?ke-he:W.name.localeCompare(me.name)})),f=u(()=>()=>{let W=t(c);if(t(l)||(W=W.filter(me=>me.tier!=="INTERNAL")),t(i)&&(W=W.filter(me=>me.name in e.overrides)),t(n)){const me=t(n).toLowerCase();W=W.filter(ke=>ke.name.toLowerCase().includes(me)||ke.description?.toLowerCase().includes(me))}return W}),p=u(()=>t(c).filter(W=>W.name in e.overrides).length),m=u(()=>t(c).filter(W=>W.tier==="PUBLIC").length),h=u(()=>t(c).filter(W=>W.tier==="PUBLIC-ADVANCED").length),v=u(()=>t(c).filter(W=>W.tier==="INTERNAL").length);var b=mg(),k=s(b),S=s(k),R=r(S,2),P=s(R),A=s(P),B=s(A);{var q=W=>{var me=cl();d(W,me)};L(B,W=>{t(i)&&W(q)})}var T=r(A),E=r(P,2),C=s(E),z=s(C);{var G=W=>{var me=cl();d(W,me)};L(z,W=>{t(l)&&W(G)})}var O=r(C),j=r(E,2),M=s(j),Y=r(R,2),Oe=s(Y),De=r(s(Oe),2),Me=s(De),xe=r(Oe,2),be=r(s(xe),2),Q=s(be),se=r(xe,2);{var Se=W=>{var me=ig(),ke=r(s(me),2),he=s(ke);_(()=>y(he,`Internal (${t(v)??""})`)),d(W,me)};L(se,W=>{t(l)&&W(Se)})}var Ce=r(k,4),H=s(Ce);{var D=W=>{var me=cg(),ke=s(me);_(()=>y(ke,t(i)?"No modified tokens in this domain":"No tokens found")),d(W,me)},ee=u(()=>t(f)().length===0),le=W=>{var me=pg();oe(me,21,()=>t(f)(),ke=>ke.name,(ke,he)=>{var ie=ug(),Ue=s(ie);{var Ne=dt=>{var gt=dg();d(dt,gt)};L(Ue,dt=>{t(he).tier==="PUBLIC-ADVANCED"&&dt(Ne)})}var Xe=r(Ue,2);{var We=dt=>{var gt=fg();d(dt,gt)};L(Xe,dt=>{t(he).tier==="INTERNAL"&&dt(We)})}var Qe=r(Xe,2);Xi(Qe,{get token(){return t(he)},get overrideValue(){return e.overrides[t(he).name]},onSet:dt=>e.onSet(t(he).name,dt),onReset:()=>e.onReset(t(he).name)}),d(ke,ie)}),d(W,me)};L(H,W=>{t(ee)?W(D):W(le,-1)})}_(W=>{Xt(S,t(n)),Ve(P,1,`flex items-center gap-1 text-[9px] font-bold transition-colors cursor-pointer ${t(i)?"text-indigo-400":"text-slate-600 hover:text-slate-400"}`),Ve(A,1,`w-2.5 h-2.5 rounded border flex items-center justify-center transition-colors ${t(i)?"bg-indigo-600 border-indigo-500":"border-white/20"}`),y(T,` Modified only ${t(p)>0?`(${t(p)})`:""}`),$(E,"aria-expanded",t(l)),Ve(E,1,`flex items-center gap-1 text-[9px] font-bold transition-colors cursor-pointer ${t(l)?"text-amber-400":"text-slate-600 hover:text-slate-400"}`),Ve(C,1,`w-2.5 h-2.5 rounded border flex items-center justify-center transition-colors ${t(l)?"bg-amber-600 border-amber-500":"border-white/20"}`),y(O,` Internal (${t(v)??""})`),y(M,`${W??""}/${t(c).length??""}`),y(Me,`Public (${t(m)??""})`),y(Q,`Advanced (${t(h)??""})`)},[()=>t(f)().length]),x("input",S,W=>{w(n,W.target.value,!0)}),x("click",P,()=>{w(i,!t(i))}),x("click",E,()=>{w(l,!t(l))}),d(a,b),ea()}oa(["input","click"]);var dl=g(''),hg=g('
'),gg=g('
Waiting for live preview…
'),bg=g(""),yg=g('

Pick an editable brand/status (base) color as the foreground to enable auto-fix.

'),xg=g('

'),kg=g('
'),wg=g('

'),_g=g('
Foreground
Background
Aa Bb Cc
Auto-fix to pass
',1),Cg=g(' '),Og=g(''),Sg=g('·'),Lg=g(' '),Pg=g('

Foreground (rows) × background (cols). Click a cell to load it above.

',1),Ig=g('
Contrast checker

Live WCAG ratios computed from the actual rendered preview colors — including derived steps and your overrides.

');function Bg(a,e){$t(e,!0);const o=[{label:"Text",expr:"var(--sf-color-text)"},{label:"Text secondary",expr:"var(--sf-color-text--secondary)"},{label:"Text muted",expr:"var(--sf-color-text--muted)"},{label:"White",expr:"#ffffff"},{label:"Black",expr:"#000000"}],n=[{label:"Surface",expr:"var(--sf-color-surface)"},{label:"Bg",expr:"var(--sf-color-bg)"},{label:"Border",expr:"var(--sf-color-border)"}],l=[{key:"primary",srcLight:"--sf-color-primary-source-light",defLight:"oklch(0.47 0.27 264)",srcDark:"--sf-color-primary-source-dark",defDark:"oklch(0.715 0.243 264)"},{key:"secondary",srcLight:"--sf-color-secondary-source-light",defLight:"oklch(0.22 0.04 264)",srcDark:"--sf-color-secondary-source-dark",defDark:"oklch(0.84 0.036 264)"},{key:"tertiary",srcLight:"--sf-color-tertiary-source-light",defLight:"oklch(0.42 0.22 295)",srcDark:"--sf-color-tertiary-source-dark",defDark:"oklch(0.74 0.198 295)"},{key:"action",srcLight:"--sf-color-action-source-light",defLight:"oklch(0.50 0.22 235)",srcDark:"--sf-color-action-source-dark",defDark:"oklch(0.70 0.198 235)"},{key:"neutral",srcLight:"--sf-color-neutral-source-light",defLight:"oklch(0.52 0.025 260)",srcDark:"--sf-color-neutral-source-dark",defDark:"oklch(0.69 0.0225 260)"},{key:"success",srcLight:"--sf-color-success-source-light",defLight:"oklch(0.50 0.16 145)",srcDark:"--sf-color-success-source-dark",defDark:"oklch(0.70 0.144 145)"},{key:"warning",srcLight:"--sf-color-warning-source-light",defLight:"oklch(0.75 0.17 80)",srcDark:"--sf-color-warning-source-dark",defDark:"oklch(0.65 0.153 80)"},{key:"danger",srcLight:"--sf-color-danger-source-light",defLight:"oklch(0.48 0.22 12)",srcDark:"--sf-color-danger-source-dark",defDark:"oklch(0.71 0.198 12)"},{key:"info",srcLight:"--sf-color-info-source-light",defLight:"oklch(0.48 0.18 235)",srcDark:"--sf-color-info-source-dark",defDark:"oklch(0.71 0.162 235)"}],i=l.flatMap(D=>[{label:`${D.key} (base)`,expr:`var(--sf-color-${D.key})`,editKey:D.key},{label:`${D.key}-100`,expr:`var(--sf-color-${D.key}-100)`},{label:`${D.key}-600`,expr:`var(--sf-color-${D.key}-600)`},{label:`${D.key}-900`,expr:`var(--sf-color-${D.key}-900)`}]),c=[...o,...n,...i],f=Object.fromEntries(l.map(D=>[D.key,D])),p=[{label:"text",expr:"var(--sf-color-text)"},{label:"white",expr:"#ffffff"},{label:"black",expr:"#000000"},{label:"primary",expr:"var(--sf-color-primary)",editKey:"primary"}],m=[{label:"surface",expr:"var(--sf-color-surface)"},{label:"primary",expr:"var(--sf-color-primary)"},{label:"neutral-100",expr:"var(--sf-color-neutral-100)"},{label:"success",expr:"var(--sf-color-success)"},{label:"warning",expr:"var(--sf-color-warning)"},{label:"danger",expr:"var(--sf-color-danger)"}];let h=K("White"),v=K("primary (base)"),b=K("AA"),k=u(()=>c.find(D=>D.label===t(h))??c[0]),S=u(()=>c.find(D=>D.label===t(v))??c[0]);function R(D,ee){ja.value;const le=Ls(D),W=Ls(ee);return!le||!W?null:Ks(To(...le),To(...W))}function P(D){return D>=7?{tag:"AAA",cls:"bg-emerald-500/25 text-emerald-200"}:D>=4.5?{tag:"AA",cls:"bg-emerald-500/15 text-emerald-300"}:D>=3?{tag:"AA-L",cls:"bg-amber-500/20 text-amber-300"}:{tag:"Fail",cls:"bg-rose-500/20 text-rose-300"}}let A=u(()=>R(t(k).expr,t(S).expr));function B(){const D=t(h);w(h,t(v),!0),w(v,D,!0)}function q(D,ee){const le=c.find(me=>me.expr===D),W=c.find(me=>me.expr===ee);le&&w(h,le.label,!0),W&&w(v,W.label,!0)}function T(D){return ja.value,vo(D)||D}let E=K(!1),C=K(!1),z=K(null);function G(){w(z,null);const D=t(k).editKey?f[t(k).editKey]:null;if(!D)return;const ee=Wn()==="dark",le=ee?D.srcDark:D.srcLight,W=ee?D.defDark:D.defLight,me=e.overrides[le]??W,{c:ke,h:he,l:ie,valid:Ue}=Ws(me);if(!Ue)return;const Ne=Ls(t(S).expr);if(!Ne)return;const Xe=To(...Ne),We=t(b)==="AAA"?7:4.5;let Qe=null;for(let mt=0;mt<=1.0001;mt+=.005){const[te,N,V]=Yn(mt,ke,he);Ks(To(te,N,V),Xe)>=We&&(Qe===null||Math.abs(mt-ie){if(!t(E)){w(z,null);return}ja.value,t(h),t(v),t(b),t(k).editKey&&t(A)!==null&&t(A)<(t(b)==="AAA"?7:4.5)?G():w(z,null)});var j=Ig(),M=r(s(j),2),Y=s(M),Oe=r(s(Y),2),De=s(Oe),Me=r(Y,2);{var xe=D=>{var ee=_g(),le=fe(ee),W=s(le),me=r(s(W),2);oe(me,21,()=>c,I=>I.label,(I,X)=>{var ae=dl(),Pe=s(ae),Te={};_(()=>{y(Pe,t(X).label),Te!==(Te=t(X).label)&&(ae.value=(ae.__value=t(X).label)??"")}),d(I,ae)});var ke=r(W,2),he=r(ke,2),ie=r(s(he),2);oe(ie,21,()=>c,I=>I.label,(I,X)=>{var ae=dl(),Pe=s(ae),Te={};_(()=>{y(Pe,t(X).label),Te!==(Te=t(X).label)&&(ae.value=(ae.__value=t(X).label)??"")}),d(I,ae)});var Ue=r(le,2),Ne=s(Ue),Xe=s(Ne),We=r(Ne,2);{var Qe=I=>{const X=u(()=>P(t(A)));var ae=hg(),Pe=s(ae),Te=s(Pe),ut=r(Pe,2),je=s(ut),it=r(ut,4),at=s(it),ft=s(at),Ge=r(at,2),Pt=s(Ge),jt=r(Ge,2),ta=s(jt),Dt=r(jt,2),zt=s(Dt);_(ia=>{y(Te,`${ia??""}:1`),Ve(ut,1,`text-[10px] font-bold px-2 py-0.5 rounded ${t(X).cls}`),y(je,t(X).tag),Ve(at,1,mo(t(A)>=4.5?"text-emerald-300":"text-rose-300")),y(ft,`${t(A)>=4.5?"✓":"✗"} AA normal`),Ve(Ge,1,mo(t(A)>=3?"text-emerald-300":"text-rose-300")),y(Pt,`${t(A)>=3?"✓":"✗"} AA large`),Ve(jt,1,mo(t(A)>=7?"text-emerald-300":"text-rose-300")),y(ta,`${t(A)>=7?"✓":"✗"} AAA normal`),Ve(Dt,1,mo(t(A)>=4.5?"text-emerald-300":"text-rose-300")),y(zt,`${t(A)>=4.5?"✓":"✗"} AAA large`)},[()=>t(A).toFixed(2)]),d(I,ae)},dt=I=>{var X=gg();d(I,X)};L(We,I=>{t(A)!==null?I(Qe):I(dt,-1)})}var gt=r(Ue,2),kt=s(gt),wt=s(kt),mt=r(s(wt)),te=s(mt),N=r(wt,2);oe(N,20,()=>["AA","AAA"],I=>I,(I,X)=>{var ae=bg(),Pe=s(ae);_(()=>{Ve(ae,1,`px-2 py-0.5 rounded-md text-[10px] font-bold cursor-pointer ${t(b)===X?"bg-white/12 text-white":"text-slate-500 hover:text-slate-300"}`),y(Pe,X)}),x("click",ae,()=>{w(b,X,!0)}),d(I,ae)});var V=r(kt,2);{var ue=I=>{var X=yg();d(I,X)},ye=I=>{var X=xg(),ae=s(X);_(()=>y(ae,`Already passes ${t(b)??""}. 🎉`)),d(I,X)},st=I=>{var X=kg(),ae=s(X),Pe=r(ae,2),Te=s(Pe),ut=s(Te),je=r(Te,2),it=s(je),at=r(Pe,2);_((ft,Ge)=>{lt(ae,ft),y(ut,t(z).value),y(it,`→ ${Ge??""}:1 (${t(b)??""} ✓)`)},[()=>`background:${T(t(z).value)}`,()=>t(z).ratio.toFixed(2)]),x("click",at,O),d(I,X)},Ke=I=>{var X=wg(),ae=s(X);_(()=>y(ae,`No lightness of this hue reaches ${t(b)??""} on this background — try a different background or hue.`)),d(I,X)};L(V,I=>{t(k).editKey?t(A)!==null&&t(A)>=(t(b)==="AAA"?7:4.5)?I(ye,1):t(z)?I(st,2):I(Ke,-1):I(ue)})}_((I,X,ae)=>{lt(Ne,I),lt(Xe,X),y(te,`(for ${ae??""} mode)`)},[()=>`background:${T(t(S).expr)}`,()=>`color:${T(t(k).expr)}`,()=>Wn()]),Un(me,()=>t(h),I=>w(h,I)),x("click",ke,B),Un(ie,()=>t(v),I=>w(v,I)),d(D,ee)};L(Me,D=>{t(E)&&D(xe)})}var be=r(M,4),Q=s(be),se=r(s(Q),2),Se=s(se),Ce=r(Q,2);{var H=D=>{var ee=Pg(),le=r(fe(ee),2),W=s(le),me=s(W),ke=s(me),he=r(s(ke));oe(he,17,()=>m,Ue=>Ue.label,(Ue,Ne)=>{var Xe=Cg(),We=s(Xe);_(()=>y(We,t(Ne).label)),d(Ue,Xe)});var ie=r(me);oe(ie,21,()=>p,Ue=>Ue.label,(Ue,Ne)=>{var Xe=Lg(),We=s(Xe),Qe=s(We),dt=r(We);oe(dt,17,()=>m,gt=>gt.label,(gt,kt)=>{const wt=u(()=>R(t(Ne).expr,t(kt).expr));var mt=At(),te=fe(mt);{var N=ue=>{const ye=u(()=>P(t(wt)));var st=Og(),Ke=s(st),I=s(Ke);_((X,ae)=>{$(Ke,"title",X),Ve(Ke,1,`w-full px-1.5 py-1 rounded font-mono font-bold cursor-pointer ${t(ye).cls}`),y(I,ae)},[()=>`${t(Ne).label} on ${t(kt).label} — ${t(wt).toFixed(2)}:1`,()=>t(wt).toFixed(1)]),x("click",Ke,()=>q(t(Ne).expr,t(kt).expr)),d(ue,st)},V=ue=>{var ye=Sg();d(ue,ye)};L(te,ue=>{t(wt)!==null?ue(N):ue(V,-1)})}d(gt,mt)}),_(()=>y(Qe,t(Ne).label)),d(Ue,Xe)}),d(D,ee)};L(Ce,D=>{t(C)&&D(H)})}_(()=>{$(Y,"aria-expanded",t(E)),y(De,t(E)?"▲":"▼"),$(Q,"aria-expanded",t(C)),y(Se,t(C)?"▲":"▼")}),x("click",Y,()=>{w(E,!t(E))}),x("click",Q,()=>{w(C,!t(C))}),d(a,j),ea()}oa(["click"]);var Ug=g('
'),Ag=g(' '),zg=g('
');function Ji(a,e){$t(e,!0);const o=new Set(["home","themes","wcag","setup","cheatsheet"]);let n=K("controls");ba(()=>{e.domain,w(n,"controls")});let l=u(()=>Vi[e.domain]??[e.domain]),i=u(()=>e.tokens.filter(v=>t(l).some(b=>v.name.includes(b))&&v.name in e.overrides).length);var c=At(),f=fe(c);{var p=v=>{var b=At(),k=fe(b);{var S=q=>{Fu(q,{get overrides(){return e.overrides},get onSelect(){return e.onSelectDomain},get onApplyTheme(){return e.onApplyTheme},get onResetAll(){return e.onResetAll}})},R=q=>{Bh(q,{get overrides(){return e.overrides},get onApplyTheme(){return e.onApplyTheme},get onResetAll(){return e.onResetAll}})},P=q=>{Bg(q,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onBulkChange(){return e.onBulkChange}})},A=q=>{Eh(q,{get overrides(){return e.overrides}})},B=q=>{Wh(q,{})};L(k,q=>{e.domain==="home"?q(S):e.domain==="themes"?q(R,1):e.domain==="wcag"?q(P,2):e.domain==="setup"?q(A,3):e.domain==="cheatsheet"&&q(B,4)})}d(v,b)},m=u(()=>o.has(e.domain)),h=v=>{var b=zg(),k=s(b),S=s(k);{var R=G=>{var O=Ug(),j=s(O);{var M=H=>{Vp(H,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange},get onSelectDomain(){return e.onSelectDomain}})},Y=H=>{Om(H,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},Oe=H=>{Um(H,{get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})},De=H=>{Wm(H,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},Me=H=>{iv(H,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})},xe=H=>{hv(H,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})},be=H=>{Uv(H,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},Q=H=>{qv(H,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})},se=H=>{eh(H,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})},Se=H=>{kh(H,{get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset},get onBulkChange(){return e.onBulkChange}})},Ce=H=>{lg(H,{get domain(){return e.domain},get tokens(){return e.tokens},get overrides(){return e.overrides},get onSet(){return e.onSet},get onReset(){return e.onReset}})};L(j,H=>{e.domain==="colors"?H(M):e.domain==="typography"?H(Y,1):e.domain==="spacing"?H(Oe,2):e.domain==="layout"?H(De,3):e.domain==="borders"?H(Me,4):e.domain==="shadows"?H(xe,5):e.domain==="motion"?H(be,6):e.domain==="effects"?H(Q,7):e.domain==="macros"?H(se,8):e.domain==="misc"?H(Se,9):H(Ce,-1)})}d(G,O)},P=G=>{vg(G,{get tokens(){return e.tokens},get overrides(){return e.overrides},get patterns(){return t(l)},get onSet(){return e.onSet},get onReset(){return e.onReset}})};L(S,G=>{t(n)==="controls"?G(R):G(P,-1)})}var A=r(k,2),B=s(A),q=s(B);wi(q,{class:"w-3 h-3"});var T=r(B,4),E=s(T);Qd(E,{class:"w-3 h-3"});var C=r(E,2);{var z=G=>{var O=Ag(),j=s(O);_(()=>y(j,t(i))),d(G,O)};L(C,G=>{t(i)>0&&G(z)})}_(()=>{Ve(B,1,`flex-1 flex items-center justify-center gap-1.5 py-2 text-[10px] font-bold transition-all cursor-pointer ${t(n)==="controls"?"text-indigo-300 bg-indigo-600/10 border-t-2 border-t-indigo-500 -mt-px":"text-slate-500 hover:text-slate-300"}`),Ve(T,1,`flex-1 flex items-center justify-center gap-1.5 py-2 text-[10px] font-bold transition-all cursor-pointer ${t(n)==="tokens"?"text-indigo-300 bg-indigo-600/10 border-t-2 border-t-indigo-500 -mt-px":"text-slate-500 hover:text-slate-300"}`)}),x("click",B,()=>{w(n,"controls")}),x("click",T,()=>{w(n,"tokens")}),d(v,b)};L(f,v=>{t(m)?v(p):v(h,-1)})}d(a,c),ea()}oa(["click"]);var Eg=g('
'),Rg=g('
Type to search tokens by name or description
'),Tg=g('overridden'),Dg=g('
'),Mg=g(''),Ng=g('
↑↓ navigate open panel Esc close
'),Fg=g('');function Qi(a,e){$t(e,!0);let o=K(""),n=K(0),l=K(null);const i={colors:"Colors",typography:"Typography",spacing:"Spacing",layout:"Layout",borders:"Borders",shadows:"Shadows",motion:"Motion",effects:"Effects",macros:"Macros",misc:"Misc"};let c=u(()=>(()=>{const C=t(o).trim().toLowerCase();if(!C)return[];const z=[];for(const G of e.tokens){if(G.tier==="INTERNAL")continue;const O=G.name.toLowerCase().includes(C),j=G.description?.toLowerCase().includes(C)??!1;if((O||j)&&(z.push({token:G,domain:hn(G.name),overridden:G.name in e.overrides}),z.length>=40))break}return z})());ba(()=>{t(o),w(n,0)}),ba(()=>{t(l)&&t(l).focus()});function f(C){e.onNavigate(C),e.onClose()}function p(C){if(C.key==="Escape"){C.preventDefault(),e.onClose();return}if(t(c).length===0&&(C.key==="ArrowDown"||C.key==="ArrowUp")){C.preventDefault(),w(n,0);return}if(C.key==="ArrowDown"){C.preventDefault(),w(n,Math.min(t(n)+1,t(c).length-1),!0);return}if(C.key==="ArrowUp"){C.preventDefault(),w(n,Math.max(t(n)-1,0),!0);return}C.key==="Enter"&&t(c)[t(n)]&&(C.preventDefault(),f(t(c)[t(n)].domain))}var m=Fg(),h=s(m),v=s(h),b=r(s(v),2);bo(b,C=>w(l,C),()=>t(l));var k=r(v,2),S=s(k);{var R=C=>{var z=Eg(),G=s(z);_(()=>y(G,`No tokens matching "${t(o)??""}"`)),d(C,z)},P=u(()=>t(o).trim()&&t(c).length===0),A=C=>{var z=Rg();d(C,z)},B=u(()=>!t(o).trim()),q=C=>{var z=At(),G=fe(z);oe(G,19,()=>t(c),O=>O.token.name,(O,j,M)=>{var Y=Mg(),Oe=s(Y),De=s(Oe),Me=s(De),xe=s(Me),be=r(Me,2);{var Q=W=>{var me=Tg();d(W,me)};L(be,W=>{t(j).overridden&&W(Q)})}var se=r(De,2);{var Se=W=>{var me=Dg(),ke=s(me);_(()=>y(ke,t(j).token.description)),d(W,me)};L(se,W=>{t(j).token.description&&W(Se)})}var Ce=r(Oe,2),H=s(Ce),D=s(H),ee=r(H,2),le=s(ee);_(()=>{Ve(Y,1,`w-full flex items-center gap-3 px-4 py-2.5 text-left transition-colors cursor-pointer ${t(n)===t(M)?"bg-indigo-500/15":"hover:bg-white/4"}`),y(xe,t(j).token.name),y(D,t(j).overridden?e.overrides[t(j).token.name]:t(j).token.value),y(le,i[t(j).domain]??t(j).domain)}),go("mouseenter",Y,()=>{w(n,t(M),!0)}),x("click",Y,()=>f(t(j).domain)),d(O,Y)}),d(C,z)};L(S,C=>{t(P)?C(R):t(B)?C(A,1):C(q,-1)})}var T=r(k,2);{var E=C=>{var z=Ng();d(C,z)};L(T,C=>{t(c).length>0&&C(E)})}x("mousedown",m,C=>{C.target===C.currentTarget&&e.onClose()}),x("keydown",b,p),pr(b,()=>t(o),C=>w(o,C)),d(a,m),ea()}oa(["mousedown","keydown","click"]);var jg=g(' '),Gg=g('
');function Hg(a,e){$t(e,!0);const o=zs.tokens??zs,n={home:"Home",colors:"Colors",typography:"Typography",spacing:"Spacing",layout:"Layout",borders:"Borders",shadows:"Shadows",motion:"Motion",effects:"Effects",macros:"Macros",misc:"Misc",themes:"Themes",wcag:"WCAG",setup:"Install",cheatsheet:"Classes"};function l(N){const V={};for(const ue of Object.keys(N)){const ye=hn(ue);V[ye]=(V[ye]??0)+1}return V}let i=K(ma(ji())),c=K(ma([])),f=K(ma([])),p=K("home"),m=K(!1),h=K("controls"),v=K("light"),b=K("fluid"),k=K("normal"),S=K("marketing"),R=u(()=>Object.keys(t(i)).length),P=u(()=>l(t(i))),A=u(()=>t(c).length>0),B=u(()=>t(f).length>0);function q(N,V){const ue=Object.keys(N);return ue.length!==Object.keys(V).length?!1:ue.every(ye=>N[ye]===V[ye])}let T=K(ma(co(()=>({...t(i)})))),E=K("idle"),C=u(()=>!q(t(i),t(T))),z=null;ba(()=>{Gi(t(i))});function G(N){const V=t(i),ue=typeof N=="function"?N(V):N;q(V,ue)||(w(c,[...t(c).slice(-49),V],!0),w(f,[],!0),t(E)==="saved"&&w(E,"idle")),w(i,ue,!0)}async function O(){if(!t(C)||t(E)==="saving")return;const N={...t(i)};w(E,"saving");try{await Hi(t(i)),q(t(i),N)?(w(T,N,!0),w(E,"saved"),z&&clearTimeout(z),z=setTimeout(()=>{t(E)==="saved"&&w(E,"idle"),z=null},2e3)):w(E,"idle")}catch(V){console.warn("slashed: save failed",V),w(E,"idle")}}function j(N,V){G(ue=>({...ue,[N]:V}))}function M(N){G(V=>{const ue={...V};return delete ue[N],ue})}function Y(N){G(V=>{const ue={...V};for(const[ye,st]of Object.entries(N))st===null?delete ue[ye]:ue[ye]=st;return ue})}function Oe(N){G({...N})}function De(){G({})}function Me(){if(t(c).length===0)return;const N=t(c)[t(c).length-1],V=t(i);w(c,t(c).slice(0,-1),!0),w(f,[V,...t(f)],!0),w(i,N,!0)}function xe(){if(t(f).length===0)return;const N=t(f)[0],V=t(i);w(f,t(f).slice(1),!0),w(c,[...t(c),V],!0),w(i,N,!0)}function be(){const N=document.createElement("input");N.type="file",N.accept=".css,.json",N.onchange=V=>{const ue=V.target.files?.[0];if(!ue)return;const ye=new FileReader;ye.onload=st=>{const Ke=st.target?.result;if(Ke)if(ue.name.endsWith(".json"))try{const I=JSON.parse(Ke);if(I!==null&&typeof I=="object"&&!Array.isArray(I)){const X=Object.fromEntries(Object.entries(I).filter(([ae,Pe])=>typeof Pe=="string"&&/^--sf-[\w-]+$/.test(ae)));Object.keys(X).length>0&&G(X)}}catch{}else{const I={},X=/(--sf-[\w-]+)\s*:\s*([^;]+);/g;let ae;for(;(ae=X.exec(Ke))!==null;)I[ae[1].trim()]=ae[2].trim();Object.keys(I).length>0&&G(Pe=>({...Pe,...I}))}},ye.readAsText(ue)},N.click()}function Q(){const N=Go(t(i),{mode:"layer",banner:!0}),V=new Blob([N],{type:"text/css"}),ue=URL.createObjectURL(V),ye=document.createElement("a");ye.href=ue,ye.download="slashed-overrides.css",ye.click(),URL.revokeObjectURL(ue)}ci(()=>{const N=V=>{(V.ctrlKey||V.metaKey)&&!V.shiftKey&&V.key==="z"&&(V.preventDefault(),Me()),(V.ctrlKey||V.metaKey)&&(V.shiftKey&&V.key==="z"||V.key==="y")&&(V.preventDefault(),xe()),(V.ctrlKey||V.metaKey)&&!V.shiftKey&&V.key.toLowerCase()==="s"&&(V.preventDefault(),O()),(V.ctrlKey||V.metaKey)&&!V.repeat&&V.key.toLowerCase()==="k"&&(V.preventDefault(),w(m,!t(m)))};return window.addEventListener("keydown",N),()=>{window.removeEventListener("keydown",N),z&&clearTimeout(z)}});var se=Gg(),Se=s(se);ff(Se,{get overridesCount(){return t(R)},get canUndo(){return t(A)},get canRedo(){return t(B)},get hasPendingChanges(){return t(C)},get saveState(){return t(E)},onUndo:Me,onRedo:xe,onResetAll:De,onImport:be,onExport:Q,onSave:O});var Ce=r(Se,2),H=s(Ce),D=s(H);Pi(D,{get activeId(){return t(p)},onSelect:N=>{w(p,N,!0)},get overridesByDomain(){return t(P)}});var ee=r(H,2),le=s(ee),W=s(le),me=s(W),ke=r(le,2),he=s(ke);Ji(he,{get domain(){return t(p)},get tokens(){return o},get overrides(){return t(i)},onSet:j,onReset:M,onBulkChange:Y,onApplyTheme:Oe,onSelectDomain:N=>{w(p,N,!0)},onResetAll:De});var ie=r(ee,2),Ue=s(ie);hu(Ue,{get overrides(){return t(i)},get previewTheme(){return t(v)},get previewWidth(){return t(b)},get previewMotion(){return t(k)},get previewTemplate(){return t(S)},onThemeChange:N=>{w(v,N,!0)},onWidthChange:N=>{w(b,N,!0)},onMotionChange:N=>{w(k,N,!0)},onTemplateChange:N=>{w(S,N,!0)}});var Ne=r(Ce,2),Xe=s(Ne),We=s(Xe);wi(We,{class:"w-3.5 h-3.5"});var Qe=r(Xe,2),dt=s(Qe);Zd(dt,{class:"w-3.5 h-3.5"});var gt=r(dt,2);{var kt=N=>{var V=jg(),ue=s(V);_(()=>y(ue,t(R)>9?"9+":t(R))),d(N,V)};L(gt,N=>{t(R)>0&&N(kt)})}var wt=r(Ne,2);{let N=u(()=>n[t(p)]??t(p));vf(wt,{get overridesCount(){return t(R)},get domain(){return t(N)}})}var mt=r(wt,2);{var te=N=>{Qi(N,{get tokens(){return o},get overrides(){return t(i)},onNavigate:V=>{w(p,V,!0)},onClose:()=>{w(m,!1)}})};L(mt,N=>{t(m)&&N(te)})}_(()=>{Ve(H,1,`shrink-0 ${t(h)==="preview"?"hidden md:flex":"flex"}`),Ve(ee,1,`w-full md:w-[360px] shrink-0 bg-[#0c0c15] border-r border-white/8 flex-col min-h-0 ${t(h)==="preview"?"hidden md:flex":"flex"}`),y(me,n[t(p)]??t(p)),Ve(ie,1,`flex-1 flex-col min-h-0 min-w-0 ${t(h)==="controls"?"hidden md:flex":"flex"}`),$(Xe,"aria-pressed",t(h)==="controls"),Ve(Xe,1,`flex-1 flex items-center justify-center gap-1.5 py-2.5 text-[11px] font-bold transition-colors cursor-pointer ${t(h)==="controls"?"text-indigo-300 bg-indigo-500/10":"text-slate-500 hover:text-slate-300"}`),$(Qe,"aria-pressed",t(h)==="preview"),Ve(Qe,1,`flex-1 flex items-center justify-center gap-1.5 py-2.5 text-[11px] font-bold transition-colors cursor-pointer ${t(h)==="preview"?"text-indigo-300 bg-indigo-500/10":"text-slate-500 hover:text-slate-300"}`)}),x("click",Xe,()=>{w(h,"controls")}),x("click",Qe,()=>{w(h,"preview")}),d(a,se),ea()}oa(["click"]);const Ar=document.getElementById("app")??document.getElementById("slashed-admin-app");Ar&&(Ar.innerHTML="",si(Hg,{target:Ar}));var qg=g(''),Vg=g(' '),Kg=g(''),Wg=g('
/
SLASHED
',1);function Yg(a,e){$t(e,!0);const o=zs.tokens??zs,n="slashed-overlay/open",l="slashed-overlay/domain",i={home:"Home",colors:"Colors",typography:"Typography",spacing:"Spacing",layout:"Layout",borders:"Borders",shadows:"Shadows",motion:"Motion",effects:"Effects",macros:"Macros",misc:"Misc",themes:"Themes",wcag:"WCAG",setup:"Install",cheatsheet:"Classes"};function c(_e){const bt={};for(const Et of Object.keys(_e)){const Je=hn(Et);bt[Je]=(bt[Je]??0)+1}return bt}function f(_e,bt){try{const Et=localStorage.getItem(_e);return Et===null?bt:Et!=="false"}catch{return bt}}function p(_e,bt){try{return localStorage.getItem(_e)??bt}catch{return bt}}let m=K(ma(f(n,!0))),h=K(ma(typeof window<"u"?window.matchMedia("(max-width: 768px)").matches:!1)),v=K(ma(ji())),b=K(ma([])),k=K(ma([])),S=K(ma(p(l,"home"))),R=K(!1),P=K(!1),A=K(null),B=K(null);ba(()=>{t(P)&&fr().then(()=>t(A)?.focus())});let q=u(()=>Object.keys(t(v)).length),T=u(()=>c(t(v))),E=u(()=>t(b).length>0),C=u(()=>t(k).length>0);function z(_e,bt){const Et=Object.keys(_e);return Et.length!==Object.keys(bt).length?!1:Et.every(Je=>_e[Je]===bt[Je])}let G=K(ma(co(()=>({...t(v)})))),O=K("idle"),j=u(()=>!z(t(v),t(G))),M=null;function Y(){const _e=document.getElementById("slashed-frontend-overlay");if(!_e)return;const bt="var(--wp-admin--admin-bar--height, 32px)";_e.style.position="fixed",_e.style.right="0",_e.style.zIndex="100000",_e.style.pointerEvents="auto",t(m)?(_e.style.top=bt,_e.style.width=t(h)?"100vw":"420px",_e.style.height=`calc(100vh - ${bt})`):(_e.style.top=`calc(${bt} + 16px)`,_e.style.width="40px",_e.style.height="64px")}ba(()=>{Gi(t(v))}),ba(()=>{!t(h)&&t(m)?document.documentElement.classList.add("sf-panel-active"):document.documentElement.classList.remove("sf-panel-active")}),ba(()=>{Y()}),ba(()=>{try{localStorage.setItem(n,String(t(m)))}catch{}}),ba(()=>{try{localStorage.setItem(l,t(S))}catch{}});function Oe(){w(m,!t(m))}function De(_e){const bt=t(v),Et=typeof _e=="function"?_e(bt):_e;z(bt,Et)||(w(b,[...t(b).slice(-49),bt],!0),w(k,[],!0),t(O)==="saved"&&w(O,"idle")),w(v,Et,!0)}async function Me(){if(!t(j)||t(O)==="saving")return;const _e={...t(v)};w(O,"saving");try{await Hi(t(v)),z(t(v),_e)?(w(G,_e,!0),w(O,"saved"),M&&clearTimeout(M),M=setTimeout(()=>{t(O)==="saved"&&w(O,"idle"),M=null},2e3)):w(O,"idle")}catch(bt){console.warn("slashed: save failed",bt),w(O,"idle")}}function xe(_e,bt){De(Et=>({...Et,[_e]:bt}))}function be(_e){De(bt=>{const Et={...bt};return delete Et[_e],Et})}function Q(_e){De(bt=>{const Et={...bt};for(const[Je,St]of Object.entries(_e))St===null?delete Et[Je]:Et[Je]=St;return Et})}function se(_e){De({..._e})}function Se(){w(P,!0)}function Ce(){w(P,!1),De({})}function H(){w(P,!1)}function D(){if(!t(b).length)return;const _e=t(b)[t(b).length-1];w(k,[t(v),...t(k)],!0),w(b,t(b).slice(0,-1),!0),w(v,_e,!0)}function ee(){if(!t(k).length)return;const _e=t(k)[0];w(b,[...t(b),t(v)],!0),w(k,t(k).slice(1),!0),w(v,_e,!0)}function le(){const _e=Go(t(v),{mode:"layer",banner:!0}),bt=new Blob([_e],{type:"text/css"}),Et=URL.createObjectURL(bt),Je=document.createElement("a");Je.href=Et,Je.download="slashed-overrides.css",Je.click(),URL.revokeObjectURL(Et)}function W(){const _e=document.createElement("input");_e.type="file",_e.accept=".css,.json",_e.onchange=bt=>{const Et=bt.target.files?.[0];if(!Et)return;const Je=new FileReader;Je.onload=St=>{const ot=St.target?.result;if(ot)if(Et.name.endsWith(".json"))try{const rt=JSON.parse(ot);if(rt!==null&&typeof rt=="object"&&!Array.isArray(rt)){const Gt=Object.fromEntries(Object.entries(rt).filter(([Mt,Nt])=>typeof Nt=="string"&&/^--sf-[\w-]+$/.test(Mt)));De(Gt)}}catch{}else{const rt={},Gt=/(--sf-[\w-]+)\s*:\s*([^;]+);/g;let Mt;for(;(Mt=Gt.exec(ot))!==null;)rt[Mt[1].trim()]=Mt[2].trim();Object.keys(rt).length&&De(Nt=>({...Nt,...rt}))}},Je.readAsText(Et)},_e.click()}ci(()=>{const _e=document.createElement("style");_e.id="sf-panel-push",_e.textContent=["html { transition: padding-right 200ms ease-in-out; }","html.sf-panel-active { padding-right: 420px !important; overflow-x: clip; }"].join(` +`),document.head.appendChild(_e);const bt=window.matchMedia("(max-width: 768px)"),Et=ot=>{w(h,ot.matches,!0)};bt.addEventListener("change",Et);const Je=ot=>{const rt=ot.key.toLowerCase();t(m)&&((ot.ctrlKey||ot.metaKey)&&!ot.shiftKey&&rt==="z"&&(ot.preventDefault(),D()),(ot.ctrlKey||ot.metaKey)&&(ot.shiftKey&&rt==="z"||rt==="y")&&(ot.preventDefault(),ee()),(ot.ctrlKey||ot.metaKey)&&!ot.repeat&&rt==="k"&&(ot.preventDefault(),w(R,!t(R))),(ot.ctrlKey||ot.metaKey)&&!ot.shiftKey&&rt==="s"&&(ot.preventDefault(),Me()))},St=()=>Oe();return window.addEventListener("keydown",Je),document.addEventListener("slashed:toggle-overlay",St),()=>{_e.remove(),document.documentElement.classList.remove("sf-panel-active"),bt.removeEventListener("change",Et),window.removeEventListener("keydown",Je),document.removeEventListener("slashed:toggle-overlay",St),M&&clearTimeout(M)}});var me=Wg(),ke=fe(me);{var he=_e=>{var bt=qg(),Et=r(s(bt),2);Tn(Et,{class:"w-3 h-3 opacity-70 rotate-180"}),x("click",bt,Oe),d(_e,bt)};L(ke,_e=>{t(m)||_e(he)})}var ie=r(ke,2);let Ue,Ne;var Xe=s(ie),We=r(s(Xe),4),Qe=s(We),dt=r(We,2);{var gt=_e=>{var bt=Vg(),Et=s(bt);_(()=>y(Et,t(q))),d(_e,bt)};L(dt,_e=>{t(q)>0&&_e(gt)})}var kt=r(dt,4),wt=s(kt);{var mt=_e=>{mi(_e,{class:"w-3 h-3 animate-spin"})},te=_e=>{Bo(_e,{class:"w-3 h-3"})},N=_e=>{mr(_e,{class:"w-3 h-3"})};L(wt,_e=>{t(O)==="saving"?_e(mt):t(O)==="saved"?_e(te,1):_e(N,-1)})}var V=r(kt,2),ue=s(V);Si(ue,{class:"w-3 h-3"});var ye=r(V,2),st=s(ye);yi(st,{class:"w-3 h-3"});var Ke=r(ye,4),I=s(Ke);ui(I,{class:"w-3 h-3"});var X=r(Ke,2),ae=s(X);Kr(ae,{class:"w-3 h-3"});var Pe=r(X,2),Te=s(Pe);pn(Te,{class:"w-3 h-3"});var ut=r(Pe,4),je=s(ut);Tn(je,{class:"w-3 h-3"});var it=r(Xe,2),at=s(it);Pi(at,{get activeId(){return t(S)},onSelect:_e=>{w(S,_e,!0)},get overridesByDomain(){return t(T)}});var ft=r(at,2),Ge=s(ft),Pt=s(Ge),jt=s(Pt),ta=r(Ge,2),Dt=s(ta);Ji(Dt,{get domain(){return t(S)},get tokens(){return o},get overrides(){return t(v)},onSet:xe,onReset:be,onBulkChange:Q,onApplyTheme:se,onSelectDomain:_e=>{w(S,_e,!0)},onResetAll:Se});var zt=r(it,2);{var ia=_e=>{Qi(_e,{get tokens(){return o},get overrides(){return t(v)},onNavigate:bt=>{w(S,bt,!0)},onClose:()=>{w(R,!1)}})};L(zt,_e=>{t(R)&&_e(ia)})}var ca=r(zt,2);{var da=_e=>{var bt=Kg(),Et=s(bt),Je=r(s(Et),2),St=s(Je),ot=r(Je,2),rt=s(ot);bo(rt,Mt=>w(A,Mt),()=>t(A));var Gt=r(rt,2);bo(Gt,Mt=>w(B,Mt),()=>t(B)),_(()=>y(St,`This will clear all ${t(q)??""} customisation${t(q)!==1?"s":""}. + You can still undo this before saving.`)),x("keydown",bt,Mt=>{Mt.key==="Escape"&&(Mt.stopPropagation(),H()),Mt.key==="Tab"&&(Mt.preventDefault(),document.activeElement===t(A)?t(B)?.focus():t(A)?.focus())}),x("click",rt,H),x("click",Gt,Ce),d(_e,bt)};L(ca,_e=>{t(P)&&_e(da)})}_(_e=>{Ue=Ve(ie,1,"fixed right-0 z-[100000] pointer-events-auto flex flex-col bg-[#0a0a0f] text-slate-200 font-sans shadow-2xl shadow-black/60 border-l border-white/8 transition-transform duration-200 ease-in-out",null,Ue,{"translate-x-full":!t(m),"translate-x-0":t(m),"pointer-events-none":!t(m)}),Ne=lt(ie,`top: var(--wp-admin--admin-bar--height, 32px); width: ${t(h)?"100vw":"420px"}; height: calc(100vh - var(--wp-admin--admin-bar--height, 32px));`,Ne,{visibility:t(m)?void 0:"hidden"}),$(ie,"aria-hidden",!t(m)),ie.inert=!t(m)||void 0,y(Qe,i[t(S)]??t(S)),kt.disabled=!t(j)||t(O)==="saving",$(kt,"title",t(j)?"Save changes (Ctrl+S)":"No unsaved changes"),$(kt,"aria-label",t(O)==="saving"?"Saving changes":t(j)?"Save changes":"No unsaved changes"),Ve(kt,1,_e),V.disabled=!t(E),ye.disabled=!t(C),X.disabled=t(q)===0,Pe.disabled=t(q)===0,y(jt,i[t(S)]??t(S))},[()=>mo(["p-1 rounded transition-colors cursor-pointer shrink-0 disabled:pointer-events-none",t(O)==="saved"?"text-emerald-300":t(j)?"text-emerald-400 hover:text-emerald-300 hover:bg-emerald-500/10":"text-slate-500 opacity-40"].join(" "))]),x("click",kt,Me),x("click",V,D),x("click",ye,ee),x("click",Ke,W),x("click",X,le),x("click",Pe,Se),x("click",ut,Oe),d(a,me),ea()}oa(["click","keydown"]);function fl(){const a=document.getElementById("slashed-frontend-overlay");if(!a||a.shadowRoot)return;const e=a.attachShadow({mode:"open"}),o=document.createElement("div");e.appendChild(o);let n=!1;const l=()=>{n||(si(Yg,{target:o}),n=!0,a.setAttribute("data-slashed-ready",""))},i=window.slashedApp?.cssUrl;if(i){const c=document.createElement("link");c.rel="stylesheet",c.href=i;const f=setTimeout(l,5e3),p=()=>{clearTimeout(f),l()};c.addEventListener("load",p),c.addEventListener("error",p),e.appendChild(c)}else l()}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",fl):fl(); //# sourceMappingURL=app.js.map