/* Nacient brand design tokens — GENERATED, do not edit by hand.
 * Source of truth: Decision: Brand Extended Token System (corpus 0fcd523c) for the
 * type / colour / surface / focus / state layer, and Decision: Brand-Expressive
 * Structural-Scale Foundation (65ebc407; border-width floor narrowed by aa9ca415) for
 * radius / elevation / border-width, and Decision: Engineering-Bound Structural Token
 * Primitives (06236a49) for z-index / breakpoints / grid / opacity, and Decision:
 * Motion & Craft Language Foundation (b01e01cf) for the motion layer. Derived over the
 * locked Tidewater colour (fe0d0138) and typography (b3e6ffeb) systems. Regenerate:
 * python -m brand_tokens.
 * Every colour pairing is verified against the WCAG 2.1 AA floor, and the interactive-
 * control-boundary tier against the SC 1.4.11 3:1 floor (Visual Application Standard §5).
 */

:root {
  /* Type scale — 1.25 major third on a 4px grid, rem on a 16px base */
  --text-caption: 0.75rem; /* 12px · weight-regular · leading-normal */
  --text-small: 0.875rem; /* 14px · weight-regular · leading-normal */
  --text-body: 1rem; /* 16px · weight-regular · leading-normal */
  --text-lead: 1.25rem; /* 20px · weight-regular · leading-snug */
  --text-h3: 1.5rem; /* 24px · weight-semibold · leading-snug */
  --text-h2: 2rem; /* 32px · weight-semibold · leading-snug */
  --text-h1: 2.5rem; /* 40px · weight-semibold · leading-tight */
  --text-display: 3rem; /* 48px · weight-semibold · leading-tight */
  /* Font weights (Quicksand; 300 not adopted, 400 is the lightest body) */
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-semibold: 600;
  --weight-bold: 700;
  /* Line-heights */
  --leading-tight: 1.15;
  --leading-snug: 1.3;
  --leading-normal: 1.5;
  /* Spacing — the 4px grid */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;
  /* Colour ramps — Bootstrap 5.3 tint/shade from the locked Tidewater bases */
  --primary-100: #d0e6e4; --primary-200: #a1ccca; --primary-300: #72b3af; --primary-400: #439995; --primary-500: #14807a; --primary-600: #106662; --primary-700: #0c4d49; --primary-800: #083331; --primary-900: #041a18;
  --secondary-100: #dce3e2; --secondary-200: #bac7c5; --secondary-300: #97aca9; --secondary-400: #75908c; --secondary-500: #52746f; --secondary-600: #425d59; --secondary-700: #314643; --secondary-800: #212e2c; --secondary-900: #101716;
  --success-100: #dde5da; --success-200: #bbcbb4; --success-300: #99b18f; --success-400: #779769; --success-500: #557d44; --success-600: #446436; --success-700: #334b29; --success-800: #22321b; --success-900: #11190e;
  --warning-100: #f7ecd8; --warning-200: #efd9b0; --warning-300: #e8c789; --warning-400: #e0b461; --warning-500: #d8a13a; --warning-600: #ad812e; --warning-700: #826123; --warning-800: #564017; --warning-900: #2b200c;
  --danger-100: #f0d8d5; --danger-200: #e0b0ac; --danger-300: #d18982; --danger-400: #c16159; --danger-500: #b23a2f; --danger-600: #8e2e26; --danger-700: #6b231c; --danger-800: #471713; --danger-900: #240c09;
  --info-100: #e6f3f2; --info-200: #cde8e5; --info-300: #b5dcd8; --info-400: #9cd1cb; --info-500: #83c5be; --info-600: #699e98; --info-700: #4f7672; --info-800: #344f4c; --info-900: #1a2726;
  --accent-1-100: #eee1d9; --accent-1-200: #dcc4b4; --accent-1-300: #cba68e; --accent-1-400: #b98969; --accent-1-500: #a86b43; --accent-1-600: #865636; --accent-1-700: #654028; --accent-1-800: #432b1b; --accent-1-900: #22150d;
  --accent-2-100: #f9eae4; --accent-2-200: #f3d5c9; --accent-2-300: #eebfae; --accent-2-400: #e8aa93; --accent-2-500: #e29578; --accent-2-600: #b57760; --accent-2-700: #885948; --accent-2-800: #5a3c30; --accent-2-900: #2d1e18;
  --accent-3-100: #ebe2e7; --accent-3-200: #d7c5cf; --accent-3-300: #c4a9b8; --accent-3-400: #b08ca0; --accent-3-500: #9c6f88; --accent-3-600: #7d596d; --accent-3-700: #5e4352; --accent-3-800: #3e2c36; --accent-3-900: #1f161b;
  /* On-colours — AA-correct body-text ink per fill (>=4.5); (large/fill-only) = neither ink clears AA-normal, use for large text / borders / fills */
  --on-primary-100: #13322f; --on-primary-200: #13322f; --on-primary-300: #13322f; --on-primary-400: #13322f; /* large/fill-only */ --on-primary-500: #ffffff; --on-primary-600: #ffffff; --on-primary-700: #ffffff; --on-primary-800: #ffffff; --on-primary-900: #ffffff;
  --on-secondary-100: #13322f; --on-secondary-200: #13322f; --on-secondary-300: #13322f; --on-secondary-400: #13322f; /* large/fill-only */ --on-secondary-500: #ffffff; --on-secondary-600: #ffffff; --on-secondary-700: #ffffff; --on-secondary-800: #ffffff; --on-secondary-900: #ffffff;
  --on-success-100: #13322f; --on-success-200: #13322f; --on-success-300: #13322f; --on-success-400: #13322f; /* large/fill-only */ --on-success-500: #ffffff; --on-success-600: #ffffff; --on-success-700: #ffffff; --on-success-800: #ffffff; --on-success-900: #ffffff;
  --on-warning-100: #13322f; --on-warning-200: #13322f; --on-warning-300: #13322f; --on-warning-400: #13322f; --on-warning-500: #13322f; --on-warning-600: #13322f; /* large/fill-only */ --on-warning-700: #ffffff; --on-warning-800: #ffffff; --on-warning-900: #ffffff;
  --on-danger-100: #13322f; --on-danger-200: #13322f; --on-danger-300: #13322f; --on-danger-400: #ffffff; /* large/fill-only */ --on-danger-500: #ffffff; --on-danger-600: #ffffff; --on-danger-700: #ffffff; --on-danger-800: #ffffff; --on-danger-900: #ffffff;
  --on-info-100: #13322f; --on-info-200: #13322f; --on-info-300: #13322f; --on-info-400: #13322f; --on-info-500: #13322f; --on-info-600: #13322f; --on-info-700: #ffffff; --on-info-800: #ffffff; --on-info-900: #ffffff;
  --on-accent-1-100: #13322f; --on-accent-1-200: #13322f; --on-accent-1-300: #13322f; --on-accent-1-400: #13322f; /* large/fill-only */ --on-accent-1-500: #ffffff; /* large/fill-only */ --on-accent-1-600: #ffffff; --on-accent-1-700: #ffffff; --on-accent-1-800: #ffffff; --on-accent-1-900: #ffffff;
  --on-accent-2-100: #13322f; --on-accent-2-200: #13322f; --on-accent-2-300: #13322f; --on-accent-2-400: #13322f; --on-accent-2-500: #13322f; --on-accent-2-600: #13322f; /* large/fill-only */ --on-accent-2-700: #ffffff; --on-accent-2-800: #ffffff; --on-accent-2-900: #ffffff;
  --on-accent-3-100: #13322f; --on-accent-3-200: #13322f; --on-accent-3-300: #13322f; --on-accent-3-400: #13322f; --on-accent-3-500: #ffffff; /* large/fill-only */ --on-accent-3-600: #ffffff; --on-accent-3-700: #ffffff; --on-accent-3-800: #ffffff; --on-accent-3-900: #ffffff;
  /* Surfaces / text / borders — light mode (dark-mode overrides below) */
  --surface-base: #ffffff;
  --surface-raised: #eef3f2;
  --surface-sunken: #e4ecea;
  --text-primary: #13322f;
  --text-secondary: #52746f;
  --border-subtle: #d4dedc;
  /* Focus indicators — dual token, one per surface mode (hue-distinct from teal) */
  --focus-ring-light: #2563eb;
  --focus-ring-dark: #5b8def;
  --focus-ring: var(--focus-ring-light);
  --focus-ring-width: 2px;
  --focus-ring-offset: 2px;
  /* Interaction state — disabled opacity; never the sole state signal. */
  --state-disabled-opacity: 0.38;
  /* hover = one ramp step toward emphasis (light 500->600, dark 500->400);
     active = two steps (light 500->700, dark 500->300) — applied by the consumer. */
  /* Radius — elected soft character; every step on the 4px grid (65ebc407) */
  --radius-none: 0px;
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-pill: 16px;
  /* Border / stroke width — hairline is a true 1px (aa9ca415); within the restraint band */
  --border-hairline: 1px;
  --border-default: 2px;
  --border-emphasis: 4px;
  /* Elevation — subtle soft shadow (light); dark = surface-shift + border, shadow none */
  --elevation-0: none;
  --elevation-1: 0 2px 4px rgba(19, 50, 47, 0.08);
  --elevation-2: 0 4px 8px rgba(19, 50, 47, 0.10);
  --elevation-3: 0 8px 16px rgba(19, 50, 47, 0.12);
  /* Interactive-control-boundary colour — clears the §5/1.4.11 3:1 floor on both surfaces */
  --border-interactive: #106662;
  /* Semantic ink/tint roles (F-0046) — mode-aware bindings into the ramps/on-colours.
     Consumers bind the semantics; each role re-elects its ramp step per surface mode
     (dark re-elections in the dark blocks below). */
  --link-ink: var(--primary-700);
  --link-ink-hover: var(--primary-800);
  --action-tint: var(--primary-100);
  --action-tint-active: var(--primary-200);
  --on-action-tint: var(--on-primary-100);
  --action-fill: var(--primary-500);
  --on-action-fill: var(--on-primary-500);
  --action-fill-hover: var(--primary-600);
  --on-action-fill-hover: var(--on-primary-600);
  --action-fill-active: var(--primary-700);
  --on-action-fill-active: var(--on-primary-700);
  --border-interactive-hover: var(--primary-700);
  --danger-ink: var(--danger-700);
  --danger-boundary: var(--danger-600);
  --primary-accent-ink: var(--primary-600);
  --info-tint: var(--info-100);
  --on-info-tint: var(--on-info-100);
  --info-accent: var(--info-700);
  --info-accent-ink: var(--info-700);
  --success-tint: var(--success-100);
  --on-success-tint: var(--on-success-100);
  --success-accent: var(--success-600);
  --success-accent-ink: var(--success-700);
  --warning-tint: var(--warning-100);
  --on-warning-tint: var(--on-warning-100);
  --warning-accent: var(--warning-600);
  --warning-accent-ink: var(--warning-700);
  --danger-tint: var(--danger-100);
  --on-danger-tint: var(--on-danger-100);
  --danger-accent: var(--danger-600);
  --danger-accent-ink: var(--danger-700);
  /* Z-index / layering — sized from the component inventory's layering surfaces (06236a49) */
  --z-base: 0;
  --z-sticky: 100;
  --z-dropdown: 200;
  --z-banner: 300;
  --z-scrim: 400;
  --z-drawer: 500;
  --z-overlay: 600;
  --z-tooltip: 700;
  --z-skip-link: 800;
  /* Breakpoints (min-width) + max content width — bp-sm = the type ramp breakpoint (640) */
  --bp-sm: 640px;
  --bp-md: 768px;
  --bp-lg: 1024px;
  --bp-xl: 1280px;
  --content-max: 1280px;
  /* Column grid — 4 -> 8 -> 12 (switch at bp-sm / bp-lg); gutters drawn from the spacing scale */
  --grid-cols-base: 4;
  --grid-cols-sm: 8;
  --grid-cols-lg: 12;
  --grid-gutter: var(--space-4);
  --grid-gutter-lg: var(--space-6);
  /* Opacity — general non-text surface/state/scrim scale; disabled = state-disabled-opacity */
  --opacity-hover: 0.08;
  --opacity-disabled: var(--state-disabled-opacity);
  --opacity-scrim: 0.5;
  /* Motion — elected composed tempo, durations bound to interaction classes (b01e01cf) */
  --motion-instant: 0ms; /* focus / pressed state — must not lag */
  --motion-fast: 150ms; /* micro-feedback — hover, press */
  --motion-base: 250ms; /* local transitions — accordion, dropdown, fades */
  --motion-slow: 400ms; /* surface transitions — drawer, overlay, banner */
  --motion-slower: 600ms; /* page-level reveals — hero, scroll-reveal */
  /* Easing — role-asymmetric; soft-settle enter, standard move, accelerating exit */
  --ease-enter: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-move: cubic-bezier(0.4, 0, 0.2, 1);
  --ease-exit: cubic-bezier(0.4, 0, 1, 1);
  /* Expressive tier — opt-in; enumerated consequential actions only (Decision 24905024) */
  --ease-emphasis: cubic-bezier(0.34, 1.56, 0.64, 1);
  /* Displacement — subtle, 4px-snapped; motion settles, never travels */
  --motion-shift-1: 4px;
  --motion-shift-2: 8px;
  --motion-shift-3: 16px;
  --motion-scale-enter: 0.98;
  --motion-stagger-step: 30ms; /* cap: 8 staggered items, then batch */
  /* Cadence tier — ambient rest between motions, OUTSIDE the interaction scale;
     deliberately NOT collapsed under reduced motion — the consuming device stops
     entirely instead (Decision b82adfab) */
  --motion-prompt-rest: 3200ms; /* rotating example-prompt rest — consumer-stopped under reduced motion */
}

