/* Self-hosted editorial type (Flask side) — Hanken / Spectral / IBM Plex Mono. */
@font-face{font-family:'Hanken Grotesk';src:url('/static/fonts/hanken-400-normal.woff2') format('woff2');font-weight:400;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Hanken Grotesk';src:url('/static/fonts/hanken-500-normal.woff2') format('woff2');font-weight:500;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Hanken Grotesk';src:url('/static/fonts/hanken-600-normal.woff2') format('woff2');font-weight:600;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Hanken Grotesk';src:url('/static/fonts/hanken-700-normal.woff2') format('woff2');font-weight:700;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Spectral';src:url('/static/fonts/spectral-400-normal.woff2') format('woff2');font-weight:400;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Spectral';src:url('/static/fonts/spectral-500-normal.woff2') format('woff2');font-weight:500;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Spectral';src:url('/static/fonts/spectral-600-normal.woff2') format('woff2');font-weight:600;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Spectral';src:url('/static/fonts/spectral-700-normal.woff2') format('woff2');font-weight:700;font-display:swap;size-adjust:117%;}
@font-face{font-family:'Spectral';src:url('/static/fonts/spectral-600-italic.woff2') format('woff2');font-weight:600;font-style:italic;font-display:swap;size-adjust:117%;}
@font-face{font-family:'IBM Plex Mono';src:url('/static/fonts/plexmono-400-normal.woff2') format('woff2');font-weight:400;font-display:swap;size-adjust:117%;}
@font-face{font-family:'IBM Plex Mono';src:url('/static/fonts/plexmono-500-normal.woff2') format('woff2');font-weight:500;font-display:swap;size-adjust:117%;}
@font-face{font-family:'IBM Plex Mono';src:url('/static/fonts/plexmono-600-normal.woff2') format('woff2');font-weight:600;font-display:swap;size-adjust:117%;}
:root{--dv-font-sans:'Hanken Grotesk',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--dv-font-display:'Spectral',Georgia,serif;--dv-font-mono:'IBM Plex Mono',ui-monospace,monospace;--dv-user-font-scale:1;--dv-body-font-size:14px;--dv-app-vh:calc(100vh / var(--dv-zoom, 1));--dv-app-dvh:calc(100dvh / var(--dv-zoom, 1));}

/* ═══════════════════════════════════════════════════════════════════════════
 * DoorVault Design Tokens — --dv-* namespace
 * Ported from frontend/src/styles/tokens.css (react branch).
 * Scoped to --dv-* prefix so they coexist with existing Flask CSS vars.
 * ═══════════════════════════════════════════════════════════════════════════ */
:root {
    /* Brand / Accent */
    --dv-accent:            #d4a843;
    --dv-accent-hover:      #e0b854;
    --dv-accent-muted:      rgba(212, 168, 67, 0.10);
    --dv-accent-subtle:     rgba(212, 168, 67, 0.05);

    /* Neutral Surfaces */
    --dv-bg-app:            #141414;
    --dv-bg-card:           #1e1e1e;
    --dv-bg-elevated:       #262626;

    /* Text */
    --dv-fg-1:              #f2eee3;
    --dv-fg-2:              #a59d8b;
    --dv-fg-3:              #6f6757;
    --dv-fg-4:              #857c69;

    /* Borders */
    --dv-border:            #2b2b2b;
    --dv-border-subtle:     rgba(255, 255, 255, 0.06);
    --dv-border-hairline:   rgba(255, 255, 255, 0.035);

    /* Semantic / Status */
    --dv-success:           #10b981;
    --dv-success-bg:        rgba(16, 185, 129, 0.10);
    --dv-danger:            #ef4444;
    --dv-danger-bg:         rgba(239, 68, 68, 0.10);
    --dv-warning:           #d4940a;
    --dv-warning-bg:        rgba(212, 148, 10, 0.10);

    /* Knox AI gold */
    --dv-knox:              #f0c860;
    --dv-knox-bg:           rgba(240, 200, 96, 0.10);
    --dv-knox-border:       rgba(240, 200, 96, 0.28);

    /* Easing */
    --dv-ease-out:          cubic-bezier(0.16, 1, 0.3, 1);
}
