/* =============================================================
   Noxity Imapsync — UI styles
   Built on Noxity Design System v2 (Metronome-inspired):
   ink on paper, italic serif accents, mono eyebrows, deep radii.
   ============================================================= */

@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Instrument+Serif:ital@0;1&family=JetBrains+Mono:wght@400;500;600&display=swap');

:root {
    /* Brand */
    --nox-ink:        #23375A;
    --nox-ink-2:      #586581;
    --nox-ink-mute:   #7A746A;
    --nox-ink-faint:  #B8B2A6;

    --nox-paper:      #F4F0E7;
    --nox-paper-2:    #EFEBE3;
    --nox-paper-3:    #E5DFD3;

    --nox-crimson:        #B83553;
    --nox-crimson-hover:  #9C2A45;
    --nox-crimson-press:  #7E2138;

    --nox-evergreen:      #4E7954;
    --nox-evergreen-soft: #E4ECDF;

    /* Pastel surfaces (for yes/no choice tiles) */
    --nox-mint:       #C8DDD0;
    --nox-pink-soft:  #F4D8DD;

    --nox-success:    #4E7954;
    --nox-danger:     #B83553;

    /* Hairlines */
    --nox-line:        rgba(35,55,90,0.10);
    --nox-line-strong: rgba(35,55,90,0.18);
    --nox-line-soft:   rgba(35,55,90,0.06);

    /* Type */
    --nox-sans:  'Manrope', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
    --nox-serif: 'Instrument Serif', Georgia, 'Times New Roman', serif;
    --nox-mono:  'JetBrains Mono', ui-monospace, Menlo, monospace;

    /* Radii */
    --nox-radius-sm:   8px;
    --nox-radius-md:   14px;
    --nox-radius-lg:   20px;
    --nox-radius-xl:   28px;
    --nox-radius-pill: 999px;

    /* Shadows */
    --nox-shadow-soft: 0 1px 2px rgba(35,55,90,0.04), 0 8px 24px rgba(35,55,90,0.06);
    --nox-shadow-card: 0 1px 0 rgba(35,55,90,0.04), 0 12px 32px rgba(35,55,90,0.08);

    /* Motion */
    --nox-ease: cubic-bezier(0.22, 0.61, 0.36, 1);
}

/* =============================================================
   Dark theme (Task 3) — same tokens, inverted ink/paper.
   Toggled by data-theme="dark" on <html>; the value is applied
   before first paint by a tiny inline script in the page <head>
   so there is no light/dark flash on reload.
   ============================================================= */

[data-theme="dark"] {
    --nox-ink:        #ECE7DD;
    --nox-ink-2:      #B4BBCA;
    --nox-ink-mute:   #8C93A2;
    --nox-ink-faint:  #6C7382;

    --nox-paper:      #1B2334;
    --nox-paper-2:    #141A27;
    --nox-paper-3:    #2A3447;

    /* Dark enough that white button labels stay legible on hover (AA);
       link/accent text is lifted separately below for small-text contrast. */
    --nox-crimson:        #C13A59;
    --nox-crimson-hover:  #D14A68;
    --nox-crimson-press:  #A82F4C;

    --nox-evergreen:      #8FB995;
    --nox-evergreen-soft: #233227;

    --nox-mint:       #233227;
    --nox-pink-soft:  #3A2530;

    --nox-success:    #8FB995;
    --nox-danger:     #E0697F;

    --nox-line:        rgba(236,231,221,0.12);
    --nox-line-strong: rgba(236,231,221,0.22);
    --nox-line-soft:   rgba(236,231,221,0.07);

    --nox-shadow-soft: 0 1px 2px rgba(0,0,0,0.30), 0 8px 24px rgba(0,0,0,0.40);
    --nox-shadow-card: 0 1px 0 rgba(0,0,0,0.25), 0 12px 32px rgba(0,0,0,0.45);
}

/* Lift small crimson *text* on dark backgrounds to meet AA contrast.
   (Buttons keep the darker crimson above so white labels stay legible.) */
