:root {
    /* Colors: primary (European ink-blue) */
    --color-primary-50: #eff5fb;
    --color-primary-100: #dce8f5;
    --color-primary-200: #b9d1ea;
    --color-primary-300: #8fb2d9;
    --color-primary-400: #5f8cc4;
    --color-primary-500: #3d6fae;
    --color-primary-600: #2f5a92;
    --color-primary-700: #264975;
    --color-primary-800: #1e3a5f;
    --color-primary-900: #162b47;

    /* Colors: accent (analogous teal) */
    --color-accent-50: #f0fdfa;
    --color-accent-100: #ccfbf1;
    --color-accent-200: #99f6e4;
    --color-accent-300: #5eead4;
    --color-accent-400: #2dd4bf;
    --color-accent-500: #14b8a6;
    --color-accent-600: #0d9488;
    --color-accent-700: #0f766e;
    --color-accent-800: #115e59;
    --color-accent-900: #134e4a;

    /* Colors: cool neutrals (blue primary) */
    --color-neutral-50: #f8f9fa;
    --color-neutral-100: #f1f3f5;
    --color-neutral-200: #e3e7ea;
    --color-neutral-300: #cfd5da;
    --color-neutral-400: #9aa3ab;
    --color-neutral-500: #6b747d;
    --color-neutral-600: #4f5861;
    --color-neutral-700: #3b434b;
    --color-neutral-800: #272d33;
    --color-neutral-900: #181c20;

    /* Semantic */
    --color-success: #16a34a;
    --color-warning: #d97706;
    --color-error: #dc2626;
    --color-info: #2563eb;

    /* Surface roles */
    --color-bg: var(--color-neutral-50);
    --color-surface: #fdfdfd;
    --color-surface-dark: var(--color-primary-900);
    --color-text: var(--color-neutral-900);
    --color-text-muted: var(--color-neutral-600);
    --color-border: var(--color-neutral-200);
    --color-link: var(--color-primary-600);
    --color-link-hover: var(--color-primary-800);
    --hero-overlay: linear-gradient(180deg, rgba(22, 43, 71, 0.35) 0%, rgba(22, 43, 71, 0.70) 100%);

    /* Typography */
    --font-heading: 'Plus Jakarta Sans', sans-serif;
    --font-body: 'DM Sans', sans-serif;
    --text-xs: 0.8rem;
    --text-sm: 0.9rem;
    --text-base: 1rem;
    --text-lg: 1.25rem;
    --text-xl: 1.563rem;
    --text-2xl: 1.953rem;
    --text-3xl: 2.441rem;
    --text-4xl: 3.052rem;
    --letter-tight: -0.03em;
    --letter-normal: 0;
    --letter-wide: 0.05em;
    --leading-tight: 1.15;
    --leading-normal: 1.65;
    --measure: 65ch;

    /* Spacing (8px grid) */
    --space-0: 0;
    --space-1: 0.25rem;
    --space-2: 0.5rem;
    --space-3: 0.75rem;
    --space-4: 1rem;
    --space-5: 1.25rem;
    --space-6: 1.5rem;
    --space-8: 2rem;
    --space-10: 2.5rem;
    --space-12: 3rem;
    --space-16: 4rem;
    --space-20: 5rem;
    --space-24: 6rem;
    --space-32: 8rem;
    --space-section: clamp(4rem, 8vw, 7rem);

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

    /* Shadows (diffuse) */
    --shadow-sm: 0 1px 2px rgba(24, 28, 32, 0.04);
    --shadow-md: 0 4px 12px rgba(24, 28, 32, 0.06);
    --shadow-lg: 0 8px 24px rgba(24, 28, 32, 0.08);
    --shadow-xl: 0 16px 48px rgba(24, 28, 32, 0.10);
    --shadow-inner: inset 0 1px 3px rgba(24, 28, 32, 0.06);
    --shadow-glow: 0 0 20px rgba(61, 111, 174, 0.15);

    /* Motion */
    --duration-fast: 150ms;
    --duration-normal: 300ms;
    --duration-slow: 500ms;
    --duration-slower: 700ms;
    --ease-default: cubic-bezier(0.4, 0, 0.2, 1);
    --ease-in: cubic-bezier(0.4, 0, 1, 1);
    --ease-out: cubic-bezier(0, 0, 0.2, 1);
    --ease-bounce: cubic-bezier(0.34, 1.56, 0.64, 1);
    --stagger-step: 100ms;

    /* Layout */
    --container-max: 1280px;
    /* Mobile-first page gutter, widened at the 640px breakpoint below. */
    --container-padding: 1.125rem;

    /*
     * Breakpoints. CSS cannot interpolate a custom property into a media
     * query, so every @media repeats the number literally — these record the
     * scale in one place and are usable in calc().
     */
    --bp-xs: 30rem;
    --bp-sm: 40rem;
    --bp-md: 48rem;
    --bp-lg: 64rem;
    --bp-xl: 80rem;

    /* Minimum size of anything a finger has to hit (WCAG 2.5.5). */
    --tap-target: 44px;
}

@media (prefers-reduced-motion: reduce) {
    :root {
        --duration-fast: 0ms;
        --duration-normal: 0ms;
        --duration-slow: 0ms;
        --duration-slower: 0ms;
        --stagger-step: 0ms;
    }
}

@media (min-width: 640px) {
    :root {
        --container-padding: 1.5rem;
    }
}
