/* ═══════════════════════════════════════════════════════════════════
   Quick Connect — design layer, pilot
   A preview only: nothing on the server is touched. It is injected into a
   saved copy of the page so the same page can be seen both ways.

   The method is one layer, not a rewrite. The site already defines 33 design
   tokens and uses them 1,109 times, so redefining the tokens re-skins most of
   the page at once; the rules after them are the places the tokens cannot
   reach - a typeface, a button shape, a shadow written by hand.

   The palette is Apple's own public one: #1d1d1f for text, #f5f5f7 for the
   quiet grey, #0071e3 for the one accent. The typeface is the system stack,
   which IS San Francisco on Apple devices and Segoe UI on Windows - the
   honest way to have it, since SF Pro cannot be served from a website.
   ═══════════════════════════════════════════════════════════════════ */

:root,
[data-theme="light"] {
    /* ── the one accent ─────────────────────────────────────────── */
    --c:  #0071e3;
    --c2: #0077ed;
    --c3: #0058b0;
    --accent: #0071e3;
    --cisco-blue: #0071e3;

    /* ── paper and ink ──────────────────────────────────────────── */
    --bg:   #ffffff;
    --bg1:  #fbfbfd;
    --bg2:  #f5f5f7;
    --bg3:  #f5f5f7;
    --bg4:  #e8e8ed;
    --bg5:  #d2d2d7;
    --card: #ffffff;
    --card2: #f5f5f7;
    --cisco-dark: #ffffff;

    --tw: #1d1d1f;      /* headings */
    --t:  #1d1d1f;      /* body */
    --tm: #6e6e73;      /* secondary */
    --text: #1d1d1f;
    --muted: #6e6e73;
    --muted2: #1d1d1f;
    --white: #1d1d1f;   /* an alias the old theme used for "strongest text" */

    /* ── used sparingly, never as decoration ────────────────────── */
    --o:  #bf4800;
    --o2: #c2410c;
    --g:  #1d9e55;
    --red: #d70015;

    /* ── hairlines, not glows ───────────────────────────────────── */
    --bdr:  rgba(0,0,0,.09);
    --bdr2: rgba(0,0,0,.13);
    --bdr3: rgba(0,113,227,.35);
    --border: rgba(0,0,0,.09);
    --border2: rgba(0,0,0,.13);

    /* ── Apple's radii: soft, never pill-less, never sharp ──────── */
    --r:  12px;
    --r2: 18px;
    --r3: 24px;
    --radius: 12px;
    --radius-lg: 18px;
    --radius-xl: 24px;

    /* ── shadows you have to look for ───────────────────────────── */
    --shadow:    0 1px 3px rgba(0,0,0,.06);
    --shadow-lg: 0 8px 30px rgba(0,0,0,.08);

    /* Inter (already loaded by the layout) comes before Segoe UI: on Windows it
       is the nearest thing to SF Pro; on a Mac the system font still wins. */
    --font-sans: -apple-system, BlinkMacSystemFont, "SF Pro Text", "SF Pro Display",
                 Inter, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

/* ── the typeface ───────────────────────────────────────────────────
   Orbitron and Exo 2 are what make the site read as a games console. The
   system stack is what makes it read as Apple. Icon fonts are put back
   straight afterwards, or every icon becomes a letter. */
body, button, input, select, textarea, optgroup,
h1, h2, h3, h4, h5, h6, p, a, span, div, li, td, th, label, strong, em, small, blockquote {
    font-family: var(--font-sans) !important;
}
.fa, .fas, .far, .fal, .fad, .fab, .fa-solid, .fa-regular, .fa-brands, .fa-light,
[class^="fa-"], [class*=" fa-"] {
    font-family: "Font Awesome 6 Free", "Font Awesome 6 Brands",
                 "Font Awesome 5 Free", "Font Awesome 5 Brands", FontAwesome !important;
}
code, pre, kbd, samp, .mono {
    font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace !important;
}

/* Apple sets display type large, heavy and tight, and body type calm. */
h1 { letter-spacing: -.035em; font-weight: 700; line-height: 1.07; }
h2 { letter-spacing: -.028em; font-weight: 700; line-height: 1.12; }
h3, h4 { letter-spacing: -.02em; font-weight: 600; }
p, li { letter-spacing: -.004em; }
body { -webkit-font-smoothing: antialiased; color: var(--t); background: var(--bg); }

/* Nothing shouts in capitals. */
.nbtn, .btn, .hbtn, .badge, .pill, .eyebrow, .sec-hdr span, .tag {
    text-transform: none !important;
    letter-spacing: -.01em !important;
}

/* ── buttons: the pill ──────────────────────────────────────────── */
.nbtn, .btn, .hbtn, button.btn, .pricing-btn, .enrollment-cta, .quiz-submit-button {
    border-radius: 980px !important;
    font-weight: 500 !important;
    box-shadow: none !important;
    transition: background-color .22s ease, color .22s ease, border-color .22s ease !important;
}
.nbtn { padding: 8px 18px !important; height: 38px !important; font-size: .88rem !important; }
.nbtn.solid, .btn-primary, .hbtn.primary {
    background: var(--c) !important; border-color: var(--c) !important; color: #fff !important;
}
.nbtn.solid:hover, .btn-primary:hover, .hbtn.primary:hover {
    background: var(--c2) !important; border-color: var(--c2) !important;
}
.nbtn:not(.solid) { border-color: var(--bdr2) !important; color: var(--c) !important; }
.nbtn:not(.solid):hover { background: var(--bg2) !important; }

/* ── surfaces: a hairline and a soft corner, nothing else ───────── */
/* The exam pages (.quiz-question, .ex-policy) are deliberately left out: their
   look was tuned question by question and is not this layer's business. */
.card, .course-card, .lesson-card, .stat-card, .award-card, .feature-card,
.panel, .box, .testimonial-card {
    background: var(--card) !important;
    border: 1px solid var(--bdr) !important;
    border-radius: var(--r2) !important;
    box-shadow: none !important;
}
.card:hover, .course-card:hover, .award-card:hover, .feature-card:hover {
    border-color: var(--bdr2) !important;
    box-shadow: var(--shadow-lg) !important;
    transform: none !important;
}

/* ── the bar: Apple's translucent hairline ──────────────────────── */
#nav, .navbar {
    background: rgba(255,255,255,.72) !important;
    backdrop-filter: saturate(180%) blur(20px);
    -webkit-backdrop-filter: saturate(180%) blur(20px);
    border-bottom: 1px solid var(--bdr) !important;
    box-shadow: none !important;
}
.nav-links a, .nav-inner a { color: var(--t) !important; font-weight: 400 !important; }
.nav-links a:hover { color: #000 !important; }

/* ── no neon anywhere ───────────────────────────────────────────── */
* { text-shadow: none !important; }
.hero-h1 .line2, .hero-h1 .line3 {
    -webkit-text-fill-color: initial !important;
    background: none !important;
}
.hero-h1 .line2 { color: var(--c) !important; }
.hero-h1 .line3 { color: var(--tm) !important; }

/* ── space, which is most of the look ───────────────────────────── */
section, .section { padding-top: 4.5rem !important; padding-bottom: 4.5rem !important; }
.sec-hdr { margin-bottom: 2.5rem !important; }

/* Seen whole for the comparison: the page reveals these on scroll, and a
   screenshot never scrolls. Applied to both sides equally. */
.reveal { opacity: 1 !important; transform: none !important; }

/* ═══════════════════════════════════════════════════════════════════
   Second pass: the parts the tokens cannot reach.

   The page writes these by hand - gradients, uppercase, a 12px lift on
   hover, a cyan glow - so each is answered by name. Everything here is
   cosmetic: no element is moved, hidden or resized in a way that changes
   what can be clicked.
   ═══════════════════════════════════════════════════════════════════ */

/* ── the page header band ───────────────────────────────────────── */
.courses-page-header {
    background: var(--bg2) !important;
    border-bottom: 1px solid var(--bdr) !important;
    padding: 4rem 0 3.25rem !important;
}
.courses-page-header h1 { font-size: 3rem !important; color: var(--tw) !important; }
.courses-page-header p { color: var(--tm) !important; font-size: 1.1rem !important; }
.courses-page-header .eyebrow, .courses-page-header > div > span {
    color: var(--c) !important; font-weight: 500 !important;
}

/* ── search ─────────────────────────────────────────────────────── */
.search-input {
    border-radius: 980px !important;
    border: 1px solid var(--bdr2) !important;
    background: var(--bg) !important;
    padding: 12px 18px 12px 44px !important;
    font-size: .95rem !important;
    box-shadow: none !important;
}
.search-input:focus {
    border-color: var(--c) !important;
    box-shadow: 0 0 0 4px rgba(0,113,227,.12) !important;
    outline: none !important;
}
.search-icon { color: var(--tm) !important; }

/* ── the filter pills: Apple's segmented look ───────────────────── */
.filter-pill {
    border-radius: 980px !important;
    border: 1px solid var(--bdr2) !important;
    background: transparent !important;
    color: var(--t) !important;
    font-weight: 500 !important;
    text-transform: none !important;
    letter-spacing: -.01em !important;
    padding: 7px 16px !important;
    box-shadow: none !important;
}
.filter-pill:hover { background: var(--bg2) !important; }
.filter-pill.active {
    background: #1d1d1f !important;
    border-color: #1d1d1f !important;
    color: #fff !important;
}

/* ── the card ───────────────────────────────────────────────────── */
.course-card {
    border: 1px solid var(--bdr) !important;
    border-radius: 18px !important;
    background: var(--card) !important;
    box-shadow: none !important;
    transition: border-color .25s ease, box-shadow .25s ease !important;
}
.course-card:hover {
    transform: none !important;                 /* no 6px jump */
    border-color: var(--bdr2) !important;
    box-shadow: 0 10px 30px rgba(0,0,0,.07) !important;
}
.course-image {
    background: var(--bg2) !important;          /* not a cyan gradient */
    border-bottom: 1px solid var(--bdr) !important;
    height: 190px !important;
}
.course-image img { background: var(--bg2) !important; }
.course-body { padding: 1.4rem 1.4rem 1.5rem !important; }
.course-title {
    font-size: 1.06rem !important; font-weight: 600 !important;
    letter-spacing: -.02em !important; color: var(--tw) !important; line-height: 1.3 !important;
}
.course-desc { color: var(--tm) !important; font-size: .92rem !important; line-height: 1.5 !important; }
.course-meta-row { border-top: 1px solid var(--bdr) !important; color: var(--tm) !important; }
.course-meta-item { color: var(--tm) !important; font-size: .85rem !important; }
.course-meta-item i { color: var(--tm) !important; }
.course-rating .stars { color: #b25000 !important; font-weight: 600 !important; }

/* The badge: a quiet label, not a flag. */
.course-badge, .course-badge.new {
    background: rgba(0,0,0,.65) !important;
    color: #fff !important;
    border: 0 !important;
    border-radius: 980px !important;
    font-weight: 500 !important;
    text-transform: none !important;
    letter-spacing: -.01em !important;
    padding: 4px 11px !important;
    font-size: .74rem !important;
    backdrop-filter: blur(6px);
}

/* The card's own call to action: Apple keeps it a pill, not a slab. */
.course-action-btn, .btn.btn-c, .btn-full {
    background: var(--c) !important;
    border: 0 !important;
    border-radius: 980px !important;
    color: #fff !important;
    font-weight: 500 !important;
    text-transform: none !important;
    letter-spacing: -.01em !important;
    padding: 11px 20px !important;
    box-shadow: none !important;
}
.course-action-btn:hover, .btn.btn-c:hover { background: var(--c2) !important; }

/* ── the footer ─────────────────────────────────────────────────── */
#site-footer { background: var(--bg2) !important; border-top: 1px solid var(--bdr) !important; }
#site-footer a { color: var(--tm) !important; }
#site-footer a:hover { color: var(--t) !important; }
.soc-btn {
    background: var(--bg) !important;
    border: 1px solid var(--bdr) !important;
    border-radius: 50% !important;
    box-shadow: none !important;
}
.soc-btn:hover { border-color: var(--bdr2) !important; background: var(--bg) !important; }

/* ── the bar: which page you are on ─────────────────────────────────
   The rule above set every link to one colour and one weight, which
   silenced the current-page marker the layout already had - my own doing.
   This gives it back, the way Apple marks a current item: the inactive ones
   step back to grey, the one you are on comes forward to near-black on a
   quiet pill. No gradient underline, no glow.
   The class is put on by the layout's own script, by path. */
.nav-links a.nav-link {
    color: var(--tm) !important;
    font-weight: 400 !important;
    border-radius: 980px;
    padding: 7px 13px;
    transition: color .2s ease, background-color .2s ease;
}
.nav-links a.nav-link:hover {
    color: var(--tw) !important;
    background: var(--bg2);
}
.nav-links a.nav-link.active {
    color: var(--tw) !important;
    font-weight: 500 !important;
    background: var(--bg2);
}
/* The pill is the marker; the old 2px gradient bar under it would be a
   second one saying the same thing. */
.nav-links a.nav-link.active::after { display: none !important; }

/* The icon travels with its label rather than staying blue on its own. */
.nav-links a.nav-link i { color: inherit !important; opacity: .85; }

/* ── the bar fits on one line, signed in or out ─────────────────────
   Signed in there are eight links, not four, and the bar was already
   wrapping before this layer existed: the logo broke onto three lines and
   "My Learning" and "Live Quiz" onto two. The bar is given the width it
   needs, the gap is tightened, and nothing in it is allowed to wrap.
   Between the phone breakpoint and a laptop the icons stand down - the
   words carry the meaning on their own. */
.nav-inner {
    max-width: 1480px !important;
    gap: 1rem;
}
.logo { flex: 0 0 auto; }
.logo-text, .logo-sub { white-space: nowrap !important; }

.nav-links {
    /* Space, not dividers. Apple never draws a line between nav items; what
       separates them is air. The air has to be rationed though - eight links
       when signed in - so it grows with the window: about 17px of gap at
       1920, 8px at 1366, almost none by the time the phone menu takes over.
       With the 11px of padding each link carries, that reads as a comfortable
       38px between labels on a wide screen. */
    gap: clamp(2px, 1.6vw - 14px, 18px) !important;
    flex-wrap: nowrap !important;
}
.nav-links a.nav-link {
    white-space: nowrap !important;
    padding: 7px 11px;
    font-size: .92rem;
}
.nav-right { flex: 0 0 auto; }

@media (max-width: 1400px) {
    .nav-links a.nav-link { padding: 6px 9px; font-size: .875rem; }
    .nav-links a.nav-link i { display: none; }
    .nav-inner { gap: .5rem; }
}

/* ── the course artwork belongs to the band, not on top of it ───────
   The real cause was in the artwork, not the stylesheet: the SVG carried
   `<rect width="1200" height="500" fill="#e8f0f8"/>` - a solid ground - so
   whatever was done in CSS, a rectangle was being drawn. Two attempts at
   hiding it (multiply, then matching the band's colour to it) treated the
   symptom; the ground has now been taken out of both course files, which
   are kept beside them as .ground.bak.

   With nothing behind it, the drawing can be seen properly: it is carried at
   full strength and only its leading edge is softened so it does not start
   abruptly beside the title. */
.course-hero-image {
    /* form-fields.css inverts this image - `filter: invert(1) hue-rotate(180deg)`
       - because the artwork used to carry a navy plate that had to be flipped
       for a pale page. The plate is gone now, so inverting turns a light
       drawing into a black one, which is the black backdrop that appeared.
       The art is already the light variant; it needs no flipping. */
    filter: none !important;
    opacity: .85 !important;
    width: 46% !important;
    -webkit-mask-image: linear-gradient(to left, #000 55%, transparent 100%);
            mask-image: linear-gradient(to left, #000 55%, transparent 100%);
}

/* The band: Apple's quiet grey.

   Written as literal colours, not tokens. The page redefines --bg and --bg2
   further down - after this stylesheet - so a token here can resolve to the
   dark theme's value and paint the band near-black. That is exactly what happened:
   the band went to rgb(38,41,43) and looked like a black backdrop behind the
   artwork. These two greys are the light design's own, and nothing can
   reinterpret them. */
.course-hero-pro {
    background: linear-gradient(180deg, #f5f5f7, #ffffff) !important;
    border-bottom: 1px solid rgba(0,0,0,.09) !important;
}

/* ═══════════════════════════════════════════════════════════════════
   THE PHONE: the lesson view, read like an app

   What it does on a phone today, and why each of these is here:

   * the lesson lives in a box of its own with `height: calc(100vh - 70px)`
     and `overflow-y: auto`, so the phone scrolls a small window inside a
     page that does not scroll - two scrollbars, and the footer sitting
     right under a cramped porthole. A phone should scroll the page.
   * the tab row runs off the right edge: "Progress" is simply unreachable.
   * the language capsule floats over the text.

   Everything here is inside the phone breakpoint; nothing changes on a
   laptop. 820px is the width at which the curriculum rail already gives up
   and becomes a drawer.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 820px) {

    /* One page, one scroll.

       The page itself has to be allowed to scroll first: html and body are
       held to the window's height here, which is why window.scrollTo did
       nothing while the document was 18,000px tall - the scrolling was
       happening inside a box. Sideways overflow stays hidden. */
    html, body {
        height: auto !important;
        min-height: 0 !important;
        max-height: none !important;
        overflow-y: visible !important;
        overflow-x: hidden !important;
        position: static !important;
    }

    /* Why nothing would stay pinned.

       premium-animations.css runs `animation: pageEnter ... forwards` on
       #main-content. The last keyframe is transform: translateY(0), and
       `forwards` keeps it - so the element carries a transform for ever
       after. An ancestor with a transform becomes the containing block for
       everything inside it: `position: fixed` stops meaning the screen and
       `position: sticky` clamps to that box instead of the viewport. Measured
       in Chrome: the language capsule, declared fixed, slid from top 153 to
       top -547 while scrolling. It was never going to stay.

       The second cause is on the same element: overflow-x: clip with
       overflow-y: visible computes to a scroll container, which sticky then
       clamps to as well.

       Both are undone here, for phones only. The entrance fade is given up on
       a phone; a header that stays where it is worth more than half a second
       of movement. */
    #main-content {
        animation: none !important;
        transform: none !important;
        overflow: visible !important;
        overflow-x: visible !important;
        overflow-y: visible !important;
    }

    html.ex-fs #main-content,
    #main-content,
    .lesson-player-container,
    .lesson-player-main {
        height: auto !important;
        max-height: none !important;
        min-height: 0 !important;
        overflow: visible !important;
    }
    .lesson-player-container { display: block !important; }
    .lesson-content-area {
        overflow: visible !important;
        /* clear of the two fixed bars above it: 103px of lesson bar and 61px
           of tabs, measured rather than guessed */
        padding: 1.1rem 1rem 2rem !important;
        margin-top: 117px !important;   /* 56px of bar plus 61px of tabs */
        max-width: none !important;
    }

    /* The lesson's own bar behaves like an app's: it stays at the top as
       you read, with the lesson name beside the way back to the list. */
    .lesson-nav-bar {
        /* Fixed, not sticky. A sticky element only sticks inside its own
           parent, and this bar's parent is a short wrapper - measured in
           Chrome, it slid to top -565px at a scroll of 700. Fixed now works
           because the transform that was breaking it has been removed. */
        position: fixed !important; top: 70px !important; left: 0; right: 0; z-index: 40;
        /* the bar carries a 60px top margin of its own, which pushed it below
           the place it was pinned to - measured at rect.top 130 against a
           declared top of 70 */
        margin: 0 !important;
        background: rgba(255,255,255,.92);
        -webkit-backdrop-filter: saturate(180%) blur(16px);
                backdrop-filter: saturate(180%) blur(16px);
        border-bottom: 1px solid rgba(0,0,0,.09);
        padding: .4rem .9rem !important;
        gap: .7rem;
        min-height: 56px;
        height: 56px;
    }
    .sidebar-toggle-btn {
        border-radius: 980px !important;
        padding: 8px 14px !important;
        min-height: 40px;
        font-weight: 500 !important;
    }
    .lesson-nav-current {
        font-weight: 600; letter-spacing: -.01em;
        overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
    }

    /* The tabs scroll sideways instead of being cut off, and snap like a
       segmented control. The scrollbar itself is hidden - on a phone the
       movement is the affordance. */
    .lesson-tabs {
        display: flex !important;
        flex-wrap: nowrap !important;
        overflow-x: auto;
        scroll-snap-type: x proximity;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
        gap: .25rem;
        padding: .5rem .75rem !important;
        position: fixed !important; left: 0; right: 0; top: 126px !important; z-index: 39;
        background: rgba(255,255,255,.92);
        -webkit-backdrop-filter: saturate(180%) blur(16px);
                backdrop-filter: saturate(180%) blur(16px);
        border-bottom: 1px solid rgba(0,0,0,.07);
    }
    .lesson-tabs::-webkit-scrollbar { display: none; }
    .lesson-tab {
        flex: 0 0 auto !important;
        scroll-snap-align: start;
        white-space: nowrap;
        border: 0 !important;
        border-radius: 980px !important;
        padding: 8px 14px !important;
        min-height: 40px;
        font-size: .9rem !important;
        font-weight: 500 !important;
        text-transform: none !important;
        letter-spacing: -.01em !important;
        color: #6e6e73 !important;
        background: transparent !important;
    }
    .lesson-tab.active {
        background: #1d1d1f !important;
        color: #fff !important;
    }
    .lesson-tab.active::after { display: none !important; }

    /* ── the header that gets out of the way ──────────────────────────
       Scrolling down takes the site's bar away and leaves the lesson's own
       bar and its tabs at the very top; scrolling up brings it back. The
       class is set by design-apple.js; everything that moves is here.

       The three things that must agree on where the top is:
         bar visible  ->  lesson bar at 70px, tabs at 122px
         bar away     ->  lesson bar at 0,    tabs at 52px             */
    #nav {
        transition: transform .3s cubic-bezier(.4, 0, .2, 1);
        will-change: transform;
    }
    html.nav-away #nav { transform: translateY(-100%); }

    .lesson-nav-bar {
        transition: top .3s cubic-bezier(.4, 0, .2, 1);
        /* room at the right for the language capsule, so a long lesson
           title never runs underneath it */
        padding-right: 60px !important;   /* one 48px circle, plus a little air */
    }
    .lesson-tabs { transition: top .3s cubic-bezier(.4, 0, .2, 1); }
    html.nav-away .lesson-nav-bar { top: 0 !important; }
    html.nav-away .lesson-tabs { top: 56px !important; }

    /* ── the language capsule, at the top where it is asked for ───────
       At the right-hand end of the lesson bar: in reach of a thumb, never
       over the words, and it travels with the bar when the header leaves. */
    .lang-toggle {
        top: 74px !important;   /* centred: the bar starts at 70 and is 56 tall */
        bottom: auto !important;
        right: 8px !important;
        left: auto !important;
        /* One control, not two. Standing the pair upright freed the title but
           cost 96px of height, and the bar had to be tall enough to hold it.
           So on a phone only the language you are NOT reading in is shown:
           one 44px circle that says what tapping it will do. 48x48 instead of
           50x96 - and the bar can come down with it. */
        flex-direction: row !important;
        padding: 2px !important;
        gap: 0 !important;
        border-radius: 50% !important;
        box-shadow: 0 2px 10px rgba(0,0,0,.08);
        transition: top .3s cubic-bezier(.4, 0, .2, 1);
        z-index: 41;
    }
    html.nav-away .lang-toggle { top: 4px !important; }   /* still centred when the bar rises */
    /* The language you are already reading in is not an option worth
       showing; the other one is the whole control. The site marks the
       current one with .active, so that is the one that stands down. */
    .lang-toggle .lang-btn.active { display: none !important; }

    /* One circle, not a square inside one. Measured: the wrapper was a 50px
       circle with a pale blue fill and a border, and the button inside it a
       44px rounded SQUARE (radius 8px) with a shadow of its own - which is
       the box you could see behind the circle.

       So the wrapper stops drawing anything and the button becomes the
       control: a 44px circle, white, one hairline, one soft shadow. */
    .lang-toggle {
        background: transparent !important;
        border: 0 !important;
        box-shadow: none !important;
        padding: 0 !important;
        width: 44px !important;
        height: 44px !important;
    }
    .lang-toggle .lang-btn {
        border-radius: 50% !important;
        background: #ffffff !important;
        border: 1px solid rgba(0,0,0,.10) !important;
        box-shadow: 0 2px 8px rgba(0,0,0,.10) !important;
        color: #1d1d1f !important;
        font-size: .76rem !important;
        font-weight: 600 !important;
    }
    .lang-toggle .lang-btn:active { background: #f5f5f7 !important; }

    /* Someone who has asked for less movement gets none of it. */
    @media (prefers-reduced-motion: reduce) {
        #nav, .lesson-nav-bar, .lesson-tabs, .lang-toggle { transition: none !important; }
    }

    /* Room to read, and targets a thumb can hit. */
    .quiz-question { padding: 1.1rem !important; }
    .quiz-option-label { min-height: 48px; align-items: center; }
    .btn, .nbtn, .course-action-btn, .quiz-submit-button { min-height: 46px; }
}

/* ── the curriculum rail on a phone ─────────────────────────────────
   The desktop list is left exactly as it was designed: 8.8px of padding and
   a 4.8px margin, a 41px pitch. An earlier version of this tightened it by
   mistake - the rule was written without a breakpoint - and that is undone.

   The phone is the one that needed it. Measured in the open drawer: 44px
   rows with a 14px margin under each, a pitch of 59px, fourteen rows on an
   844px screen. The 14px comes from mobile-fixes.css:

       [class*="item"]:not(.faq-toggle) { margin-bottom: 14px !important; }

   which matches every lesson row and sits later in the cascade, so it beat
   two earlier attempts written as plain `.lesson-item`. Hence the longer
   selector here.

   Rows are 38px now with a 2px margin - a 40px pitch, twenty-one rows on a
   screen. Still a full-width target, which is what makes 38px safe to tap
   where a 38px button would not be. */
@media (max-width: 820px) {
    .curriculum-rail .lesson-item,
    .lesson-sidebar .lesson-item {
        /* A blanket rule gives every <a> a 44px floor for touch. These rows
           are full-width targets, so 38px is still comfortable - but the
           floor carries !important, so this has to as well. */
        min-height: 38px !important;
        display: flex;
        align-items: center;
        padding-top: 3px !important;
        padding-bottom: 3px !important;
        margin-bottom: 2px !important;
        line-height: 1.25 !important;
        font-size: .875rem !important;
    }
    .curriculum-rail .lesson-item.lq-sub,
    .lesson-sidebar .lesson-item.lq-sub {
        padding-left: 32px !important;
        min-height: 34px !important;
        font-size: .84rem !important;
    }
    /* the rail's own heading block gives back some room too */
    .lesson-sidebar .sidebar-header { padding-bottom: .5rem !important; }
    .lesson-sidebar .sidebar-instruction,
    .lesson-sidebar .sidebar-subtitle { margin-bottom: .35rem !important; }
}


/* ═══════════════════════════════════════════════════════════════════
   THE PHONE, second pass: the three things that still read badly
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 820px) {

    /* ── room to write in ─────────────────────────────────────────────
       The lesson card keeps desktop padding on a phone: 32px top and bottom
       and 40px each side, inside a container that adds 16 more. On a 390px
       screen that leaves the text about 246px - which is why it read as a
       narrow, broken column. These are the paddings a phone can afford. */
    .lesson-header { padding: 20px 16px !important; }
    .lesson-container { padding: 16px 12px !important; }
    .lesson-body, .lesson-lang, .tab-content { padding-left: 0 !important; padding-right: 0 !important; }
    .module, .learning-objectives { padding: 16px 14px !important; }

    /* A lesson picture is drawn 760px wide; on a phone it was 300px. It may
       use the card's 14px side padding (the card clips at its border), so it
       is 328px - the most it can be. Its own inline margin is not !important. */
    .module .lesson-figure { margin-left: -14px !important; margin-right: -14px !important; }

    /* ── the lesson's facts ───────────────────────────────────────────
       The markup is "📚 Chapter: <strong>3 — Networking Fundamentals</strong>"
       inside a flex row with an 8px gap, so the emoji, the label and the
       value became three flex items that wrapped against each other - the
       label ended up UNDER its own icon and beside the value. Measured at
       246px wide in a 390px screen.

       As ordinary text it simply reads: icon, label in grey, value in black,
       wrapping like a sentence. One fact per line. */
    .lesson-meta {
        display: block !important;
        margin-top: .35rem;
    }
    .lesson-meta .meta-item {
        display: block !important;
        width: auto !important;
        color: #6e6e73 !important;
        font-size: .9rem !important;
        line-height: 1.55 !important;
        padding: 5px 0 !important;
        border-bottom: 1px solid rgba(0,0,0,.055);
    }
    .lesson-meta .meta-item:last-child { border-bottom: 0; }
    .lesson-meta .meta-item strong {
        color: #1d1d1f !important;
        font-weight: 600 !important;
    }

    /* ── the tabs: all four, no cut ───────────────────────────────────
       Measured: the four came to 379px of label inside a 390px row whose
       own padding took 24 more - so "Progress" fell off the edge by a few
       pixels. Trimming the padding inside each tab buys back 32px, which is
       more than enough for them to sit side by side without scrolling. */
    .lesson-tabs {
        padding-left: .4rem !important;
        padding-right: .4rem !important;
        gap: .1rem;
        justify-content: space-between;
    }
    .lesson-tab {
        padding: 8px 9px !important;
        font-size: .845rem !important;
    }
    .lesson-tab i { display: none; }   /* the words are the labels */

    /* ── the drawer reads like the bar on a laptop ────────────────────
       Same language as the navigation bar: grey when resting, near-black
       on a quiet pill when it is the page you are on. */
    .mob-nav {
        background: rgba(255,255,255,.96) !important;
        -webkit-backdrop-filter: saturate(180%) blur(18px);
                backdrop-filter: saturate(180%) blur(18px);
        border-bottom: 1px solid rgba(0,0,0,.09) !important;
        padding: .5rem .6rem !important;
    }
    #mob-nav a,
    .mob-nav a {
        display: flex !important;
        align-items: center;
        gap: .7rem;
        min-height: 46px;
        padding: 0 .9rem !important;
        margin: 2px 0;
        border-radius: 12px !important;
        color: #6e6e73 !important;
        font-weight: 500 !important;
        font-size: .95rem !important;
        letter-spacing: -.01em;
        border: 0 !important;
        /* the drawer shouted in capitals; the bar on a laptop does not */
        text-transform: none !important;
    }
    #mob-nav a:hover, #mob-nav a:active, .mob-nav a:hover, .mob-nav a:active { background: #f5f5f7 !important; color: #1d1d1f !important; }
    #mob-nav a.active, .mob-nav a.active {
        background: #f5f5f7 !important;
        color: #1d1d1f !important;
        font-weight: 600 !important;
    }
    /* The SIM fold-out: its two links were centred by the drawer's own rule
       while the two "soon" rows beside them were not. One left edge for all
       four, indented a step under their parent. */
    #mob-nav .mob-sim a,
    #mob-nav .mob-sim .soon {
        justify-content: flex-start !important;
        text-align: left !important;
        padding: 0 .9rem 0 2.2rem !important;
        min-height: 44px;
        font-size: .93rem !important;
    }
    #mob-nav .mob-sim .soon { color: #a1a1a6; }
    #mob-nav .mob-sim .soon em { margin-left: auto; background: #f0f0f2; color: #6e6e73; }
    #mob-nav a i, .mob-nav a i {
        width: 20px; text-align: center; opacity: .55;
        color: inherit !important;   /* the icon follows its label, as on the bar */
    }
}