[data-theme="dark"] a,
[data-theme="dark"] .modal-link,
[data-theme="dark"] #bt-abort {
    color: #EE8AA0;
}
[data-theme="dark"] #bt-abort { border-color: #EE8AA0 !important; }
[data-theme="dark"] .modal-steps li::marker { color: #EE8AA0; }

/* =============================================================
   Reset / base
   ============================================================= */

*,
*::before,
*::after { box-sizing: border-box; }

html, body { margin: 0; padding: 0; }

/* Flash-on-reload fix (Task 1: CSS visibility).
   Chosen because the flashing element is not an <img> but the modal overlay
   and the inactive step cards: Tailwind is loaded from a CDN <script> that
   injects its `.hidden` utility only after it executes, while this stylesheet
   is applied first via <link>. For a moment on every reload the modal and all
   stacked cards paint before Tailwind hides them. Declaring `.hidden` here
   hides them on the very first paint. No !important, so the inline display the
   wizard sets when advancing/showing the modal still wins over it. */
.hidden { display: none; }

body {
    background: var(--nox-paper-2);
    color: var(--nox-ink);
    font-family: var(--nox-sans);
    font-weight: 400;
    font-size: 16px;
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    /* Fit-one-screen: column layout that fills the viewport so the wizard
       doesn't scroll on a normal screen, while still growing (and scrolling)
       for the tall log view or short windows instead of clipping content. */
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

a { color: var(--nox-crimson); text-decoration: none; }
a:hover { color: var(--nox-crimson-hover); text-decoration: underline; }

hr {
    border: 0;
    border-top: 1px solid var(--nox-line);
    margin: 0;
}

/* =============================================================
   Header — editorial display
   ============================================================= */

body > header {
    text-align: center;
    padding: 40px 24px 16px;   /* compact-ish hero; #main centering balances the rest */
    max-width: 960px;
    margin: 0 auto;
}

body > header .nox-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--nox-mono);
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--nox-ink-2);
    margin-bottom: 16px;
}
body > header .nox-eyebrow::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--nox-crimson);
}

body > header h1 {
    font-family: var(--nox-sans);
    font-weight: 700;
    font-size: clamp(34px, 4.8vw, 60px);
    line-height: 1.02;
    letter-spacing: -0.04em;
    color: var(--nox-ink);
    margin: 0 0 14px;
    padding: 0;
}

body > header h1 em {
    font-family: var(--nox-serif);
    font-style: italic;
    font-weight: 400;
    letter-spacing: -0.01em;
    color: var(--nox-crimson);
}

body > header p {
    font-size: 16px;
    line-height: 1.5;
    color: var(--nox-ink-2);
    margin: 0;
    padding: 0;
    max-width: 620px;
    margin-left: auto;
    margin-right: auto;
}

body > header p strong { color: var(--nox-ink); font-weight: 600; }

/* =============================================================
   Main + step cards
   ============================================================= */

#main {
    width: 100%;
    flex: 1 1 auto;
    /* Fill the leftover viewport height so the footer sits at the bottom. */
    justify-content: flex-start !important;
    padding: 12px 24px 24px;
}

/* Vertically center the active view in the leftover space (so there's balanced
   room above/below the card instead of a dead gap at the bottom). Auto margins
   collapse to 0 when the content is taller than the space, so the tall log view
   and short windows scroll from the top instead of being clipped. */
#form,
#consoleLogs,
#congratsPage { margin-block: auto; }

.box {
    background: var(--nox-paper);
    color: var(--nox-ink);
    border: 1px solid var(--nox-line) !important;
    border-radius: var(--nox-radius-xl);
    box-shadow: var(--nox-shadow-card);
    overflow: hidden;
    width: 800px !important;
    max-width: 100%;
    height: auto !important;
    padding: 0 !important;
    margin: 0 auto !important;
}

.box .first {
    padding: 22px 32px;
    border-bottom: 1px solid var(--nox-line);
    background: transparent;
}

.box .first > div {
    font-family: var(--nox-mono);
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--nox-ink-2);
    padding: 0 !important;
    height: auto !important;
    display: inline-flex;
    align-items: center;
    gap: 10px;
}
.box .first > div::before {
    content: "";
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--nox-crimson);
}

.box hr { display: none; }

