/**
 * CUBE.css — Mini CSS Framework
 * Based on CUBE CSS methodology (cube.fyi)
 * + Every Layout composition primitives
 * + Fluid typography & spacing
 *
 * Layers: CSS → Composition → Utility → Block (+ nested Exceptions) → Grouping
 * No build tools. No preprocessors. Pure CSS.
 * CSS Nesting used in Block layer only (Chrome 120+, Firefox 117+, Safari 17.2+)
 *
 * Author: ADiSoft d.o.o.
 * Version: 0.4.0
 *
 * TABLE OF CONTENTS
 * ─────────────────
 * 1. CSS LAYER         — Reset, custom properties, base styles
 * 2. COMPOSITION LAYER — Layout primitives (Every Layout)
 * 3. UTILITY LAYER     — Single-purpose atomic classes
 * 4. BLOCK LAYER       — Components with nested exceptions
 * 5. GROUPING LAYER    — Contextual theming (dark, brand, muted)
 * 6. ACCESSIBILITY     — Reduced motion, color scheme, contrast
 * 7. PRINT STYLES      — Print-specific overrides
 *
 * CSS @layer order (low → high specificity):
 * reset < composition < utility < block < grouping
 * Accessibility & print are unlayered so they always win.
 * Project-specific CSS should remain unlayered for easy overrides.
 */

@layer reset, composition, utility, block, grouping;

/* ═══════════════════════════════════════════════════════
   1. CSS LAYER — Reset, custom properties, base styles
   ═══════════════════════════════════════════════════════ */