/* ═══════════════════════════════════════════════════════════════════
   The main pages, read on a phone

   Found by walking /courses, /about, /contact and /login at 390px in
   Chrome and asking each page about its own headings and buttons:

     /courses   h1 at 48px - a third of the screen's width per word
     /contact   .form-submit in capitals with wide tracking
     /login     the SIGN IN / REGISTER tabs, the same
     everywhere the floating help button, a teal gradient that belongs to
                no other part of the design

   None of these appear on the home page, which is left alone.
   ═══════════════════════════════════════════════════════════════════ */

/* The help bubble: one accent colour, no gradient. It is the only round
   button that floats over everything, so it should be the calmest thing on
   the screen, not the loudest. */
/* Written as html[data-theme] #chat-btn: the sheet that paints it uses
   [data-theme="light"] #chat-btn !important, which outranks a plain
   #chat-btn however many !importants it carries. Chrome's matched-rule list
   named the winner. */
html[data-theme] #chat-btn,
html #chat-btn,
#chat-btn {
    background: #0071e3 !important;
    background-image: none !important;
    box-shadow: 0 6px 20px rgba(0,0,0,.18) !important;
    border: 0 !important;
}
html[data-theme] #chat-btn:hover, #chat-btn:hover { background: #0077ed !important; }

/* Form and tab buttons speak in sentence case like everything else. */
.form-submit, .m-tab, .auth-tab, .tab-btn {
    text-transform: none !important;
    letter-spacing: -.01em !important;
}
.form-submit {
    border-radius: 980px !important;
    font-weight: 500 !important;
    box-shadow: none !important;
}
.m-tab, .auth-tab {
    border-radius: 980px !important;
    font-weight: 500 !important;
}

@media (max-width: 820px) {
    /* A 48px headline on a 390px screen leaves room for two words a line.
       Apple sets display type large on a phone too, but not that large:
       this scales with the screen and stops at 30px. */
    .courses-page-header h1,
    .page-title,
    .sec-h2,
    main h1 {
        font-size: clamp(1.6rem, 6.4vw, 1.9rem) !important;
        line-height: 1.12 !important;
        letter-spacing: -.03em !important;
    }
    /* 16px of gutter: my own earlier rule wrote `padding: 2.25rem 0` and
       pushed the heading flat against the left edge of the screen. */
    .courses-page-header { padding: 2.25rem 1rem 1.75rem !important; }
    .courses-page-header .header-content { padding: 0 !important; }
    .courses-page-header p { font-size: .97rem !important; }

    /* Anything that is a button on a phone is at least a thumb tall. */
    .form-submit, .m-tab, .auth-tab { min-height: 46px; }
}

/* ── Contact, About and Profile: the same margins as everywhere else ──
   Measured on a phone, where each page's text actually began:

     /courses   title 16px from the edge        (the one to match)
     /contact   title 14, card text 35, the benefits block 47
     /about     title 14, section text 47
     /profile   title 24

   The cause in every case is desktop padding carried onto a 390px screen:
   .about-section and .contact-section at 32px, .connect-benefits-wrapper at
   40/32, .course-hero-pro at 24. On a phone a card gives 16px, which puts
   its text at 32 from the screen edge - the page gutter plus the card's own
   - and the page title at 16. */