.box .second {
    /* Task 2: reduce blank space — trim the step's top padding and the
       inter-element gap so sparse single-field steps don't read as half-empty.
       Chosen option: modify CSS spacing (the card height is already auto, so
       this is the real lever). Multi-element steps still have ample room. */
    padding: 34px 48px 34px !important;
    margin: 0 !important;
    height: auto !important;
    align-items: center;
    gap: 16px !important;
}

.box .second i.fa-2x {
    color: var(--nox-crimson);
    font-size: 32px;
    margin-bottom: 4px;
}

.box .second p.text-3xl {
    font-family: var(--nox-sans);
    font-weight: 700;
    font-size: clamp(28px, 3vw, 38px);
    line-height: 1.1;
    letter-spacing: -0.025em;
    color: var(--nox-ink);
    max-width: 580px;
    margin: 0;
}

.box .second p.text-3xl u {
    text-decoration: none;
    font-family: var(--nox-serif);
    font-style: italic;
    font-weight: 400;
    color: var(--nox-crimson);
    letter-spacing: -0.005em;
}

.box .second p.text-3xl.underline,
.box .second p.text-2xl,
.box .second p {
    color: var(--nox-ink);
}

/* =============================================================
   Inputs
   ============================================================= */

.box input[type="text"],
.box input[type="password"],
.box input:not([type="checkbox"]):not([type="radio"]) {
    background: var(--nox-paper-2) !important;
    color: var(--nox-ink) !important;
    border: 1px solid var(--nox-line-strong) !important;
    border-radius: var(--nox-radius-md) !important;
    padding: 14px 16px !important;
    font-family: var(--nox-sans);
    font-size: 15px;
    font-weight: 500;
    line-height: 1.4;
    transition: border-color 180ms var(--nox-ease), box-shadow 180ms var(--nox-ease), background 180ms var(--nox-ease);
    outline: none;
    width: 100%;
}

.box input::placeholder {
    color: var(--nox-ink-mute);
    font-weight: 400;
    opacity: 1;
}

.box input:hover:not([type="checkbox"]) {
    border-color: var(--nox-ink-2) !important;
}

.box input:focus:not([type="checkbox"]) {
    border-color: var(--nox-ink) !important;
    background: var(--nox-paper) !important;
    box-shadow: 0 0 0 4px rgba(35,55,90,0.08);
}

.box label {
    font-family: var(--nox-sans);
    font-size: 13px;
    font-weight: 500;
    color: var(--nox-ink-mute) !important;
    line-height: 1.5;
}

.box label i {
    font-style: italic;
    font-family: var(--nox-serif);
    color: var(--nox-ink-2);
    font-weight: 400;
}

/* =============================================================
   Buttons — primary CTA: ink, crimson hover
   ============================================================= */

.box button,
#consoleLogs button,
#bt-sync,
#bt-abort,
#toggleConsole,
#next1, #next2, #next3, #next4 {
    appearance: none;
    -webkit-appearance: none;
    background: var(--nox-ink) !important;
    color: var(--nox-paper) !important;
    border: 1px solid var(--nox-ink) !important;
    border-radius: var(--nox-radius-pill) !important;
    padding: 14px 28px !important;
    font-family: var(--nox-sans) !important;
    font-size: 14px !important;
    font-weight: 600 !important;
    line-height: 1 !important;
    letter-spacing: 0.01em;
    cursor: pointer;
    transition: background 180ms var(--nox-ease), border-color 180ms var(--nox-ease), color 180ms var(--nox-ease), transform 180ms var(--nox-ease), box-shadow 180ms var(--nox-ease);
    width: auto !important;
    height: auto !important;
    box-shadow: 0 1px 0 rgba(35,55,90,0.06);
    min-width: 120px;
    text-align: center;
}

.box button:hover,
#consoleLogs button:hover,
#bt-sync:hover,
#bt-abort:hover,
#toggleConsole:hover,
#next1:hover, #next2:hover, #next3:hover, #next4:hover {
    background: var(--nox-crimson) !important;
    border-color: var(--nox-crimson) !important;
    color: #FFFFFF !important;
    box-shadow: 0 1px 0 rgba(35,55,90,0.06), 0 8px 20px rgba(184,53,83,0.25);
}

.box button:active,
#bt-sync:active,
#bt-abort:active {
    transform: translateY(1px);
}