@layer reset {
  /* --- Modern Reset --- */
  *,
  *::before,
  *::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
  }

  html {
    -moz-text-size-adjust: none;
    -webkit-text-size-adjust: none;
    overflow-x: clip;
    scroll-behavior: smooth;
    text-size-adjust: none;
  }

  body {
    -webkit-font-smoothing: antialiased;
    line-height: 1.6;
    min-block-size: 100vh;
    overflow-x: clip;
  }

  img,
  picture,
  video,
  canvas,
  svg {
    block-size: auto;
    display: block;
    max-inline-size: 100%;
  }

  input,
  button,
  textarea,
  select {
    color: inherit;
    font: inherit;
  }

  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    line-height: 1.15;
    overflow-wrap: break-word;
    text-wrap: balance;
  }

  p,
  li,
  figcaption {
    max-inline-size: 65ch;
    overflow-wrap: break-word;
    text-wrap: pretty;
  }

  a {
    color: currentColor;
    text-underline-offset: 0.15em;
  }

  ul[role='list'],
  ol[role='list'] {
    list-style: none;
  }

  :target {
    scroll-margin-block-start: 5rem;
  }

  dialog {
    background: transparent;
    border: none;
    max-block-size: unset;
    max-inline-size: unset;
    padding: 0;
  }

  table {
    border-collapse: collapse;
    border-spacing: 0;
    inline-size: 100%;
  }

  /* --- Custom Properties --- */
  :root {
    color-scheme: light dark;

    /* ── Color Palette ── */
    --color-accent: #f59e0b;
    --color-accent-light: #fef3c7;
    --color-danger: #dc2626;
    --color-danger-alt: #b91c1c;
    --color-danger-light: #fee2e2;
    --color-dark: #1c1b18;
    --color-dark-2: #3d3b37;
    --color-light: #fafaf9;
    --color-light-2: #f0efed;
    --color-light-3: #e5e3e0;
    --color-mid: #94928d;
    --color-primary: #2563eb;
    --color-primary-alt: #1d4ed8;
    --color-primary-light: #dbeafe;
    --color-secondary: #059669;
    --color-secondary-light: #d1fae5;

    /* ── Surfaces ── */
    --surface-base: var(--color-light);
    --surface-overlay: var(--color-dark);
    --surface-raised: #fff;

    /* ── Text ── */
    --text-base: var(--color-dark);
    --text-inverse: var(--color-light);
    --text-muted: var(--color-mid);

    /* ── Fluid Spacing Scale (clamp) ──
     Based on utopia.fyi — viewport 320px → 1240px */
    --space-3xs: clamp(0.25rem, 0.22rem + 0.15vw, 0.3125rem);
    --space-2xs: clamp(0.5rem, 0.45rem + 0.22vw, 0.625rem);
    --space-xs: clamp(0.75rem, 0.67rem + 0.37vw, 0.9375rem);
    --space-s: clamp(1rem, 0.89rem + 0.54vw, 1.25rem);
    --space-m: clamp(1.5rem, 1.34rem + 0.76vw, 1.875rem);
    --space-l: clamp(2rem, 1.78rem + 1.09vw, 2.5rem);
    --space-xl: clamp(3rem, 2.67rem + 1.63vw, 3.75rem);
    --space-2xl: clamp(4rem, 3.56rem + 2.17vw, 5rem);
    --space-3xl: clamp(6rem, 5.35rem + 3.26vw, 7.5rem);

    /* ── Fluid Type Scale ── */
    --step--2: clamp(0.72rem, 0.68rem + 0.18vw, 0.8rem);
    --step--1: clamp(0.83rem, 0.78rem + 0.29vw, 1rem);
    --step-0: clamp(1rem, 0.91rem + 0.43vw, 1.25rem);
    --step-1: clamp(1.2rem, 1.07rem + 0.63vw, 1.563rem);
    --step-2: clamp(1.44rem, 1.26rem + 0.89vw, 1.953rem);
    --step-3: clamp(1.728rem, 1.48rem + 1.22vw, 2.441rem);
    --step-4: clamp(2.074rem, 1.74rem + 1.67vw, 3.052rem);
    --step-5: clamp(2.488rem, 2.03rem + 2.28vw, 3.815rem);

    /* ── Font Families ── */
    --font-base: system-ui, -apple-system, sans-serif;
    --font-heading: var(--font-base);
    --font-mono: ui-monospace, 'Cascadia Code', 'Fira Code', monospace;

    /* ── Measures ── */
    --measure-base: 65ch;
    --measure-narrow: 45ch;
    --measure-wide: 80ch;

    /* ── Breakpoints (for reference in project CSS / media queries) ── */
    --bp-sm: 36rem;
    --bp-md: 48rem;
    --bp-lg: 64rem;
    --bp-xl: 80rem;

    /* ── Borders & Radii ── */
    --border-mid: 2px solid var(--color-light-2);
    --border-thin: 1px solid var(--color-light-2);
    --radius-full: 9999px;
    --radius-l: 1rem;
    --radius-m: 0.5rem;
    --radius-s: 0.25rem;

    /* ── Shadows ── */
    --shadow-l: 0 8px 30px hsl(0 0% 0% / 0.12);
    --shadow-m: 0 4px 12px hsl(0 0% 0% / 0.08);
    --shadow-s: 0 1px 2px hsl(0 0% 0% / 0.06);

    /* ── Transitions ── */
    --transition-base: 250ms ease;
    --transition-fast: 150ms ease;
    --transition-slow: 400ms ease;

    /* ── Z-index ── */
    --layer-base: 1;
    --layer-nav: 100;
    --layer-overlay: 1000;
    --layer-raised: 10;

    /* ── Focus & Accent ── */
    --focus-offset: 3px;
    --focus-ring: 3px solid var(--color-primary);
    accent-color: var(--color-primary);

    /* ── Dark Mode Source Tokens (single source of truth) ── */
    --dark-border-mid: 2px solid hsl(0 0% 100% / 0.1);
    --dark-border-thin: 1px solid hsl(0 0% 100% / 0.1);
    --dark-color-light-2: hsl(0 0% 100% / 0.08);
    --dark-color-light-3: hsl(0 0% 100% / 0.15);
    --dark-color-primary-light: hsl(217 91% 20% / 0.4);
    --dark-shadow-l: 0 8px 30px hsl(0 0% 0% / 0.4);
    --dark-shadow-m: 0 4px 12px hsl(0 0% 0% / 0.3);
    --dark-shadow-s: 0 1px 2px hsl(0 0% 0% / 0.2);
    --dark-surface-base: var(--color-dark);
    --dark-surface-raised: var(--color-dark-2);
    --dark-text-base: var(--color-light);
    --dark-text-muted: var(--color-mid);
  }

  /* Global body styles */
  body {
    background-color: var(--surface-base);
    color: var(--text-base);
    font-family: var(--font-base);
    font-size: var(--step-0);
  }

  /* Headings */
  h1 {
    font-size: var(--step-5);
  }
  h2 {
    font-size: var(--step-4);
  }
  h3 {
    font-size: var(--step-3);
  }
  h4 {
    font-size: var(--step-2);
  }
  h5 {
    font-size: var(--step-1);
  }
  h6 {
    font-size: var(--step-0);
  }

  h1,
  h2,
  h3,
  h4,
  h5,
  h6 {
    font-family: var(--font-heading);
    font-weight: 700;
  }

  /* Global focus-visible */
  :focus-visible {
    outline: var(--focus-ring);
    outline-offset: var(--focus-offset);
  }

  :focus:not(:focus-visible) {
    outline: none;
  }
} /* end @layer reset */

/* ═══════════════════════════════════════════════════════
   2. COMPOSITION LAYER — Layout primitives (Every Layout)
   ═══════════════════════════════════════════════════════ */