/* Dark mode — system preference (a [data-theme="light"] override opts back out) */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --surface-base: #13322f;
    --surface-raised: #2f4b48;
    --surface-sunken: #0b1e1c;
    --text-primary: #eef3f2;
    --text-secondary: #83c5be;
    --border-subtle: #2f4b48;
    --focus-ring: var(--focus-ring-dark);
    --elevation-1: none;
    --elevation-2: none;
    --elevation-3: none;
    --border-interactive: #a1ccca;
    /* Semantic ink/tint roles — dark re-elections (F-0046) */
    --link-ink: var(--primary-200);
    --link-ink-hover: var(--primary-100);
    --action-tint: var(--primary-800);
    --action-tint-active: var(--primary-700);
    --on-action-tint: var(--on-primary-800);
    --action-fill: var(--primary-300);
    --on-action-fill: var(--on-primary-300);
    --action-fill-hover: var(--primary-200);
    --on-action-fill-hover: var(--on-primary-200);
    --action-fill-active: var(--primary-100);
    --on-action-fill-active: var(--on-primary-100);
    --border-interactive-hover: var(--primary-100);
    --danger-ink: var(--danger-200);
    --danger-boundary: var(--danger-300);
    --primary-accent-ink: var(--primary-300);
    --info-tint: var(--info-900);
    --on-info-tint: var(--on-info-900);
    --info-accent: var(--info-300);
    --info-accent-ink: var(--info-300);
    --success-tint: var(--success-900);
    --on-success-tint: var(--on-success-900);
    --success-accent: var(--success-300);
    --success-accent-ink: var(--success-300);
    --warning-tint: var(--warning-900);
    --on-warning-tint: var(--on-warning-900);
    --warning-accent: var(--warning-300);
    --warning-accent-ink: var(--warning-300);
    --danger-tint: var(--danger-900);
    --on-danger-tint: var(--on-danger-900);
    --danger-accent: var(--danger-300);
    --danger-accent-ink: var(--danger-300);
  }
}