#bt-sync {
    padding: 18px 36px !important;
    font-size: 15px !important;
}

#bt-abort {
    background: transparent !important;
    color: var(--nox-crimson) !important;
    border-color: var(--nox-crimson) !important;
}
#bt-abort:hover {
    background: var(--nox-crimson) !important;
    color: #FFFFFF !important;
}

#toggleConsole {
    background: transparent !important;
    color: var(--nox-ink) !important;
    border-color: var(--nox-line-strong) !important;
}
#toggleConsole:hover {
    background: var(--nox-paper-3) !important;
    border-color: var(--nox-ink) !important;
    color: var(--nox-ink) !important;
}

#modal-btn-ok {
    background: var(--nox-ink) !important;
    color: var(--nox-paper) !important;
    border: 1px solid var(--nox-ink) !important;
    border-radius: var(--nox-radius-pill) !important;
    padding: 12px 28px !important;
    font-family: var(--nox-sans);
    font-size: 14px;
    font-weight: 600;
    cursor: pointer;
    margin-top: 16px;
    transition: background 180ms var(--nox-ease);
}
#modal-btn-ok:hover {
    background: var(--nox-crimson) !important;
    border-color: var(--nox-crimson) !important;
    color: #FFFFFF !important;
}

/* =============================================================
   Yes / No choice tiles
   ============================================================= */

#yesMail, #noMail, #yesPass, #noPass {
    background: var(--nox-paper-2) !important;
    border: 1px solid var(--nox-line) !important;
    border-radius: var(--nox-radius-lg) !important;
    padding: 26px 24px !important;
    transition: background 200ms var(--nox-ease), border-color 200ms var(--nox-ease), transform 200ms var(--nox-ease), box-shadow 200ms var(--nox-ease);
    cursor: pointer;
}

#yesMail, #yesPass {
    background: var(--nox-evergreen-soft) !important;
}
#noMail, #noPass {
    background: var(--nox-pink-soft) !important;
}

#yesMail:hover, #yesPass:hover,
#noMail:hover, #noPass:hover {
    border-color: var(--nox-ink) !important;
    transform: translateY(-2px);
    box-shadow: var(--nox-shadow-card);
}

#yesMail .icon-check, #yesPass .icon-check { color: var(--nox-evergreen); }
#noMail .icon-xmark, #noPass .icon-xmark { color: var(--nox-crimson); }

.icon-check { color: var(--nox-evergreen); }
.icon-xmark { color: var(--nox-crimson); }

#yesMail p.text-3xl, #yesPass p.text-3xl,
#noMail p.text-3xl, #noPass p.text-3xl {
    font-family: var(--nox-sans);
    font-weight: 700;
    font-size: 24px;
    text-decoration: none !important;
    color: var(--nox-ink) !important;
    letter-spacing: -0.02em;
    margin: 0;
}

#yesMail p.text-2xl, #yesPass p.text-2xl,
#noMail p.text-2xl, #noPass p.text-2xl {
    font-family: var(--nox-sans);
    font-size: 14px;
    font-weight: 500;
    color: var(--nox-ink-2) !important;
    line-height: 1.5;
    margin: 0;
    text-align: center;
}

/* =============================================================
   Confirm page — OLD/NEW pills
   ============================================================= */

.old-new {
    color: var(--nox-paper) !important;
    background: var(--nox-ink) !important;
    border-radius: var(--nox-radius-pill) !important;
    font-family: var(--nox-mono) !important;
    font-size: 11px !important;
    font-weight: 600 !important;
    letter-spacing: 0.14em !important;
    text-transform: uppercase;
    height: 28px !important;
    width: auto !important;
    padding: 0 14px !important;
    line-height: 1 !important;
}

#migrationText {
    font-family: var(--nox-serif);
    font-style: italic;
    font-size: 18px;
    color: var(--nox-ink-2) !important;
    margin-top: 12px !important;
}

#oldM, #newM {
    font-family: var(--nox-mono);
    font-size: 13px;
    font-weight: 500;
    color: var(--nox-ink);
    letter-spacing: 0.02em;
}

/* =============================================================
   Console / log boxes
   ============================================================= */