@layer composition {
  /**
 * Stack: Vertical rhythm via lobotomized owl
 * Modifier: --stack-space
 */
  .stack {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
  }

  .stack > * + * {
    margin-block-start: var(--stack-space, var(--space-s));
  }

  .stack-recursive * + * {
    margin-block-start: var(--stack-space, var(--space-s));
  }

  /**
 * Cluster: Flexible horizontal grouping with wrapping
 * Modifiers: --cluster-align, --cluster-gap, --cluster-justify
 */
  .cluster {
    align-items: var(--cluster-align, center);
    display: flex;
    flex-wrap: wrap;
    gap: var(--cluster-gap, var(--space-s));
    justify-content: var(--cluster-justify, flex-start);
  }

  /**
 * Center: Horizontally centered column
 * Modifier: --center-measure
 */
  .center {
    margin-inline: auto;
    max-inline-size: var(--center-measure, var(--measure-base));
    padding-inline: var(--space-s);
  }

  .center[data-intrinsic] {
    align-items: center;
    display: flex;
    flex-direction: column;
  }

  /**
 * Sidebar: Two-panel layout, one fixed-ish, one fluid
 * Modifiers: --sidebar-gap, --sidebar-threshold, --sidebar-width
 */
  .with-sidebar {
    display: flex;
    flex-wrap: wrap;
    gap: var(--sidebar-gap, var(--space-l));
  }

  .with-sidebar > :first-child {
    flex-basis: var(--sidebar-width, 18rem);
    flex-grow: 1;
  }

  .with-sidebar > :last-child {
    flex-basis: 0;
    flex-grow: 999;
    min-inline-size: var(--sidebar-threshold, 55%);
  }

  /**
 * Switcher: Horizontal until too narrow, then vertical
 * Modifiers: --switcher-gap, --switcher-threshold
 */
  .switcher {
    display: flex;
    flex-wrap: wrap;
    gap: var(--switcher-gap, var(--space-s));
  }

  .switcher > * {
    flex-basis: calc((var(--switcher-threshold, 30rem) - 100%) * 999);
    flex-grow: 1;
  }

  /**
 * Grid: Auto-fill responsive grid
 * Modifiers: --grid-gap, --grid-min
 */
  .grid {
    display: grid;
    gap: var(--grid-gap, var(--space-s));
    grid-template-columns: repeat(auto-fill, minmax(min(100%, var(--grid-min, 16rem)), 1fr));
  }

  /**
 * Cover: Vertically centered content with header/footer
 * Modifier: --cover-min-height
 */
  .cover {
    display: flex;
    flex-direction: column;
    min-block-size: var(--cover-min-height, 100vh);
    padding: var(--space-s);
  }

  .cover > [data-cover-center] {
    margin-block: auto;
  }

  .cover > :first-child:not([data-cover-center]) {
    margin-block-start: 0;
  }

  .cover > :last-child:not([data-cover-center]) {
    margin-block-end: 0;
  }

  /**
 * Frame: Aspect-ratio container for media
 * Modifier: --frame-ratio
 */
  .frame {
    aspect-ratio: var(--frame-ratio, 16 / 9);
    overflow: hidden;
    position: relative;
  }

  .frame > img,
  .frame > video {
    block-size: 100%;
    inline-size: 100%;
    object-fit: cover;
  }

  /**
 * Region: Consistent vertical section padding
 * Modifier: --region-space
 */
  .region {
    padding-block: var(--region-space, var(--space-xl));
  }

  /**
 * Wrapper: Max-width page container
 * Modifier: --wrapper-max
 */
  .wrapper {
    margin-inline: auto;
    max-inline-size: var(--wrapper-max, 75rem);
    padding-inline: var(--space-s);
  }

  /**
 * Repel: Push two items to opposite ends
 * Modifier: --repel-gap
 */
  .repel {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    gap: var(--repel-gap, var(--space-s));
    justify-content: space-between;
  }

  /**
 * Imposter: Absolutely positioned overlay element
 * Exception: data-position
 */
  .imposter {
    inset-block-start: 50%;
    inset-inline-start: 50%;
    position: absolute;
    transform: translate(-50%, -50%);
  }

  .imposter[data-position='top-start'] {
    inset-block-start: var(--space-2xs);
    inset-inline-start: var(--space-2xs);
    transform: none;
  }

  .imposter[data-position='top-end'] {
    inset-block-start: var(--space-2xs);
    inset-inline-end: var(--space-2xs);
    inset-inline-start: auto;
    transform: none;
  }

  .imposter[data-position='bottom-start'] {
    inset-block-end: var(--space-2xs);
    inset-block-start: auto;
    inset-inline-start: var(--space-2xs);
    transform: none;
  }

  .imposter[data-position='bottom-end'] {
    inset-block-end: var(--space-2xs);
    inset-block-start: auto;
    inset-inline-end: var(--space-2xs);
    inset-inline-start: auto;
    transform: none;
  }
} /* end @layer composition */

/* ═══════════════════════════════════════════════════════
   3. UTILITY LAYER — Single-purpose atomic classes
   ═══════════════════════════════════════════════════════ */

