/* ═══════════════════════════════════════════════════════════
   ÉCOUTILLE — main.css
   Structure · Components · Pages · Responsive
   Tokens dans theme-light.css / theme-dark.css
═══════════════════════════════════════════════════════════ */

/* Classes utilitaires (cursor, font-size, widths fixes, pills, etc.).
   Importé pour pouvoir migrer les `style="..."` inline → classes et
   retirer `'unsafe-inline'` de la CSP style-src. */
@import url('utilities.css');
@import url('role_switcher.css');

/* ── TYPO (commune aux deux thèmes) ─────────────────────── */
:root {
    --mono: 'IBM Plex Mono', monospace;
    --sans: 'IBM Plex Sans', sans-serif;
    --r:    6px;
    --r-lg: 12px;
}

/* ── RESET ───────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 14px; scroll-behavior: smooth; }
body { font-family: var(--sans); background: var(--bg); color: var(--text); min-height: 100vh; line-height: 1.6; -webkit-font-smoothing: antialiased; }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
::-webkit-scrollbar { width: 6px; background: var(--bg); }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }

/* ── UTILS ───────────────────────────────────────────────── */
.container { max-width: 1080px; margin: 0 auto; padding: 0 24px; }
.mono { font-family: var(--mono); }


/* ═══════════════════════════════════════════════════════════
   TOPBAR
═══════════════════════════════════════════════════════════ */
.topbar {
    position: fixed; top: 0; left: 0; right: 0; z-index: 100;
    height: 52px; border-bottom: 1px solid var(--border);
    background: var(--topbar-bg); backdrop-filter: blur(8px);
    display: flex; align-items: center; padding: 0 24px;
}
.topbar-logo {
    display: flex; align-items: center; gap: 10px;
    text-decoration: none; color: var(--text-hi);
    font-family: var(--mono); font-size: 13px; font-weight: 500;
    letter-spacing: -.3px; flex-shrink: 0;
}
.topbar-logo:hover { text-decoration: none; }
.logo-mark {
    width: 26px; height: 26px; border: 1px solid var(--accent); border-radius: var(--r);
    display: flex; align-items: center; justify-content: center;
    font-size: 13px; color: var(--accent);
}
.topbar-sep { width: 1px; height: 20px; background: var(--border); margin: 0 20px; flex-shrink: 0; }
.topbar-nav { display: flex; align-items: center; gap: 2px; flex: 1; }
.topbar-nav a { padding: 5px 12px; font-size: 13px; color: var(--text-dim); text-decoration: none; border-radius: var(--r); transition: color .15s, background .15s; }
.topbar-nav a:hover,
.topbar-nav a.active { color: var(--text-hi); background: var(--bg-2); }
.topbar-right { display: flex; align-items: center; gap: 10px; margin-left: auto; flex-shrink: 0; }
.lang-select {
    appearance: none; background: var(--bg-1); border: 1px solid var(--border); border-radius: var(--r);
    color: var(--text-dim); font-family: var(--mono); font-size: 11px;
    padding: 4px 8px; cursor: pointer; transition: border-color .15s, color .15s;
}
.lang-select:hover { border-color: var(--border-hi); color: var(--text-hi); }
.btn-nav {
    padding: 6px 14px; font-family: var(--sans); font-size: 13px; font-weight: 500;
    border-radius: var(--r); cursor: pointer; text-decoration: none;
    transition: all .15s; border: 1px solid transparent; white-space: nowrap; display: inline-block;
}
.btn-nav:hover { text-decoration: none; }
.btn-nav-ghost { color: var(--text-dim); border-color: var(--border); background: transparent; }
.btn-nav-ghost:hover { color: var(--text-hi); border-color: var(--border-hi); background: var(--bg-2); }
.btn-nav-accent { color: var(--accent-fg); background: var(--accent); border-color: var(--accent); font-weight: 600; }
.btn-nav-accent:hover { background: var(--accent-hi); box-shadow: 0 0 16px var(--accent-glow); }