/* Progress summary above the bar */
.progress-head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 8px 20px;
    flex-wrap: wrap;
    width: 100%;
}
.progress-head-main {
    display: flex;
    align-items: baseline;
    gap: 12px;
    flex-wrap: wrap;
}
.progress-percent {
    font-family: var(--nox-sans);
    font-weight: 700;
    font-size: 34px;
    line-height: 1;
    letter-spacing: -0.02em;
    color: var(--nox-ink);
}
.progress-eta {
    font-family: var(--nox-serif);
    font-style: italic;
    font-size: 17px;
    color: var(--nox-ink-2);
}
.progress-msgs {
    font-family: var(--nox-mono);
    font-size: 13px;
    color: var(--nox-ink-2);
    white-space: nowrap;
}

/* Indeterminate bar until imapsync emits the first ETA line */
#progress-bar-done.indeterminate {
    width: 30% !important;
    animation: nox-indet 1.15s var(--nox-ease) infinite;
}
@keyframes nox-indet {
    0%   { margin-left: -32%; }
    100% { margin-left: 102%; }
}

/* Collapsible, folder-style tabbed consoles. The ID-scoped selectors are
   needed to beat the higher-specificity `#consoleLogs button` primary rule;
   active tab shares the dark panel colour so it reads as one connected folder. */
.console-area { width: 100%; }

#consoleLogs .tabs {
    display: flex;
    gap: 4px;
    flex-wrap: wrap;
    margin: 0;
    padding: 0 0 0 6px;
}
#consoleLogs .tabs .tab {
    appearance: none;
    -webkit-appearance: none;
    background: #232C3B !important;
    color: #9BA3B2 !important;
    border: 1px solid rgba(247, 245, 240, 0.10) !important;
    border-bottom: none !important;
    border-radius: 9px 9px 0 0 !important;
    padding: 9px 16px !important;
    margin: 0 !important;
    font-family: var(--nox-sans) !important;
    font-size: 13px !important;
    font-weight: 600 !important;
    line-height: 1 !important;
    min-width: 0 !important;
    box-shadow: none !important;
    cursor: pointer;
    position: relative;
    z-index: 0;
    transition: background 160ms var(--nox-ease), color 160ms var(--nox-ease);
}
#consoleLogs .tabs .tab:hover {
    background: #2B3547 !important;
    color: #E8E3DA !important;
    transform: none !important;
    box-shadow: none !important;
}
#consoleLogs .tabs .tab.tab-active {
    background: #131A28 !important;   /* matches the panel below = connected */
    color: #F0EBE2 !important;
    z-index: 2;
}

.tab-panel {
    background: #131A28 !important;
    color: #F0EBE2 !important;
    border: 1px solid rgba(247, 245, 240, 0.10) !important;
    border-radius: 0 var(--nox-radius-lg) var(--nox-radius-lg) var(--nox-radius-lg) !important;
    width: 100% !important;
    height: 280px !important;
    overflow: auto;
    margin-top: -1px;          /* tuck under the tab row so the active tab joins it */
    padding: 16px 18px !important;
    font-family: var(--nox-mono);
    font-size: 12px;
    line-height: 1.7;
    position: relative;
    z-index: 1;
}

#abort, #console, #output {
    color: #F0EBE2;
    white-space: pre-wrap;
    word-break: break-word;
}

/* Completion panel (shown when the sync finishes) */
.sync-done {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 10px;
    padding: 8px 8px 4px;
}
.sync-done-icon { color: var(--nox-evergreen); font-size: 40px; }
.sync-done-icon.stopped { color: var(--nox-crimson); }
.sync-done-title {
    font-family: var(--nox-sans);
    font-weight: 700;
    font-size: 24px;
    letter-spacing: -0.02em;
    color: var(--nox-ink);
    margin: 0;
}
.sync-done-sub {
    font-family: var(--nox-sans);
    font-size: 15px;
    color: var(--nox-ink-2);
    margin: 0;
    max-width: 520px;
}
.sync-done .btn-row { margin-top: 6px; }
.sync-done-hint {
    font-family: var(--nox-sans);
    font-size: 13px;
    color: var(--nox-ink-mute);
    margin: 4px 0 0;
    max-width: 520px;
    line-height: 1.5;
}
.sync-done-hint em {
    font-family: var(--nox-serif);
    font-style: italic;
    color: var(--nox-ink-2);
}