@layer utility {
  /* --- Flow — vertical rhythm for any content --- */
  .flow > * + * {
    margin-block-start: var(--flow-space, 1em);
  }

  .flow :is(h2, h3, h4) {
    --flow-space: 1.5em;
  }
  .flow :is(h2, h3, h4) + * {
    --flow-space: 0.5em;
  }

  .flow :is(figure, blockquote, pre, .table-wrap, details) {
    --flow-space: 1.5em;
  }
  .flow :is(figure, blockquote, pre, .table-wrap, details) + * {
    --flow-space: 1.5em;
  }

  /* --- Spacing --- */
  .gap-3xs {
    gap: var(--space-3xs);
  }
  .gap-2xs {
    gap: var(--space-2xs);
  }
  .gap-xs {
    gap: var(--space-xs);
  }
  .gap-s {
    gap: var(--space-s);
  }
  .gap-m {
    gap: var(--space-m);
  }
  .gap-l {
    gap: var(--space-l);
  }
  .gap-xl {
    gap: var(--space-xl);
  }
  .gap-2xl {
    gap: var(--space-2xl);
  }

  .pad-3xs {
    padding: var(--space-3xs);
  }
  .pad-2xs {
    padding: var(--space-2xs);
  }
  .pad-xs {
    padding: var(--space-xs);
  }
  .pad-s {
    padding: var(--space-s);
  }
  .pad-m {
    padding: var(--space-m);
  }
  .pad-l {
    padding: var(--space-l);
  }
  .pad-xl {
    padding: var(--space-xl);
  }
  .pad-2xl {
    padding: var(--space-2xl);
  }

  /* --- Typography --- */
  .text-xs {
    font-size: var(--step--2);
  }
  .text-s {
    font-size: var(--step--1);
  }
  .text-base {
    font-size: var(--step-0);
  }
  .text-m {
    font-size: var(--step-1);
  }
  .text-l {
    font-size: var(--step-2);
  }
  .text-xl {
    font-size: var(--step-3);
  }
  .text-2xl {
    font-size: var(--step-4);
  }
  .text-3xl {
    font-size: var(--step-5);
  }

  .font-heading {
    font-family: var(--font-heading);
  }
  .font-mono {
    font-family: var(--font-mono);
  }

  .weight-black {
    font-weight: 900;
  }
  .weight-bold {
    font-weight: 700;
  }
  .weight-medium {
    font-weight: 500;
  }
  .weight-regular {
    font-weight: 400;
  }

  .leading-loose {
    line-height: 1.8;
  }
  .leading-normal {
    line-height: 1.6;
  }
  .leading-snug {
    line-height: 1.35;
  }
  .leading-tight {
    line-height: 1.15;
  }

  .measure-base {
    max-inline-size: var(--measure-base);
  }
  .measure-narrow {
    max-inline-size: var(--measure-narrow);
  }
  .measure-wide {
    max-inline-size: var(--measure-wide);
  }

  .text-center {
    text-align: center;
  }
  .text-end {
    text-align: end;
  }
  .text-start {
    text-align: start;
  }

  .truncate {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .uppercase {
    letter-spacing: 0.05em;
    text-transform: uppercase;
  }

  /* --- Color --- */
  .color-accent {
    color: var(--color-accent);
  }
  .color-danger {
    color: var(--color-danger);
  }
  .color-inverse {
    color: var(--text-inverse);
  }
  .color-muted {
    color: var(--text-muted);
  }
  .color-primary {
    color: var(--color-primary);
  }
  .color-secondary {
    color: var(--color-secondary);
  }

  .bg-base {
    background-color: var(--surface-base);
  }
  .bg-overlay {
    background-color: var(--surface-overlay);
  }
  .bg-primary {
    background-color: var(--color-primary);
  }
  .bg-raised {
    background-color: var(--surface-raised);
  }

  /* --- Visibility --- */
  .hidden {
    display: none;
  }

  .visually-hidden {
    block-size: 1px;
    border: 0;
    clip: rect(0, 0, 0, 0);
    inline-size: 1px;
    margin: -1px;
    overflow: hidden;
    padding: 0;
    position: absolute;
    white-space: nowrap;
  }

  @media (max-width: 47.999rem) {
    [data-hide='below-md'] {
      display: none !important;
    }
    [data-show='above-md'] {
      display: none !important;
    }
  }
  @media (min-width: 48rem) {
    [data-hide='above-md'] {
      display: none !important;
    }
    [data-show='below-md'] {
      display: none !important;
    }
  }

  /* --- Decoration --- */
  .border-mid {
    border: var(--border-mid);
  }
  .border-thin {
    border: var(--border-thin);
  }

  .radius-full {
    border-radius: var(--radius-full);
  }
  .radius-l {
    border-radius: var(--radius-l);
  }
  .radius-m {
    border-radius: var(--radius-m);
  }
  .radius-s {
    border-radius: var(--radius-s);
  }

  .shadow-l {
    box-shadow: var(--shadow-l);
  }
  .shadow-m {
    box-shadow: var(--shadow-m);
  }
  .shadow-s {
    box-shadow: var(--shadow-s);
  }

  /* --- Misc --- */
  .relative {
    position: relative;
  }

  .divider {
    background-color: var(--color-light-2);
    block-size: 1px;
    border: none;

    &[data-orientation='vertical'] {
      align-self: stretch;
      block-size: auto;
      inline-size: 1px;
    }
  }
} /* end @layer utility */

/* ═══════════════════════════════════════════════════════
   4. BLOCK LAYER — Components with nested exceptions
   ═══════════════════════════════════════════════════════ */

@layer block {
  /* ──────────────── Button ──────────────── */
  .button {
    align-items: center;
    background-color: var(--button-bg, var(--color-primary));
    border: 2px solid transparent;
    border-radius: var(--radius-m);
    color: var(--button-color, var(--color-light));
    cursor: pointer;
    display: inline-flex;
    font-size: var(--step--1);
    font-weight: 600;
    gap: var(--space-2xs);
    justify-content: center;
    line-height: 1;
    padding: var(--button-padding, var(--space-2xs) var(--space-s));
    text-decoration: none;
    transition:
      background-color var(--transition-fast),
      border-color var(--transition-fast),
      color var(--transition-fast);

    &:hover {
      background-color: var(--button-bg-hover, var(--color-primary-alt));
    }

    &:active {
      transform: scale(0.98);
    }

    /* Variants */
    &[data-variant='secondary'] {
      --button-bg: transparent;
      --button-color: var(--color-primary);
      border-color: var(--color-primary);

      &:hover {
        --button-bg-hover: var(--color-primary);
        color: var(--color-light);
      }
    }

    &[data-variant='ghost'] {
      --button-bg: transparent;
      --button-color: var(--text-base);

      &:hover {
        --button-bg-hover: var(--color-light-2);
      }
    }

    &[data-variant='danger'] {
      --button-bg: var(--color-danger);

      &:hover {
        --button-bg-hover: var(--color-danger-alt);
      }
    }

    /* Sizes */
    &[data-size='s'] {
      --button-padding: var(--space-3xs) var(--space-xs);
      font-size: var(--step--2);
    }

    &[data-size='l'] {
      --button-padding: var(--space-xs) var(--space-m);
      font-size: var(--step-0);
    }

    /* Modifiers */
    &[data-full] {
      inline-size: 100%;
    }
  }

  /* ──────────────── Card ──────────────── */
  .card {
    background-color: var(--surface-raised);
    border: var(--border-thin);
    border-radius: var(--radius-m);
    box-shadow: var(--shadow-s);
    padding: var(--card-padding, var(--space-m));

    &[data-variant='highlight'] {
      border-color: var(--color-primary);
      border-width: 2px;
    }

    &[data-variant='flat'] {
      background-color: var(--color-light-2);
      border: none;
      box-shadow: none;

      &:hover {
        box-shadow: none;
      }
    }

    &[data-interactive] {
      cursor: pointer;
      transition:
        box-shadow var(--transition-base),
        border-color var(--transition-fast);

      &:hover {
        border-color: var(--color-primary);
        box-shadow: var(--shadow-m);
      }
    }
  }

  /* ──────────────── Tag / Badge ──────────────── */
  .tag {
    background-color: var(--tag-bg, var(--color-light-2));
    border-radius: var(--radius-full);
    color: var(--tag-color, var(--color-dark-2));
    display: inline-block;
    font-size: var(--step--2);
    font-weight: 600;
    line-height: 1;
    padding: var(--space-3xs) var(--space-2xs);

    &[data-variant='primary'] {
      --tag-bg: var(--color-primary);
      --tag-color: var(--color-light);
    }

    &[data-variant='success'] {
      --tag-bg: var(--color-secondary);
      --tag-color: var(--color-light);
    }

    &[data-variant='warning'] {
      --tag-bg: var(--color-accent);
      --tag-color: var(--color-dark);
    }

    &[data-variant='danger'] {
      --tag-bg: var(--color-danger);
      --tag-color: var(--color-light);
    }

    &[data-outline] {
      background-color: transparent;
      box-shadow: inset 0 0 0 1.5px currentColor;
    }
  }

  /* ──────────────── Skip Link ──────────────── */
  .skip-link {
    background: var(--color-dark);
    border-radius: var(--radius-m);
    color: var(--color-light);
    inset-block-start: var(--space-2xs);
    inset-inline-start: var(--space-2xs);
    padding: var(--space-2xs) var(--space-s);
    position: absolute;
    text-decoration: none;
    transform: translateY(-200%);
    transition: transform var(--transition-fast);
    z-index: var(--layer-overlay);

    &:focus {
      transform: translateY(0);
    }
  }

  /* ──────────────── Form: Input ──────────────── */
  .input {
    background-color: var(--surface-raised);
    border: 2px solid var(--color-light-3);
    border-radius: var(--radius-m);
    color: var(--text-base);
    display: block;
    font-size: var(--step-0);
    inline-size: 100%;
    line-height: 1.5;
    padding: var(--input-padding, var(--space-2xs) var(--space-xs));
    transition:
      border-color var(--transition-fast),
      box-shadow var(--transition-fast);

    &::placeholder {
      color: var(--color-mid);
    }

    &:hover {
      border-color: var(--color-mid);
    }

    &:focus {
      border-color: var(--color-primary);
      box-shadow: 0 0 0 3px var(--color-primary-light);
      outline: none;
    }

    &:disabled {
      cursor: not-allowed;
      opacity: 0.5;
    }

    /* Validation states */
    &[data-validation='error'],
    &:user-invalid {
      border-color: var(--color-danger);

      &:focus {
        box-shadow: 0 0 0 3px var(--color-danger-light);
      }
    }

    &[data-validation='valid'] {
      border-color: var(--color-secondary);

      &:focus {
        box-shadow: 0 0 0 3px var(--color-secondary-light);
      }
    }

    /* Sizes */
    &[data-size='s'] {
      --input-padding: var(--space-3xs) var(--space-2xs);
      font-size: var(--step--1);
    }

    &[data-size='l'] {
      --input-padding: var(--space-xs) var(--space-s);
      font-size: var(--step-1);
    }
  }

  textarea.input {
    min-block-size: 6rem;
    resize: vertical;
  }

  select.input {
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394928d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
    background-position: right var(--space-xs) center;
    background-repeat: no-repeat;
    padding-inline-end: var(--space-l);
  }

  /* ──────────────── Form: Label, Field, Fieldset ──────────────── */
  .label {
    color: var(--text-base);
    display: block;
    font-size: var(--step--1);
    font-weight: 600;
  }

  .field {
    display: flex;
    flex-direction: column;
    gap: var(--space-3xs);
  }

  .field-error {
    color: var(--color-danger);
    font-size: var(--step--2);
  }

  .field-hint {
    color: var(--text-muted);
    font-size: var(--step--2);
  }

  .fieldset {
    border: var(--border-thin);
    border-radius: var(--radius-m);
    padding: var(--space-m);

    & > legend {
      font-size: var(--step--1);
      font-weight: 600;
      padding-inline: var(--space-2xs);
    }
  }

  /* ──────────────── Form: Checkbox / Radio ──────────────── */
  .check {
    align-items: center;
    cursor: pointer;
    display: inline-flex;
    font-size: var(--step-0);
    gap: var(--space-2xs);

    & > input[type='checkbox'],
    & > input[type='radio'] {
      -webkit-appearance: none;
      appearance: none;
      background-color: var(--surface-raised);
      block-size: 1.25em;
      border: 2px solid var(--color-light-3);
      cursor: pointer;
      display: grid;
      flex-shrink: 0;
      inline-size: 1.25em;
      place-content: center;
      transition:
        background-color var(--transition-fast),
        border-color var(--transition-fast);
    }

    & > input[type='checkbox'] {
      border-radius: var(--radius-s);
    }

    & > input[type='radio'] {
      border-radius: 50%;
    }

    & > input:hover {
      border-color: var(--color-primary);
    }

    & > input:checked {
      background-color: var(--color-primary);
      border-color: var(--color-primary);
    }

    & > input[type='checkbox']:checked::before {
      block-size: 0.35em;
      border-block-end: 2px solid #fff;
      border-inline-start: 2px solid #fff;
      content: '';
      inline-size: 0.6em;
      transform: rotate(-45deg) translateY(-0.05em);
    }

    & > input[type='radio']:checked::before {
      background-color: #fff;
      block-size: 0.5em;
      border-radius: 50%;
      content: '';
      inline-size: 0.5em;
    }

    & > input:focus-visible {
      outline: var(--focus-ring);
      outline-offset: var(--focus-offset);
    }

    & > input:disabled {
      cursor: not-allowed;
      opacity: 0.5;
    }
  }

  /* ──────────────── Form: Input Group ──────────────── */
  .input-group {
    align-items: stretch;
    display: flex;

    & > .input {
      flex: 1;
      min-inline-size: 0;
    }

    & > .input:not(:first-child) {
      border-end-start-radius: 0;
      border-start-start-radius: 0;
    }

    & > .input:not(:last-child) {
      border-end-end-radius: 0;
      border-inline-end: none;
      border-start-end-radius: 0;
    }
  }

  .input-addon {
    align-items: center;
    background-color: var(--color-light-2);
    border: 2px solid var(--color-light-3);
    color: var(--text-muted);
    display: flex;
    font-size: var(--step--1);
    padding-inline: var(--space-xs);
    white-space: nowrap;

    &:first-child {
      border-end-start-radius: var(--radius-m);
      border-inline-end: none;
      border-start-start-radius: var(--radius-m);
    }

    &:last-child {
      border-end-end-radius: var(--radius-m);
      border-inline-start: none;
      border-start-end-radius: var(--radius-m);
    }
  }

  /* ──────────────── Breadcrumb ──────────────── */
  .breadcrumb {
    align-items: center;
    display: flex;
    flex-wrap: wrap;
    font-size: var(--step--1);
    gap: var(--space-3xs);
    list-style: none;
    margin: 0;
    padding: 0;

    & > li {
      max-inline-size: none;
    }

    & > li + li::before {
      color: var(--text-muted);
      content: '/';
      margin-inline-end: var(--space-3xs);
    }

    & a {
      color: var(--text-muted);
      text-decoration: none;
      transition: color var(--transition-fast);

      &:hover {
        color: var(--color-primary);
      }
    }

    & [aria-current='page'] {
      color: var(--text-base);
      font-weight: 500;
    }
  }

  /* ──────────────── Table ──────────────── */
  .table-wrap {
    border: var(--border-thin);
    border-radius: var(--radius-m);
    overflow-x: auto;
  }

  .table {
    font-size: var(--step--1);
    inline-size: 100%;
    text-align: start;

    & th,
    & td {
      border-block-end: var(--border-thin);
      padding: var(--space-2xs) var(--space-xs);
      vertical-align: top;
    }

    & th {
      background-color: var(--color-light-2);
      font-weight: 600;
      text-align: inherit;
      white-space: nowrap;
    }

    & tbody tr:last-child td {
      border-block-end: none;
    }

    & tbody tr:hover {
      background-color: var(--color-light-2);
    }

    /* Table exceptions */
    &[data-striped] tbody tr:nth-child(even) {
      background-color: var(--color-light-2);
    }

    &[data-compact] th,
    &[data-compact] td {
      font-size: var(--step--2);
      padding: var(--space-3xs) var(--space-2xs);
    }
  }

  /* ──────────────── Dialog / Modal ──────────────── */
  .dialog {
    &::backdrop {
      backdrop-filter: blur(4px);
      background-color: hsl(0 0% 0% / 0.5);
    }

    &[open] {
      animation: dialog-enter var(--transition-base) ease;
      background-color: var(--surface-raised);
      border-radius: var(--radius-l);
      box-shadow: var(--shadow-l);
      display: flex;
      flex-direction: column;
      max-block-size: min(85vh, 40rem);
      max-inline-size: min(90vw, 32rem);
    }

    & .dialog-header {
      align-items: center;
      border-block-end: var(--border-thin);
      display: flex;
      justify-content: space-between;
      padding: var(--space-s) var(--space-m);
    }

    & .dialog-body {
      overflow-y: auto;
      padding: var(--space-m);
    }

    & .dialog-footer {
      border-block-start: var(--border-thin);
      display: flex;
      gap: var(--space-2xs);
      justify-content: flex-end;
      padding: var(--space-s) var(--space-m);
    }

    & .dialog-close {
      background: none;
      block-size: 2rem;
      border: none;
      border-radius: var(--radius-s);
      color: var(--text-muted);
      cursor: pointer;
      display: grid;
      font-size: 1.25rem;
      inline-size: 2rem;
      padding: 0;
      place-content: center;
      transition:
        background-color var(--transition-fast),
        color var(--transition-fast);

      &:hover {
        background-color: var(--color-light-2);
        color: var(--text-base);
      }
    }
  }

  @keyframes dialog-enter {
    from {
      opacity: 0;
      transform: scale(0.95) translateY(0.5rem);
    }
  }

  /* ──────────────── Skeleton / Placeholder ──────────────── */
  .skeleton {
    animation: skeleton-pulse 1.5s ease-in-out infinite;
    background: linear-gradient(90deg, var(--color-light-2) 0%, var(--color-light-3) 40%, var(--color-light-2) 80%);
    background-size: 200% 100%;
    border-radius: var(--radius-s);
  }

  .skeleton-circle {
    border-radius: 50%;
  }

  @keyframes skeleton-pulse {
    0% {
      background-position: 200% 0;
    }
    100% {
      background-position: -200% 0;
    }
  }

  /* ──────────────── Frame Exceptions ──────────────── */
  .frame[data-ratio='1/1'] {
    --frame-ratio: 1 / 1;
  }
  .frame[data-ratio='3/2'] {
    --frame-ratio: 3 / 2;
  }
  .frame[data-ratio='3/4'] {
    --frame-ratio: 3 / 4;
  }
  .frame[data-ratio='4/3'] {
    --frame-ratio: 4 / 3;
  }
  .frame[data-ratio='21/9'] {
    --frame-ratio: 21 / 9;
  }

  /* ──────────────── Generic State Exceptions ──────────────── */
  [data-state='inactive'] {
    opacity: 0.5;
    pointer-events: none;
  }

  [data-state='loading'] {
    color: transparent !important;
    position: relative;

    &::after {
      animation: spin 0.6s linear infinite;
      block-size: 1.25em;
      border: 2px solid var(--color-mid);
      border-block-start-color: var(--color-primary);
      border-radius: 50%;
      content: '';
      inline-size: 1.25em;
      inset: 0;
      margin: auto;
      position: absolute;
    }
  }

  @keyframes spin {
    to {
      transform: rotate(360deg);
    }
  }

  [data-visible='false'] {
    display: none;
  }

  /* ──────────────── Prose — rich content styling ──────────────── */
  .prose blockquote {
    border-inline-start: 3px solid var(--color-primary);
    color: var(--text-muted);
    font-style: italic;
    padding-block: var(--space-2xs);
    padding-inline-start: var(--space-s);

    & > * + * {
      margin-block-start: 0.5em;
    }
  }

  .prose figure {
    max-inline-size: 100%;
  }

  .prose figcaption {
    color: var(--text-muted);
    font-size: var(--step--1);
    margin-block-start: var(--space-2xs);
  }

  .prose :is(ul, ol) {
    padding-inline-start: 1.5em;
  }
  .prose :is(ul, ol) > li + li {
    margin-block-start: 0.35em;
  }

  .prose hr {
    background-color: var(--color-light-2);
    block-size: 1px;
    border: none;
    margin-block: var(--space-m);
  }

  .prose img {
    border-radius: var(--radius-m);
  }

  .prose a {
    color: var(--color-primary);
    text-decoration-thickness: 1px;
    transition: color var(--transition-fast);

    &:hover {
      color: var(--color-primary-alt);
    }
  }

  .prose pre {
    background-color: var(--color-dark);
    border-radius: var(--radius-m);
    color: var(--color-light);
    font-family: var(--font-mono);
    font-size: var(--step--1);
    line-height: 1.5;
    overflow-x: auto;
    padding: var(--space-s);
  }

  .prose code {
    background-color: var(--color-light-2);
    border-radius: var(--radius-s);
    font-family: var(--font-mono);
    font-size: 0.9em;
    padding: 0.1em 0.35em;
  }

  .prose pre code {
    background: transparent;
    padding: 0;
  }
} /* end @layer block */

/* ═══════════════════════════════════════════════════════
   5. GROUPING LAYER — Contextual theming
   ═══════════════════════════════════════════════════════ */

@layer grouping {
  /* Dark theme — explicit toggle via [data-theme="dark"] on any element.
   Values come from --dark-* source tokens in :root. */
  [data-theme='dark'] {
    --border-mid: var(--dark-border-mid);
    --border-thin: var(--dark-border-thin);
    --color-light-2: var(--dark-color-light-2);
    --color-light-3: var(--dark-color-light-3);
    --color-primary-light: var(--dark-color-primary-light);
    --shadow-l: var(--dark-shadow-l);
    --shadow-m: var(--dark-shadow-m);
    --shadow-s: var(--dark-shadow-s);
    --surface-base: var(--dark-surface-base);
    --surface-raised: var(--dark-surface-raised);
    --text-base: var(--dark-text-base);
    --text-muted: var(--dark-text-muted);

    background-color: var(--surface-base);
    color: var(--text-base);
  }

  /* Dark theme — automatic via OS preference (only when no explicit theme is set).
   Same --dark-* source tokens, zero duplication of values. */
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme]) {
      --border-mid: var(--dark-border-mid);
      --border-thin: var(--dark-border-thin);
      --color-light-2: var(--dark-color-light-2);
      --color-light-3: var(--dark-color-light-3);
      --color-primary-light: var(--dark-color-primary-light);
      --shadow-l: var(--dark-shadow-l);
      --shadow-m: var(--dark-shadow-m);
      --shadow-s: var(--dark-shadow-s);
      --surface-base: var(--dark-surface-base);
      --surface-raised: var(--dark-surface-raised);
      --text-base: var(--dark-text-base);
      --text-muted: var(--dark-text-muted);

      background-color: var(--surface-base);
      color: var(--text-base);
    }
  }

  [data-theme='brand'] {
    --surface-base: var(--color-primary);
    --surface-raised: var(--color-primary-alt);
    --text-base: var(--color-light);
    --text-muted: hsl(0 0% 100% / 0.7);

    background-color: var(--surface-base);
    color: var(--text-base);
  }

  [data-theme='muted'] {
    --surface-base: var(--color-light-2);
    --surface-raised: var(--surface-base);

    background-color: var(--surface-base);
  }
} /* end @layer grouping */