@media (max-width: 820px) {
    .about-container,
    .contact-container { padding-left: 16px !important; padding-right: 16px !important; }
    /* Contact began at 60px under a bar that ends at 70 - its title was
       sitting behind the navigation. About starts at 80 and Courses at 158,
       so this is the one page that needed the clearance. */
    .contact-container { padding-top: 28px !important; }
    .about-header,
    .contact-header { padding-left: 0 !important; padding-right: 0 !important; }

    .about-section,
    .contact-section,
    .connect-benefits-wrapper,
    .contact-wrapper > div,
    .about-card,
    .contact-card { padding: 18px 16px !important; }

    .about-main { padding-bottom: 48px !important; }

    /* the profile page is built on the course shell */
    /* The profile/course hero sits INSIDE a container that already gives
       16px, unlike the courses page where the band is full width. Its own
       16 was being added on top, so the title started at 32 while every
       other page starts at 16. The band keeps its vertical padding and
       lets the container provide the gutter. */
    .course-hero-pro { padding: 18px 0 !important; }
    .course-hero-pro .course-hero-content { padding-left: 0 !important; padding-right: 0 !important; }
    .course-container-pro { padding-left: 16px !important; padding-right: 16px !important; }
    .course-tabs-pro { padding-left: 8px !important; padding-right: 8px !important; }

    /* section headings on these pages are h2s inside cards: one size down,
       so they read as headings and not as another title */
    .about-section .section-title,
    .contact-section .section-title,
    .connect-benefits-wrapper .section-title { font-size: 1.15rem !important; letter-spacing: -.02em !important; }
}

/* ── Contact: the four cards, as rows ───────────────────────────────
   Measured on a phone: each card was 358x220 with 25/22 of padding, the
   icon stacked above the label and the label above the value. Four of them
   came to 870px of scrolling for four facts, most of it air.

   Laid out as a row instead - icon on the left, label and value stacked
   beside it - each card is about a third of that, and all four are on one
   screen. This is the shape a phone uses for a list of details. */
@media (max-width: 820px) {
    .contact-grid-top {
        display: grid !important;
        grid-template-columns: 1fr !important;
        gap: 10px !important;
    }
    .contact-quick-info {
        display: grid !important;
        grid-template-columns: 44px 1fr;
        grid-template-areas: "icon title" "icon content";
        align-items: center;
        justify-items: start;
        gap: 1px 14px !important;
        padding: 12px 14px !important;
        border-radius: 14px !important;
        text-align: left !important;
        min-height: 0 !important;
    }
    .contact-quick-info .quick-icon {
        grid-area: icon;
        width: 44px !important;
        height: 44px !important;
        min-width: 44px;
        margin: 0 !important;
        border-radius: 12px !important;
        display: flex !important;
        align-items: center;
        justify-content: center;
        font-size: 1rem !important;
    }
    .contact-quick-info .quick-title {
        grid-area: title;
        align-self: end;
        margin: 0 !important;
        font-size: .72rem !important;
        letter-spacing: .05em;
        color: #6e6e73 !important;
    }
    .contact-quick-info .quick-content {
        grid-area: content;
        align-self: start;
        margin: 0 !important;
        line-height: 1.35;
    }
    .contact-quick-info .quick-content a {
        font-size: .95rem !important;
        font-weight: 500 !important;
    }
    .contact-quick-info .quick-content p {
        margin: 1px 0 0 !important;
        font-size: .76rem !important;
    }

    /* The WhatsApp card carries an "Online Now" badge as a sibling BEFORE
       the icon, so in a two-column grid it fell into a row of its own and
       made that card half as tall again (156px against 111). It gets a
       column of its own, on the right, spanning both rows. */
    .contact-quick-info:has(.live-chat-badge) {
        grid-template-columns: 44px 1fr auto;
        grid-template-areas: "icon title badge" "icon content badge";
    }
    .contact-quick-info .live-chat-badge {
        grid-area: badge;
        align-self: center;
        justify-self: end;
        margin: 0 !important;
        white-space: nowrap;
        padding: 4px 10px !important;
        border-radius: 980px !important;
        font-size: .7rem !important;
        display: inline-flex !important;
        align-items: center;
        gap: 6px;
    }
}

/* ── About on a phone: who you are reading about, first ─────────────
   The page is a two-column grid: the three long sections in <main>, and an
   <aside> with the portrait card and the certificates. The aside carries
   order: 2, so when the columns stack it lands at the bottom - measured,
   the portrait sat at y=3284 on a 6122px page. On a phone the person comes
   first, then the story.

   The timeline was the other complaint: each entry carried a 50px left
   indent and 32px underneath, for 277px an entry. */
@media (max-width: 820px) {
    .about-wrapper {
        display: flex !important;
        flex-direction: column !important;
        gap: 14px !important;
    }
    .about-sidebar { order: -1 !important; gap: 14px !important; }

    /* 72px of nothing between the subtitle and the first card: a 48px margin
       under the header plus 32 on the wrapper. 20 is enough on a phone. */
    .about-header { margin-bottom: 14px !important; }
    .about-wrapper { margin-top: 6px !important; }
    .about-main { order: 1 !important; }

    /* the portrait card itself: a row, not a tower */
    .profile-card { padding: 18px 16px !important; }
    .profile-card p { margin-bottom: 14px !important; }
    .profile-avatar { font-size: 34px !important; line-height: 1.1 !important; }

    /* the timeline: less indent, less air */
    .timeline { padding: 8px 0 !important; }
    .timeline-item { padding: 0 0 18px 34px !important; }
    .timeline-description { margin-top: 4px !important; }
    .timeline-title { gap: 6px !important; }

    /* the certificate list reads as rows, not as cards */
    .certs-card { padding: 16px 14px !important; }
    .cert-list { gap: 6px !important; }
    .cert-item { min-height: 36px; }

    /* section icons at a size that belongs beside text */
    .about-section .section-title i,
    .about-section h2 i { font-size: 1rem !important; }
}

/* ── "Why Connect With Us?" on a phone ──────────────────────────────
   Measured: the block ran to 1025px. Each of the four reasons was its own
   card, 204px tall, with 28/22 of padding and a 52x52 icon tile stacked
   above its title - four boxes inside a box, which is why it read as
   something pasted in from another page.

   On a phone they become four rows inside the one section card: a 36px
   icon, the title and the line under it beside it, a hairline between.
   Nothing nested, nothing floating. The desktop keeps its cards. */
@media (max-width: 820px) {
    .connect-benefits-wrapper .benefits-grid {
        display: block !important;
        gap: 0 !important;
    }
    .connect-benefits-wrapper .benefit-card {
        display: grid !important;
        grid-template-columns: 36px 1fr;
        grid-template-areas: "icon title" "icon desc";
        align-items: center;
        gap: 0 12px !important;
        padding: 12px 0 !important;
        background: transparent !important;
        border: 0 !important;
        border-bottom: 1px solid rgba(0,0,0,.07) !important;
        border-radius: 0 !important;
        box-shadow: none !important;
        min-height: 0 !important;
    }
    .connect-benefits-wrapper .benefit-card:last-child { border-bottom: 0 !important; }
    .connect-benefits-wrapper .benefit-icon {
        grid-area: icon;
        width: 36px !important;
        height: 36px !important;
        min-width: 36px;
        margin: 0 !important;
        border-radius: 10px !important;
        font-size: .9rem !important;
        display: flex !important;
        align-items: center;
        justify-content: center;
    }
    .connect-benefits-wrapper .benefit-icon i { font-size: .9rem !important; }
    .connect-benefits-wrapper .benefit-title {
        grid-area: title;
        align-self: end;
        margin: 0 !important;
        font-size: .95rem !important;
        font-weight: 600 !important;
        line-height: 1.3 !important;
    }
    .connect-benefits-wrapper .benefit-desc {
        grid-area: desc;
        align-self: start;
        margin: 1px 0 0 !important;
        font-size: .82rem !important;
        line-height: 1.4 !important;
    }
}

/* ═══════════════════════════════════════════════════════════════════
   The home page's green strip, back where it belongs.

   mobile-fixes.css pins "Open enrolment - learn at your own pace" to the
   screen at top: 70px, as an announcement strip under the navigation bar.
   That was sound while the bar never moved. The bar now slides away as you
   scroll, so the strip is left hanging in mid-air over the page - which is
   exactly what it looks like from the reader's seat: a badge that moves on
   its own.

   It goes back into the hero as a pill, scrolling with the heading it
   introduces. Only its geometry is touched; the colours stay with the
   theme, so light and dark both keep what they had.

   768px, not the 820px the rest of this file uses, so that this answers
   precisely the rules it is correcting - between 769 and 820 the strip was
   never pinned and the hero's padding was never the mobile one.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
    #lmshero-urgency {
        position: static !important;
        top: auto !important;
        left: auto !important;
        right: auto !important;
        z-index: auto !important;
        width: auto !important;
        max-width: 100% !important;
        height: auto !important;
        display: inline-flex !important;
        padding: 6px 13px !important;
        margin: 0 0 14px !important;
        border: 1px solid rgba(22, 163, 74, .22) !important;
        border-radius: 980px !important;
        font-size: .74rem !important;
        overflow: visible !important;
    }

    /* 136px was 70 of bar plus 34 of pinned strip plus a 32 gap. With the
       strip in the flow it carries its own height, so what is left to clear
       is the bar and a breath: 70 + 16. */
    #lmshero { padding-top: 86px !important; }
}

/* ── course page: the "Free course" badge and the "Already Enrolled" state ──
   Quiet capsules in the page's own grey, the way Apple labels things: no
   shouting colour block, no uppercase, the status carried by a small tinted
   glyph. The enrolled button is the same capsule - it is a state, not an
   action, so it must not look like one. */