#consoleLogs {
    background: var(--nox-paper) !important;
    border: 1px solid var(--nox-line) !important;
    border-radius: var(--nox-radius-xl) !important;
    box-shadow: var(--nox-shadow-card);
    width: 800px !important;
    max-width: 100%;
    margin: auto !important;     /* center vertically in the leftover space too */
    padding: 32px !important;
    gap: 20px !important;
}

#consoleLogs > .w-full {
    background: var(--nox-paper-3) !important;
    border-radius: var(--nox-radius-pill) !important;
    height: 8px !important;
    overflow: hidden;
}

#progress-bar-done {
    background: var(--nox-crimson) !important;
    height: 8px !important;
    border-radius: var(--nox-radius-pill) !important;
    transition: width 320ms var(--nox-ease);
}

/* =============================================================
   Modal
   ============================================================= */

.modal {
    position: fixed;
    inset: 0;
    z-index: 1000;
    align-items: center;
    justify-content: center;
    padding: 24px;
    background: rgba(35,55,90,0.55) !important;
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    overflow-y: auto;
}

.modal-content {
    background: var(--nox-paper) !important;
    color: var(--nox-ink) !important;
    border: 1px solid var(--nox-line) !important;
    border-radius: var(--nox-radius-xl) !important;
    padding: 36px 36px 32px !important;
    max-width: 540px !important;
    width: 92%;
    box-shadow: 0 20px 60px rgba(35,55,90,0.30);
    text-align: left;
}

.modal-content h2 {
    font-family: var(--nox-sans);
    font-size: 22px;
    font-weight: 700;
    color: var(--nox-ink);
    letter-spacing: -0.02em;
    margin: 0 0 10px !important;
    line-height: 1.2;
}

.modal-content p {
    font-family: var(--nox-sans);
    font-size: 15px;
    line-height: 1.55;
    color: var(--nox-ink-2);
    margin: 0 0 18px !important;
}

.modal-steps {
    list-style: decimal;
    margin: 0 0 22px !important;
    padding: 0 0 0 22px !important;
    color: var(--nox-ink-2);
    font-size: 14px;
    line-height: 1.55;
    counter-reset: nox-step;
}
.modal-steps li {
    margin: 0 0 8px;
    padding-left: 4px;
}
.modal-steps li::marker {
    color: var(--nox-crimson);
    font-family: var(--nox-mono);
    font-weight: 600;
    font-size: 12px;
}

.modal-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 18px;
    margin: 0 0 24px;
}

.modal-content a,
.modal-link {
    color: var(--nox-crimson);
    font-family: var(--nox-sans);
    font-size: 13px;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-thickness: 1px;
}
.modal-content a:hover,
.modal-link:hover { color: var(--nox-crimson-hover); }

.modal-link-muted {
    color: var(--nox-ink-2) !important;
    font-weight: 500 !important;
    text-decoration-color: var(--nox-line-strong) !important;
}
.modal-link-muted:hover { color: var(--nox-ink) !important; }

.modal-content #modal-btn-ok {
    margin-top: 4px !important;
    width: 100%;
}

/* =============================================================
   Congrats page
   ============================================================= */

#congratsPage {
    background: var(--nox-paper);
    border: 1px solid var(--nox-line);
    border-radius: var(--nox-radius-xl);
    box-shadow: var(--nox-shadow-card);
    width: 800px !important;
    max-width: 100%;
    margin: 24px auto !important;
    padding: 80px 48px !important;
    gap: 24px !important;
}

#congratsPage i.fa-trophy {
    color: var(--nox-evergreen) !important;
    font-size: 56px;
}

#congratsPage h1 {
    font-family: var(--nox-sans);
    font-weight: 700;
    font-size: 56px;
    line-height: 1;
    letter-spacing: -0.04em;
    color: var(--nox-ink) !important;
    margin: 0;
}

#congratsPage p {
    font-family: var(--nox-sans);
    font-size: 18px;
    line-height: 1.55;
    color: var(--nox-ink-2) !important;
    max-width: 480px;
    margin: 0;
}