/* ═══════════════════════════════════════════════════════
   6. ACCESSIBILITY — Motion, contrast
   (Unlayered — always wins over layered styles)
   ═══════════════════════════════════════════════════════ */

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: 0.01ms !important;
  }
}

@media (prefers-contrast: more) {
  :root {
    --border-mid: 3px solid var(--text-base);
    --border-thin: 2px solid var(--text-base);
  }

  .button {
    border-width: 3px;
  }
  .input {
    border-width: 3px;
  }
}

@media (forced-colors: active) {
  .button {
    border: 2px solid ButtonText;
  }

  .input {
    border: 2px solid ButtonText;
  }

  .card {
    border: 2px solid CanvasText;
  }

  .tag {
    border: 1px solid CanvasText;
  }

  :focus-visible {
    outline: 3px solid Highlight;
  }
}

/* ═══════════════════════════════════════════════════════
   7. PRINT STYLES
   ═══════════════════════════════════════════════════════ */

@media print {
  body {
    background: #fff;
    color: #000;
    font-size: 12pt;
  }

  .button[data-variant='ghost'],
  .dialog,
  .skeleton,
  .skip-link {
    display: none !important;
  }

  .region {
    padding-block: 1rem;
  }

  .wrapper {
    max-inline-size: none;
    padding: 0;
  }

  .shadow-l,
  .shadow-m,
  .shadow-s {
    box-shadow: none;
  }

  .card {
    border: 1px solid #ccc;
    box-shadow: none;
    break-inside: avoid;
  }

  .tag {
    -webkit-print-color-adjust: exact;
    print-color-adjust: exact;
  }

  .flow a[href^='http']::after {
    color: #666;
    content: ' (' attr(href) ')';
    font-size: 0.8em;
    word-break: break-all;
  }

  .table tr {
    break-inside: avoid;
  }
  img,
  .frame {
    break-inside: avoid;
  }
}
