:root {
  /* WorldStamped semantic color contract — light first. */
  --ws-color-canvas: #f4efe6;
  --ws-color-canvas-strong: #ebe2d4;
  --ws-color-surface: #fffdf9;
  --ws-color-surface-raised: #ffffff;
  --ws-color-map: #0b2034;
  --ws-color-map-soft: #12334a;
  --ws-color-map-water: #153e55;
  --ws-color-map-land: #d9d2bd;
  --ws-color-map-land-active: #df5637;
  --ws-color-text: #0b2034;
  --ws-color-text-soft: #526573;
  --ws-color-text-inverse: #fffdf9;
  --ws-color-accent: #df5637;
  --ws-color-accent-strong: #b93f27;
  --ws-color-accent-soft: #f7d8ce;
  --ws-color-sea: #2e6f78;
  --ws-color-success: #28745f;
  --ws-color-warning: #9a641c;
  --ws-color-danger: #a83831;
  --ws-color-focus: #df5637;
  --ws-color-border: rgb(11 32 52 / 14%);
  --ws-color-border-strong: rgb(11 32 52 / 24%);
  --ws-color-overlay: rgb(5 17 29 / 55%);

  /* Type uses local/system fonts only. */
  --ws-font-display: Iowan Old Style, Baskerville, "Times New Roman", serif;
  --ws-font-ui: "Avenir Next", Avenir, "Segoe UI", system-ui, sans-serif;
  --ws-font-size-xs: 0.72rem;
  --ws-font-size-sm: 0.82rem;
  --ws-font-size-md: 0.95rem;
  --ws-font-size-lg: 1.125rem;
  --ws-font-size-xl: clamp(1.4rem, 2vw, 1.9rem);
  --ws-font-size-display: clamp(2.85rem, 8vw, 6.75rem);
  --ws-line-tight: 0.94;
  --ws-line-heading: 1.08;
  --ws-line-body: 1.55;
  --ws-tracking-tight: -0.045em;
  --ws-tracking-label: 0.12em;
  --ws-weight-regular: 450;
  --ws-weight-medium: 600;
  --ws-weight-bold: 760;

  /* Four-point rhythm with larger editorial intervals. */
  --ws-space-1: 0.25rem;
  --ws-space-2: 0.5rem;
  --ws-space-3: 0.75rem;
  --ws-space-4: 1rem;
  --ws-space-5: 1.25rem;
  --ws-space-6: 1.5rem;
  --ws-space-8: 2rem;
  --ws-space-10: 2.5rem;
  --ws-space-12: 3rem;
  --ws-space-16: 4rem;
  --ws-space-20: 5rem;

  --ws-radius-compact: 0.7rem;
  --ws-radius-control: 1rem;
  --ws-radius-card: 1.35rem;
  --ws-radius-sheet: 1.75rem;
  --ws-radius-map: 2rem;
  --ws-radius-pill: 999px;
  --ws-border-hairline: 1px;
  --ws-opacity-muted: 0.68;
  --ws-opacity-disabled: 0.48;

  --ws-shadow-grounded: 0 0.5rem 1.5rem rgb(11 32 52 / 8%);
  --ws-shadow-raised: 0 1rem 2.75rem rgb(11 32 52 / 13%);
  --ws-shadow-floating: 0 1.25rem 4rem rgb(5 17 29 / 22%);
  --ws-shadow-modal: 0 2rem 6rem rgb(5 17 29 / 34%);

  --ws-glass-fill: rgb(255 253 249 / 78%);
  --ws-glass-fill-dark: rgb(11 32 52 / 78%);
  --ws-glass-border: rgb(255 255 255 / 62%);
  --ws-glass-blur: 1.25rem;
  --ws-glass-saturation: 125%;

  /* Mobile navigation uses a darker, optically lighter liquid-glass layer. */
  --ws-liquid-dock-fill: rgb(54 72 87 / 58%);
  --ws-liquid-dock-fill-fallback: #10283b;
  --ws-liquid-dock-border: rgb(255 255 255 / 48%);
  --ws-liquid-dock-lens: rgb(255 255 255 / 18%);
  --ws-liquid-dock-blur: 1.5rem;
  --ws-liquid-dock-saturation: 165%;
  --ws-liquid-dock-shadow: 0 0 0.5rem rgb(5 17 29 / 16%);

  --ws-z-base: 0;
  --ws-z-map: 2;
  --ws-z-controls: 10;
  --ws-z-sheet: 20;
  --ws-z-dock: 30;
  --ws-z-toast: 40;
  --ws-z-dialog: 50;

  --ws-motion-fast: 140ms;
  --ws-motion-base: 240ms;
  --ws-motion-slow: 480ms;
  --ws-ease-standard: cubic-bezier(0.2, 0.75, 0.2, 1);
  --ws-ease-spring: cubic-bezier(0.16, 1, 0.3, 1);

  --ws-control-min: 2.75rem;
  --ws-content-max: 120rem;
  --ws-inspector-width: clamp(22rem, 27vw, 29rem);
  --ws-breakpoint-phone: 35rem;
  --ws-breakpoint-tablet: 48rem;
  --ws-breakpoint-desktop: 64rem;
  --ws-breakpoint-wide: 90rem;

  --ws-safe-top: env(safe-area-inset-top, 0px);
  --ws-safe-right: env(safe-area-inset-right, 0px);
  --ws-safe-bottom: env(safe-area-inset-bottom, 0px);
  --ws-safe-left: env(safe-area-inset-left, 0px);
}

/* Dark-ready contract. Phase 1 intentionally exposes no theme switch. */
[data-theme="dark"] {
  --ws-color-canvas: #071724;
  --ws-color-canvas-strong: #0b2034;
  --ws-color-surface: #102b3e;
  --ws-color-surface-raised: #16374c;
  --ws-color-text: #fffaf2;
  --ws-color-text-soft: #bdcbd3;
  --ws-color-border: rgb(255 255 255 / 14%);
  --ws-color-border-strong: rgb(255 255 255 / 24%);
  --ws-glass-fill: rgb(11 32 52 / 80%);
  --ws-glass-border: rgb(255 255 255 / 16%);
  --ws-liquid-dock-fill: rgb(4 16 27 / 72%);
  --ws-liquid-dock-fill-fallback: #071724;
}
