/*
 * The Scholar's Ascent Learning Portal theme contract.
 *
 * Every portal stylesheet consumes these semantic properties. The private
 * classroom default ports the exact drijezie.com .light-band daylight palette.
 * theme-engine.js replaces every property in THEME_TOKEN_CONTRACT as one
 * atomic theme operation; no theme-specific selector layer is permitted.
 */
:root {
    color-scheme: light;

    /* Exact parent-site daylight foundation.
       2026-08-15: the canvas sat at #F5F6FB against a #FFFFFF surface — barely
       two percent apart, so every card read as flat paint on paper rather than
       an elevated sheet, which is what "very white, not premium" was describing.
       The canvas is now deepened enough for white cards to lift off it while the
       surface stays pure white; text tokens are untouched, so every contrast
       pair in verify-theme-contract.mjs is unchanged or better. */
    --portal-bg: #E4E7F3;
    --portal-canvas: #EDEFF7;
    --portal-surface: #FFFFFF;
    --portal-surface-raised: #F0F2FA;
    --portal-surface-muted: #F0F2FA;
    --portal-surface-inset: #E9ECF6;
    --portal-glass: rgba(255, 255, 255, 0.86);

    --portal-text: #141B36;
    --portal-text-secondary: #3A4463;
    --portal-text-muted: #5A6584;
    --portal-text-inverse: #FFFFFF;

    --portal-border: rgba(20, 27, 54, 0.10);
    --portal-border-strong: rgba(20, 27, 54, 0.22);

    --portal-accent: #4F49D0;
    --portal-accent-strong: #4A44C9;
    --portal-accent-soft: #E8E7FA;
    --portal-on-accent: #FFFFFF;
    --portal-gradient: linear-gradient(112deg, #4F49D0, #4A44C9);

    --portal-success: #096A50;
    --portal-success-soft: #E4F3EE;
    --portal-warning: #7A5A0F;
    --portal-warning-soft: #F8F0D8;
    --portal-danger: #B02257;
    --portal-danger-soft: #FBE8EF;
    --portal-info: #2456C6;
    --portal-info-soft: #E6ECFA;
    --portal-focus: #4F49D0;

    --portal-overlay: rgba(20, 27, 54, 0.58);
    --portal-shadow: 0 1px 2px rgba(20, 27, 54, 0.05), 0 6px 20px rgba(20, 27, 54, 0.09);
    --portal-shadow-raised: 0 18px 48px rgba(20, 27, 54, 0.13), 0 4px 12px rgba(20, 27, 54, 0.06);

    /* Live assessment content always stays quiet, opaque, and high contrast. */
    --portal-assessment-bg: #F5F6FB;
    --portal-assessment-surface: #FFFFFF;
    --portal-assessment-text: #141B36;
    --portal-assessment-muted: #3A4463;
    --portal-assessment-border: rgba(20, 27, 54, 0.22);

    --portal-font-body: "Outfit", system-ui, -apple-system, "Segoe UI", sans-serif;
    --portal-font-heading: "Space Grotesk", "Outfit", system-ui, sans-serif;
    --portal-letter-spacing: normal;
    --portal-line-height: 1.6;
    --portal-motion-duration: 220ms;
    --portal-animation-play-state: running;
    --portal-ambient-opacity: 1;

    /* Parent-site per-course colors remain stable across personal themes. */
    --portal-course-alg1: #2456C6;
    --portal-course-geo: #096A50;
    --portal-course-alg2: #6B3FCB;
    --portal-course-sci: #7A5A0F;
    --portal-course-precalc: #0B6E80;
    --portal-course-calc: #B02257;
    --portal-course-phys: #4F46C0;
    --portal-course-apphys: #44597E;
    --portal-course-ess: #8F430C;

    /* Accessibility and print invariants are modes, not personal themes. */
    --portal-hc-ground: #000000;
    --portal-hc-surface: #111111;
    --portal-hc-raised: #333333;
    --portal-hc-ink: #FFFFFF;
    --portal-hc-focus: #FFFF00;
    --portal-hc-success: #00FF00;
    --portal-hc-danger: #FF4D4D;
    --portal-print-paper: #FFFFFF;
    --portal-print-ink: #000000;
    --portal-print-muted: #333333;
    --portal-print-line: #666666;

    /* Derived tokens. Themes fill the contract above; CSS derives states. */
    --portal-accent-wash: color-mix(in srgb, var(--portal-accent) 12%, transparent);
    --portal-accent-border: color-mix(in srgb, var(--portal-accent) 34%, transparent);
    --portal-accent-glow: color-mix(in srgb, var(--portal-accent) 24%, transparent);
    --portal-success-wash: color-mix(in srgb, var(--portal-success) 14%, transparent);
    --portal-success-border: color-mix(in srgb, var(--portal-success) 36%, transparent);
    --portal-warning-wash: color-mix(in srgb, var(--portal-warning) 14%, transparent);
    --portal-warning-border: color-mix(in srgb, var(--portal-warning) 38%, transparent);
    --portal-danger-wash: color-mix(in srgb, var(--portal-danger) 14%, transparent);
    --portal-danger-border: color-mix(in srgb, var(--portal-danger) 38%, transparent);
    --portal-info-wash: color-mix(in srgb, var(--portal-info) 12%, transparent);
    --portal-info-border: color-mix(in srgb, var(--portal-info) 34%, transparent);
    --portal-surface-wash: color-mix(in srgb, var(--portal-surface) 72%, transparent);
    --portal-surface-faint: color-mix(in srgb, var(--portal-text) 4%, transparent);
    --portal-surface-hover: color-mix(in srgb, var(--portal-accent) 8%, var(--portal-surface));
    --portal-shadow-color: color-mix(in srgb, var(--portal-text) 18%, transparent);

    /* Compatibility aliases while legacy selectors are progressively named. */
    --bg-deep-space: var(--portal-bg);
    --glass-bg: var(--portal-glass);
    --glass-border: var(--portal-border);
    --glass-shadow: var(--portal-shadow);
    --cyan-glow: var(--portal-accent);
    --purple-glow: var(--portal-accent-strong);
    --accent-gradient: var(--portal-gradient);
    --primary-gradient: var(--portal-gradient);
    --text-primary: var(--portal-text);
    --text-secondary: var(--portal-text-secondary);
    --text-muted: var(--portal-text-muted);
    --accent-pink: var(--portal-danger);
}

html {
    background: var(--portal-bg);
}

body,
button,
input,
select,
textarea {
    font-family: var(--portal-font-body);
    letter-spacing: var(--portal-letter-spacing);
}

body {
    line-height: var(--portal-line-height);
}

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

@media print {
    :root {
        color-scheme: light;
    }
}