/* Dark mode — explicit opt-in */
[data-theme="dark"] {
  --surface-base: #13322f;
  --surface-raised: #2f4b48;
  --surface-sunken: #0b1e1c;
  --text-primary: #eef3f2;
  --text-secondary: #83c5be;
  --border-subtle: #2f4b48;
  --focus-ring: var(--focus-ring-dark);
  --elevation-1: none;
  --elevation-2: none;
  --elevation-3: none;
  --border-interactive: #a1ccca;
  /* Semantic ink/tint roles — dark re-elections (F-0046) */
  --link-ink: var(--primary-200);
  --link-ink-hover: var(--primary-100);
  --action-tint: var(--primary-800);
  --action-tint-active: var(--primary-700);
  --on-action-tint: var(--on-primary-800);
  --action-fill: var(--primary-300);
  --on-action-fill: var(--on-primary-300);
  --action-fill-hover: var(--primary-200);
  --on-action-fill-hover: var(--on-primary-200);
  --action-fill-active: var(--primary-100);
  --on-action-fill-active: var(--on-primary-100);
  --border-interactive-hover: var(--primary-100);
  --danger-ink: var(--danger-200);
  --danger-boundary: var(--danger-300);
  --primary-accent-ink: var(--primary-300);
  --info-tint: var(--info-900);
  --on-info-tint: var(--on-info-900);
  --info-accent: var(--info-300);
  --info-accent-ink: var(--info-300);
  --success-tint: var(--success-900);
  --on-success-tint: var(--on-success-900);
  --success-accent: var(--success-300);
  --success-accent-ink: var(--success-300);
  --warning-tint: var(--warning-900);
  --on-warning-tint: var(--on-warning-900);
  --warning-accent: var(--warning-300);
  --warning-accent-ink: var(--warning-300);
  --danger-tint: var(--danger-900);
  --on-danger-tint: var(--on-danger-900);
  --danger-accent: var(--danger-300);
  --danger-accent-ink: var(--danger-300);
}

/* Responsive type ramp — at <= 640px the three largest steps drop one grid stop */
@media (max-width: 639.98px) {
  :root {
    --text-display: 2.5rem; /* 40px */
    --text-h1: 2rem; /* 32px */
    --text-h2: 1.5rem; /* 24px */
  }
}

/* Reduced motion — the emission contract (Motion & Craft Restraint §3 via b01e01cf):
 * every interaction duration collapses to near-instant, every displacement to zero —
 * the instant/cross-fade degradation. The cadence tier (--motion-prompt-rest) is
 * deliberately NOT collapsed: a rest is stillness between motions, and collapsing it
 * would amplify motion — the consuming device stops entirely instead (b82adfab).
 * Honour the tokens and the duty is honoured. */
@media (prefers-reduced-motion: reduce) {
  :root {
    --motion-instant: 0.01ms;
    --motion-fast: 0.01ms;
    --motion-base: 0.01ms;
    --motion-slow: 0.01ms;
    --motion-slower: 0.01ms;
    --motion-shift-1: 0px;
    --motion-shift-2: 0px;
    --motion-shift-3: 0px;
    --motion-scale-enter: 1;
    --motion-stagger-step: 0.01ms;
  }
}