/* =============================================================
   Checkbox
   ============================================================= */

input[type="checkbox"] {
    appearance: none;
    -webkit-appearance: none;
    width: 18px;
    height: 18px;
    border: 1.5px solid var(--nox-line-strong);
    border-radius: 5px;
    background: var(--nox-paper);
    cursor: pointer;
    vertical-align: middle;
    margin-right: 8px;
    transition: background 180ms var(--nox-ease), border-color 180ms var(--nox-ease);
    position: relative;
}

input[type="checkbox"]:hover { border-color: var(--nox-ink); }

input[type="checkbox"]:checked {
    background: var(--nox-ink);
    border-color: var(--nox-ink);
}

input[type="checkbox"]:checked::after {
    content: "";
    position: absolute;
    left: 5px;
    top: 1px;
    width: 5px;
    height: 10px;
    border: solid var(--nox-paper);
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}

label[for="verbose"], label[for="dry"] {
    font-family: var(--nox-sans);
    font-size: 14px;
    font-weight: 500;
    color: var(--nox-ink-2) !important;
    cursor: pointer;
    user-select: none;
}

/* =============================================================
   Top navigation bar — back + theme toggle (Task 3)
   ============================================================= */

.nav-bar {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 500;                 /* under the modal (1000), over the page */
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 20px;
    pointer-events: none;         /* let clicks fall through the empty bar... */
}
.nav-bar .nav-btn { pointer-events: auto; }   /* ...but not the buttons */

.nav-btn {
    appearance: none;
    -webkit-appearance: none;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--nox-paper);
    color: var(--nox-ink);
    border: 1px solid var(--nox-line-strong);
    border-radius: var(--nox-radius-pill);
    padding: 10px 16px;
    font-family: var(--nox-sans);
    font-size: 13px;
    font-weight: 600;
    line-height: 1;
    cursor: pointer;
    box-shadow: var(--nox-shadow-soft);
    transition: background 180ms var(--nox-ease), color 180ms var(--nox-ease),
                border-color 180ms var(--nox-ease), transform 180ms var(--nox-ease);
}
.nav-btn:hover {
    border-color: var(--nox-ink);
    transform: translateY(-1px);
}
.nav-btn:focus-visible {
    outline: 2px solid var(--nox-crimson);
    outline-offset: 2px;
}
/* Keep the theme toggle pinned right even when Back is hidden (step 1),
   where it would otherwise be the only flex child and slide left. */
#bt-theme { padding: 10px 13px; margin-left: auto; }   /* icon-only, keep it square-ish */

/* =============================================================
   Site footer — license / credit link (Task: credit Lamiral)
   ============================================================= */

.site-footer {
    text-align: center;
    padding: 12px 24px 16px;
    color: var(--nox-ink-mute);
    font-family: var(--nox-sans);
    font-size: 13px;
    line-height: 1.6;
}
.site-footer a {
    color: var(--nox-ink-2);
    text-decoration: underline;
    text-underline-offset: 3px;
    text-decoration-thickness: 1px;
    font-weight: 600;
}
.site-footer a:hover { color: var(--nox-crimson); }

/* =============================================================
   Form validation feedback (Task 4)
   ============================================================= */

.field-error {
    color: var(--nox-danger) !important;
    font-family: var(--nox-sans);
    font-size: 13px;
    font-weight: 500;
    line-height: 1.4;
    margin: 2px 0 0;
    text-align: left;
}

.box input.invalid:not([type="checkbox"]):not([type="radio"]) {
    border-color: var(--nox-danger) !important;
    box-shadow: 0 0 0 4px rgba(184, 53, 83, 0.14) !important;
}

#confirm-error { text-align: center; }

/* Auto-fill cue: when provider detection pre-fills a host, mark it green and
   show a "we filled this, double-check it" hint (Task: green bubble). */
.field-hint {
    color: var(--nox-evergreen) !important;
    font-family: var(--nox-sans);
    font-size: 13px;
    font-weight: 500;
    line-height: 1.4;
    margin: 2px 0 0;
    text-align: left;
    display: flex;
    align-items: flex-start;
    gap: 6px;
}
.field-hint i { margin-top: 2px; }