.course-badge-pro,
.course-badge-pro.free,
.course-badge-pro.premium {
    display: inline-flex !important; align-items: center !important; gap: .45rem !important;
    padding: 6px 12px 6px 10px !important; border-radius: 980px !important;
    background: #f5f5f7 !important; border: 1px solid rgba(0,0,0,.06) !important;
    color: #1d1d1f !important; font-size: .82rem !important; font-weight: 500 !important;
    letter-spacing: 0 !important; text-transform: none !important; line-height: 1.2 !important;
    box-shadow: none !important; margin-bottom: 0 !important;
}
.course-badge-pro i { font-size: .9em !important; }
.course-badge-pro.free i { color: #34c759 !important; }
.course-badge-pro.premium i { color: #ff9f0a !important; }

.enroll-button-pro[disabled] {
    background: #f5f5f7 !important; color: #1d1d1f !important;
    border: 1px solid rgba(0,0,0,.08) !important; border-radius: 980px !important;
    font-weight: 500 !important; font-size: .95rem !important; letter-spacing: 0 !important;
    text-transform: none !important; box-shadow: none !important; transform: none !important;
    opacity: 1 !important; cursor: default !important;
    display: inline-flex !important; align-items: center !important; justify-content: center !important; gap: .55rem !important;
    width: auto !important; min-width: 0 !important; padding: 11px 20px !important;
}
.enroll-button-pro[disabled] i { color: #34c759 !important; }
.enroll-button-pro[disabled]:hover { background: #f5f5f7 !important; transform: none !important; box-shadow: none !important; }

/* ── every button, the Apple way ───────────────────────────────────
   One shape for the whole site: a capsule, a single flat colour, regular
   weight, sentence case, no glow, no gradient, no lift on hover. Three
   roles only - filled blue for the action, quiet grey for the rest, red
   when something is destroyed. The exam pages keep their own tuned look;
   the Google and WhatsApp buttons keep the colours those brands require. */
.btn, .btn-primary, .btn-secondary, .btn-cancel, .btn-submit, .btn-save, .btn-full, .btn-sm, .btn-action, .btn-reset,
.btn-filter, .btn-export, .btn-pdf, .btn-c, .btn-qr-primary, .btn-qr-ghost, .btn-qr-blue, .btn-qr-green,
.nbtn, .hbtn, .hbtn-primary, .hbtn-outline, .lhbtn, .lhbtn-cta, .lhbtn-ghost,
.enroll-button-pro, .enrollment-cta, .cc-enroll, .course-action-btn, .create-course-btn, .empty-state-btn,
.rebuild-btn, .rebuild-btn-primary, .rebuild-btn-secondary, .admin-btn, .action-btn, .nav-button, .print-button,
.quiz-submit-button, .quiz-button, .quiz-button--primary, .form-submit, .forgot-btn, .soc-btn, .lk-btn, .quick-action,
.lang-btn, .lang-toggle-btn, .sidebar-toggle-btn,
.auth-page button[type="submit"], .modal-box button[type="submit"] {
    display: inline-flex !important; align-items: center !important; justify-content: center !important; gap: .5rem !important;
    border-radius: 980px !important;
    font-family: inherit !important; font-size: .95rem !important; font-weight: 500 !important;
    letter-spacing: 0 !important; text-transform: none !important; line-height: 1.2 !important;
    padding: 11px 22px !important; min-height: 42px !important;
    background-image: none !important; box-shadow: none !important; text-shadow: none !important;
    border: 1px solid transparent !important; text-decoration: none !important; cursor: pointer;
    transition: background-color .2s ease, color .2s ease, border-color .2s ease !important;
}
/* hover never lifts or glows */
.btn:hover, .btn-primary:hover, .btn-secondary:hover, .btn-cancel:hover, .btn-submit:hover, .btn-save:hover, .btn-full:hover, .btn-sm:hover,
.btn-action:hover, .btn-c:hover, .nbtn:hover, .hbtn:hover, .lhbtn:hover, .enroll-button-pro:hover, .enrollment-cta:hover, .cc-enroll:hover,
.course-action-btn:hover, .create-course-btn:hover, .empty-state-btn:hover, .rebuild-btn:hover, .admin-btn:hover, .action-btn:hover,
.nav-button:hover, .quiz-submit-button:hover, .quiz-button:hover, .form-submit:hover, .forgot-btn:hover, .soc-btn:hover, .quick-action:hover,
.auth-page button[type="submit"]:hover, .modal-box button[type="submit"]:hover {
    transform: none !important; box-shadow: none !important; filter: none !important; opacity: 1 !important;
}

/* the action: filled blue */
.btn-primary, .btn-submit, .btn-save, .btn-full, .btn-c, .btn-action, .btn-qr-primary, .btn-qr-blue,
.nbtn.solid, .hbtn.primary, .hbtn-primary, .lhbtn-cta, .lhbtn:not(.lhbtn-ghost),
.enroll-button-pro:not([disabled]), .enrollment-cta, .cc-enroll, .course-action-btn, .create-course-btn, .empty-state-btn,
.rebuild-btn-primary, .admin-btn, .quiz-submit-button, .quiz-button--primary, .form-submit, .forgot-btn, .lk-btn, .quick-action,
.auth-page button[type="submit"], .modal-box button[type="submit"] {
    background-color: var(--c, #0071e3) !important; border-color: var(--c, #0071e3) !important; color: #fff !important;
}
.btn-primary:hover, .btn-submit:hover, .btn-save:hover, .btn-full:hover, .btn-c:hover, .btn-action:hover, .btn-qr-primary:hover, .btn-qr-blue:hover,
.nbtn.solid:hover, .hbtn.primary:hover, .hbtn-primary:hover, .lhbtn-cta:hover, .lhbtn:not(.lhbtn-ghost):hover,
.enroll-button-pro:not([disabled]):hover, .enrollment-cta:hover, .cc-enroll:hover, .course-action-btn:hover, .create-course-btn:hover, .empty-state-btn:hover,
.rebuild-btn-primary:hover, .admin-btn:hover, .quiz-submit-button:hover, .quiz-button--primary:hover, .form-submit:hover, .forgot-btn:hover, .lk-btn:hover, .quick-action:hover,
.auth-page button[type="submit"]:hover, .modal-box button[type="submit"]:hover {
    background-color: var(--c2, #0077ed) !important; border-color: var(--c2, #0077ed) !important; color: #fff !important;
}
/* the rest: quiet grey */
.btn:not(.btn-primary):not(.btn-submit):not(.btn-save):not(.btn-full):not(.btn-c):not(.btn-action):not(.btn-danger):not(.btn-delete):not(.btn-qr-primary):not(.btn-qr-blue):not(.btn-qr-green),
.btn-secondary, .btn-cancel, .btn-reset, .btn-filter, .btn-export, .btn-pdf, .btn-qr-ghost,
.nbtn:not(.solid), .hbtn:not(.primary):not(.hbtn-primary), .hbtn-outline, .lhbtn-ghost, .rebuild-btn:not(.rebuild-btn-primary), .rebuild-btn-secondary,
.action-btn, .nav-button, .print-button, .quiz-button:not(.quiz-button--primary), .soc-btn, .lang-btn, .lang-toggle-btn, .sidebar-toggle-btn {
    background-color: #f5f5f7 !important; border-color: rgba(0,0,0,.08) !important; color: #1d1d1f !important;
}
.btn:not(.btn-primary):not(.btn-submit):not(.btn-save):not(.btn-full):not(.btn-c):not(.btn-action):not(.btn-danger):not(.btn-delete):not(.btn-qr-primary):not(.btn-qr-blue):not(.btn-qr-green):hover,
.btn-secondary:hover, .btn-cancel:hover, .btn-reset:hover, .btn-filter:hover, .btn-export:hover, .btn-pdf:hover, .btn-qr-ghost:hover,
.nbtn:not(.solid):hover, .hbtn:not(.primary):not(.hbtn-primary):hover, .hbtn-outline:hover, .lhbtn-ghost:hover, .rebuild-btn:not(.rebuild-btn-primary):hover, .rebuild-btn-secondary:hover,
.action-btn:hover, .nav-button:hover, .print-button:hover, .quiz-button:not(.quiz-button--primary):hover, .soc-btn:hover, .lang-btn:hover, .lang-toggle-btn:hover, .sidebar-toggle-btn:hover {
    background-color: #e8e8ed !important; border-color: rgba(0,0,0,.12) !important; color: #1d1d1f !important;
}
/* destruction: red, still flat */
.btn-danger, .btn-delete, .btn.danger { background-color: #ff3b30 !important; border-color: #ff3b30 !important; color: #fff !important; }
.btn-danger:hover, .btn-delete:hover, .btn.danger:hover { background-color: #e0352b !important; border-color: #e0352b !important; }
.btn-qr-green { background-color: #34c759 !important; border-color: #34c759 !important; color: #fff !important; }
/* the small ones keep their size, not their old look */
.btn-sm, .action-btn, .lang-btn, .lang-toggle-btn, .sidebar-toggle-btn, .nav-button { padding: 7px 14px !important; min-height: 34px !important; font-size: .85rem !important; }
.nbtn { padding: 8px 18px !important; min-height: 38px !important; height: 38px !important; font-size: .88rem !important; }
/* brand buttons keep the colours their brands require */
.g-signin-btn { border-radius: 980px !important; box-shadow: none !important; font-weight: 500 !important; text-transform: none !important; letter-spacing: 0 !important; }
.chat-whatsapp-btn { border-radius: 980px !important; box-shadow: none !important; font-weight: 500 !important; text-transform: none !important; letter-spacing: 0 !important; background-image: none !important; background-color: #25d366 !important; color: #fff !important; }
/* disabled: lighter, never greyed-out text on blue */
.btn[disabled], .btn-primary[disabled], .btn-submit[disabled], .form-submit[disabled], .quiz-submit-button[disabled] { opacity: .45 !important; cursor: not-allowed !important; transform: none !important; }
/* a full-width form button stays full width */
.btn-full, .form-submit, .auth-page button[type="submit"], .modal-box button[type="submit"], .enroll-button-pro { width: 100% !important; }
.enroll-button-pro[disabled] { width: auto !important; }

/* ── every icon, one voice ─────────────────────────────────────────
   Apple draws its glyphs in one weight and one ink: the text colour, or
   the blue when the icon is the thing to tap. So no gradient fills, no
   glowing discs, no shadows under glyphs. Where an icon sits in a disc,
   the disc is a quiet tint of the page grey or the blue. */
.fa, .fas, .far, .fab, [class^="fa-"], [class*=" fa-"] {
    background: none !important; -webkit-text-fill-color: currentColor !important; background-clip: border-box !important;
    text-shadow: none !important; filter: none !important;
}
/* glyphs inside buttons take the button's ink */
.btn i, .nbtn i, .hbtn i, .lhbtn i, .enroll-button-pro i, .form-submit i, .quiz-submit-button i, .admin-btn i, .course-action-btn i { color: inherit !important; }
/* stat and feature discs: a flat tint, the glyph in blue */
.stat-icon, .dstat-ico, .stat-ico, .quick-icon, .feat-icon-wrap, .ct-icon, .cert-icon, .benefit-icon, .stats-pill-icon, .resource-icon,
.ico-p, .ico-o, .ico-g, .ico-c, .cc-thumb-icon, .rc-icon, .question-icon, .otp-icon, .lk-ico, .empty-state-icon, .empty-icon,
.score-icon, .qr-score-icon, .qcr-ico, .wc-ico, .ps-ico, .lock-icon {
    background: rgba(0,113,227,.08) !important; background-image: none !important;
    color: var(--c, #0071e3) !important; border: 0 !important; box-shadow: none !important; border-radius: 14px !important;
    -webkit-text-fill-color: var(--c, #0071e3) !important;
}
.stat-icon i, .dstat-ico i, .stat-ico i, .quick-icon i, .feat-icon-wrap i, .ct-icon i, .cert-icon i, .benefit-icon i, .stats-pill-icon i, .resource-icon i,
.ico-p i, .ico-o i, .ico-g i, .ico-c i, .cc-thumb-icon i, .rc-icon i, .question-icon i, .otp-icon i, .lk-ico i, .empty-state-icon i, .empty-icon i,
.score-icon i, .qr-score-icon i, .qcr-ico i, .wc-ico i, .ps-ico i, .lock-icon i { color: var(--c, #0071e3) !important; -webkit-text-fill-color: var(--c, #0071e3) !important; }
/* round discs stay round */
.otp-icon, .success-icon, .cert-icon, .lock-icon { border-radius: 50% !important; }
/* done and locked carry their own meaning */
.success-icon { background: rgba(52,199,89,.12) !important; background-image: none !important; color: #34c759 !important; -webkit-text-fill-color: #34c759 !important; box-shadow: none !important; }
.success-icon i { color: #34c759 !important; -webkit-text-fill-color: #34c759 !important; }
.lock-icon, .lock-icon i { background: rgba(0,0,0,.05) !important; color: #86868b !important; -webkit-text-fill-color: #86868b !important; }
/* inline meta glyphs (lessons, students, level, rating) in the secondary ink */
.course-meta i, .meta i, .course-stats i, .stats i, .cm i, .course-info i { color: #6e6e73 !important; }
.course-meta .fa-star, .meta .fa-star, .rating i, .stars i { color: #ff9f0a !important; }
/* the nav and the footer: text ink */
.nav-link i, .nav-sim i, .mob-nav i, footer i, .f-links i { color: inherit !important; }

/* "Resend code" is a text link inside a sentence, not a second action button */
.otp-resend button, .otp-resend button[type="submit"], .modal-box .otp-resend button[type="submit"] {
    display: inline !important; width: auto !important; min-height: 0 !important; padding: 0 !important; margin: 0 !important;
    background: none !important; border: 0 !important; border-radius: 0 !important; color: var(--c, #0071e3) !important;
    font-size: .8rem !important; font-weight: 500 !important; text-decoration: underline !important; text-underline-offset: 2px;
}
.otp-resend button:hover { color: var(--c2, #0077ed) !important; background: none !important; }

/* ── the sign-in pages, the way Apple ID does them ─────────────────
   One white card on the page grey, a sentence-case title in the text
   face, fields with a soft corner and a blue focus ring, one blue pill,
   links in blue and nothing else coloured. No accent bar, no monospace,
   no uppercase labels, no glow. Login, register, the code page, forgot
   and reset all share it. */
.auth-page, .forgot-hero, .reset-hero { background: #f5f5f7 !important; min-height: calc(100vh - 70px) !important; padding: 56px 16px !important; display: flex !important; align-items: flex-start !important; justify-content: center !important; }
.forgot-hero::before, .reset-hero::before, .modal-box::before { display: none !important; content: none !important; }
.forgot-box, .reset-box { width: 100% !important; max-width: 440px !important; margin: 0 auto !important; padding: 0 !important; }
.auth-page .modal-box, .forgot-card, .reset-card {
    width: 100% !important; max-width: 440px !important; margin: 0 auto !important; box-sizing: border-box !important;
    background: #fff !important; border: 1px solid rgba(0,0,0,.07) !important; border-radius: 20px !important;
    padding: 40px 36px 34px !important; box-shadow: 0 10px 40px rgba(0,0,0,.06) !important; position: relative !important; overflow: visible !important;
}
@media (max-width: 480px) { .auth-page .modal-box, .forgot-card, .reset-card { padding: 30px 22px 26px !important; border-radius: 16px !important; } .auth-page, .forgot-hero, .reset-hero { padding: 28px 12px !important; } }

/* titles and the line under them */
.m-title, .forgot-title, .reset-title {
    font-family: inherit !important; font-size: 1.7rem !important; font-weight: 600 !important; letter-spacing: -.02em !important; line-height: 1.15 !important;
    color: #1d1d1f !important; text-transform: none !important; margin: 0 0 .35rem !important; text-align: center !important; background: none !important; -webkit-text-fill-color: #1d1d1f !important;
}
.m-sub, .forgot-subtitle, .reset-subtitle { font-size: .98rem !important; color: #6e6e73 !important; margin: 0 0 1.6rem !important; text-align: center !important; letter-spacing: 0 !important; text-transform: none !important; }
.info-text { font-size: .9rem !important; color: #6e6e73 !important; line-height: 1.55 !important; margin: 0 0 1.4rem !important; text-align: center !important; }

/* the Sign In / Register switch: a segmented control */
.m-tabs { display: flex !important; background: rgba(0,0,0,.06) !important; border-radius: 12px !important; padding: 3px !important; gap: 0 !important; margin: 0 0 1.6rem !important; }
.m-tab { flex: 1 !important; padding: 8px 10px !important; min-height: 36px !important; border-radius: 10px !important; border: 0 !important; background: transparent !important; color: #1d1d1f !important;
    font-size: .9rem !important; font-weight: 500 !important; letter-spacing: 0 !important; text-transform: none !important; cursor: pointer; transition: background .2s ease, box-shadow .2s ease !important; }
.m-tab.on { background: #fff !important; color: #1d1d1f !important; box-shadow: 0 1px 3px rgba(0,0,0,.14), 0 0 0 .5px rgba(0,0,0,.04) !important; }
.m-tab:hover:not(.on) { background: rgba(255,255,255,.5) !important; }

/* labels, fields, focus */
.flbl, .form-label { display: block !important; font-size: .84rem !important; font-weight: 500 !important; color: #1d1d1f !important; text-transform: none !important; letter-spacing: 0 !important; margin: 0 0 6px !important; }
.flbl .forgot, .forgot { float: right !important; font-size: .82rem !important; font-weight: 400 !important; color: var(--c, #0071e3) !important; text-decoration: none !important; }
.flbl .forgot:hover, .forgot:hover { text-decoration: underline !important; }
.fgrp, .form-group { margin: 0 0 1rem !important; }
.finp, .form-input, .otp-input, .auth-page input[type="email"], .auth-page input[type="password"], .auth-page input[type="text"], .auth-page input[type="tel"], .auth-page select {
    width: 100% !important; box-sizing: border-box !important; height: 46px !important; padding: 10px 14px !important;
    background: #fff !important; border: 1px solid #d2d2d7 !important; border-radius: 12px !important;
    color: #1d1d1f !important; font-family: inherit !important; font-size: 1rem !important; line-height: 1.3 !important;
    box-shadow: none !important; outline: none !important; transition: border-color .2s ease, box-shadow .2s ease !important;
}
textarea.finp { height: auto !important; min-height: 110px !important; }
.finp:focus, .form-input:focus, .otp-input:focus, .auth-page input:focus, .auth-page select:focus { border-color: var(--c, #0071e3) !important; box-shadow: 0 0 0 4px rgba(0,113,227,.16) !important; background: #fff !important; }
.finp::placeholder, .form-input::placeholder, .otp-input::placeholder { color: #a1a1a6 !important; opacity: 1 !important; }
.form-input.error, .finp.error { border-color: #ff3b30 !important; }
.error-message, .form-err.show { color: #ff3b30 !important; font-size: .82rem !important; background: none !important; border: 0 !important; padding: 4px 0 0 !important; }
.auth-page input[type="checkbox"] { width: 18px !important; height: 18px !important; accent-color: var(--c, #0071e3) !important; }

/* the code page */
.otp-icon { width: 60px !important; height: 60px !important; margin: 0 auto 1.1rem !important; border-radius: 50% !important; background: rgba(0,113,227,.1) !important; background-image: none !important; color: var(--c, #0071e3) !important; -webkit-text-fill-color: var(--c, #0071e3) !important; box-shadow: none !important; font-size: 1.5rem !important; }
.otp-sent { color: #6e6e73 !important; font-size: .9rem !important; margin: 0 0 .7rem !important; }
.otp-input { height: 58px !important; text-align: center !important; font-size: 1.7rem !important; font-weight: 500 !important; letter-spacing: .42em !important; padding-left: calc(14px + .42em) !important; font-variant-numeric: tabular-nums; }
.otp-timer { font-family: inherit !important; font-size: .85rem !important; font-weight: 500 !important; letter-spacing: 0 !important; color: #6e6e73 !important; margin: 0 0 1.3rem !important; }
.otp-timer.expired { color: #ff3b30 !important; font-weight: 500 !important; }
.otp-resend { margin-top: 1.1rem !important; font-size: .85rem !important; color: #6e6e73 !important; }
.otp-back { display: inline-block !important; margin-top: .9rem !important; font-size: .85rem !important; color: var(--c, #0071e3) !important; text-decoration: none !important; }
.otp-back:hover { text-decoration: underline !important; }
.otp-back i { font-size: .8em; }

/* dividers, Google, the line under the form */
.g-divider, .divider { display: flex !important; align-items: center !important; gap: .75rem !important; margin: 1.3rem 0 !important; color: #86868b !important; font-size: .82rem !important; text-transform: none !important; letter-spacing: 0 !important; }
.g-divider::before, .g-divider::after { content: '' !important; flex: 1 !important; height: 1px !important; background: rgba(0,0,0,.1) !important; }
.divider::before, .divider::after { background: rgba(0,0,0,.1) !important; }
.g-signin-btn { width: 100% !important; height: 44px !important; padding: 0 16px !important; background: #fff !important; color: #1d1d1f !important; border: 1px solid #d2d2d7 !important; border-radius: 980px !important; font-size: .95rem !important; font-weight: 500 !important; box-shadow: none !important; }
.g-signin-btn:hover { background: #f5f5f7 !important; border-color: #c7c7cc !important; transform: none !important; box-shadow: none !important; }
.footer-link, .auth-page .modal-box > p { font-size: .85rem !important; color: #6e6e73 !important; text-align: center !important; margin-top: 1.4rem !important; }
.footer-link a, .auth-page .modal-box > p a { color: var(--c, #0071e3) !important; text-decoration: none !important; font-weight: 500 !important; }
.footer-link a:hover, .auth-page .modal-box > p a:hover { text-decoration: underline !important; }
/* the two-column name row on register keeps its gap */
.form-row2 { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 12px !important; }

/* ── "What you will learn": a plain list, two columns, a hairline between rows ── */
.description-section .section-heading { font-size: 1.45rem !important; font-weight: 600 !important; letter-spacing: -.02em !important; color: #1d1d1f !important; padding: 0 !important; margin: 0 0 .9rem !important; background: none !important; -webkit-text-fill-color: #1d1d1f !important; }
.description-section .section-heading::before, .description-section .section-heading::after { display: none !important; content: none !important; }
.curriculum-list { display: grid !important; grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 0 36px !important; margin: 0 0 1.5rem !important; }
.curriculum-item { display: flex !important; align-items: flex-start !important; gap: .7rem !important; padding: 13px 2px !important; margin: 0 !important; background: none !important; border: 0 !important; border-bottom: 1px solid rgba(0,0,0,.08) !important; border-radius: 0 !important; box-shadow: none !important; transform: none !important; font-size: .97rem !important; line-height: 1.5 !important; color: #1d1d1f !important; }
.curriculum-item:hover { background: none !important; border-color: rgba(0,0,0,.08) !important; }
.curriculum-item i { color: var(--c, #0071e3) !important; -webkit-text-fill-color: var(--c, #0071e3) !important; font-size: 1.05rem !important; margin-top: 3px !important; flex: none !important; }
.curriculum-item span { color: #1d1d1f !important; }
@media (max-width: 760px) { .curriculum-list { grid-template-columns: minmax(0, 1fr) !important; } }

/* form-fields.css reaches every text field with a nine-:not() selector; this is the same reach, one step stronger, in the Apple shape */
body input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]), body select, body textarea { background: #fff !important; border: 1px solid #d2d2d7 !important; border-radius: 12px !important; color: #1d1d1f !important; box-shadow: none !important; }
body input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"]):focus, body select:focus, body textarea:focus { border-color: var(--c, #0071e3) !important; box-shadow: 0 0 0 4px rgba(0,113,227,.16) !important; }
body input:not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):not([type="color"]):not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="image"])::placeholder, body textarea::placeholder { color: #a1a1a6 !important; opacity: 1 !important; }
/* the two delivery rows on the code page live here too, so they do not depend on the view */
.otp-channels { list-style: none !important; margin: 0 0 1rem !important; padding: 0 !important; display: flex !important; flex-direction: column !important; gap: .5rem !important; text-align: left !important; }
.otp-channels li { display: flex !important; align-items: center !important; gap: .7rem !important; padding: .6rem .8rem !important; border: 1px solid rgba(0,0,0,.08) !important; border-radius: 14px !important; background: #f5f5f7 !important; margin: 0 !important; }
.otp-channels .och { width: 34px !important; height: 34px !important; border-radius: 50% !important; display: grid !important; place-items: center !important; background: rgba(0,113,227,.1) !important; color: #0071e3 !important; -webkit-text-fill-color: #0071e3 !important; font-size: 1rem !important; flex: none !important; }
.otp-channels .och.wa { background: rgba(37,211,102,.14) !important; color: #1faa53 !important; -webkit-text-fill-color: #1faa53 !important; }
.otp-channels .och i { color: inherit !important; -webkit-text-fill-color: inherit !important; }
.otp-channels b { display: block !important; font-size: .85rem !important; color: #1d1d1f !important; font-weight: 600 !important; }
.otp-channels small { display: block !important; font-size: .78rem !important; color: #6e6e73 !important; word-break: break-all !important; }

/* the cards on the forgot and reset pages drew their own accent bar; the subtitle already says what the info line repeats */
.forgot-card::before, .forgot-card::after, .reset-card::before, .reset-card::after { display: none !important; content: none !important; }
.forgot-card .info-text { display: none !important; }

/* the featured-course card button: the home page sets its colour under [data-theme=light] with !important, so this is written one notch stronger */
html:not(#_) .cc-enroll, html:not(#_) [data-theme="light"] .cc-enroll { background: var(--c, #0071e3) !important; border: 1px solid var(--c, #0071e3) !important; color: #fff !important; border-radius: 980px !important; padding: 9px 18px !important; min-height: 38px !important; font-size: .9rem !important; font-weight: 500 !important; letter-spacing: 0 !important; text-transform: none !important; box-shadow: none !important; }
html:not(#_) .cc-enroll:hover { background: var(--c2, #0077ed) !important; border-color: var(--c2, #0077ed) !important; color: #fff !important; transform: none !important; }

/* ── the certification path: four quiet cards, one blue, no light show ── */
.cj-step, .cj-step--elite { --c1: var(--c, #0071e3) !important; }
.cj-rail { height: 1px !important; background: rgba(0,0,0,.12) !important; opacity: 1 !important; animation: none !important; top: 15px !important; }
.cj-node { width: 12px !important; height: 12px !important; top: 9px !important; background: var(--c, #0071e3) !important; border: 2px solid #fff !important; box-shadow: 0 0 0 1px rgba(0,0,0,.08) !important; animation: none !important; }
.cj-card, .cj-step--elite .cj-card {
    background: #fff !important; border: 1px solid rgba(0,0,0,.08) !important; border-radius: 20px !important; padding: 1.6rem 1.5rem !important;
    box-shadow: none !important; transform: none !important; animation: none !important; overflow: hidden !important;
}
.cj-card::before, .cj-card::after, .cj-step--elite .cj-card::before, .cj-step--elite .cj-card::after { display: none !important; content: none !important; animation: none !important; }
.cj-card:hover, .cj-step--elite .cj-card:hover { transform: none !important; border-color: rgba(0,0,0,.14) !important; box-shadow: 0 10px 30px rgba(0,0,0,.06) !important; }
.cj-tier { font-family: inherit !important; font-size: .78rem !important; font-weight: 500 !important; letter-spacing: 0 !important; text-transform: none !important; color: #1d1d1f !important; background: #f5f5f7 !important; border: 1px solid rgba(0,0,0,.06) !important; border-radius: 980px !important; padding: 5px 11px !important; }
.cj-name, .cj-step--elite .cj-name { font-family: inherit !important; font-size: 1.6rem !important; font-weight: 600 !important; letter-spacing: -.02em !important; color: #1d1d1f !important; -webkit-text-fill-color: #1d1d1f !important; background: none !important; }
.cj-focus { color: #6e6e73 !important; font-size: .92rem !important; }
.cj-meta li { color: #1d1d1f !important; font-size: .9rem !important; }
.cj-meta i { color: #6e6e73 !important; -webkit-text-fill-color: #6e6e73 !important; }
.cj-sal { border-top: 1px solid rgba(0,0,0,.08) !important; }
.cj-sal span { font-size: .78rem !important; color: #6e6e73 !important; letter-spacing: 0 !important; text-transform: none !important; }
.cj-sal b { color: var(--c, #0071e3) !important; letter-spacing: 0 !important; text-transform: none !important; font-size: .8rem !important; font-weight: 600 !important; }
.cj-bars i { background: rgba(0,0,0,.08) !important; box-shadow: none !important; height: 5px !important; }
.cj-bars i.on { background: var(--c, #0071e3) !important; box-shadow: none !important; }
.cj-elite-badge { font-family: inherit !important; font-size: .7rem !important; font-weight: 600 !important; letter-spacing: 0 !important; text-transform: none !important; color: #1d1d1f !important; background: #f5f5f7 !important; border: 1px solid rgba(0,0,0,.06) !important; box-shadow: none !important; animation: none !important; }
.cj-eyebrow, .cj-title { font-family: inherit !important; }
.cj-eyebrow { font-size: .8rem !important; font-weight: 600 !important; letter-spacing: 0 !important; text-transform: none !important; color: #6e6e73 !important; }
.cj-title { font-weight: 600 !important; letter-spacing: -.02em !important; color: #1d1d1f !important; }
.cj-title span { background: none !important; -webkit-text-fill-color: var(--c, #0071e3) !important; color: var(--c, #0071e3) !important; }
.cj { background: #f5f5f7 !important; }

/* ── what students say: a plain quote card ── */
.tcard { background: #fff !important; border: 1px solid rgba(0,0,0,.08) !important; border-radius: 20px !important; box-shadow: none !important; animation: none !important; padding: 1.7rem !important; }
.tcard::before, .tcard::after { display: none !important; content: none !important; }
.tcard:hover { transform: none !important; border-color: rgba(0,0,0,.14) !important; box-shadow: 0 10px 30px rgba(0,0,0,.06) !important; }
.tcard .t-quote, .tcard .t-mark, .tcard .fa-quote-left, .tcard .fa-quote-right, .tcard .quote-mark { display: none !important; }
.t-stars { color: #ff9f0a !important; letter-spacing: 1px !important; font-size: .8rem !important; }
.t-text { font-style: normal !important; font-size: .98rem !important; line-height: 1.6 !important; color: #1d1d1f !important; }
.t-av, .t-av--blue, .t-av--orange, .t-av--green { background: rgba(0,113,227,.1) !important; background-image: none !important; color: var(--c, #0071e3) !important; font-family: inherit !important; font-weight: 600 !important; font-size: .8rem !important; box-shadow: none !important; }
.t-name { color: #1d1d1f !important; font-weight: 600 !important; font-size: .95rem !important; }
.t-cert { color: #6e6e73 !important; font-size: .8rem !important; }

/* ── the floating help button: one solid blue disc, a white glyph ── */
#chat-btn, html[data-theme] #chat-btn, [data-theme="light"] #chat-btn {
    width: 56px !important; height: 56px !important; border-radius: 50% !important; padding: 0 !important;
    background: var(--c, #0071e3) !important; background-image: none !important; border: 0 !important; color: #fff !important;
    box-shadow: 0 8px 24px rgba(0,113,227,.32) !important; display: grid !important; place-items: center !important; animation: none !important;
}
#chat-btn:hover, html[data-theme] #chat-btn:hover { background: var(--c2, #0077ed) !important; transform: none !important; }
#chat-btn .lc-gem, [data-theme="light"] #chat-btn .lc-gem { width: auto !important; height: auto !important; background: none !important; border: 0 !important; box-shadow: none !important; animation: none !important; display: grid !important; place-items: center !important; }
#chat-btn i, [data-theme="light"] #chat-btn i, #chat-btn .lc-gem i { color: #fff !important; -webkit-text-fill-color: #fff !important; font-size: 1.35rem !important; }
#chat-btn .lc-tip, #chat-btn .chat-btn-tip { background: #1d1d1f !important; color: #fff !important; border: 0 !important; border-radius: 10px !important; font-size: .78rem !important; font-weight: 500 !important; letter-spacing: 0 !important; text-transform: none !important; }
#lc-badge { background: #ff3b30 !important; color: #fff !important; border: 2px solid #fff !important; }

/* ── section eyebrows and headings, site-wide: text face, sentence case ── */
.sec-eyebrow, .qcr-eyebrow, .cj-eyebrow, .lh-eyebrow, .ts-eyebrow { font-family: inherit !important; font-size: .85rem !important; font-weight: 600 !important; letter-spacing: 0 !important; text-transform: none !important; color: #6e6e73 !important; }
.sec-eyebrow i, .qcr-eyebrow i { color: var(--c, #0071e3) !important; }
.sec-h2, .qcr-title, .ts-title { font-family: inherit !important; font-weight: 600 !important; letter-spacing: -.02em !important; color: #1d1d1f !important; }
.sec-h2 .accent, .qcr-title em { background: none !important; -webkit-text-fill-color: var(--c, #0071e3) !important; color: var(--c, #0071e3) !important; font-style: normal !important; }

/* ── what students say: a plain quote card (the live classes are ts-*) ── */
.ts-card { background: #fff !important; background-image: none !important; border: 1px solid rgba(0,0,0,.08) !important; border-radius: 20px !important; box-shadow: none !important; padding: 1.7rem 1.7rem 1.5rem !important; }
.ts-card::before, .ts-card::after { display: none !important; content: none !important; }
.ts-card:hover { transform: none !important; border-color: rgba(0,0,0,.14) !important; box-shadow: 0 10px 30px rgba(0,0,0,.06) !important; }
.ts-quote { display: none !important; }
.ts-stars { color: #ff9f0a !important; letter-spacing: 1px !important; font-size: .82rem !important; margin-bottom: .9rem !important; }
.ts-text { font-style: normal !important; font-size: 1rem !important; line-height: 1.6 !important; color: #1d1d1f !important; }
.ts-av, .ts-card .ts-av[style] { background: rgba(0,113,227,.1) !important; background-image: none !important; color: var(--c, #0071e3) !important; font-family: inherit !important; font-weight: 600 !important; font-size: .85rem !important; }
.ts-name { font-family: inherit !important; color: #1d1d1f !important; font-weight: 600 !important; }
.ts-cert { color: #6e6e73 !important; }

.qcr-list { gap: 0 !important; border-top: 1px solid rgba(0,0,0,.08) !important; }
.qcr-row { background: none !important; border: 0 !important; border-bottom: 1px solid rgba(0,0,0,.08) !important; border-radius: 0 !important; padding: 1.1rem .2rem !important; box-shadow: none !important; }
.qcr-row:hover { transform: none !important; background: none !important; border-color: rgba(0,0,0,.08) !important; box-shadow: none !important; }
.qcr-ico { border: 0 !important; border-radius: 12px !important; background: rgba(0,113,227,.09) !important; color: var(--c, #0071e3) !important; }
.qcr-h { font-family: inherit !important; font-weight: 600 !important; font-size: 1.02rem !important; color: #1d1d1f !important; }
.qcr-p { color: #6e6e73 !important; font-size: .9rem !important; }
.qcr-val, .qcr-val--txt { font-family: inherit !important; font-weight: 500 !important; font-size: .95rem !important; letter-spacing: 0 !important; text-transform: none !important; background: none !important; -webkit-text-fill-color: #6e6e73 !important; color: #6e6e73 !important; }
.qcr-val--live { color: #34c759 !important; -webkit-text-fill-color: #34c759 !important; }
.qcr-val--live::before { background: #34c759 !important; box-shadow: none !important; animation: none !important; }

/* ── FAQ: one list, hairlines between questions, a chevron at the end ── */
.faq-grid { gap: 0 !important; border-top: 1px solid rgba(0,0,0,.1) !important; }
.faq-item { background: none !important; border: 0 !important; border-bottom: 1px solid rgba(0,0,0,.1) !important; border-radius: 0 !important; box-shadow: none !important; padding: 0 !important; transform: none !important; }
.faq-item:hover { background: none !important; border-color: rgba(0,0,0,.1) !important; box-shadow: none !important; transform: none !important; }
.faq-header { display: flex !important; flex-direction: row-reverse !important; justify-content: space-between !important; align-items: center !important; gap: 1rem !important; padding: 1.25rem .25rem !important; cursor: pointer; }
.faq-question { font-family: inherit !important; font-size: 1.08rem !important; font-weight: 500 !important; color: #1d1d1f !important; margin: 0 !important; letter-spacing: -.01em !important; }
.faq-item:hover .faq-question { color: #1d1d1f !important; }
.faq-toggle { width: 28px !important; height: 28px !important; flex: none !important; border: 0 !important; background: none !important; color: #6e6e73 !important; box-shadow: none !important; transform: none !important; }
.faq-item:hover .faq-toggle, .faq-item[data-faq-open] .faq-toggle { background: none !important; color: var(--c, #0071e3) !important; border: 0 !important; }
.faq-toggle svg { width: 18px !important; height: 18px !important; stroke-width: 2 !important; transition: transform .25s ease; }
.faq-item[data-faq-open] .faq-toggle svg { transform: rotate(180deg) !important; }
.faq-answer { color: #6e6e73 !important; font-size: .98rem !important; line-height: 1.65 !important; padding: 0 .25rem !important; }
.faq-item[data-faq-open] .faq-answer { padding: 0 3rem 1.3rem .25rem !important; }

/* FAQ again, one notch stronger: the home page tints the rows under [data-theme=light] with !important */
html:not(#_) .faq-item, html:not(#_) [data-theme="light"] .faq-item { background: none !important; border: 0 !important; border-bottom: 1px solid rgba(0,0,0,.1) !important; border-radius: 0 !important; margin: 0 !important; padding: 0 !important; box-shadow: none !important; }
html:not(#_) .faq-item:hover { background: none !important; border-color: rgba(0,0,0,.1) !important; }
html:not(#_) .faq-question { font-family: var(--font-sans) !important; font-size: 1.05rem !important; font-weight: 500 !important; letter-spacing: -.01em !important; color: #1d1d1f !important; }
html:not(#_) .faq-answer { font-family: var(--font-sans) !important; }


/* each line slides in, stays, and the whole log clears before the loop repeats */
@keyframes qcrLine { 0% { opacity: 0; transform: translateX(8px); } 6% { opacity: 1; transform: none; } 80% { opacity: 1; transform: none; } 88%, 100% { opacity: 0; transform: translateX(-6px); } }
@media (max-width: 520px) { .qcr-log { width: 196px; padding: 10px 12px 8px; } .qcr-log li { font-size: .72rem; grid-template-columns: 46px 1fr 14px; } .qcr-chip b { font-size: 1.3rem; } }
@media (prefers-reduced-motion: reduce) { .qcr-photo img, .qcr-leds, .qcr-leds i, .qcr-log-h .dot, .qcr-log li { animation: none !important; } .qcr-log li { opacity: 1; transform: none; } }


/* ── the mark: two rings, dark and blue, that trade places ──────────
   The old glyph pulsed, floated and carried a drop shadow; the rings do
   one thing - every few seconds they swap sides, one passing behind the
   other - and otherwise sit still. */
.nav-logo { gap: 11px !important; }
.logo-hex, .qc-rings { width: 42px !important; height: 38px !important; animation: none !important; filter: none !important; }
.nav-logo:hover .logo-hex { animation: none !important; }
.qc-rings .ring { transform-box: fill-box; transform-origin: center; }
.qc-rings .ring-a { stroke: #1d1d1f; animation: qcSwapA 5.2s cubic-bezier(.65,0,.35,1) infinite; }
.qc-rings .ring-b { stroke: var(--c, #0071e3); animation: qcSwapB 5.2s cubic-bezier(.65,0,.35,1) infinite; }
@keyframes qcSwapA { 0%, 28% { transform: translateX(0) scale(1); } 42% { transform: translateX(7px) scale(.86); } 56%, 78% { transform: translateX(14px) scale(1); } 90% { transform: translateX(7px) scale(1.08); } 100% { transform: translateX(0) scale(1); } }
@keyframes qcSwapB { 0%, 28% { transform: translateX(0) scale(1); } 42% { transform: translateX(-7px) scale(1.08); } 56%, 78% { transform: translateX(-14px) scale(1); } 90% { transform: translateX(-7px) scale(.86); } 100% { transform: translateX(0) scale(1); } }
.nav-logo:hover .qc-rings .ring-a, .nav-logo:hover .qc-rings .ring-b { animation-duration: 2.6s; }
@media (prefers-reduced-motion: reduce) { .qc-rings .ring-a, .qc-rings .ring-b { animation: none !important; } }
/* on a dark bar the dark ring turns white */
[data-theme="dark"] .qc-rings .ring-a, .navbar.dark .qc-rings .ring-a, footer .qc-rings .ring-a { stroke: #fff; }
/* the wordmark: sentence case, the text face, no spacing tricks */
.logo-text { font-family: var(--font-sans) !important; font-size: 1.12rem !important; font-weight: 600 !important; letter-spacing: -.02em !important; text-transform: none !important; color: #1d1d1f !important; line-height: 1.1 !important; background: none !important; -webkit-text-fill-color: #1d1d1f !important; }
.logo-text span:not(.w1):not(.w2) { color: inherit !important; -webkit-text-fill-color: inherit !important; }
.logo-sub { font-family: var(--font-sans) !important; font-size: .62rem !important; font-weight: 500 !important; letter-spacing: .14em !important; text-transform: uppercase !important; color: #86868b !important; margin-top: 3px !important; }
@media (max-width: 480px) { .logo-sub { display: none !important; } .logo-text { font-size: 1rem !important; } }

/* the wordmark in the two inks of the rings, trading colours on the same beat */
.logo-text .w1 { color: #1d1d1f; -webkit-text-fill-color: #1d1d1f; animation: qcInkA 5.2s cubic-bezier(.65,0,.35,1) infinite; }
.logo-text .w2 { color: #0071e3; -webkit-text-fill-color: #0071e3; animation: qcInkB 5.2s cubic-bezier(.65,0,.35,1) infinite; }
@keyframes qcInkA { 0%, 28% { color: #1d1d1f; -webkit-text-fill-color: #1d1d1f; } 56%, 78% { color: #0071e3; -webkit-text-fill-color: #0071e3; } 100% { color: #1d1d1f; -webkit-text-fill-color: #1d1d1f; } }
@keyframes qcInkB { 0%, 28% { color: #0071e3; -webkit-text-fill-color: #0071e3; } 56%, 78% { color: #1d1d1f; -webkit-text-fill-color: #1d1d1f; } 100% { color: #0071e3; -webkit-text-fill-color: #0071e3; } }
.nav-logo:hover .logo-text .w1, .nav-logo:hover .logo-text .w2 { animation-duration: 2.6s; }
[data-theme="dark"] .logo-text .w1, footer .logo-text .w1 { animation: none; color: #fff !important; -webkit-text-fill-color: #fff !important; }
@media (prefers-reduced-motion: reduce) { .logo-text .w1, .logo-text .w2 { animation: none !important; } }

/* ── phones: the sign-in pages clear the fixed bar, the checkbox is a checkbox, long links wrap ── */
@media (max-width: 760px) { .auth-page, .forgot-hero, .reset-hero { padding: 96px 12px 48px !important; min-height: 0 !important; align-items: flex-start !important; } }
@media (max-width: 420px) { .form-row2 { grid-template-columns: 1fr !important; } }
.auth-page input[type="checkbox"], .modal-box input[type="checkbox"], body input[type="checkbox"] { width: 18px !important; height: 18px !important; min-height: 0 !important; min-width: 0 !important; padding: 0 !important; margin: 0 !important; border-radius: 4px !important; border: 1.5px solid #c7c7cc !important; background: #fff !important; box-shadow: none !important; accent-color: var(--c, #0071e3) !important; flex: none !important; }
.auth-page label.fgrp { display: flex !important; align-items: center !important; gap: .6rem !important; font-size: .9rem !important; color: #1d1d1f !important; }
.flbl { display: flex !important; justify-content: space-between !important; align-items: baseline !important; }
.flbl .forgot { float: none !important; }
.course-description, .description-section p, .description-text, .course-desc, .lesson-content p, .f-desc { overflow-wrap: anywhere; word-break: break-word; }
/* the footer carries the same mark */
.f-brand { display: flex !important; align-items: center !important; gap: 10px !important; font-family: var(--font-sans) !important; font-size: 1.1rem !important; font-weight: 600 !important; letter-spacing: -.02em !important; text-transform: none !important; color: inherit !important; }
.f-brand .qc-rings { width: 36px !important; height: 33px !important; flex: none; }
.f-brand .qc-rings .ring-a { stroke: currentColor; }
.f-brand .w1 { color: inherit; } .f-brand .w2 { color: var(--c, #0071e3); }
@media (max-width: 760px) { .nav-inner { padding-left: 14px !important; padding-right: 14px !important; } .logo-hex, .qc-rings { width: 36px !important; height: 33px !important; } .logo-text { font-size: 1rem !important; } }

/* contact form: sentence-case dark labels, no accent bar on the card; footer wordmark in the footer ink */
.contact-wrapper .form-group label, .contact-wrapper label { font-family: var(--font-sans) !important; font-size: .84rem !important; font-weight: 500 !important; letter-spacing: 0 !important; text-transform: none !important; color: #1d1d1f !important; }
.contact-wrapper .contact-form-card::before, .contact-wrapper .form-card::before, .contact-wrapper form::before, .contact-wrapper [class*="form"]::before { display: none !important; content: none !important; }
.f-brand .w1 { color: #1d1d1f !important; -webkit-text-fill-color: #1d1d1f !important; animation: none !important; }
.f-brand .w2 { animation: none !important; }
[data-theme="dark"] .f-brand .w1 { color: #fff !important; -webkit-text-fill-color: #fff !important; }

html:not(#_) .f-brand .w1, html:not(#_) [data-theme="light"] .f-brand .w1, html:not(#_) .f-brand .w1 span { color: #1d1d1f !important; -webkit-text-fill-color: #1d1d1f !important; }
html:not(#_) .f-brand .w2 { color: var(--c, #0071e3) !important; -webkit-text-fill-color: var(--c, #0071e3) !important; }

/* the device tabs on the simulator page scroll sideways on a phone instead of hiding */
@media (max-width: 760px) { .sim-tabs { display: flex !important; flex-wrap: nowrap !important; overflow-x: auto !important; -webkit-overflow-scrolling: touch; scrollbar-width: none; gap: 8px !important; padding: 0 0 4px !important; } .sim-tabs::-webkit-scrollbar { display: none; } .sim-tab { flex: none !important; } }

/* the simulator page on a phone: its content started under the fixed bar */
@media (max-width: 760px) { .sim-page { padding-top: 86px !important; } }

/* ── the brand artwork: the QC mark and its wordmark in the bar, the lockup in the footer ── */
.nav-logo { gap: 10px !important; align-items: center !important; }
.logo-hex.qc-mark, .qc-mark { width: auto !important; height: 40px !important; max-width: none !important; animation: none !important; filter: none !important; display: block; }
.logo-word { height: 20px !important; width: auto !important; display: block; animation: none !important; }
@media (max-width: 760px) { .logo-hex.qc-mark, .qc-mark { height: 34px !important; } .logo-word { height: 17px !important; } }
@media (max-width: 360px) { .logo-word { display: none !important; } }
.f-brand { display: block !important; }
.f-brand img { display: block; width: 200px !important; max-width: 70vw !important; height: auto !important; }

/* ── the mark: Q and C meeting at a node ─────────────────────────────
   Every six seconds the C slides in to meet the Q; the moment they touch
   the node lights and a ring ripples out, the tail draws itself; then it
   holds and lets go again. Still under prefers-reduced-motion. */
.logo-hex.qc-one, .qc-one { width: 62px !important; height: 35px !important; display: block; animation: none !important; filter: none !important; overflow: visible; }
.qc-one .qc-q { fill: none; stroke: #0b2a5b; stroke-width: 16; }
.qc-one .qc-c { fill: none; stroke: var(--c, #0071e3); stroke-width: 16; stroke-linecap: round; transform-box: view-box; transform-origin: 110px 60px; animation: qcWrap 6s cubic-bezier(.65,0,.35,1) infinite; }
.qc-one .qc-tail { fill: none; stroke: #0b2a5b; stroke-width: 16; stroke-linecap: round; }
.qc-one .qc-nodebg { fill: #fff; }
.qc-one .qc-node { fill: var(--c, #0071e3); }
.qc-one .qc-halo { fill: none; stroke: var(--c, #0071e3); stroke-width: 3; animation: qcHalo 6s ease-out infinite; transform-box: fill-box; transform-origin: center; }
/* the C grows and wraps the Q from the outside, as if to cover it, then settles back into its letter */
@keyframes qcWrap { 0%, 12% { transform: translate(0, 0) scale(1); } 38%, 60% { transform: translate(-40px, 0) scale(1.5); } 86%, 100% { transform: translate(0, 0) scale(1); } }
@keyframes qcTail { 0%, 14% { stroke-dashoffset: 100; } 30%, 82% { stroke-dashoffset: 0; } 94%, 100% { stroke-dashoffset: 100; } }
@keyframes qcNode { 0%, 20% { transform: scale(0); opacity: 0; } 27% { transform: scale(1.25); opacity: 1; } 32%, 84% { transform: scale(1); opacity: 1; } 92%, 100% { transform: scale(0); opacity: 0; } }
@keyframes qcHalo { 0%, 84% { transform: scale(.6); opacity: 0; } 87% { opacity: .9; } 100% { transform: scale(3.2); opacity: 0; } }
.nav-logo:hover .qc-one .qc-c, .nav-logo:hover .qc-one .qc-tail, .nav-logo:hover .qc-one .qc-node, .nav-logo:hover .qc-one .qc-nodebg, .nav-logo:hover .qc-one .qc-halo { animation-duration: 3s; }
@media (prefers-reduced-motion: reduce) {
    .qc-one .qc-c, .qc-one .qc-tail, .qc-one .qc-node, .qc-one .qc-nodebg, .qc-one .qc-halo { animation: none !important; }
    .qc-one .qc-c { transform: none; } .qc-one .qc-halo { opacity: 0; }
}
/* on a dark bar the navy becomes white */
[data-theme="dark"] .qc-one .qc-q, [data-theme="dark"] .qc-one .qc-tail, footer .qc-one .qc-q, footer .qc-one .qc-tail { stroke: #fff; }
footer .qc-one .qc-nodebg { fill: #0b1d3a; }
.nav-logo { gap: 10px !important; }
.logo-text { font-family: var(--font-sans) !important; font-size: 1.12rem !important; font-weight: 600 !important; letter-spacing: -.02em !important; text-transform: none !important; color: #1d1d1f !important; -webkit-text-fill-color: #1d1d1f !important; line-height: 1.1 !important; }
.logo-sub { font-family: var(--font-sans) !important; font-size: .62rem !important; font-weight: 500 !important; letter-spacing: .14em !important; text-transform: uppercase !important; color: #86868b !important; margin-top: 3px !important; }
.f-brand { display: flex !important; align-items: center !important; gap: 10px !important; }
.f-brand .qc-one { width: 54px !important; height: 30px !important; }
.f-brand-text { font-family: var(--font-sans); font-size: 1.1rem; font-weight: 600; letter-spacing: -.02em; }
@media (max-width: 760px) { .logo-hex.qc-one, .qc-one { width: 52px !important; height: 29px !important; } .logo-text { font-size: 1rem !important; } }
@media (max-width: 480px) { .logo-sub { display: none !important; } }

/* ── The open-book Q (the user's artwork) ─────────────────────────────────
   A Q sitting on an open book under an arc. The Q swings: from the right,
   over the top, to the left - and back the same way. Still under
   prefers-reduced-motion. The blue turns white on dark bars; the orange stays. */
.logo-hex.qc-book, .qc-book { width: 60px !important; height: 60px !important; margin: -10px 0 !important; display: block; animation: none !important; filter: none !important; overflow: visible; flex: none; }
.qc-book .qb-blue { fill: #2E55A5; }
.qc-book .qb-or { fill: #F39C1F; }
.qc-book .qb-arc, .qc-book .qb-ring, .qc-book .qb-tail { fill: none; stroke: #2E55A5; stroke-linecap: round; }
.qc-book .qb-arc { stroke-width: 12; } .qc-book .qb-ring { stroke-width: 20; } .qc-book .qb-tail { stroke-width: 19; }
.qc-book .qb-q { transform-box: view-box; transform-origin: 180px 152px; animation: qbSwing 7s cubic-bezier(.65,0,.35,1) infinite; }
@keyframes qbSwing { 0%, 12% { transform: rotate(0); } 40%, 58% { transform: rotate(-180deg); } 86%, 100% { transform: rotate(0); } }
.nav-logo:hover .qc-book .qb-q { animation-duration: 3.5s; }
@media (prefers-reduced-motion: reduce) { .qc-book .qb-q { animation: none !important; transform: none; } }
[data-theme="dark"] .qc-book .qb-blue, footer .qc-book .qb-blue { fill: #fff; }
[data-theme="dark"] .qc-book .qb-arc, [data-theme="dark"] .qc-book .qb-ring, [data-theme="dark"] .qc-book .qb-tail, footer .qc-book .qb-arc, footer .qc-book .qb-ring, footer .qc-book .qb-tail { stroke: #fff; }
.f-brand .qc-book { width: 54px !important; height: 54px !important; margin: 0 !important; }
@media (max-width: 760px) { .logo-hex.qc-book, .qc-book { width: 50px !important; height: 50px !important; margin: -7px 0 !important; } }
/* phones keep the "Learning Platform" line under the wordmark, and the book mark grows a step */
@media (max-width: 480px) { .logo-sub { display: block !important; font-size: .56rem !important; letter-spacing: .12em !important; margin-top: 2px !important; } }
@media (max-width: 760px) { .logo-hex.qc-book, .qc-book { width: 56px !important; height: 56px !important; margin: -9px 0 !important; } }
.logo-hex.qc-book, .qc-book { width: 66px !important; height: 66px !important; margin: -13px 0 !important; }
@media (max-width: 760px) { .logo-hex.qc-book, .qc-book { width: 56px !important; height: 56px !important; margin: -9px 0 !important; } }
/* FAQ on phones: the answer sits under the question at full width instead of a
   narrow indented column, the chevron keeps to the first line */
html:not(#_) .faq-item .faq-answer { margin-left: 0 !important; margin-right: 0 !important; }
@media (max-width: 760px) {
    html:not(#_) .faq-header { align-items: flex-start !important; gap: 10px !important; padding: 1rem 0 !important; }
    html:not(#_) .faq-question { font-size: 1rem !important; line-height: 1.4 !important; }
    html:not(#_) .faq-toggle { margin-top: 1px !important; }
    html:not(#_) .faq-answer, html:not(#_) .faq-item[data-faq-open] .faq-answer { padding: 0 0 1.1rem 0 !important; font-size: .95rem !important; line-height: 1.6 !important; }
}
/* the chevron turns as a whole box (an svg transform rasterised badly on phones), the answer loses its own rule line */
html:not(#_) .faq-toggle { transition: transform .25s ease; }
html:not(#_) .faq-item[data-faq-open] .faq-toggle { transform: rotate(180deg) !important; }
html:not(#_) .faq-toggle svg, html:not(#_) .faq-item[data-faq-open] .faq-toggle svg { transform: none !important; transition: none !important; }
html:not(#_) .faq-item .faq-answer { border-top: 0 !important; color: #6e6e73 !important; }
@media (max-width: 760px) { html:not(#_) .faq-header { padding: .85rem 0 !important; } html:not(#_) .faq-item[data-faq-open] .faq-answer { padding-top: .1rem !important; } }
html:not(#_) .faq-item:not([data-faq-open]) .faq-answer { padding: 0 !important; }
/* lesson language pill: the language being read is marked, the other one is the plain button */
.lang-toggle { background: #f5f5f7 !important; border: 1px solid rgba(0,0,0,.08) !important; box-shadow: 0 2px 10px rgba(0,0,0,.06) !important; padding: 4px !important; gap: 4px !important; }
.lang-toggle .lang-btn { background: transparent !important; border-color: transparent !important; color: #6e6e73 !important; box-shadow: none !important; }
.lang-toggle .lang-btn:hover:not(.active) { background: #e8e8ed !important; color: #1d1d1f !important; }
.lang-toggle { background: #ffffff !important; }
.lang-toggle .lang-btn.active, .lang-toggle .lang-btn.active:hover, [data-theme="light"] .lang-toggle .lang-btn.active { background: #e8e8ed !important; background-image: none !important; border-color: rgba(0,0,0,.08) !important; color: #1d1d1f !important; box-shadow: none !important; }
/* My Learning course cards: the actions are quiet grey, like the rest of the site */
html:not(#_) .enrollment-cta:not(.locked) { background: #f5f5f7 !important; background-image: none !important; border: 1px solid rgba(0,0,0,.08) !important; color: #1d1d1f !important; box-shadow: none !important; }
html:not(#_) .enrollment-cta:not(.locked) i { color: #1d1d1f !important; }
html:not(#_) .enrollment-cta:not(.locked):hover { background: #e8e8ed !important; border-color: rgba(0,0,0,.12) !important; color: #1d1d1f !important; transform: none !important; }
/* the footer is light now: the book mark keeps its own blue there (only a dark theme turns it white) */
html:not([data-theme="dark"]) footer .qc-book .qb-blue { fill: #2E55A5 !important; }
html:not([data-theme="dark"]) footer .qc-book .qb-arc, html:not([data-theme="dark"]) footer .qc-book .qb-ring, html:not([data-theme="dark"]) footer .qc-book .qb-tail { stroke: #2E55A5 !important; }
/* "View Course" on the home cards and the Courses page: quiet grey, like the card actions in My Learning */
html:not(#_) .cc-enroll, html:not(#_) .course-action-btn { background: #f5f5f7 !important; background-image: none !important; border: 1px solid rgba(0,0,0,.08) !important; color: #1d1d1f !important; box-shadow: none !important; }
html:not(#_) .cc-enroll i, html:not(#_) .course-action-btn i { color: #1d1d1f !important; }
html:not(#_) .cc-enroll:hover, html:not(#_) .course-action-btn:hover { background: #e8e8ed !important; border-color: rgba(0,0,0,.12) !important; color: #1d1d1f !important; transform: none !important; }


/* ═══════════════════════════════════════════════════════════════════
   THE BAR, second design (2026-10-23, user: "more professional, a nicer
   style", desktop and phone)

   Desktop: the links sit in one quiet grey track and the current page is
   a white pill on it, the way a segmented control marks its choice. Words
   only on the bar; the icons come back inside the Simulation panel, where
   each device is a tile with a tinted icon, two to a row, under a small
   heading. The buttons on the right are unchanged apart from a soft shadow
   under Register.

   Phone: the menu is a sheet hanging from the bar, with rounded bottom
   corners and the page dimmed behind it. Every row has an icon chip, the
   current page is tinted blue, the devices form a two-column grid, and
   Sign In / Register become two buttons side by side at the bottom.
   ═══════════════════════════════════════════════════════════════════ */
#nav, .navbar {
    background: rgba(255,255,255,.82) !important;
    border-bottom: 1px solid rgba(0,0,0,.07) !important;
}
.nav-inner { gap: 1.25rem; }

/* the track and its pills */
.nav-links {
    background: #f5f5f7;
    border: 1px solid rgba(0,0,0,.05);
    border-radius: 980px;
    padding: 4px !important;
    gap: 2px !important;
}
.nav-links > li { position: relative; }
.nav-links a.nav-link {
    padding: 7px 15px !important;
    border-radius: 980px;
    font-size: .9rem;
    font-weight: 500 !important;
    line-height: 1.25;
    color: #6e6e73 !important;
    transition: color .18s ease, background-color .18s ease, box-shadow .18s ease;
}
.nav-links a.nav-link:hover { color: #1d1d1f !important; background: rgba(255,255,255,.75); }
.nav-links a.nav-link:focus-visible { outline: 2px solid var(--c); outline-offset: 2px; }
/* the current page: grey, a shade deeper than the track (user: a white pill was unsuitable) */
.nav-links a.nav-link.active {
    color: #1d1d1f !important;
    font-weight: 600 !important;
    background: #e3e3e8;
    box-shadow: inset 0 0 0 1px rgba(0,0,0,.06);
}
.nav-links a.nav-link i { display: none; }                       /* words only on the bar */
.nav-links a.nav-link i.nav-sim-chev { display: inline-block; opacity: .55; margin-left: .4em; }
@media (max-width: 1400px) {
    .nav-links a.nav-link { padding: 6px 12px !important; font-size: .875rem; }
}

/* the Simulation panel: devices as tiles */
.nav-sim-menu {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2px;
    min-width: 400px !important;
    top: calc(100% + 12px) !important;
    padding: 10px !important;
    border-radius: 18px !important;
    background: rgba(255,255,255,.985) !important;
    border: 1px solid rgba(0,0,0,.08) !important;
    box-shadow: 0 24px 60px rgba(0,0,0,.14), 0 2px 8px rgba(0,0,0,.06) !important;
}
.nav-sim-menu::after {
    content: 'Practice devices';
    order: -1;
    grid-column: 1 / -1;
    padding: 4px 10px 8px;
    font-size: .72rem;
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: #86868b;
}
.nav-sim-menu li { margin: 0; }
.nav-sim-menu a {
    padding: 7px 10px !important;
    border-radius: 12px !important;
    gap: .75rem !important;
    font-size: .9rem !important;
    font-weight: 500;
    color: #1d1d1f !important;
    transition: background-color .15s ease, color .15s ease;
}
.nav-sim-menu a i {
    width: 36px !important;
    height: 36px;
    border-radius: 10px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: .95rem;
    background: rgba(0,113,227,.09);
    color: var(--c) !important;
    opacity: 1 !important;
    transition: background-color .15s ease, color .15s ease;
}
.nav-sim-menu a:hover { background: #f5f5f7 !important; color: var(--c) !important; }
.nav-sim-menu a:hover i { background: var(--c); color: #fff !important; }

/* the buttons on the right */
.nav-right { gap: .6rem; }
.nav-right .nbtn.solid { box-shadow: 0 4px 12px rgba(0,113,227,.25) !important; }
.nav-right .nbtn.solid:hover { box-shadow: 0 6px 16px rgba(0,113,227,.32) !important; }

/* ── the phone ────────────────────────────────────────────────────── */
@keyframes qcMenuIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
@media (max-width: 820px) {
    .ham {
        width: 42px !important;
        height: 42px !important;
        min-width: 42px !important;
        min-height: 42px !important;
        border-radius: 50% !important;
        border: 1px solid rgba(0,0,0,.1) !important;
        background: #fff !important;
        gap: 4px !important;
    }
    .ham span { width: 18px !important; height: 2px !important; }
    .ham.open span:nth-child(1) { transform: translateY(6px) rotate(45deg); }
    .ham.open span:nth-child(3) { transform: translateY(-6px) rotate(-45deg); }

    /* written against #mob-nav.mob-nav.open: the layout styles the open sheet as
       `.mob-nav.open { … !important }`, which beat a plain .mob-nav rule */
    #mob-nav.mob-nav.open {
        background: #f5f5f7 !important;   /* the same grey track as the bar on a laptop */
        padding: 10px 10px 12px !important;
        border: 1px solid rgba(0,0,0,.08) !important;
        border-top: 0 !important;
        border-radius: 0 0 22px 22px !important;
        /* the second shadow is the dimmed page behind the sheet */
        box-shadow: 0 30px 60px rgba(0,0,0,.18), 0 0 0 100vmax rgba(29,29,31,.28) !important;
        max-height: calc(100vh - 80px);
        overflow-y: auto;
        animation: qcMenuIn .22s cubic-bezier(.2,.8,.2,1);
    }
    #mob-nav.mob-nav.open {
        display: flex !important;
        flex-direction: row !important;
        flex-wrap: wrap;
        gap: 2px 8px !important;
    }
    /* the old 2px blue bar under the current row, and the old hover tints */
    #mob-nav a::after, #mob-nav a::before { display: none !important; content: none !important; }
    #mob-nav > a, #mob-nav > .mob-sim, #mob-nav > form { flex: 0 0 100%; width: 100% !important; }
    #mob-nav a, .mob-nav a {
        min-height: 50px;
        padding: 0 12px !important;
        margin: 0 !important;
        border-radius: 14px !important;
        border-left: 0 !important;
        gap: .85rem !important;
        color: #1d1d1f !important;
        font-weight: 500 !important;
        font-size: 1rem !important;
    }
    #mob-nav a i, .mob-nav a i {
        width: 36px !important;
        height: 36px;
        border-radius: 11px;
        display: inline-flex !important;
        align-items: center;
        justify-content: center;
        font-size: .95rem;
        background: #fff !important;
        color: #1d1d1f !important;
        opacity: 1 !important;
    }
    #mob-nav a:hover, #mob-nav a:active { background: transparent !important; color: #1d1d1f !important; padding-left: 12px !important; border-left: 0 !important; }
    @media (hover: hover) { #mob-nav a:not(.active):hover { background: rgba(255,255,255,.75) !important; } }
    /* the current page: a white pill on the grey track, as on the laptop bar */
    #mob-nav a.active { background: #e3e3e8 !important; color: #1d1d1f !important; font-weight: 600 !important; box-shadow: inset 0 0 0 1px rgba(0,0,0,.06); }
    #mob-nav a.active i { background: #fff !important; color: #1d1d1f !important; }
    #mob-nav a i.mob-sim-chev { width: auto !important; height: auto; background: none !important; font-size: .7em; opacity: .55 !important; margin-left: auto; }

    /* the devices: a two-column grid under Simulation */
    #mob-nav .mob-sim.open {
        display: grid !important;
        grid-template-columns: 1fr 1fr;
        gap: 6px;
        padding: 4px 4px 10px !important;
    }
    /* the devices read like the laptop's Simulation panel: white tiles, blue icon chips */
    #mob-nav .mob-sim a {
        min-height: 44px;
        padding: 0 8px !important;
        justify-content: flex-start !important;
        font-size: .9rem !important;
        background: #fff !important;
        border-radius: 12px !important;
    }
    #mob-nav .mob-sim a i { width: 30px !important; height: 30px; border-radius: 9px; background: rgba(0,113,227,.09) !important; color: var(--c) !important; font-size: .85rem; }
    #mob-nav .mob-sim a:hover, #mob-nav .mob-sim a:active { background: #fff !important; }
    #mob-nav .mob-sim a:active i { background: var(--c) !important; color: #fff !important; }

    /* Sign In and Register: two buttons side by side at the bottom */
    #mob-nav > a[onclick*="openModal('login')"],
    #mob-nav > a[onclick*="openModal('register')"] {
        flex: 1 1 calc(50% - 4px);
        width: auto !important;
        margin-top: 8px !important;
        min-height: 46px;
        justify-content: center !important;
        border-radius: 980px !important;
        border: 1px solid rgba(0,0,0,.14) !important;
        background: #fff !important;
        font-weight: 600 !important;
    }
    #mob-nav > a[onclick*="openModal('login')"] i,
    #mob-nav > a[onclick*="openModal('register')"] i { display: none !important; }
    #mob-nav > a[onclick*="openModal('register')"] {
        background: var(--c) !important;
        border-color: var(--c) !important;
        color: #fff !important;
        box-shadow: 0 4px 12px rgba(0,113,227,.25);
    }
    #mob-nav > a[onclick*="openModal('register')"]:hover { background: #0077ed !important; }
}

/* 2026-10-23, later: no discs behind the icons in the Simulation panel. The
   icon is plain blue, resting and hovered (a hovered white icon on the pale
   row was vanishing), and the bar's underline never applies inside the panel. */
html .nav-links .nav-sim-menu a i, html .nav-links .nav-sim-menu a:hover i {
    width: 1.3em !important;
    height: auto !important;
    border-radius: 0 !important;
    background: none !important;
    color: var(--c, #0071e3) !important;
}
.nav-sim-menu a::after, .nav-sim-menu a::before { display: none !important; content: none !important; }
html .nav-links .nav-sim-menu a:hover { color: #1d1d1f !important; }


/* ═══════════════════════════════════════════════════════════════════
   THE PHONE MENU, third pass (2026-10-23, user: a better three-line
   button, no flicker, something modern and lively)

   The button: a round white chip whose three lines morph into a cross as
   the menu opens, and which turns near-black while it is open. The sheet:
   drops from the bar with a soft spring, the page behind dims gradually,
   and the rows arrive one after another. Nothing here runs on a laptop.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 820px) {
    .ham {
        position: relative;
        width: 44px !important;
        height: 44px !important;
        min-width: 44px !important;
        min-height: 44px !important;
        padding: 0 !important;
        border-radius: 50% !important;
        border: 1px solid rgba(0,0,0,.1) !important;
        background: #fff !important;
        box-shadow: 0 1px 3px rgba(0,0,0,.06);
        display: block !important;
        -webkit-tap-highlight-color: transparent;
        transition: background-color .25s ease, border-color .25s ease, transform .2s ease;
    }
    .ham:active { transform: scale(.94); }
    .ham:focus-visible { outline: 2px solid var(--c, #0071e3); outline-offset: 2px; }
    .ham span {
        position: absolute !important;
        left: 50%;
        top: 50%;
        width: 18px !important;
        height: 2px !important;
        margin: -1px 0 0 -9px;
        border-radius: 2px;
        background: #1d1d1f !important;
        opacity: 1;
        transform: translateY(-6px);
        transition: transform .32s cubic-bezier(.2,.8,.2,1), opacity .2s ease, background-color .25s ease;
    }
    .ham span:nth-child(2) { transform: translateY(0); }
    .ham span:nth-child(3) { transform: translateY(6px); }
    .ham.open { background: #1d1d1f !important; border-color: #1d1d1f !important; }
    .ham.open span { background: #fff !important; }
    .ham.open span:nth-child(1) { transform: rotate(45deg); }
    .ham.open span:nth-child(2) { transform: scaleX(0); opacity: 0; }
    .ham.open span:nth-child(3) { transform: rotate(-45deg); }

    /* the sheet drops in; the dim behind it fades in with it */
    @keyframes qcSheetIn {
        from { opacity: 0; transform: translateY(-14px) scale(.985); box-shadow: 0 30px 60px rgba(0,0,0,0), 0 0 0 100vmax rgba(29,29,31,0); }
        to   { opacity: 1; transform: none; box-shadow: 0 30px 60px rgba(0,0,0,.18), 0 0 0 100vmax rgba(29,29,31,.28); }
    }
    #mob-nav.mob-nav.open {
        transform-origin: 50% 0;
        animation: qcSheetIn .42s cubic-bezier(.2,.8,.2,1) both;
    }
    /* the rows arrive one after another */
    @keyframes qcRowIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
    #mob-nav.mob-nav.open > a, #mob-nav.mob-nav.open > .mob-sim {
        animation: qcRowIn .38s cubic-bezier(.2,.8,.2,1) both;
        transition: background-color .15s ease, color .15s ease !important;   /* not "all": that was the flicker */
    }
    #mob-nav.mob-nav.open > :nth-child(1) { animation-delay: .04s; }
    #mob-nav.mob-nav.open > :nth-child(2) { animation-delay: .07s; }
    #mob-nav.mob-nav.open > :nth-child(3) { animation-delay: .10s; }
    #mob-nav.mob-nav.open > :nth-child(4) { animation-delay: .13s; }
    #mob-nav.mob-nav.open > :nth-child(5) { animation-delay: .16s; }
    #mob-nav.mob-nav.open > :nth-child(6) { animation-delay: .19s; }
    #mob-nav.mob-nav.open > :nth-child(7) { animation-delay: .22s; }
    #mob-nav.mob-nav.open > :nth-child(8) { animation-delay: .25s; }
    #mob-nav.mob-nav.open > :nth-child(9) { animation-delay: .28s; }
    #mob-nav.mob-nav.open > :nth-child(n+10) { animation-delay: .31s; }
    /* the device grid folds open smoothly too */
    #mob-nav .mob-sim.open > a { animation: qcRowIn .3s cubic-bezier(.2,.8,.2,1) both; }
    #mob-nav .mob-sim.open > a:nth-child(2) { animation-delay: .03s; }
    #mob-nav .mob-sim.open > a:nth-child(3) { animation-delay: .06s; }
    #mob-nav .mob-sim.open > a:nth-child(4) { animation-delay: .09s; }
    #mob-nav .mob-sim.open > a:nth-child(5) { animation-delay: .12s; }
    #mob-nav .mob-sim.open > a:nth-child(6) { animation-delay: .15s; }
    #mob-nav .mob-sim.open > a:nth-child(7) { animation-delay: .18s; }
    /* the page stays put while the sheet is open */
    html.qc-menu-open, html.qc-menu-open body { overflow: hidden !important; }
}
@media (prefers-reduced-motion: reduce) {
    .ham span, #mob-nav.mob-nav.open, #mob-nav.mob-nav.open > a, #mob-nav.mob-nav.open > .mob-sim, #mob-nav .mob-sim.open > a { animation: none !important; transition: none !important; }
}


/* ═══════════════════════════════════════════════════════════════════
   THE LAPTOP BAR, in motion (2026-10-23, user: lively animation on the
   desktop too, especially the Simulation panel)

   * A glider: one soft pill that slides along the track to whatever link
     the pointer rests on, and glides home to the current page when the
     pointer leaves (the script positions it; this only draws it).
   * The Simulation panel drops in with a small spring and its tiles arrive
     one after another; a tile's icon nudges forward when hovered.
   ═══════════════════════════════════════════════════════════════════ */
@media (min-width: 821px) {
    .nav-links { position: relative; }
    .nav-glider {
        position: absolute;
        top: 4px;
        left: 0;
        height: calc(100% - 8px);
        width: 0;
        border-radius: 980px;
        background: rgba(255,255,255,.9);
        box-shadow: 0 1px 3px rgba(0,0,0,.08);
        opacity: 0;
        pointer-events: none;
        transition: transform .38s cubic-bezier(.2,.8,.2,1), width .38s cubic-bezier(.2,.8,.2,1), opacity .2s ease;
        z-index: 0;
    }
    .nav-glider.on { opacity: 1; }
    .nav-links > li { position: relative; z-index: 1; }
    /* the glider is the hover; the pill itself no longer tints on hover */
    .nav-links a.nav-link:hover { background: transparent; }
    .nav-links a.nav-link { transition: color .2s ease, transform .2s ease; }
    .nav-links a.nav-link:active { transform: scale(.97); }

    /* the panel: a spring, then the tiles one by one */
    .nav-sim-menu {
        transform: translateX(-50%) translateY(-10px) scale(.97) !important;
        transition: opacity .22s ease, transform .42s cubic-bezier(.2,.9,.25,1.15), visibility .22s !important;
    }
    .nav-sim:hover .nav-sim-menu,
    .nav-sim:focus-within .nav-sim-menu,
    .nav-sim.open .nav-sim-menu { transform: translateX(-50%) translateY(0) scale(1) !important; }
    .nav-sim-menu li {
        opacity: 0;
        transform: translateY(-6px);
        transition: opacity .22s ease, transform .3s cubic-bezier(.2,.8,.2,1);
    }
    .nav-sim:hover .nav-sim-menu li,
    .nav-sim:focus-within .nav-sim-menu li,
    .nav-sim.open .nav-sim-menu li { opacity: 1; transform: none; }
    .nav-sim:hover .nav-sim-menu li:nth-child(1), .nav-sim.open .nav-sim-menu li:nth-child(1), .nav-sim:focus-within .nav-sim-menu li:nth-child(1) { transition-delay: .06s; }
    .nav-sim:hover .nav-sim-menu li:nth-child(2), .nav-sim.open .nav-sim-menu li:nth-child(2), .nav-sim:focus-within .nav-sim-menu li:nth-child(2) { transition-delay: .09s; }
    .nav-sim:hover .nav-sim-menu li:nth-child(3), .nav-sim.open .nav-sim-menu li:nth-child(3), .nav-sim:focus-within .nav-sim-menu li:nth-child(3) { transition-delay: .12s; }
    .nav-sim:hover .nav-sim-menu li:nth-child(4), .nav-sim.open .nav-sim-menu li:nth-child(4), .nav-sim:focus-within .nav-sim-menu li:nth-child(4) { transition-delay: .15s; }
    .nav-sim:hover .nav-sim-menu li:nth-child(5), .nav-sim.open .nav-sim-menu li:nth-child(5), .nav-sim:focus-within .nav-sim-menu li:nth-child(5) { transition-delay: .18s; }
    .nav-sim:hover .nav-sim-menu li:nth-child(6), .nav-sim.open .nav-sim-menu li:nth-child(6), .nav-sim:focus-within .nav-sim-menu li:nth-child(6) { transition-delay: .21s; }
    .nav-sim:hover .nav-sim-menu li:nth-child(7), .nav-sim.open .nav-sim-menu li:nth-child(7), .nav-sim:focus-within .nav-sim-menu li:nth-child(7) { transition-delay: .24s; }
    /* the icon leans in when its tile is hovered */
    html .nav-links .nav-sim-menu a i { transition: transform .25s cubic-bezier(.2,.8,.2,1); }
    html .nav-links .nav-sim-menu a:hover i { transform: translateX(3px) scale(1.12); }
    .nav-sim-menu a { transition: background-color .18s ease, color .18s ease, transform .18s ease; }
    .nav-sim-menu a:active { transform: scale(.97); }
    /* the chevron turns with a little overshoot */
    .nav-sim-chev { transition: transform .35s cubic-bezier(.2,.9,.25,1.2) !important; }
}
@media (prefers-reduced-motion: reduce) {
    .nav-glider, .nav-sim-menu, .nav-sim-menu li, .nav-sim-menu a i, .nav-sim-chev { transition: none !important; }
}

/* the old underline that grew under a hovered link is gone: the glider is the hover now */
.nav-links a.nav-link::after, .nav-links a.nav-link::before { display: none !important; content: none !important; }


/* ═══════════════════════════════════════════════════════════════════
   The phone menu, fourth pass (2026-10-23): the button after a real tap,
   and the account buttons one under the other.

   After a finger tap the button keeps :focus (and :active for a moment),
   and the site's mobile sheet says `.ham:focus, .ham:active { background:
   transparent !important }` - so the dark chip faded to nothing and the
   white cross with it. That was the "something flashes and disappears".
   These rules name every state, with an id, so nothing outranks them.
   ═══════════════════════════════════════════════════════════════════ */
@media (max-width: 820px) {
    #ham.ham, #ham.ham:hover, #ham.ham:focus, #ham.ham:active, #ham.ham:focus-visible {
        background: #fff !important;
        border: 1px solid rgba(0,0,0,.1) !important;
        outline: none !important;
    }
    #ham.ham.open, #ham.ham.open:hover, #ham.ham.open:focus, #ham.ham.open:active {
        background: #1d1d1f !important;
        border-color: #1d1d1f !important;
    }
    #ham.ham:focus-visible { outline: 2px solid var(--c, #0071e3) !important; outline-offset: 2px; }
    #ham.ham span { background: #1d1d1f !important; }
    #ham.ham.open span { background: #fff !important; }

    /* Sign In / Register, and Logout, one under the other, full width */
    #mob-nav > a[onclick*="openModal('login')"],
    #mob-nav > a[onclick*="openModal('register')"],
    #mob-nav > a[onclick*="logout-form-mobile"] {
        flex: 0 0 100% !important;
        width: 100% !important;
        margin-top: 6px !important;
        min-height: 48px;
        justify-content: center !important;
        border-radius: 980px !important;
        border: 1px solid rgba(0,0,0,.14) !important;
        background: #fff !important;
        color: #1d1d1f !important;
        font-weight: 600 !important;
    }
    #mob-nav > a[onclick*="openModal('login')"] { margin-top: 12px !important; }
    #mob-nav > a[onclick*="logout-form-mobile"] { margin-top: 12px !important; }
    #mob-nav > a[onclick*="logout-form-mobile"] i { display: none !important; }
    #mob-nav > a[onclick*="openModal('register')"] {
        background: var(--c, #0071e3) !important;
        border-color: var(--c, #0071e3) !important;
        color: #fff !important;
    }
}

/* 2026-10-23: the open button stays light (user: the black chip was unsuitable): a grey chip, dark cross */
@media (max-width: 820px) {
    #ham.ham.open, #ham.ham.open:hover, #ham.ham.open:focus, #ham.ham.open:active { background: #e3e3e8 !important; border-color: rgba(0,0,0,.12) !important; }
    #ham.ham.open span { background: #1d1d1f !important; }
}

/* ═══════════════════════════════════════════════════════════════════
   2026-10-29: the simulators' own icons (user: the one-colour Font
   Awesome glyphs looked generated). Each simulator has a drawn, coloured
   icon in images/icons/sim/; iOS and macOS no longer share the Apple logo.
   The markup is <i class="qi qi-NAME">. The picture sits in ::before, so
   the older rules that strip discs off "a i" (background: none !important)
   leave it alone, and the icon still gets their size and hover motion.
   ═══════════════════════════════════════════════════════════════════ */
i.qi { display: inline-flex; align-items: center; justify-content: center; flex: none; font-style: normal; }
i.qi::before { content: ""; display: block; width: 1.3em; height: 1.3em; background: center / contain no-repeat; }
i.qi-android::before  { background-image: url(/images/icons/sim/android.svg?v=1); }
i.qi-ios::before      { background-image: url(/images/icons/sim/ios.svg?v=1); }
i.qi-macos::before    { background-image: url(/images/icons/sim/macos.svg?v=1); }
i.qi-windows::before  { background-image: url(/images/icons/sim/windows.svg?v=1); }
i.qi-remote::before   { background-image: url(/images/icons/sim/remote.svg?v=1); }
i.qi-research::before { background-image: url(/images/icons/sim/research.svg?v=1); }
i.qi-security::before { background-image: url(/images/icons/sim/security.svg?v=1); }
i.qi-netlab::before   { background-image: url(/images/icons/sim/netlab.svg?v=1); }
/* the Simulation panel and the phone sheet: 24px, no tinted chip behind a coloured icon */
html .nav-links .nav-sim-menu a i.qi { width: 26px !important; }
html .nav-links .nav-sim-menu a i.qi::before, #mob-nav .mob-sim a i.qi::before { width: 24px; height: 24px; }
#mob-nav .mob-sim a i.qi { background: none !important; }
/* the simulator page: the sub-menu's device tile is grey, not blue, behind the coloured icon */
.snv-mi:has(> i.qi) { background: #f5f5f7; }
.snv-mi > i.qi::before { width: 26px; height: 26px; }

/* ═══════════════════════════════════════════════════════════════════
   2026-10-29: the site's drawn icons (user: the icons looked generated;
   "make all website icons look genuine"). Every Font Awesome icon named
   below is drawn from images/icons/ui/NAME.svg instead: one line set, 2px
   round strokes on a 24px grid, shown as a CSS mask so it takes the colour
   of the text it sits in (white on a blue button, grey in a meta line).
   Markup is unchanged: <i class="fas fa-clock"> keeps working, and an icon
   not listed here is still Font Awesome. Spinners (fa-spin) and the brand
   logos (fab) are left alone.
   ═══════════════════════════════════════════════════════════════════ */
:is(.fa-arrow-left, .fa-arrow-right, .fa-award, .fa-bars, .fa-bell, .fa-bolt, .fa-book, .fa-book-open, .fa-briefcase, .fa-bullseye, .fa-certificate, .fa-chart-line, .fa-check, .fa-check-circle, .fa-circle-check, .fa-chevron-down, .fa-chevron-left, .fa-chevron-right, .fa-chevron-up, .fa-circle-play, .fa-play-circle, .fa-clock, .fa-cog, .fa-gear, .fa-comments, .fa-credit-card, .fa-download, .fa-file-download, .fa-edit, .fa-pen-to-square, .fa-envelope, .fa-exclamation-circle, .fa-circle-exclamation, .fa-exclamation-triangle, .fa-triangle-exclamation, .fa-external-link-alt, .fa-arrow-up-right-from-square, .fa-eye, .fa-file, .fa-file-alt, .fa-graduation-cap, .fa-headset, .fa-home, .fa-house, .fa-hourglass-half, .fa-inbox, .fa-info-circle, .fa-circle-info, .fa-key, .fa-language, .fa-lightbulb, .fa-list-check, .fa-tasks, .fa-list-ol, .fa-lock, .fa-lock-open, .fa-unlock, .fa-unlock-alt, .fa-mobile-screen, .fa-mobile-screen-button, .fa-mobile-alt, .fa-network-wired, .fa-pen, .fa-pencil-alt, .fa-percent, .fa-percentage, .fa-plus, .fa-power-off, .fa-rocket, .fa-route, .fa-search, .fa-magnifying-glass, .fa-sign-in-alt, .fa-right-to-bracket, .fa-sign-out-alt, .fa-right-from-bracket, .fa-signal, .fa-thumbtack, .fa-times, .fa-xmark, .fa-trash, .fa-trash-alt, .fa-trophy, .fa-user, .fa-user-plus, .fa-users)::before, .fas.fa-star::before, .fa-solid.fa-star::before, .fas.fa-times-circle::before, .fa-solid.fa-times-circle::before, .fas.fa-circle-xmark::before {
    content: "" !important;
    display: inline-block;
    width: 1em;
    height: 1em;
    vertical-align: -.125em;
    background-color: currentColor;
    -webkit-mask: var(--qic) center / contain no-repeat;
    mask: var(--qic) center / contain no-repeat;
}
.fa-arrow-left { --qic: url(/images/icons/ui/arrow-left.svg?v=1); }
.fa-arrow-right { --qic: url(/images/icons/ui/arrow-right.svg?v=1); }
.fa-award { --qic: url(/images/icons/ui/award.svg?v=1); }
.fa-bars { --qic: url(/images/icons/ui/bars.svg?v=1); }
.fa-bell { --qic: url(/images/icons/ui/bell.svg?v=1); }
.fa-bolt { --qic: url(/images/icons/ui/bolt.svg?v=1); }
.fa-book { --qic: url(/images/icons/ui/book.svg?v=1); }
.fa-book-open { --qic: url(/images/icons/ui/book-open.svg?v=1); }
.fa-briefcase { --qic: url(/images/icons/ui/briefcase.svg?v=1); }
.fa-bullseye { --qic: url(/images/icons/ui/bullseye.svg?v=1); }
.fa-certificate { --qic: url(/images/icons/ui/certificate.svg?v=1); }
.fa-chart-line { --qic: url(/images/icons/ui/chart-line.svg?v=1); }
.fa-check { --qic: url(/images/icons/ui/check.svg?v=1); }
.fa-check-circle, .fa-circle-check { --qic: url(/images/icons/ui/check-circle.svg?v=1); }
.fa-chevron-down { --qic: url(/images/icons/ui/chevron-down.svg?v=1); }
.fa-chevron-left { --qic: url(/images/icons/ui/chevron-left.svg?v=1); }
.fa-chevron-right { --qic: url(/images/icons/ui/chevron-right.svg?v=1); }
.fa-chevron-up { --qic: url(/images/icons/ui/chevron-up.svg?v=1); }
.fa-circle-play, .fa-play-circle { --qic: url(/images/icons/ui/circle-play.svg?v=1); }
.fa-clock { --qic: url(/images/icons/ui/clock.svg?v=1); }
.fa-cog, .fa-gear { --qic: url(/images/icons/ui/cog.svg?v=1); }
.fa-comments { --qic: url(/images/icons/ui/comments.svg?v=1); }
.fa-credit-card { --qic: url(/images/icons/ui/credit-card.svg?v=1); }
.fa-download, .fa-file-download { --qic: url(/images/icons/ui/download.svg?v=1); }
.fa-edit, .fa-pen-to-square { --qic: url(/images/icons/ui/edit.svg?v=1); }
.fa-envelope { --qic: url(/images/icons/ui/envelope.svg?v=1); }
.fa-exclamation-circle, .fa-circle-exclamation { --qic: url(/images/icons/ui/exclamation-circle.svg?v=1); }
.fa-exclamation-triangle, .fa-triangle-exclamation { --qic: url(/images/icons/ui/exclamation-triangle.svg?v=1); }
.fa-external-link-alt, .fa-arrow-up-right-from-square { --qic: url(/images/icons/ui/external-link.svg?v=1); }
.fa-eye { --qic: url(/images/icons/ui/eye.svg?v=1); }
.fa-file, .fa-file-alt { --qic: url(/images/icons/ui/file.svg?v=1); }
.fa-graduation-cap { --qic: url(/images/icons/ui/graduation-cap.svg?v=1); }
.fa-headset { --qic: url(/images/icons/ui/headset.svg?v=1); }
.fa-home, .fa-house { --qic: url(/images/icons/ui/home.svg?v=1); }
.fa-hourglass-half { --qic: url(/images/icons/ui/hourglass-half.svg?v=1); }
.fa-inbox { --qic: url(/images/icons/ui/inbox.svg?v=1); }
.fa-info-circle, .fa-circle-info { --qic: url(/images/icons/ui/info-circle.svg?v=1); }
.fa-key { --qic: url(/images/icons/ui/key.svg?v=1); }
.fa-language { --qic: url(/images/icons/ui/language.svg?v=1); }
.fa-lightbulb { --qic: url(/images/icons/ui/lightbulb.svg?v=1); }
.fa-list-check, .fa-tasks { --qic: url(/images/icons/ui/list-check.svg?v=1); }
.fa-list-ol { --qic: url(/images/icons/ui/list-ol.svg?v=1); }
.fa-lock { --qic: url(/images/icons/ui/lock.svg?v=1); }
.fa-lock-open, .fa-unlock, .fa-unlock-alt { --qic: url(/images/icons/ui/lock-open.svg?v=1); }
.fa-mobile-screen, .fa-mobile-screen-button, .fa-mobile-alt { --qic: url(/images/icons/ui/mobile-screen.svg?v=1); }
.fa-network-wired { --qic: url(/images/icons/ui/network-wired.svg?v=1); }
.fa-pen, .fa-pencil-alt { --qic: url(/images/icons/ui/pen.svg?v=1); }
.fa-percent, .fa-percentage { --qic: url(/images/icons/ui/percent.svg?v=1); }
.fa-plus { --qic: url(/images/icons/ui/plus.svg?v=1); }
.fa-power-off { --qic: url(/images/icons/ui/power-off.svg?v=1); }
.fa-rocket { --qic: url(/images/icons/ui/rocket.svg?v=1); }
.fa-route { --qic: url(/images/icons/ui/route.svg?v=1); }
.fa-search, .fa-magnifying-glass { --qic: url(/images/icons/ui/search.svg?v=1); }
.fa-sign-in-alt, .fa-right-to-bracket { --qic: url(/images/icons/ui/sign-in.svg?v=1); }
.fa-sign-out-alt, .fa-right-from-bracket { --qic: url(/images/icons/ui/sign-out.svg?v=1); }
.fa-signal { --qic: url(/images/icons/ui/signal.svg?v=1); }
.fa-thumbtack { --qic: url(/images/icons/ui/thumbtack.svg?v=1); }
.fa-times, .fa-xmark { --qic: url(/images/icons/ui/times.svg?v=1); }
.fa-trash, .fa-trash-alt { --qic: url(/images/icons/ui/trash.svg?v=1); }
.fa-trophy { --qic: url(/images/icons/ui/trophy.svg?v=1); }
.fa-user { --qic: url(/images/icons/ui/user.svg?v=1); }
.fa-user-plus { --qic: url(/images/icons/ui/user-plus.svg?v=1); }
.fa-users { --qic: url(/images/icons/ui/users.svg?v=1); }
.fas.fa-star, .fa-solid.fa-star { --qic: url(/images/icons/ui/star.svg?v=1); }
.fas.fa-times-circle, .fa-solid.fa-times-circle, .fas.fa-circle-xmark { --qic: url(/images/icons/ui/times-circle.svg?v=1); }

/* The home page's feature list and results: coloured drawings (images/icons/feature/),
   no blue square behind them - the same look as the Simulation menu. */
.qcr-ico, .wc-ico { background: none !important; border: 0 !important; box-shadow: none !important; }
.qcr-ico i::before, .wc-ico i::before {
    width: 34px; height: 34px;
    background: var(--qif) center / contain no-repeat !important;
    -webkit-mask: none !important; mask: none !important;
}
.qcr-ico .fa-network-wired { --qif: url(/images/icons/feature/labs.svg?v=1); }
.qcr-ico .fa-certificate { --qif: url(/images/icons/feature/curriculum.svg?v=1); }
.qcr-ico .fa-headset { --qif: url(/images/icons/feature/mentor.svg?v=1); }
.qcr-ico .fa-circle-play { --qif: url(/images/icons/feature/video.svg?v=1); }
.qcr-ico .fa-award { --qif: url(/images/icons/feature/certificate.svg?v=1); }
.qcr-ico .fa-mobile-screen { --qif: url(/images/icons/feature/anywhere.svg?v=1); }
.wc-ico .fa-users { --qif: url(/images/icons/feature/students.svg?v=1); }
.wc-ico .fa-award { --qif: url(/images/icons/feature/pass.svg?v=1); }
.wc-ico .fa-book-open { --qif: url(/images/icons/feature/courses.svg?v=1); }
.wc-ico .fa-clock { --qif: url(/images/icons/feature/years.svg?v=1); }

/* Decoration that read as a template: an icon before every section's small heading, and
   on the hero buttons. Real headings and buttons say it in words. */
.sec-eyebrow i, .qcr-eyebrow i, .cj-eyebrow i, .wc-eyebrow i, .ts-eyebrow i, .lh-eyebrow i, .lhbtn i { display: none !important; }

/* Lessons (App\Support\LessonIcons): marks that carried meaning as emoji keep their colour. */
.lesson-mark { font-style: normal; }
.lesson-mark.ok { color: #1d9e55 !important; }
.lesson-mark.no { color: #d70015 !important; }
.lesson-mark.warn { color: #bf4800 !important; }
