/* AUTO-GENERATED from docs/design/design-guideline.json by scripts/build-tokens.mjs.
   Do NOT edit by hand. North star: every token earns the word "reliable". */

:root {
  color-scheme: light dark;

  /* color — light (default) */
  --color-surface-0: #FAFAFA;
  --color-surface-1: #FFFFFF;
  --color-surface-2: #F0F0F0;
  --color-surface-3: #E8E8E8;
  --color-text-primary: #0D0D0F;
  --color-text-secondary: #6B6B6B;
  --color-text-tertiary: #9A9A9A;
  --color-border: #E4E4E7;
  --color-border-subtle: #F0F0F2;
  --color-accent: #0A7EA4;
  --color-accent-hover: #086D8E;
  --color-accent-text: #FFFFFF;
  --color-accent-subtle: rgba(10,126,164,0.08);
  --color-success: rgba(10,126,164,0.72);
  --color-qr-module: #0D0D0F;
  --color-qr-background: #FFFFFF;

  /* radius */
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 12px;
  --radius-xl: 16px;
  --radius-2xl: 24px;
  --radius-full: 9999px;

  /* shadow */
  --shadow-sm: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.06);
  --shadow-md: 0 4px 12px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.06);
  --shadow-lg: 0 8px 32px rgba(0,0,0,0.10), 0 4px 8px rgba(0,0,0,0.06);
  --shadow-xl: 0 16px 48px rgba(0,0,0,0.12), 0 8px 16px rgba(0,0,0,0.08);
  --shadow-qr-hover: 0 16px 48px rgba(0,0,0,0.18), 0 8px 24px rgba(0,0,0,0.12);

  /* typography */
  --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
  --fs-display-hero: 64px;
  --fw-display-hero: 300;
  --lh-display-hero: 1.08;
  --ls-display-hero: -0.03em;
  --fs-display-lg: 48px;
  --fw-display-lg: 300;
  --lh-display-lg: 1.10;
  --ls-display-lg: -0.022em;
  --fs-display-md: 36px;
  --fw-display-md: 500;
  --lh-display-md: 1.12;
  --ls-display-md: -0.018em;
  --fs-heading-sm: 24px;
  --fw-heading-sm: 500;
  --lh-heading-sm: 1.20;
  --ls-heading-sm: -0.01em;
  --fs-body-lg: 18px;
  --fw-body-lg: 400;
  --lh-body-lg: 1.60;
  --ls-body-lg: 0em;
  --fs-body: 16px;
  --fw-body: 400;
  --lh-body: 1.55;
  --ls-body: -0.011em;
  --fs-body-sm: 14px;
  --fw-body-sm: 400;
  --lh-body-sm: 1.50;
  --ls-body-sm: 0em;
  --fs-ui-label: 14px;
  --fw-ui-label: 600;
  --lh-ui-label: 1.20;
  --ls-ui-label: 0.01em;
  --fs-caption: 12px;
  --fw-caption: 400;
  --lh-caption: 1.40;
  --ls-caption: 0.01em;

  /* spacing (8pt grid) */
  --space-4: 4px;
  --space-8: 8px;
  --space-12: 12px;
  --space-16: 16px;
  --space-24: 24px;
  --space-32: 32px;
  --space-48: 48px;
  --space-64: 64px;
  --space-96: 96px;
  --space-128: 128px;

  /* motion */
  --ease-enter: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-exit: cubic-bezier(0.4, 0, 1, 1);
  --dur-micro-in: 200ms;
  --dur-micro-out: 140ms;
  --dur-reveal-in: 350ms;
  --dur-reveal-out: 140ms;
  --dur-layout: 300ms;
  --dur-opacity-exception: 80ms;
}

/* Dark via system preference (unless explicitly set to light) */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
  --color-surface-0: #0D0D0F;
  --color-surface-1: #161618;
  --color-surface-2: #1E1E20;
  --color-surface-3: #2A2A2D;
  --color-text-primary: #F5F5F5;
  --color-text-secondary: #8A8A8A;
  --color-text-tertiary: #5A5A5A;
  --color-border: #2A2A2D;
  --color-border-subtle: #1E1E20;
  --color-accent: #0A7EA4;
  --color-accent-hover: #0B92BD;
  --color-accent-text: #FFFFFF;
  --color-accent-subtle: rgba(10,126,164,0.12);
  --color-success: rgba(10,126,164,0.80);
  --color-qr-module: #0D0D0F;
  --color-qr-background: #FFFFFF;
  }
}

/* Dark via explicit toggle */
:root[data-theme="dark"] {
  --color-surface-0: #0D0D0F;
  --color-surface-1: #161618;
  --color-surface-2: #1E1E20;
  --color-surface-3: #2A2A2D;
  --color-text-primary: #F5F5F5;
  --color-text-secondary: #8A8A8A;
  --color-text-tertiary: #5A5A5A;
  --color-border: #2A2A2D;
  --color-border-subtle: #1E1E20;
  --color-accent: #0A7EA4;
  --color-accent-hover: #0B92BD;
  --color-accent-text: #FFFFFF;
  --color-accent-subtle: rgba(10,126,164,0.12);
  --color-success: rgba(10,126,164,0.80);
  --color-qr-module: #0D0D0F;
  --color-qr-background: #FFFFFF;
}

/* Light via explicit toggle (override system) */
:root[data-theme="light"] {
  --color-surface-0: #FAFAFA;
  --color-surface-1: #FFFFFF;
  --color-surface-2: #F0F0F0;
  --color-surface-3: #E8E8E8;
  --color-text-primary: #0D0D0F;
  --color-text-secondary: #6B6B6B;
  --color-text-tertiary: #9A9A9A;
  --color-border: #E4E4E7;
  --color-border-subtle: #F0F0F2;
  --color-accent: #0A7EA4;
  --color-accent-hover: #086D8E;
  --color-accent-text: #FFFFFF;
  --color-accent-subtle: rgba(10,126,164,0.08);
  --color-success: rgba(10,126,164,0.72);
  --color-qr-module: #0D0D0F;
  --color-qr-background: #FFFFFF;
}

/* Motion is opt-in at the OS level. Under reduced-motion everything is instant,
   except the single named opacity exception. */
@media (prefers-reduced-motion: reduce) {
  :root {
    --dur-micro-in: 0ms;
    --dur-micro-out: 0ms;
    --dur-reveal-in: 0ms;
    --dur-reveal-out: 0ms;
    --dur-layout: 0ms;
    /* --dur-opacity-exception stays 80ms (named exception) */
  }
}