/* ═══════════════════════════════════════════════════════════
   MAIN & FOOTER
═══════════════════════════════════════════════════════════ */
#main { padding-top: 52px; min-height: 100vh; }
.footer { border-top: 1px solid var(--border); padding: 28px 24px; display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px; }
.footer-left { display: flex; align-items: center; gap: 10px; font-family: var(--mono); font-size: 11px; color: var(--text-dim); }
.footer-right { font-size: 12px; color: var(--text-dim); }
.footer-right a { color: var(--text-dim); text-decoration: none; }
.footer-right a:hover { color: var(--text-hi); }
.footer .logo-mark { width: 20px; height: 20px; font-size: 10px; border-color: var(--accent-dim); }


/* ═══════════════════════════════════════════════════════════
   BREADCRUMB + bouton retour (cf. partials/_breadcrumb.html)
═══════════════════════════════════════════════════════════ */
.breadcrumb-bar { display: flex; align-items: center; gap: 14px; margin: 0 0 16px; font-size: 13px; flex-wrap: wrap; }
.breadcrumb-back { display: inline-flex; align-items: center; gap: 6px; padding: 5px 11px; background: #fff; border: 1px solid #d8d8de; border-radius: 999px; color: #2c2c33; text-decoration: none; font-size: 12px; transition: background 0.15s, border-color 0.15s; }
.breadcrumb-back:hover { background: #f3f3f5; border-color: #b0b0bb; text-decoration: none; color: #2c2c33; }
.breadcrumb-back i { font-size: 11px; }
.breadcrumb-trail { list-style: none; margin: 0; padding: 0; display: flex; gap: 4px; flex-wrap: wrap; color: #888; }
.breadcrumb-trail .breadcrumb-item { display: flex; align-items: center; gap: 4px; }
.breadcrumb-trail .breadcrumb-item + .breadcrumb-item::before { content: "›"; color: #c4c4cc; margin-right: 4px; }
.breadcrumb-trail .breadcrumb-item a { color: #6b6b72; text-decoration: none; }
.breadcrumb-trail .breadcrumb-item a:hover { color: #2c2c33; }
.breadcrumb-trail .breadcrumb-item.active span { color: #2c2c33; font-weight: 500; }


/* ═══════════════════════════════════════════════════════════
   FLASH
═══════════════════════════════════════════════════════════ */
.flash-zone { position: fixed; top: 60px; right: 16px; z-index: 999; display: flex; flex-direction: column; gap: 8px; max-width: 340px; width: calc(100% - 32px); }
.flash { display: flex; align-items: flex-start; gap: 10px; padding: 11px 14px; background: var(--bg-2); border: 1px solid var(--border); border-left: 3px solid; border-radius: var(--r); font-size: 13px; color: var(--text); animation: fadeSlide .2s ease forwards; box-shadow: var(--sh); }
.flash-close { margin-left: auto; background: none; border: none; color: var(--text-dim); cursor: pointer; font-size: 16px; line-height: 1; flex-shrink: 0; padding-left: 8px; }
.flash-close:hover { color: var(--text-hi); }
.flash.success { border-left-color: var(--green); }
.flash.danger, .flash.error { border-left-color: var(--red); }
.flash.warning { border-left-color: var(--accent); }
.flash.info    { border-left-color: var(--blue); }
@keyframes fadeSlide { from { opacity: 0; transform: translateX(12px); } to { opacity: 1; transform: translateX(0); } }


/* ═══════════════════════════════════════════════════════════
   AUTH COMPONENTS
═══════════════════════════════════════════════════════════ */
.auth-page { min-height: calc(100vh - 52px); display: flex; align-items: center; justify-content: center; padding: 40px 20px; }
.auth-card { width: 100%; max-width: 400px; background: var(--bg-1); border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden; box-shadow: var(--sh); transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease; }
.auth-card--wide { max-width: 420px; }
.auth-card-head { background: var(--bg-2); border-bottom: 1px solid var(--border); padding: 18px 24px; display: flex; align-items: center; gap: 10px; }
.auth-card-head .logo-mark { width: 24px; height: 24px; font-size: 12px; border-color: var(--accent-dim); }
.auth-card-title { font-family: var(--mono); font-size: 12px; color: var(--text-dim); }
.auth-card-title span { color: var(--text-hi); }
.auth-card-body { padding: 28px 24px; }
.auth-card-foot { border-top: 1px solid var(--border); padding: 16px 24px; text-align: center; font-size: 12px; color: var(--text-dim); }
.auth-card-foot a { color: var(--accent); }
.auth-info { font-size: 13px; color: var(--text-dim); line-height: 1.65; margin-bottom: 22px; padding: 12px; background: var(--bg-2); border: 1px solid var(--border); border-radius: var(--r); }
.auth-err, .form-err { padding: 10px 12px; margin-bottom: 14px; background: var(--red-bg); border: 1px solid var(--red-border); border-radius: var(--r); font-size: 12px; color: var(--red-text); display: none; }
.auth-err.show, .form-err.show { display: block; }
.success-state { display: none; text-align: center; }
.success-state.show { display: block; }
.form-state.hidden { display: none; }
.success-icon { width: 52px; height: 52px; margin: 0 auto 18px; background: var(--green-bg); border: 1px solid var(--green-border); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 22px; }
.success-state h3 { font-size: 16px; font-weight: 600; color: var(--text-hi); margin-bottom: 8px; }
.success-state p  { font-size: 13px; color: var(--text-dim); line-height: 1.65; margin-bottom: 20px; }


/* ═══════════════════════════════════════════════════════════
   MFA — enrollment + step-up
═══════════════════════════════════════════════════════════ */

/* Carte MFA setup : plus large pour afficher QR à gauche / form à droite.
   Mobile : le grid passe en 1 colonne (cf. .mfa-grid). */
.auth-card--mfa { max-width: 760px; }

/* Titre + sous-titre directement dans le body (pas de .auth-card-head
   pour éviter la redondance avec la topbar du site). */
.mfa-title {
    font-size: 22px;
    font-weight: 600;
    color: var(--text-hi);
    margin: 0 0 8px;
    letter-spacing: -.3px;
}
.mfa-subtitle {
    font-size: 14px;
    color: var(--text-dim);
    line-height: 1.6;
    margin: 0 0 24px;
}

/* Grid 2 colonnes : QR/secret à gauche, formulaire OTP à droite.
   `align-items: center` pour que le formulaire à droite soit
   verticalement aligné avec le QR à gauche. */
.mfa-grid {
    display: grid;
    grid-template-columns: minmax(240px, 1fr) minmax(240px, 1fr);
    gap: 32px;
    align-items: center;
    margin-bottom: 24px;
}
.mfa-grid-left,
.mfa-grid-right {
    min-width: 0;
}
@media (max-width: 720px) {
    .mfa-grid {
        grid-template-columns: 1fr;
        gap: 22px;
        align-items: start;
    }
}

/* Form OTP : pas de centrage manuel, il occupe la largeur de sa colonne. */
.mfa-confirm-form { width: 100%; }

.mfa-qr-wrap {
    display: flex;
    justify-content: center;
    margin: 0 0 14px;
}
.mfa-qr {
    background: #fff;                    /* QR doit toujours être lisible */
    padding: 10px;
    border: 1px solid var(--border);
    border-radius: var(--r);
    box-shadow: var(--sh);
    width: 220px;
    height: 220px;
    image-rendering: pixelated;          /* QR pixelisé net (pas flou) */
}
.mfa-fallback {
    margin: 0 0 18px;
    font-size: 12px;
    color: var(--text-dim);
}
.mfa-fallback summary {
    cursor: pointer;
    padding: 6px 0;
    user-select: none;
    transition: color .15s;
}
.mfa-fallback summary:hover { color: var(--text-hi); }
.mfa-fallback[open] summary { color: var(--text-hi); margin-bottom: 8px; }
.mfa-fallback--recovery {
    margin-top: 18px;
    padding-top: 14px;
    border-top: 1px solid var(--border);
}
.mfa-secret {
    display: block;
    padding: 10px 12px;
    background: var(--bg-2);
    border: 1px solid var(--border);
    border-radius: var(--r);
    font-family: var(--mono);
    font-size: 12px;
    color: var(--text-hi);
    word-break: break-all;
    user-select: all;                    /* triple-click = sélection rapide */
}
.mfa-recovery-block {
    margin: 0 0 22px;
    padding: 14px 16px;
    background: var(--bg-2);
    border: 1px solid var(--border);
    border-left: 3px solid var(--accent);
    border-radius: var(--r);
}
.mfa-recovery-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
    font-size: 13px;
    color: var(--text-hi);
}
.mfa-recovery-icon {
    font-size: 14px;
    color: var(--accent);
}
.mfa-recovery-warn {
    font-size: 12px;
    color: var(--text-dim);
    line-height: 1.55;
    margin: 0 0 12px;
}
.mfa-recovery-codes {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    /* Sur la carte MFA large (760px), on a la place pour 4 colonnes
       de codes — plus compact que 2 colonnes verticales. */
    grid-template-columns: repeat(4, 1fr);
    gap: 6px 14px;
}
@media (max-width: 720px) {
    .mfa-recovery-codes { grid-template-columns: repeat(2, 1fr); }
}
.mfa-recovery-codes li code {
    font-family: var(--mono);
    font-size: 13px;
    color: var(--text-hi);
    user-select: all;
    letter-spacing: .5px;
}
.mfa-recovery-actions {
    margin-top: 14px;
    text-align: right;
}
.mfa-recovery-pdf-btn {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}


/* ═══════════════════════════════════════════════════════════
   NOTIFICATION BELL — sidebar / topbar widget
═══════════════════════════════════════════════════════════ */

.notif-bell {
    position: relative;
    display: inline-block;
}

.notif-bell-toggle {
    background: none;
    border: none;
    color: inherit;
    cursor: pointer;
    padding: 8px;
    border-radius: 6px;
    position: relative;
    font-size: 16px;
    transition: background .12s, color .12s;
}
.notif-bell-toggle:hover { background: rgba(255,255,255,.08); color: #fff; }

.notif-bell-badge {
    position: absolute;
    top: 2px; right: 2px;
    background: #d9534f;
    color: #fff;
    font-size: 10px;
    font-weight: 600;
    padding: 1px 5px;
    border-radius: 10px;
    min-width: 16px;
    text-align: center;
    line-height: 1.4;
    border: 1.5px solid #1f2026;
}

/* Panel : ouvre vers la DROITE de la cloche (pas vers le bas) car la cloche
   vit dans une sidebar étroite (~240px) dans tous les sous-sites du socle.
   Avec `right: 0`, un panel de 320px débordait à gauche et était clippé. */
.notif-bell-panel {
    display: none;
    position: absolute;
    top: 0;
    left: calc(100% + 12px);
    width: 320px;
    max-height: 420px;
    background: #fff;
    border: 1px solid #e3e3e8;
    border-radius: 8px;
    box-shadow: 0 8px 24px rgba(0,0,0,.18);
    overflow: hidden;
    z-index: 1100;
    color: #2c2c33;
    font-size: 13px;
}
.notif-bell.open .notif-bell-panel { display: flex; flex-direction: column; }

/* Mobile : la sidebar passe en drawer fixed ; on bascule le panel en fixed
   full-width pour qu'il reste lisible et ne dépende pas de la position de la
   cloche dans la sidebar. */
@media (max-width: 600px) {
    .notif-bell-panel {
        position: fixed;
        top: 64px;
        left: 12px;
        right: 12px;
        width: auto;
        max-width: none;
        max-height: 70vh;
    }
}

.notif-bell-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 10px 14px;
    border-bottom: 1px solid #eee;
    background: #fafafa;
    font-size: 13px;
}
.notif-bell-all {
    font-size: 12px;
    color: #5cb85c;
    text-decoration: none;
}
.notif-bell-all:hover { text-decoration: underline; }

.notif-bell-empty {
    padding: 28px 14px;
    text-align: center;
    color: #888;
}
.notif-bell-empty i { font-size: 22px; opacity: .4; display: block; margin-bottom: 8px; }
.notif-bell-empty p { margin: 0; }

.notif-bell-list {
    list-style: none;
    margin: 0;
    padding: 0;
    overflow-y: auto;
    flex: 1;
}
.notif-bell-item + .notif-bell-item { border-top: 1px solid #f0f0f3; }
.notif-bell-item a {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 14px;
    color: #2c2c33;
    text-decoration: none;
    transition: background .12s;
}
.notif-bell-item a:hover { background: #f5f5f7; }
.notif-bell-item.is-unread {
    background: #f3f9ff;
}
.notif-bell-item.is-unread::before {
    content: '';
    position: absolute;
    left: 4px;
    width: 4px;
    height: 4px;
    border-radius: 50%;
    background: #5cb85c;
    margin-top: 14px;
}
.notif-bell-icon { flex: 0 0 auto; font-size: 16px; padding-top: 2px; }
.notif-bell-msg {
    flex: 1;
    min-width: 0;
    line-height: 1.4;
}
.notif-bell-msg small {
    display: block;
    font-size: 11px;
    color: #888;
    margin-top: 4px;
}
.mfa-recovery-form { margin-top: 8px; }
.mfa-recovery-submit { width: 100%; justify-content: center; }

/* Input du code OTP : monospace + chiffres bien espacés + centré.
   Cible les <input> dont l'autocomplete est 'one-time-code' (norme HTML5
   utilisée par Safari/Chrome/Firefox pour la saisie OTP automatique). */
.field input[autocomplete="one-time-code"] {
    font-family: var(--mono);
    font-size: 18px;
    text-align: center;
    letter-spacing: .35em;
    padding-left: .35em;                 /* compense le letter-spacing */
}


/* ═══════════════════════════════════════════════════════════
   FORM FIELDS
═══════════════════════════════════════════════════════════ */
.field { margin-bottom: 16px; }
.field label { display: block; font-size: 11px; font-weight: 500; letter-spacing: .6px; text-transform: uppercase; color: var(--text-dim); margin-bottom: 6px; font-family: var(--mono); }
.field label .opt { color: var(--border-hi); font-size: 10px; text-transform: none; letter-spacing: 0; margin-left: 4px; }
.field input, .field select, .field textarea { width: 100%; padding: 10px 12px; background: var(--input-bg); border: 1px solid var(--border); border-radius: var(--r); color: var(--text-hi); font-family: var(--sans); font-size: 14px; outline: none; transition: border-color .15s, box-shadow .15s; resize: vertical; }
.field input::placeholder, .field textarea::placeholder { color: var(--text-dim); opacity: .6; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-glow); }
.field input.err, .field select.err { border-color: var(--red); }
.field select { appearance: none; cursor: pointer; }
.field select option { background: var(--bg-2); color: var(--text-hi); }
.field textarea { min-height: 120px; line-height: 1.6; }
.field-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 16px; }
.field-2col .field { margin-bottom: 0; }
.field-pass { position: relative; }
.field-pass input { padding-right: 40px; }
.pass-eye { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); background: none; border: none; cursor: pointer; color: var(--text-dim); padding: 3px; line-height: 0; transition: color .15s; }
.pass-eye:hover { color: var(--text-hi); }
.strength { margin-top: 6px; }
.strength-bar { height: 2px; background: var(--border); border-radius: 1px; overflow: hidden; margin-bottom: 4px; }
.strength-fill { height: 100%; width: 0; border-radius: 1px; transition: width .25s, background .25s; }
.strength-lbl { font-family: var(--mono); font-size: 10px; }
.field-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
.cb-wrap { display: flex; align-items: center; gap: 7px; font-size: 12px; color: var(--text-dim); cursor: pointer; }
.cb-wrap input { accent-color: var(--accent); cursor: pointer; }
.field-link { font-size: 12px; color: var(--accent); text-decoration: none; }
.field-link:hover { text-decoration: underline; }


/* ═══════════════════════════════════════════════════════════
   BUTTONS
═══════════════════════════════════════════════════════════ */
.btn-submit { width: 100%; padding: 11px; background: linear-gradient(135deg, var(--accent) 0%, var(--accent-hi) 100%); border: none; border-radius: var(--r); color: var(--accent-fg); font-family: var(--sans); font-size: 14px; font-weight: 600; cursor: pointer; transition: all .2s ease; display: flex; align-items: center; justify-content: center; gap: 8px; margin-top: 4px; box-shadow: 0 2px 4px var(--accent-glow); }
.btn-submit:hover:not(:disabled) { transform: translateY(-1px); box-shadow: 0 4px 12px var(--accent-glow); }
.btn-submit:disabled { opacity: .5; cursor: not-allowed; }
.spinner { width: 15px; height: 15px; border: 2px solid rgba(0,0,0,.15); border-top-color: var(--accent-fg); border-radius: 50%; animation: spin .65s linear infinite; display: none; flex-shrink: 0; }
.btn-submit.loading .spinner { display: block; }
.btn-submit.loading .btn-label { display: none; }
@keyframes spin { to { transform: rotate(360deg); } }
.btn { display: inline-flex; align-items: center; gap: 7px; padding: 10px 20px; border-radius: var(--r); font-family: var(--sans); font-size: 14px; font-weight: 500; cursor: pointer; text-decoration: none; border: 1px solid transparent; transition: all .15s; }
.btn:hover { text-decoration: none; }
.btn-accent { background: var(--accent); color: var(--accent-fg); border-color: var(--accent); font-weight: 600; }
.btn-accent:hover { background: var(--accent-hi); box-shadow: 0 0 20px var(--accent-glow); }
.btn-ghost { background: transparent; color: var(--text-dim); border-color: var(--border); }
.btn-ghost:hover { color: var(--text-hi); border-color: var(--border-hi); background: var(--bg-2); }


/* ═══════════════════════════════════════════════════════════
   INDEX — LANDING PAGE
═══════════════════════════════════════════════════════════ */
.hero { border-bottom: 1px solid var(--border); padding: 80px 0 64px; }
.hero-inner { max-width: 1080px; margin: 0 auto; padding: 0 24px; display: grid; grid-template-columns: 1fr 380px; gap: 64px; align-items: start; }
.hero-badge { display: inline-flex; align-items: center; gap: 7px; padding: 4px 10px; background: var(--accent-glow); border: 1px solid var(--accent-dim); border-radius: var(--r); font-family: var(--mono); font-size: 11px; color: var(--accent); letter-spacing: .5px; text-transform: uppercase; margin-bottom: 22px; }
.badge-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--accent); animation: pulse 2s ease infinite; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .3; } }
.hero h1 { font-family: var(--sans); font-size: 36px; font-weight: 600; color: var(--text-hi); line-height: 1.2; margin-bottom: 18px; letter-spacing: -.5px; }
.hero h1 em { font-style: normal; color: var(--accent); }
.hero-sub { font-size: 16px; color: var(--text-dim); line-height: 1.7; max-width: 520px; margin-bottom: 36px; }
.hero-actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.hero-terminal { background: var(--bg-1); border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden; font-family: var(--mono); font-size: 12px; }
.term-bar { background: var(--bg-2); border-bottom: 1px solid var(--border); padding: 9px 14px; display: flex; align-items: center; gap: 8px; }
.term-dot { width: 10px; height: 10px; border-radius: 50%; }
.term-dot-r { background: #f87171; } .term-dot-y { background: #fbbf24; } .term-dot-g { background: #34d399; }
.term-title { font-size: 11px; color: var(--text-dim); margin: 0 auto; }
.term-body { padding: 18px 16px; display: flex; flex-direction: column; gap: 5px; line-height: 1.7; }
.tc { color: var(--text-dim); } .ta { color: var(--accent); } .tg { color: var(--green); } .tb { color: var(--blue); } .th { color: var(--text-hi); }
.term-cursor { display: inline-block; width: 7px; height: 13px; background: var(--accent); vertical-align: middle; animation: blink 1.1s step-end infinite; }
@keyframes blink { 0%,100% { opacity: 1; } 50% { opacity: 0; } }
.section { padding: 64px 0; border-bottom: 1px solid var(--border); }
.section-label { font-family: var(--mono); font-size: 11px; color: var(--accent); letter-spacing: 1px; text-transform: uppercase; margin-bottom: 10px; }
.section-title { font-size: 24px; font-weight: 600; color: var(--text-hi); letter-spacing: -.3px; margin-bottom: 8px; }
.section-sub { font-size: 15px; color: var(--text-dim); max-width: 560px; line-height: 1.65; }
.pipeline { margin-top: 48px; display: grid; grid-template-columns: repeat(4, 1fr); border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden; }
.pipe-step { padding: 28px 24px; border-right: 1px solid var(--border); position: relative; background: var(--bg-1); }
.pipe-step:last-child { border-right: none; }
.pipe-num { font-family: var(--mono); font-size: 11px; color: var(--accent); margin-bottom: 14px; letter-spacing: .5px; }
.pipe-icon { font-size: 22px; margin-bottom: 12px; display: block; }
.pipe-title { font-size: 13px; font-weight: 600; color: var(--text-hi); margin-bottom: 8px; }
.pipe-desc { font-size: 12px; color: var(--text-dim); line-height: 1.6; }
.pipe-arrow { position: absolute; right: -12px; top: 50%; transform: translateY(-50%); width: 22px; height: 22px; z-index: 2; background: var(--bg-2); border: 1px solid var(--border); border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 10px; color: var(--accent); }
.pipe-step:last-child .pipe-arrow { display: none; }
.pipe-timer { display: inline-flex; align-items: center; gap: 5px; margin-top: 12px; padding: 3px 8px; background: var(--accent-glow); border: 1px solid var(--accent-dim); border-radius: var(--r); font-family: var(--mono); font-size: 10px; color: var(--accent); }
.delivery-grid { margin-top: 40px; display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.delivery-card { background: var(--bg-1); border: 1px solid var(--border); border-radius: var(--r-lg); padding: 24px; transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease; }
.delivery-card:hover { border-color: var(--border-hi); transform: translateY(-2px); box-shadow: var(--sh); }
.delivery-card-head { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.delivery-icon { width: 36px; height: 36px; flex-shrink: 0; background: var(--bg-2); border: 1px solid var(--border); border-radius: var(--r); display: flex; align-items: center; justify-content: center; font-size: 17px; }
.delivery-card h3 { font-size: 14px; font-weight: 600; color: var(--text-hi); }
.delivery-card p  { font-size: 13px; color: var(--text-dim); line-height: 1.65; }
.code-block { margin-top: 14px; background: var(--code-bg); border: 1px solid var(--border); border-radius: var(--r); padding: 12px 14px; font-family: var(--mono); font-size: 11px; color: var(--text); overflow-x: auto; line-height: 1.7; }
.code-block .ck { color: var(--text-dim); } .code-block .cv { color: #60a5fa; } .code-block .cs { color: #34d399; } .code-block .cn { color: var(--accent); }
.how-grid { margin-top: 40px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--border); border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden; }
.how-step { background: var(--bg-1); padding: 28px 24px; }
.how-num { font-family: var(--mono); font-size: 28px; font-weight: 500; color: var(--border-hi); margin-bottom: 16px; line-height: 1; }
.how-step h3 { font-size: 14px; font-weight: 600; color: var(--text-hi); margin-bottom: 8px; }
.how-step p  { font-size: 13px; color: var(--text-dim); line-height: 1.65; }
.cta-band { padding: 56px 0; text-align: center; }
.cta-band h2 { font-size: 26px; font-weight: 600; color: var(--text-hi); margin-bottom: 12px; letter-spacing: -.3px; }
.cta-band p  { font-size: 15px; color: var(--text-dim); margin-bottom: 28px; }


/* ═══════════════════════════════════════════════════════════
   CONTACT PAGE
═══════════════════════════════════════════════════════════ */
.contact-page { max-width: 1080px; margin: 0 auto; padding: 56px 24px 80px; }
.page-head { margin-bottom: 48px; }
.page-label { font-family: var(--mono); font-size: 11px; color: var(--accent); letter-spacing: 1px; text-transform: uppercase; margin-bottom: 10px; }
.page-title { font-size: 28px; font-weight: 600; color: var(--text-hi); letter-spacing: -.4px; margin-bottom: 8px; }
.page-sub   { font-size: 15px; color: var(--text-dim); max-width: 500px; line-height: 1.65; }
.contact-grid { display: grid; grid-template-columns: 1fr 320px; gap: 48px; align-items: start; }
.contact-form-wrap { background: var(--bg-1); border: 1px solid var(--border); border-radius: var(--r-lg); overflow: hidden; }
.form-head { background: var(--bg-2); border-bottom: 1px solid var(--border); padding: 14px 20px; font-family: var(--mono); font-size: 11px; color: var(--text-dim); }
.form-head span { color: var(--text-hi); }
.form-body { padding: 24px 20px; }
.contact-aside { display: flex; flex-direction: column; gap: 16px; }
.aside-card { background: var(--bg-1); border: 1px solid var(--border); border-radius: var(--r-lg); padding: 20px; transition: border-color .2s ease, box-shadow .2s ease, transform .2s ease; }
.aside-card:hover { border-color: var(--border-hi); transform: translateY(-2px); box-shadow: var(--sh); }
.aside-card-head { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.aside-icon { width: 30px; height: 30px; flex-shrink: 0; background: var(--bg-2); border: 1px solid var(--border); border-radius: var(--r); display: flex; align-items: center; justify-content: center; font-size: 14px; }
.aside-card h3 { font-size: 13px; font-weight: 600; color: var(--text-hi); }
.aside-card p  { font-size: 12px; color: var(--text-dim); line-height: 1.6; }
.sla-row { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid var(--border); font-size: 12px; }
.sla-row:last-child { border-bottom: none; padding-bottom: 0; }
.sla-key { color: var(--text-dim); }
.sla-val { color: var(--text-hi); font-family: var(--mono); }
.sla-val.green  { color: var(--green); }
.sla-val.accent { color: var(--accent); }
.contact-form-wrap .success-state { padding: 40px 20px; }


/* ═══════════════════════════════════════════════════════════
   RESPONSIVE
═══════════════════════════════════════════════════════════ */
@media (max-width: 860px) {
    .hero-inner    { grid-template-columns: 1fr; }
    .hero-terminal { display: none; }
    .pipeline      { grid-template-columns: 1fr 1fr; }
    .pipe-step     { border-bottom: 1px solid var(--border); }
    .pipe-arrow    { display: none; }
    .delivery-grid { grid-template-columns: 1fr; }
    .how-grid      { grid-template-columns: 1fr; }
    .contact-grid  { grid-template-columns: 1fr; }
    .contact-aside { order: -1; display: grid; grid-template-columns: 1fr 1fr; }
}
@media (max-width: 600px) {
    .topbar-nav    { display: none; }
    .field-2col    { grid-template-columns: 1fr; }
    .contact-aside { grid-template-columns: 1fr; }
    .pipeline      { grid-template-columns: 1fr; }
}