.box input.prefilled:not([type="checkbox"]):not([type="radio"]) {
    border-color: var(--nox-evergreen) !important;
    box-shadow: 0 0 0 4px rgba(78, 121, 84, 0.16) !important;
}

/* Show/hide password — eye button inside the field. */
.pw-wrap { position: relative; display: block; width: 100%; }
.box .pw-wrap input { padding-right: 46px !important; }
.box .pw-toggle {
    position: absolute;
    top: 50%;
    right: 8px;
    transform: translateY(-50%);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    min-width: 0 !important;
    padding: 0 !important;
    background: transparent !important;
    border: 0 !important;
    border-radius: var(--nox-radius-sm) !important;
    color: var(--nox-ink-mute) !important;
    box-shadow: none !important;
    cursor: pointer;
    transition: color 160ms var(--nox-ease);
}
.box .pw-toggle:hover {
    background: transparent !important;
    color: var(--nox-ink) !important;
    transform: translateY(-50%) !important;
    box-shadow: none !important;
}
.box .pw-toggle:focus-visible {
    outline: 2px solid var(--nox-crimson);
    outline-offset: 2px;
}

/* =============================================================
   In-step Back button (sits next to the Next/primary action)
   ============================================================= */

.btn-row {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    flex-wrap: wrap;
}

/* Ghost/secondary styling; the #consoleLogs selector is needed to beat the
   higher-specificity `#consoleLogs button` primary rule for Start over. */
.box .btn-back,
#consoleLogs .btn-back {
    appearance: none;
    -webkit-appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;   /* center the arrow + label within the button */
    gap: 8px;
    background: transparent !important;
    color: var(--nox-ink) !important;
    border: 1px solid var(--nox-line-strong) !important;
    border-radius: var(--nox-radius-pill) !important;
    padding: 14px 24px !important;
    font-family: var(--nox-sans) !important;
    font-size: 14px !important;
    font-weight: 600 !important;
    line-height: 1 !important;
    cursor: pointer;
    box-shadow: none !important;
    transition: background 180ms var(--nox-ease), border-color 180ms var(--nox-ease), color 180ms var(--nox-ease);
}
.box .btn-back:hover,
#consoleLogs .btn-back:hover {
    background: var(--nox-paper-3) !important;
    border-color: var(--nox-ink) !important;
    color: var(--nox-ink) !important;
    transform: none !important;
}

/* =============================================================
   Credits page (built on the same design system)
   ============================================================= */

.credit-card .second { text-align: center; }
.credit-card .second p { max-width: 560px; }
.credit-links {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 10px 22px;
    margin-top: 4px;
}

/* =============================================================
   Responsive
   ============================================================= */

@media (max-width: 880px) {
    body > header { padding: 72px 20px 40px; }   /* extra top room for the fixed nav bar */
    .nav-bar { padding: 12px 14px; }
    .nav-btn { padding: 9px 14px; font-size: 12px; }
    .box {
        width: 100% !important;
    }
    .box .second { padding: 40px 24px 32px !important; }
    .tab-panel { height: 240px !important; }
    #consoleLogs, #congratsPage { padding: 24px 18px !important; }
    .progress-percent { font-size: 28px; }
    #congratsPage h1 { font-size: 40px; }
}

/* Short viewports: auto-compact the hero and cards so the content-heavy steps
   still fit one screen without scrolling. Tall screens keep the larger hero. */
@media (max-height: 820px) {
    body > header { padding: 14px 24px 6px; max-width: 780px; }
    body > header .nox-eyebrow { margin-bottom: 6px; }
    body > header h1 { font-size: clamp(24px, 3.2vw, 34px); line-height: 1; margin: 0 0 4px; }
    body > header p { font-size: 13px; line-height: 1.4; }
    #main { padding: 8px 24px 12px; }
    .box .second { padding: 18px 40px 18px !important; gap: 10px !important; }
    .box .second p.text-3xl { font-size: clamp(20px, 2.4vw, 26px); }
    .box .second i.fa-2x { font-size: 26px; margin-bottom: 0; }
    #yesMail, #noMail, #yesPass, #noPass { padding: 16px 18px !important; }
    .box .btn-back, .box button { padding-top: 11px !important; padding-bottom: 11px !important; }
}
