/* Extracted from index.html <head> (reorg increment 1). Served by express.static, cached, shareable across pages. */
    * { margin: 0; padding: 0; box-sizing: border-box; }
    html { font-size: clamp(14px, 1.25vw, 18px); }
    body { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; background: #fff; display: flex; justify-content: center; align-items: flex-start; padding: 40px 20px; min-height: 100vh; }
    body.auth-mode { align-items: center; padding: 20px; background: linear-gradient(145deg, #e8ecf8 0%, #dde5f7 35%, #e4e8f5 65%, #edf0fb 100%); }
    body.auth-mode .container { background: rgba(255,255,255,0.28); border: none; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
    body.student-mode { padding: 0; align-items: stretch; }
    body.student-mode .container { max-width: 100%; border: none; min-height: 100vh; padding: 16px 48px 32px; }
    /* Attendance: highlight the "Tasks Done Today" box when it was auto-filled from coder activity */
    #attendanceTasks.att-autofilled { border-color: rgba(34,197,94,0.55) !important; background: rgba(34,197,94,0.07); box-shadow: 0 0 0 3px rgba(34,197,94,0.12); animation: attAutofillPulse 1.6s ease-out 1; }
    @keyframes attAutofillPulse { 0% { box-shadow: 0 0 0 0 rgba(34,197,94,0.35); } 100% { box-shadow: 0 0 0 3px rgba(34,197,94,0.12); } }
    #attendanceMsg.att-autofill-note { color: #15803d !important; font-weight: 700; }
    /* Mobile touch support */
    @media (max-width: 600px) {
      body { padding: 10px; }
      body.auth-mode { padding: 10px; }
      .container:not(.admin-expanded) { padding: 20px 16px !important; border-width: 1px !important; }
      .container.admin-expanded { padding: 0 !important; }
      body.student-mode .container { padding: 16px 12px !important; }
      .auth-form { max-width: 100%; }
      .auth-tabs { max-width: 100%; }
      #nameForm input { width: 100% !important; }
      .history-stats { flex-direction: column; gap: 8px; }
      .history-header h2 { font-size: 1.75rem !important; }
      #histTabStats, #histTabLb { display: none !important; }
      .usermenu-overlay-nav .mobile-history-actions { display: block; }
      #histFilterWrap { display: none !important; }
      h1 { font-size: clamp(1.625rem, 7vw, 2.25rem) !important; }
      .buttons { flex-wrap: wrap; }
      #userBar { flex-wrap: wrap; gap: 8px; font-size: 0.75rem; padding: 10px 12px; }
      #userBar .user-actions { gap: 6px; }
      #userBar button { padding: 6px 12px; font-size: 11px; }
      /* Admin status widget — hide on mobile, it overlaps content */
      .admin-status, .admin-status-detail, .student-db-status { display: none !important; }
      /* Notification toast — full width on mobile */
      .notif-toast { width: calc(100vw - 24px); right: 12px; left: 12px; top: 10px; }
      /* Attendance modal — mobile */
      #attendanceModal > div { padding: 20px 16px !important; margin: 10px !important; }
      .att-time-row { flex-direction: column !important; gap: 8px !important; }
      #attendanceModal h3 { font-size: 0.875rem !important; margin-bottom: 14px !important; }
      .att-btn-row { flex-direction: column !important; }
      .att-btn-row button { padding: 12px 0 !important; }
      /* Question options — larger tap targets */
      .question label { padding: 12px 14px; font-size: 0.8125rem; }
      /* Results review */
      .review { padding: 12px 14px; }
    }
    @media (min-width: 1200px) { body.student-mode .container { padding: 16px 80px 40px; } }
    /* Password toggle */
    .pw-wrap { position: relative; margin-bottom: 14px; }
    .pw-wrap input { width: 100%; padding-right: 60px; margin-bottom: 0 !important; }
    .pw-wrap input::-webkit-credentials-auto-fill-button { display: none !important; }
    .pw-toggle { position: absolute; right: 2px; top: 0; bottom: 0; background: none !important; border: none !important; color: #888; font-size: 11px; cursor: pointer; padding: 0 12px; font-family: inherit; text-transform: uppercase; letter-spacing: 0.5px; width: auto !important; margin: 0 !important; display: flex; align-items: center; }
    .pw-toggle:hover { color: #000; background: none !important; }
    /* Admin status widget */
    .admin-status { position: relative; width: 100%; flex-shrink: 0; order: 3; box-sizing: border-box; border-top: 1px solid #e5e5ea; padding: 10px 16px; font-size: 11px; cursor: pointer; background: #fbfbfd; font-family: inherit; border-bottom-left-radius: 16px; border-bottom-right-radius: 16px; transition: background 150ms ease; }
    .admin-status:hover { background: #f3f4f6; }
    .status-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; vertical-align: middle; }
    .status-dot.online { background: #4CAF50; }
    .status-dot.offline { background: #e74c3c; }
    .admin-status-detail { position: relative; width: 100%; flex-shrink: 0; order: 2; box-sizing: border-box; background: #f9fafb; border-top: 1px solid rgba(0,0,0,0.06); padding: 12px 16px; font-size: 11px; display: none; font-family: inherit; }
    .admin-status.open ~ .admin-status-detail { display: block; }
    .student-db-status { position: fixed; bottom: 0; left: 0; padding: 10px 16px; font-size: 11px; background: #fff; border-top: 2px solid #000; border-right: 2px solid #000; z-index: 100; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; display: none; }
    .student-db-status .sdb-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 8px; vertical-align: middle; background: #4CAF50; }
    .student-db-status .sdb-dot.error { background: #f39c12; }
    .student-db-status .sdb-dot.disconnected { background: #e74c3c; }
    .container { background: #fff; border-radius: 0; padding: 40px 48px; max-width: 860px; width: 100%; box-shadow: none; border: 2px solid #000; }

    /* ── Quiz-taking screen — Material-inspired nested-card design
       (2026-08-08, per reference mockup): a soft lavender frame holding a
       white pill header and a white content card, pill nav buttons floating
       on the frame below. Scoped to body.quiz-active so nothing outside the
       live quiz (dashboard, admin, auth, results) is affected. Set/cleared by
       revealQuiz() / hideAllScreens() in app.js. ── */
    body.quiz-active { background: #f4f0fb; }
    body.quiz-active .container {
      border: none;
      box-shadow: none;
      background: #ece3fa;
      border-radius: 32px;
      padding: 14px;
      /* Wide enough that the debugging/code-writing CodeMirror panels don't
         squeeze their lines — 920px was fine for plain MCQ text but wrapped
         real code uncomfortably. */
      max-width: 1180px;
    }
    body.quiz-active #userBar {
      border: none;
      border-radius: 999px;
      background: #fff;
      box-shadow: 0 1px 2px rgba(0,0,0,0.04);
      padding: 8px 10px 8px 8px;
      margin-bottom: 14px;
    }
    body.quiz-active #userBar .user-info {
      background: #f1edf9;
      color: #4c3d99;
      font-weight: 700;
      font-size: 0.8125rem;
      padding: 8px 18px;
      border-radius: 999px;
    }
    body.quiz-active #userBar .user-actions { gap: 14px; }
    body.quiz-active #timer {
      margin: 0;
      padding: 0;
      font-size: 0.9375rem;
      font-weight: 600;
      border: none;
      border-radius: 0;
      background: transparent;
      color: #1f1f23;
      white-space: nowrap;
    }
    body.quiz-active #timer::before { content: '⏰'; margin-right: 7px; font-size: 0.875em; }
    body.quiz-active #timer.warning { color: #e74c3c; }
    .quiz-quit-pill {
      border: none;
      border-radius: 999px !important;
      background: #ef4444;
      color: #fff;
      font-size: 12.5px;
      font-weight: 700;
      letter-spacing: 0.3px;
      text-transform: none;
      padding: 9px 22px;
      cursor: pointer;
      transition: background 150ms ease, transform 150ms ease;
    }
    .quiz-quit-pill:hover { background: #dc2626; transform: translateY(-1px); }
    .quiz-quit-pill:active { transform: scale(0.97); }

    body.quiz-active .progress { color: #746b87; font-size: 0.8125rem; margin: 2px 6px 12px; }
    body.quiz-active .progress button, body.quiz-active #allQuestionsBtn {
      border-radius: 999px !important;
      background: #fff !important;
      color: #4c3d99 !important;
      border: none !important;
      box-shadow: 0 1px 2px rgba(0,0,0,0.04);
    }
    body.quiz-active #quiz {
      background: #fff;
      border-radius: 24px;
      padding: 32px 28px;
      /* Hug content — no min-height, so short questions (a 4-option MCQ)
         don't leave a tall empty card while long ones (editor panels) still
         grow naturally. */
      box-shadow: 0 1px 2px rgba(0,0,0,0.03);
    }
    body.quiz-active .question { position: relative; }
    body.quiz-active .question h3 { color: #33255c; font-weight: 700; font-size: 1.0625rem; }
    body.quiz-active .buttons {
      background: transparent;
      justify-content: space-between;
      margin-top: 18px;
      padding: 4px 6px 0;
    }
    body.quiz-active .buttons button {
      background: #fff;
      color: #4c3d99;
      border-radius: 999px;
      padding: 11px 24px;
      font-weight: 700;
      text-transform: none;
      letter-spacing: 0;
      box-shadow: 0 1px 2px rgba(0,0,0,0.05);
      transition: background 150ms ease, transform 150ms ease;
    }
    body.quiz-active .buttons button:hover { background: #f5f2fc; transform: translateY(-1px); }
    body.quiz-active .buttons button:disabled { background: #f3f3f5; color: #b8b3c4; box-shadow: none; }

    /* Dashboard entry point into the same Material-redesigned quiz — was the
       old flat black/uppercase global button style; every button INSIDE the
       quiz is a purple pill now, so the button that launches it should read
       as the same product, not a leftover from the pre-redesign look. */
    #startQuizBtn {
      background: #4c3d99;
      color: #fff;
      border-radius: 999px;
      text-transform: none;
      letter-spacing: 0;
      font-weight: 700;
      box-shadow: 0 2px 10px rgba(76,61,153,0.25);
      transition: background 150ms ease, transform 150ms ease, box-shadow 150ms ease;
    }
    #startQuizBtn:hover { background: #443590; transform: translateY(-1px); box-shadow: 0 4px 14px rgba(76,61,153,0.32); }
    #startQuizBtn:active { transform: translateY(0); }
    body.quiz-active .question label { border-radius: 14px; }

    /* Non-MCQ question modes — debugging / predict-output / code-writing.
       Base look is a filled pill badge; quiz-active repositions it as a
       plain-text label in the corner next to the heading (per mockup). */
    .qmode-badge {
      display: inline-block;
      font-size: 11px;
      font-weight: 700;
      letter-spacing: 0.5px;
      text-transform: uppercase;
      padding: 4px 12px;
      border-radius: 999px;
      background: #eef2ff;
      color: #4338ca;
      margin-bottom: 12px;
    }
    body.quiz-active .qmode-badge {
      /* float (not absolute) so long/wrapping headings flow around it
         instead of overlapping it on the second line */
      float: right;
      background: transparent;
      color: #6d5bb3;
      font-size: 0.8125rem;
      font-weight: 600;
      letter-spacing: 0;
      text-transform: none;
      padding: 2px 0 0 14px;
      margin: 0;
    }
    .qmode-textarea, .qmode-input {
      width: 100%;
      font-family: 'SF Mono', 'Consolas', 'Monaco', monospace;
      font-size: 13.5px;
      line-height: 1.6;
      color: #1f2937;
      background: #f8fafc;
      border: 1px solid #e2e8f0;
      border-radius: 14px;
      padding: 14px 18px;
      resize: vertical;
      transition: border-color 150ms ease, box-shadow 150ms ease;
    }
    .qmode-textarea { min-height: 160px; }
    .qmode-input { font-family: inherit; font-size: 0.875rem; }
    .qmode-textarea:focus, .qmode-input:focus {
      outline: none;
      border-color: #6366f1;
      box-shadow: 0 0 0 3px rgba(99,102,241,0.12);
    }
    .qmode-label { display: block; font-size: 12px; font-weight: 700; color: #6b7280; text-transform: uppercase; letter-spacing: 0.4px; margin: 16px 0 8px; }

    /* Solution panel for debugging/code-writing — ported from code_task.html's
       dark editor chrome (same --bg/--surface/--border/--accent tokens, same
       header layout) so these read as the SAME editor students already know
       from coder tasks, not a bespoke quiz-only widget. */
    .qmode-editor-panel {
      --bg: #0e0e10; --surface: #18181c; --border: #2a2a34;
      --accent: #5b9cf6; --accent-soft: rgba(91,156,246,0.1);
      border-radius: 14px;
      overflow: hidden;
      border: 1px solid var(--border);
      margin: 8px 0 4px;
    }
    .qmode-editor-header {
      display: flex; align-items: center; justify-content: space-between;
      padding: 0 14px; height: 40px; background: var(--surface);
      border-bottom: 1px solid var(--border);
    }
    .qmode-editor-header-left { display: flex; align-items: center; gap: 9px; font-size: 12.5px; font-weight: 500; color: #72728a; }
    .qmode-term-dots { display: inline-flex; align-items: center; gap: 6px; }
    .qmode-term-dots i { width: 10px; height: 10px; border-radius: 50%; display: block; }
    .qmode-term-dots i:nth-child(1) { background: #ff5f56; }
    .qmode-term-dots i:nth-child(2) { background: #ffbd2e; }
    .qmode-term-dots i:nth-child(3) { background: #27c93f; }
    .qmode-lang-badge {
      background: var(--accent-soft); color: var(--accent); font-size: 11px; font-weight: 700;
      padding: 2px 9px; border-radius: 4px; border: 1px solid rgba(91,156,246,0.2);
      font-family: 'JetBrains Mono', monospace;
    }
    .qmode-editor-panel .CodeMirror {
      height: 220px;
      font-family: 'JetBrains Mono', 'SF Mono', monospace;
      font-size: 13.5px;
      line-height: 1.7;
      background: var(--bg) !important;
    }
    .qmode-editor-panel .CodeMirror-gutters { background: var(--bg) !important; border-right: 1px solid var(--border); }
    .container.results-fullwidth { max-width: none; padding: 32px 48px; }
    body.results-mode { padding: 20px; align-items: stretch; }
    h1 { text-align: center; margin-bottom: 20px; color: #000; font-size: clamp(2rem, 5vw, 3.25rem); font-weight: 200; letter-spacing: 2px; text-transform: uppercase; }
    .progress { text-align: center; color: #555; margin-bottom: 24px; font-size: 0.875rem; }
    #timer { font-size: 1.25rem; font-weight: 700; color: #000; margin-bottom: 20px; text-align: center; padding: 12px 24px; background: #fff; border: 2px solid #000; border-radius: 0; }
    #timer.warning { color: #e74c3c; border-color: #e74c3c; }
    .question { margin-bottom: 32px; }
    .question h3 { margin-bottom: 16px; color: #000; font-size: 1rem; line-height: 1.6; white-space: pre-wrap; }
    .question h3 pre { background:#f6f6f6; border:1px solid #e0e0e0; padding:12px 16px; margin:10px 0 4px; overflow-x:auto; white-space:pre; font-family:'SF Mono','Consolas','Monaco',monospace; font-size:13px; line-height:1.5; color:#222; }
    .question label pre { display:inline; background:#f6f6f6; padding:1px 4px; font-family:'SF Mono','Consolas','Monaco',monospace; font-size:13px; white-space:pre-wrap; }
    .review-item h4 { white-space: pre-wrap; }
    .review-item h4 pre { background:#f6f6f6; border:1px solid #e0e0e0; padding:12px 16px; margin:10px 0 4px; overflow-x:auto; white-space:pre; font-family:'SF Mono','Consolas','Monaco',monospace; font-size:13px; line-height:1.5; color:#222; }
    .question label { display: block; padding: 14px 18px; margin: 8px 0; background: #fff; border-radius: 0; cursor: pointer; font-size: 0.875rem; border: 1px solid #ccc; transition: all 0.1s ease; }
    .question label:hover { background: #f5f5f5; border-color: #000; }
    .question label input[type="radio"] { margin-right: 10px; accent-color: #000; }
    .buttons { display: flex; justify-content: center; gap: 14px; margin-top: 28px; }
    button { padding: 14px 36px; background: #000; color: #fff; border: none; border-radius: 0; font-size: 0.875rem; cursor: pointer; font-weight: 600; transition: all 0.1s ease; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; text-transform: uppercase; letter-spacing: 0.5px; }
    button:hover { background: #333; transform: none; box-shadow: none; }
    button:disabled { background: #ccc; color: #888; cursor: not-allowed; transform: none; box-shadow: none; }
    #results { margin-top: 28px; }
    .score { text-align: center; font-size: 1.75rem; font-weight: 700; margin-bottom: 24px; color: #000; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    .correct { color: #000; }
    .wrong { color: #e74c3c; }
    .review { margin-bottom: 16px; padding: 16px 20px; border-radius: 0; }
    .review.right { background: #fff; border-left: 3px solid #000; }
    .review.incorrect { background: #fff; border-left: 3px solid #e74c3c; }
    .review p { margin: 6px 0; font-size: 0.875rem; line-height: 1.5; color: #000; }
    .hidden { display: none !important; }
    #nameForm { text-align: center; padding: 20px 0; }
    #nameForm input { padding: 14px 16px; font-size: 0.875rem; border: 2px solid #000; border-radius: 0; width: 380px; max-width: 100%; margin-bottom: 18px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    #nameForm input:focus { border-color: #000; outline: none; }
    #nameForm button { margin-top: 12px; }
    #reviewPage { max-height: 600px; overflow-y: auto; padding: 4px; }
    .review-item { padding: 18px 20px; margin-bottom: 12px; background: #fff; border-radius: 0; cursor: pointer; border-left: 3px solid #ccc; border: 1px solid #ddd; transition: all 0.1s ease; }
    .review-item:hover { background: #f5f5f5; transform: none; }
    .review-item.unanswered { background: #fff8e1; border-left: 3px solid #f39c12; }
    .review-item h4 { margin-bottom: 10px; color: #000; font-size: 0.875rem; line-height: 1.4; }
    .review-item p { margin: 4px 0; color: #555; font-size: 0.8125rem; }
    .review-item .answer { color: #000; font-weight: 600; }

    /* User Bar */
    #userBar { display: flex; justify-content: space-between; align-items: center; background: #fff; border: 2px solid #000; border-radius: 0; padding: 12px 20px; margin-bottom: 24px; font-size: 0.8125rem; color: #555; position: relative; }
    #userBar .user-info { font-weight: 700; color: #000; font-size: 0.875rem; }
    #userBar .user-info.user-info-link { cursor: pointer; -webkit-tap-highlight-color: transparent; }
    #userBar .user-info.user-info-link:hover { text-decoration: underline; text-underline-offset: 3px; }
    #userBar .user-actions { display: flex; gap: 10px; align-items: center; }
    /* Hamburger trigger button */
    .usermenu-wrap { position: relative; display: inline-flex; }
    #userBar .usermenu-btn, .usermenu-btn { width: 40px; height: 40px; min-width: 0; border-radius: 50%; border: none; background: transparent; color: #1f2937; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; transition: background 150ms ease; position: relative; font-family: inherit; font-size: 0; box-shadow: none; }
    #userBar .usermenu-btn:hover, .usermenu-btn:hover { background: rgba(0,0,0,0.06); color: #1f2937; }
    #userBar .usermenu-btn:active, .usermenu-btn:active { background: rgba(0,0,0,0.10); }
    .usermenu-btn svg { width: 22px; height: 22px; stroke-width: 2; color: #1f2937; }
    .usermenu-dot { position: absolute; top: 8px; right: 8px; width: 9px; height: 9px; border-radius: 50%; background: #ff3b30; border: 2px solid #fff; box-shadow: 0 1px 3px rgba(255,59,48,0.35); pointer-events: none; }

    /* Full-screen overlay (dzinr-inspired clip-path wipe) */
    .usermenu-overlay { position: fixed; inset: 0; width: 100%; height: 100%; background: #0a0a0a; z-index: 10500; pointer-events: none; clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%); -webkit-clip-path: polygon(0% 100%, 100% 100%, 100% 100%, 0% 100%); transition: clip-path 0.8s cubic-bezier(0.76, 0, 0.24, 1), -webkit-clip-path 0.8s cubic-bezier(0.76, 0, 0.24, 1); will-change: clip-path; display: flex; flex-direction: column; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Inter', 'Segoe UI', Roboto, sans-serif; color: #fff; }
    .usermenu-overlay.open { pointer-events: auto; clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); }
    .usermenu-overlay-bar { position: absolute; top: 0; left: 0; right: 0; padding: 20px 28px; display: flex; justify-content: space-between; align-items: center; z-index: 2; }
    .usermenu-overlay-brand { font-size: 14px; font-weight: 500; letter-spacing: 1.2px; text-transform: uppercase; color: rgba(255,255,255,0.78); }
    .usermenu-overlay .usermenu-close { background: transparent; border: 1px solid rgba(255,255,255,0.22); width: 44px; height: 44px; min-width: 0; padding: 0; border-radius: 50%; color: #fff; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; font-size: 0; font-weight: 400; letter-spacing: 0; text-transform: none; font-family: inherit; transition: background 180ms ease, border-color 180ms ease; box-shadow: none; }
    .usermenu-overlay .usermenu-close:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.4); color: #fff; }
    .usermenu-overlay .usermenu-close:active { background: rgba(255,255,255,0.14); }
    .usermenu-overlay .usermenu-close svg { width: 20px; height: 20px; transform: rotate(45deg); transition: transform 400ms cubic-bezier(0.16,1,0.3,1); stroke-width: 1.5; display: block; }
    .usermenu-overlay .usermenu-close:hover svg { transform: rotate(135deg); }
    .usermenu-overlay-nav { margin: auto 0; padding: 0 clamp(28px, 6vw, 72px); display: flex; flex-direction: column; gap: 6px; }
    .usermenu-overlay-nav a { position: relative; display: inline-flex; align-items: center; gap: 22px; font-size: clamp(36px, 6.5vw, 68px); font-weight: 500; letter-spacing: -0.03em; color: rgba(255,255,255,0.55); text-decoration: none; cursor: pointer; line-height: 1.15; padding: 6px 0; opacity: 0; transform: translateY(60px); width: fit-content; font-family: inherit; }
    .usermenu-overlay.open .usermenu-overlay-nav a { opacity: 1; transform: translateY(0); transition: opacity 0.55s ease-out, transform 0.55s cubic-bezier(0.16, 1, 0.3, 1), color 0.25s ease; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(1) { transition-delay: 0.30s, 0.30s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(2) { transition-delay: 0.36s, 0.36s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(3) { transition-delay: 0.42s, 0.42s, 0s; }
    .usermenu-overlay-nav a:hover { color: #fff; }
    .usermenu-overlay-nav a .arrow { opacity: 0; transform: translateX(-12px); transition: opacity 220ms ease, transform 260ms cubic-bezier(0.16,1,0.3,1); font-size: 0.5em; margin-left: 8px; }
    .usermenu-overlay-nav a:hover .arrow { opacity: 1; transform: translateX(0); }
    .usermenu-overlay-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 26px; height: 26px; padding: 0 9px; margin-left: 14px; background: #ff3b30; color: #fff; border-radius: 999px; font-size: 13px; font-weight: 700; letter-spacing: 0; line-height: 1; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; font-variant-numeric: tabular-nums; vertical-align: middle; box-sizing: border-box; text-transform: none; box-shadow: 0 2px 8px rgba(255,59,48,0.28); align-self: center; position: relative; top: -0.08em; }
    .mobile-history-actions { display: none; }
    .usermenu-overlay-footer { position: absolute; bottom: 0; left: 0; right: 0; padding: 20px 28px; display: flex; justify-content: space-between; align-items: center; font-size: 11px; letter-spacing: 0.4px; color: rgba(255,255,255,0.45); text-transform: uppercase; z-index: 2; }
    .usermenu-overlay-footer span { font-variant-numeric: tabular-nums; }
    body.usermenu-open { overflow: hidden; }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) {
      .usermenu-overlay-bar, .usermenu-overlay-footer { padding: 16px 20px; }
      .usermenu-overlay-nav { padding: 0 24px; }
    }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(4)  { transition-delay: 0.48s, 0.48s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(5)  { transition-delay: 0.54s, 0.54s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(6)  { transition-delay: 0.60s, 0.60s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(7)  { transition-delay: 0.66s, 0.66s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(8)  { transition-delay: 0.72s, 0.72s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(9)  { transition-delay: 0.78s, 0.78s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(10) { transition-delay: 0.84s, 0.84s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(11) { transition-delay: 0.90s, 0.90s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(12) { transition-delay: 0.96s, 0.96s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(13) { transition-delay: 1.02s, 1.02s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(14) { transition-delay: 1.08s, 1.08s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(15) { transition-delay: 1.14s, 1.14s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(16) { transition-delay: 1.20s, 1.20s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(17) { transition-delay: 1.26s, 1.26s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(18) { transition-delay: 1.32s, 1.32s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(19) { transition-delay: 1.38s, 1.38s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(20) { transition-delay: 1.44s, 1.44s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(21) { transition-delay: 1.50s, 1.50s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(22) { transition-delay: 1.56s, 1.56s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(23) { transition-delay: 1.62s, 1.62s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(24) { transition-delay: 1.68s, 1.68s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(25) { transition-delay: 1.74s, 1.74s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(26) { transition-delay: 1.80s, 1.80s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(27) { transition-delay: 1.86s, 1.86s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(28) { transition-delay: 1.92s, 1.92s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(29) { transition-delay: 1.98s, 1.98s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(30) { transition-delay: 2.04s, 2.04s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(31) { transition-delay: 2.10s, 2.10s, 0s; }
    .usermenu-overlay.open .usermenu-overlay-nav a:nth-child(32) { transition-delay: 2.16s, 2.16s, 0s; }
    .admin-overlay-trigger { display: none; }
    .mobile-header-hidden { }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) { .mobile-header-hidden { display: none !important; } }
    #atTaskFab { display: none; position: fixed; right: 16px; bottom: 24px; z-index: 300; }
    /* Floating glass "Assign Task" button — desktop only; shows when viewing the Tasks view */
    #assignTaskFloatBtn { display: none; position: fixed; right: 24px; bottom: 24px; z-index: 300; align-items: center; gap: 9px; padding: 13px 22px; border: 1px solid rgba(255,255,255,0.7); border-radius: 999px; background: rgba(255,255,255,0.6); -webkit-backdrop-filter: blur(24px) saturate(180%); backdrop-filter: blur(24px) saturate(180%); color: #1d1d1f; font-size: 14px; font-weight: 600; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; cursor: pointer; box-shadow: 0 4px 16px rgba(0,0,0,0.12), 0 12px 32px rgba(0,0,0,0.16); transition: transform 180ms cubic-bezier(0.16,1,0.3,1), box-shadow 180ms ease, background 180ms ease; }
    body.admin-view-tasks #assignTaskFloatBtn { display: inline-flex; }
    #assignTaskFloatBtn:hover { transform: translateY(-2px); background: rgba(255,255,255,0.72); box-shadow: 0 8px 24px rgba(0,0,0,0.16), 0 18px 44px rgba(0,0,0,0.20); }
    #assignTaskFloatBtn:active { transform: translateY(0); }
    #assignTaskFloatBtn svg { flex-shrink: 0; }
    #atTaskFab.expanded { width: 360px; height: 580px; }
    .atf-body { flex: 1; overflow-y: auto; padding: 10px 14px 6px; display: flex; flex-direction: column; gap: 8px; min-height: 0; scrollbar-width: none; }
    .atf-body::-webkit-scrollbar { display: none; }
    /* Force dark theme on all form elements — solid background beats alpha-compositing bugs on mobile WebKit */
    .atf-input { -webkit-appearance: none; appearance: none; padding: 9px 11px; border: 1px solid rgba(255,255,255,0.15) !important; border-radius: 10px; background-color: #1e1e1e !important; color: #fff !important; -webkit-text-fill-color: #fff !important; font-size: 12px; font-family: inherit; outline: none; box-sizing: border-box; width: 100%; transition: border-color 180ms ease, background-color 180ms ease; }
    .atf-input::placeholder { color: rgba(255,255,255,0.45) !important; -webkit-text-fill-color: rgba(255,255,255,0.45) !important; opacity: 1 !important; }
    .atf-input:focus { border-color: rgba(255,255,255,0.38) !important; background-color: #262626 !important; }
    .atf-input option { background-color: #1a1a1a !important; color: #fff !important; }
    /* Select: custom chevron */
    select.atf-input { background-color: #1e1e1e !important; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='rgba(255,255,255,0.5)' stroke-width='1.8'%3E%3Cpath d='M6 8l4 4 4-4'/%3E%3C/svg%3E") !important; background-repeat: no-repeat !important; background-position: right 9px center !important; background-size: 15px !important; padding-right: 28px; cursor: pointer; }
    select.atf-input:focus { background-color: #262626 !important; }
    input[type="file"].atf-input::file-selector-button, input[type="file"].atf-input::-webkit-file-upload-button { background: rgba(255,255,255,0.12); color: #fff; border: 1px solid rgba(255,255,255,0.2); border-radius: 6px; padding: 4px 10px; font-size: 11px; font-family: inherit; cursor: pointer; margin-right: 8px; }
    input[type="file"].atf-input::file-selector-button:hover, input[type="file"].atf-input::-webkit-file-upload-button:hover { background: rgba(255,255,255,0.2); }
    /* Search: magnifier icon layered on solid dark background */
    #atfStudentSearch { padding-left: 32px; background-color: #1e1e1e !important; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='rgba(255,255,255,0.4)' stroke-width='2'%3E%3Ccircle cx='9' cy='9' r='6'/%3E%3Cpath d='m14 14 4 4'/%3E%3C/svg%3E") !important; background-repeat: no-repeat !important; background-position: 11px center !important; background-size: 14px !important; }
    #atfStudentSearch:focus { background-color: #262626 !important; }
    .atf-textarea { resize: none; min-height: 56px; line-height: 1.45; }
    .atf-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
    /* Apple-style segmented control — solid colours so mobile WebKit can't invert them */
    .atf-seg { display: flex; background: #2a2a2a; border-radius: 9px; padding: 3px; gap: 2px; flex-shrink: 0; }
    .atf-seg button { flex: 1; padding: 6px 4px; background: transparent; color: rgba(255,255,255,0.38); border: none; font-family: inherit; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; cursor: pointer; border-radius: 7px; transition: background 220ms cubic-bezier(0.16,1,0.3,1), color 200ms ease, box-shadow 200ms ease; }
    .atf-seg button.active { background: #515151; color: #fff !important; box-shadow: 0 1px 4px rgba(0,0,0,0.55); }
    /* Student list — no fixed height, scrolls with the body */
    .atf-list { overflow-y: visible; border: 1px solid rgba(255,255,255,0.1); border-radius: 10px; padding: 4px; }
    /* Student / group rows — mirror .cfp-student style */
    .atf-student { padding: 8px 8px; border-radius: 8px; cursor: pointer; transition: background 150ms ease; display: flex; align-items: center; gap: 10px; }
    .atf-student:hover { background: rgba(255,255,255,0.06); }
    .atf-student input[type=checkbox] { accent-color: #fff; flex-shrink: 0; }
    .atf-avatar { width: 30px; height: 30px; border-radius: 50%; background: linear-gradient(135deg,#3a3a3a,#1a1a1a); color: #fff !important; -webkit-text-fill-color: #fff !important; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 12px; flex-shrink: 0; border: 1px solid rgba(255,255,255,0.1); }
    .atf-sinfo { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
    .atf-sname { font-weight: 600; font-size: 13px; color: #f5f5f5 !important; -webkit-text-fill-color: #f5f5f5 !important; line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .atf-suser { font-size: 11px; color: rgba(255,255,255,0.45) !important; -webkit-text-fill-color: rgba(255,255,255,0.45) !important; }
    .atf-empty { padding: 18px; text-align: center; color: rgba(255,255,255,0.35); font-size: 12px; }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) {
      body.admin-view-tasks #atTaskFab { display: flex; }
      body.admin-view-tasks #assignTaskFloatBtn { display: none !important; }
      #atTaskFab { right: 8px; bottom: 8px; }
      #atTaskFab:hover:not(.expanded) { width: calc(100vw - 16px); }
      #atTaskFab.expanded { width: calc(100vw - 16px); height: 580px; }
      .assign-task-header-btn { display: none !important; }
      body.admin-view-tasks .admin-main { padding: 0 10px !important; }
    }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) { .admin-overlay-trigger { display: inline-flex; } }
    #adminMenuOverlay .usermenu-overlay-nav { margin: 0; padding: 80px clamp(28px,6vw,72px) 60px; overflow-y: auto; flex: 1; align-self: stretch; scrollbar-width: none; justify-content: flex-start; }
    #adminMenuOverlay .usermenu-overlay-nav::-webkit-scrollbar { display: none; }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) { #adminMenuOverlay .usermenu-overlay-nav { padding: 72px 24px 52px; } }
    /* Student overlay: same scrollable treatment as admin — otherwise the centered
       (margin:auto 0) nav clips its items with no way to scroll on short screens. */
    #userMenuOverlay .usermenu-overlay-nav { margin: 0; padding: 80px clamp(28px,6vw,72px) 60px; overflow-y: auto; flex: 1; align-self: stretch; scrollbar-width: none; justify-content: flex-start; }
    #userMenuOverlay .usermenu-overlay-nav::-webkit-scrollbar { display: none; }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) { #userMenuOverlay .usermenu-overlay-nav { padding: 72px 24px 52px; } }
    #userBar button { padding: 8px 18px; font-size: 0.75rem; background: #000; border-radius: 8px; transition: background 150ms ease; cursor: pointer; outline: none; -webkit-appearance: none; user-select: none; }
    #userBar button:hover { background: #333; }
    #userBar button:focus, #userBar button:focus-visible { outline: none; box-shadow: none; }
    #userBar .btn-history { background: #000; }
    #userBar .btn-history:hover { background: #333; }
    #userBar .notif-bell { background: transparent !important; border: none !important; color: #1f2937 !important; }
    #userBar .btn-slide-fill { background: transparent; color: #000; border: 2px solid #000; overflow: hidden; position: relative; transition: color 0.32s ease; }
    #userBar .btn-slide-fill span { position: relative; z-index: 2; }
    #userBar .btn-slide-fill::after { content: ''; position: absolute; top: 0; left: 0; width: 0; height: 100%; transition: width 0.32s ease; z-index: 1; }
    #userBar .btn-slide-fill:hover { background: transparent; color: #fff; }
    #userBar .btn-slide-fill:hover::after { width: 100%; }
    #userBar .btn-slide-red { border-color: #e0192d; color: #e0192d; }
    #userBar .btn-slide-red::after { background: #e0192d; }
    #userBar .btn-slide-green { border-color: #1a6b3c; color: #1a6b3c; }
    #userBar .btn-slide-green::after { background: #1a6b3c; }
    #userBar .notif-bell:hover { background: rgba(0,0,0,0.06) !important; }

    /* Auth Screen */
    #authScreen { text-align: center; padding: 20px 0; }
    .auth-tabs { display: flex; margin-bottom: 32px; border-bottom: 2px solid #000; max-width: 400px; margin-left: auto; margin-right: auto; }
    .auth-tab { flex: 1; padding: 14px; background: none; border: none; border-radius: 0; font-size: 0.875rem; color: #888; cursor: pointer; border-bottom: 3px solid transparent; margin-bottom: -2px; transition: color 0.1s; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; text-transform: uppercase; letter-spacing: 0.5px; }
    .auth-tab:hover { background: #f5f5f5; color: #000; }
    .auth-tab.active { color: #000; border-bottom-color: #000; font-weight: 700; background: none; }
    .auth-form { max-width: 400px; margin: 0 auto; }
    .auth-form input { display: block; width: 100%; padding: 14px 16px; font-size: 14px; border: 2px solid #000; border-radius: 0; margin-bottom: 14px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    .auth-form input:focus { border-color: #000; outline: none; }
    .auth-form button { width: 100%; margin-top: 8px; }
    .auth-error { color: #e74c3c; font-size: 13px; margin-top: 12px; min-height: 20px; }

    /* Login page — brochure gradient blobs */
    .login-blob { display: none; position: fixed; border-radius: 50%; pointer-events: none; }
    body.auth-mode .login-blob { display: block; }
    .login-blob--tr { width: 520px; height: 520px; top: -120px; right: -130px; background: radial-gradient(circle at 38% 38%, #b8c8ef 0%, #cdd9f5 38%, #dde6fb 62%, transparent 78%); opacity: 0.72; }
    .login-blob--bl { width: 440px; height: 440px; bottom: -210px; left: -190px; background: radial-gradient(circle at 60% 60%, #b8c8ef 0%, #cdd9f5 38%, #dde6fb 62%, transparent 78%); opacity: 0.65; }
    .login-blob--tl { width: 780px; height: 780px; top: -180px; left: -220px; background: radial-gradient(circle at 45% 40%, #a0b8e8 0%, #bccff5 32%, #d4e1fb 58%, transparent 76%); opacity: 0.68; }

    /* Login page — brochure subtext */
    .auth-subtext { max-width: 400px; margin: 0 auto 28px; text-align: center; position: relative; z-index: 1; }
    .auth-tagline { font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 15px; color: #556; margin: 0; font-weight: 300; letter-spacing: 1.5px; text-transform: uppercase; }

    /* Secondary button */
    .btn-secondary { background: #fff; color: #000; border: 2px solid #000 !important; }
    .btn-secondary:hover { background: #f5f5f5; color: #000; }

    /* History Screen */
    .history-header { display: block; text-align: center; margin-bottom: 24px; }
    .history-header h2 { color: #000; font-size: 42px; font-weight: 200; text-transform: uppercase; letter-spacing: 2px; margin: 0; }
    .history-nav-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
    .history-header button { padding: 10px 22px; font-size: 13px; }
    .history-stats { display: flex; gap: 16px; margin-bottom: 24px; }
    .stat-card { flex: 1; background: #fff; border-radius: 0; padding: 20px; text-align: center; border: 2px solid #000; }
    .stat-card .stat-value { font-size: 28px; font-weight: 700; color: #000; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    .stat-card .stat-label { font-size: 11px; color: #666; margin-top: 6px; text-transform: uppercase; letter-spacing: 1px; }
    .history-table { width: 100%; border-collapse: collapse; font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    .history-table th { background: #f5f5f5; padding: 8px 6px; text-align: left; color: #000; font-weight: 700; border-bottom: 2px solid #000; white-space: nowrap; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; }
    .history-table td { padding: 8px 6px; border-bottom: 1px solid #e0e0e0; vertical-align: top; color: #1a1a1a; }
    .history-table tr.attempt-row { cursor: pointer; }
    .history-table tr.attempt-row:hover td { background: #f5f5f5; }
    .history-table tr.detail-row td { background: #fafafa; padding: 0; }
    .attempt-detail { padding: 12px; }
    .attempt-detail .detail-answer { padding: 8px 10px; font-size: 13px; border-bottom: 1px solid #e0e0e0; display: flex; gap: 10px; align-items: flex-start; }
    .attempt-detail .detail-answer:last-child { border-bottom: none; }
    .detail-answer .q-num { display: inline-flex; align-items: center; justify-content: center; min-width: 26px; height: 26px; border-radius: 50%; font-size: 12px; font-weight: 700; color: #fff; flex-shrink: 0; margin-top: 1px; }
    .detail-answer.da-row-correct .q-num { background: #4CAF50; }
    .detail-answer.da-row-wrong .q-num { background: #e74c3c; }
    .detail-answer.da-row-skipped .q-num { background: #f39c12; }
    .detail-answer .q-body { flex: 1; }
    .da-correct { color: #4CAF50; }
    .da-wrong { color: #e74c3c; }
    .print-attempt-btn { padding: 4px 12px; background: #8e44ad; color: #fff; border: none; border-radius: 5px; cursor: pointer; font-size: 12px; margin-left: 6px; }
    .print-attempt-btn:hover { background: #7d3c98; }
    .print-bar { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
    .print-bar select { padding: 5px 10px; border: 1px solid #ddd; border-radius: 5px; font-size: 13px; }
    @media print {
      .nav-bar, .user-bar, .history-stats, .print-bar, .print-attempt-btn, .expand-icon, button, input, select, .stat-card { display: none !important; }
      .detail-row { display: table-row !important; }
      .detail-row.hidden { display: table-row !important; }
      .detail-row.print-hide { display: none !important; }
      .attempt-row.print-hide { display: none !important; }
      tr[style*="background:#fffbf0"].print-hide { display: none !important; }
      .detail-answer .q-num { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
      body { padding: 5px; }
      /* Student report print mode */
      body.printing-report .container { display: none !important; }
      body.printing-report #reportPrintArea { display: block !important; position: static !important; overflow: visible !important; z-index: auto !important; }
      #reportPrintArea .no-print { display: none !important; }
    }
    #reportPrintArea { display: none; }
    .expand-icon { float: right; color: #aaa; }
    .history-empty { text-align: center; color: #888; padding: 30px; }

    /* Fullscreen mode (quiz reading width — must NOT touch the admin dashboard,
       which reuses .container as .admin-expanded; otherwise the fixed sidebar
       detaches into the gutter and the layout collapses when fullscreen is entered) */
    :fullscreen .container:not(.admin-expanded), :-webkit-full-screen .container:not(.admin-expanded) {
      max-width: 900px;
      padding: 48px 56px;
      min-height: 100vh;
      border: none;
    }
    :fullscreen body, :-webkit-full-screen body {
      padding: 0;
      align-items: stretch;
    }

    /* Large screens */
    @media (min-width: 1200px) {
      .container { max-width: 920px; padding: 48px 60px; }
    }

    /* Admin Panel — Bloomberg-inspired clean dashboard */
    body.admin-mode { background: #f5f5f7; padding: 0; }
    body.admin-mode #userBar { background: transparent; margin: 10px 10px 4px 260px; border: none; border-radius: 0; box-shadow: none; padding: 6px 12px; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; justify-content: flex-end; }
    /* Admin header stripped to Apple-style glass controls: hide name; only bell+notify pill, (mobile) menu, logout icon remain */
    body.admin-mode #userBar .user-info { display: none; }
    body.admin-mode #userBar .user-actions { gap: 10px; }
    /* Glass pill grouping the notification bell + Notify button */
    #userBar .glass-pill { display: inline-flex; align-items: center; gap: 4px; padding: 4px; border-radius: 999px; background: rgba(255,255,255,0.55); -webkit-backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(20px) saturate(180%); border: 1px solid rgba(255,255,255,0.7); box-shadow: 0 1px 3px rgba(0,0,0,0.06), 0 6px 18px rgba(0,0,0,0.08); }
    #userBar .glass-pill .notif-bell { width: 36px; height: 36px; margin: 0; border-radius: 50%; }
    /* Vertical divider between the bell and the Notify button */
    #userBar .glass-pill-div { width: 1px; height: 20px; flex-shrink: 0; background: rgba(0,0,0,0.12); border-radius: 1px; }
    #userBar .glass-pill-notify { display: inline-flex; align-items: center; gap: 6px; height: 36px; padding: 0 16px; border: none; background: transparent; color: #1d1d1f; font-size: 13px; font-weight: 500; border-radius: 999px; cursor: pointer; font-family: inherit; transition: background 150ms ease; }
    #userBar .glass-pill-notify:hover { background: rgba(0,0,0,0.06); border-radius: 999px; }
    #userBar .glass-pill-notify:active { background: rgba(0,0,0,0.10); }
    /* Glass icon-only logout button */
    #userBar .glass-icon-btn { width: 40px; height: 40px; min-width: 0; display: inline-flex; align-items: center; justify-content: center; padding: 0; border-radius: 50%; background: rgba(255,255,255,0.55); -webkit-backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(20px) saturate(180%); border: 1px solid rgba(255,255,255,0.7); box-shadow: 0 1px 3px rgba(0,0,0,0.06), 0 6px 18px rgba(0,0,0,0.08); color: #d70015; cursor: pointer; font-family: inherit; transition: background 150ms ease, transform 150ms ease; }
    #userBar .glass-icon-btn:hover { background: rgba(215,0,21,0.10); transform: translateY(-1px); }
    #userBar .glass-icon-btn:active { transform: translateY(0); background: rgba(215,0,21,0.16); }
    /* ── Custom glass time picker ─────────────────────────────── */
    .tp-trigger { display:inline-flex !important; align-items:center; gap:10px; width:100%; padding:10px 14px !important; border:1px solid #d2d2d7; border-radius:12px !important; background:#fff !important; font-family:inherit; font-size:15px; font-weight:500; color:#1d1d1f !important; text-transform:none !important; letter-spacing:normal !important; cursor:pointer; box-sizing:border-box; transition:border-color 150ms ease, box-shadow 150ms ease; }
    .tp-trigger:hover { background:#fff !important; border-color:#b0b0b8; box-shadow:none; transform:none !important; }
    .tp-trigger.tp-open { border-color:#0a84ff; box-shadow:0 0 0 3px rgba(10,132,255,0.16); }
    .tp-trigger svg { width:16px; height:16px; color:#8e8e93; flex-shrink:0; }
    .tp-disp { font-variant-numeric:tabular-nums; letter-spacing:0.5px; font-weight:600; }
    .tp-disp.tp-empty { color:#b0b0b8; font-weight:500; }
    .tp-pop { position:fixed; z-index:10050; width:240px; padding:10px; border-radius:18px; background:rgba(255,255,255,0.72); -webkit-backdrop-filter:blur(28px) saturate(180%); backdrop-filter:blur(28px) saturate(180%); border:1px solid rgba(255,255,255,0.7); box-shadow:0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10); opacity:0; transform:translateY(-6px) scale(0.98); transition:opacity 160ms ease, transform 160ms cubic-bezier(0.16,1,0.3,1); pointer-events:none; font-family:-apple-system,BlinkMacSystemFont,'SF Pro Text','Inter','Segoe UI',Roboto,sans-serif; }
    .tp-pop.open { opacity:1; transform:translateY(0) scale(1); pointer-events:auto; }
    .tp-cols { display:flex; gap:6px; height:176px; }
    .tp-col { flex:1; overflow-y:auto; scrollbar-width:none; -ms-overflow-style:none; border-radius:12px; background:rgba(120,120,128,0.10); padding:4px; }
    .tp-col::-webkit-scrollbar { width:0; display:none; }
    .tp-opt { padding:9px 0; text-align:center; font-size:15px; font-weight:600; color:#3a3a3c; cursor:pointer; border-radius:9px; margin:2px 2px; scroll-margin:60px 0; font-variant-numeric:tabular-nums; transition:background 120ms ease, color 120ms ease; }
    .tp-opt:hover { background:rgba(0,0,0,0.05); }
    .tp-opt.sel { background:#0a84ff; color:#fff; box-shadow:0 2px 8px rgba(10,132,255,0.35); }
    .tp-foot { display:flex; gap:8px; margin-top:10px; }
    .tp-foot button { flex:1; padding:9px 0 !important; border-radius:11px !important; font-family:inherit; font-size:12px; font-weight:700; text-transform:none !important; letter-spacing:normal !important; cursor:pointer; border:1px solid transparent; box-shadow:none !important; transition:background 150ms ease; }
    .tp-foot button:hover { transform:none !important; }
    .tp-now { background:rgba(120,120,128,0.16); color:#1d1d1f; }
    .tp-now:hover { background:rgba(120,120,128,0.26); }
    .tp-done { background:rgba(10,132,255,0.92); color:#fff; }
    .tp-done:hover { background:#0a84ff; }
    /* ── Custom glass date picker (admin only) ────────────────── */
    .dp-pop { position:fixed; z-index:10050; width:260px; padding:12px; border-radius:18px; background:rgba(255,255,255,0.72); -webkit-backdrop-filter:blur(28px) saturate(180%); backdrop-filter:blur(28px) saturate(180%); border:1px solid rgba(255,255,255,0.7); box-shadow:0 8px 32px rgba(0,0,0,0.18), 0 2px 8px rgba(0,0,0,0.10); opacity:0; transform:translateY(-6px) scale(0.98); transition:opacity 160ms ease, transform 160ms cubic-bezier(0.16,1,0.3,1); pointer-events:none; font-family:-apple-system,BlinkMacSystemFont,'SF Pro Text','Inter','Segoe UI',Roboto,sans-serif; }
    .dp-pop.open { opacity:1; transform:translateY(0) scale(1); pointer-events:auto; }
    .dp-head { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
    .dp-title { font-size:14px; font-weight:700; color:#1d1d1f; }
    .dp-nav { display:inline-flex !important; align-items:center; justify-content:center; width:30px !important; height:30px !important; min-width:0 !important; padding:0 !important; border:none !important; border-radius:50% !important; background:rgba(120,120,128,0.14) !important; color:#1d1d1f !important; font-size:18px; line-height:1; text-transform:none !important; letter-spacing:normal !important; cursor:pointer; flex-shrink:0; transition:background 150ms ease; box-shadow:none !important; }
    .dp-nav:hover { background:rgba(120,120,128,0.24) !important; transform:none !important; }
    .dp-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }
    .dp-dow { text-align:center; font-size:10px; font-weight:700; color:#8e8e93; text-transform:uppercase; padding:4px 0; }
    .dp-day { text-align:center; font-size:13px; font-weight:600; color:#1d1d1f; padding:7px 0; border-radius:9px; cursor:pointer; transition:background 120ms ease, color 120ms ease; }
    .dp-day:hover { background:rgba(0,0,0,0.06); }
    .dp-day.today { color:#0a84ff; }
    .dp-day.sel { background:#0a84ff; color:#fff; box-shadow:0 2px 8px rgba(10,132,255,0.35); }
    /* ── Glass dialog buttons ─────────────────────────────────── */
    .gbtn { border-radius:12px; font-family:inherit; font-weight:700; cursor:pointer; border:1px solid transparent; -webkit-backdrop-filter:blur(14px) saturate(180%); backdrop-filter:blur(14px) saturate(180%); box-shadow:0 1px 3px rgba(0,0,0,0.08), 0 6px 18px rgba(0,0,0,0.10); transition:transform 150ms ease, background 150ms ease, box-shadow 150ms ease; }
    .gbtn:hover { transform:translateY(-1px); box-shadow:0 2px 6px rgba(0,0,0,0.10), 0 10px 26px rgba(0,0,0,0.14); }
    .gbtn:active { transform:translateY(0); }
    .gbtn-secondary { background:rgba(255,255,255,0.55); border-color:rgba(0,0,0,0.10); color:#3a3a3c; }
    .gbtn-secondary:hover { background:rgba(255,255,255,0.72); }
    .gbtn-green { background:rgba(26,107,60,0.88); border-color:rgba(255,255,255,0.22); color:#fff; }
    .gbtn-green:hover { background:rgba(26,107,60,0.96); }
    .gbtn-dark { background:rgba(28,28,30,0.85); border-color:rgba(255,255,255,0.18); color:#fff; }
    .gbtn-dark:hover { background:rgba(28,28,30,0.95); }
    body.admin-mode #title { margin-left: 260px; margin-right: 10px; padding: 0 20px; }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) {
      body.admin-mode #userBar { margin: 4px 4px 20px; box-sizing: border-box; }
      body.admin-mode #title { margin-left: 10px; margin-right: 10px; padding: 0; }
    }
    .container.admin-expanded { background: #f5f5f7; color: #1a1a1a; border-radius: 0; box-shadow: none; max-width: 100%; padding: 0; min-height: 100vh; border: none; }
    .container.admin-expanded h1, .container.admin-expanded h2,
    .container.admin-expanded h3, .container.admin-expanded h4 { color: #000; }
    .container.admin-expanded strong { color: #000; }
    .container.admin-expanded label { color: #333; }
    .container.admin-expanded p { color: #444; }
    .container.admin-expanded a { color: #0066cc; }
    .admin-layout { display: flex; gap: 0; min-height: 100vh; position: relative; width: 100%; align-items: stretch; }
    .admin-hamburger { display: none; width: 40px; height: 40px; min-width: 0; padding: 0; margin: 10px 0 6px; background: #fff; color: #1f2937; border: 1px solid rgba(0,0,0,0.08); border-radius: 50%; font-size: 0; cursor: pointer; align-items: center; justify-content: center; box-shadow: 0 2px 8px rgba(0,0,0,0.06); transition: background 150ms ease; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; }
    .admin-hamburger svg { width: 20px; height: 20px; stroke-width: 2; color: #1f2937; }
    .admin-hamburger:hover { background: #f3f4f6; }
    .admin-sidebar-close { display: none; position: absolute; top: 14px; right: 14px; width: 40px; height: 40px; min-width: 0; padding: 0; background: transparent; border: 1px solid rgba(0,0,0,0.12); border-radius: 50%; color: #1f2937; align-items: center; justify-content: center; cursor: pointer; font-size: 0; z-index: 2; transition: background 180ms ease, border-color 180ms ease; }
    .admin-sidebar-close svg { width: 18px; height: 18px; stroke-width: 1.75; transition: transform 300ms cubic-bezier(0.16,1,0.3,1); }
    .admin-sidebar-close:hover { background: rgba(0,0,0,0.04); border-color: rgba(0,0,0,0.22); }
    .admin-sidebar-close:hover svg { transform: rotate(90deg); }
    .admin-sidebar { width: 240px; flex-shrink: 0; background: rgba(255,255,255,0.55); -webkit-backdrop-filter: blur(24px) saturate(180%); backdrop-filter: blur(24px) saturate(180%); border: 1px solid rgba(255,255,255,0.7); border-radius: 16px; padding: 0; position: fixed; top: 10px; left: 10px; height: calc(100vh - 20px); overflow: hidden; z-index: 50; box-shadow: 0 1px 3px rgba(0,0,0,0.06), 0 16px 48px rgba(0,0,0,0.10); display: flex; flex-direction: column; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; }
    .admin-sidebar-brand { padding: 18px 16px 16px; font-size: 17px; font-weight: 600; color: #1f2937; letter-spacing: 0.1px; text-transform: none; font-family: inherit; display: flex; align-items: center; gap: 11px; flex-shrink: 0; order: 1; }
    .admin-sidebar-brand::before { content: ''; width: 30px; height: 30px; border-radius: 9px; background: #fff url('/logo-mark.png') center/78% no-repeat; box-shadow: 0 1px 4px rgba(15,23,42,0.14); flex-shrink: 0; }
    /* Apple System-Settings-style pill search: rounded field, magnifying-glass icon,
       auto-focused whenever the admin/mentor sidebar opens (see focusAdminSidebarSearch). */
    .admin-sidebar-search { order: 1; flex-shrink: 0; padding: 4px 12px 12px; border-bottom: 1px solid #f3f4f6; }
    .admin-sidebar-search-field { display: flex; align-items: center; gap: 6px; background: rgba(120,120,128,0.12); border-radius: 999px; padding: 6px 10px; transition: background 150ms ease, box-shadow 150ms ease; }
    .admin-sidebar-search-field:focus-within { background: rgba(120,120,128,0.16); box-shadow: 0 0 0 3px rgba(37,99,235,0.15); }
    .admin-sidebar-search-icon { width: 14px; height: 14px; color: #8e8e93; flex-shrink: 0; }
    /* #id-qualified: .container.admin-expanded input[type="text"] (a global reset for
       ordinary form fields elsewhere in the admin panel) outweighs a bare class here and
       was stamping this pill with a square white box + grey border — id specificity wins. */
    #adminSidebarSearch.admin-sidebar-search-input,
    #adminSidebarSearch.admin-sidebar-search-input:focus { flex: 1; min-width: 0; border: none; border-radius: 0; background: transparent; outline: none; box-shadow: none; font-size: 13px; font-family: inherit; color: #1f2937; padding: 0; }
    .admin-sidebar-search-input::placeholder { color: #9ca3af; }
    .admin-sidebar-search-clear { display: none; align-items: center; justify-content: center; width: 16px; height: 16px; border-radius: 50%; border: none; background: #c7c7cc; color: #fff; cursor: pointer; flex-shrink: 0; padding: 0; }
    .admin-sidebar-search-clear svg { width: 10px; height: 10px; }
    .admin-sidebar-search-clear:hover { background: #a1a1a6; }
    .admin-sidebar-search-field.has-text .admin-sidebar-search-clear { display: inline-flex; }
    .admin-sidebar-nav { padding: 8px 8px 12px; flex: 1; min-height: 0; order: 1; overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain; scrollbar-width: none; -ms-overflow-style: none; }
    .admin-sidebar-nav::-webkit-scrollbar { display: none; }
    .admin-nav-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; color: #4b5563; font-size: 13px; cursor: pointer; transition: background 150ms ease, color 150ms ease; border-radius: 10px; margin: 1px 0; user-select: none; font-family: inherit; font-weight: 450; }
    .admin-nav-item svg { width: 16px; height: 16px; stroke-width: 1.75; flex-shrink: 0; opacity: 0.7; }
    .admin-nav-item:hover { background: #f3f4f6; color: #1f2937; }
    .admin-nav-item:hover svg { opacity: 1; }
    .admin-nav-item.active { font-weight: 500; }
    .admin-nav-item.active svg { opacity: 1; }
    /* Per-item accent colors — Apple-style soft tinted active pill */
    #anav-overview { color: #1565c0; } #anav-overview.active { color: #1565c0; background: #e3f2fd; }
    #anav-daily { color: #e65100; } #anav-daily.active { color: #e65100; background: #fff3e0; }
    #anav-active { color: #2e7d32; } #anav-active.active { color: #2e7d32; background: #e8f5e9; }
    #anav-users { color: #5e35b1; } #anav-users.active { color: #5e35b1; background: #ede7f6; }
    #anav-groups { color: #00838f; } #anav-groups.active { color: #00838f; background: #e0f7fa; }
    #anav-tasks { color: #c62828; } #anav-tasks.active { color: #c62828; background: #ffebee; }
    #anav-attendance { color: #1b5e20; } #anav-attendance.active { color: #1b5e20; background: #e8f5e9; }
    #anav-leaderboard { color: #f9a825; } #anav-leaderboard.active { color: #b17900; background: #fffde7; }
    #anav-doubts { color: #d84315; } #anav-doubts.active { color: #d84315; background: #fbe9e7; }
    #anav-resources { color: #00695c; } #anav-resources.active { color: #00695c; background: #e0f2f1; }
    #anav-guides { color: #6a1b9a; } #anav-guides.active { color: #6a1b9a; background: #f3e8fd; }
    #anav-tokens { color: #ca8a04; } #anav-tokens.active { color: #ca8a04; background: #fef3c7; }
    #anav-reports { color: #4527a0; } #anav-reports.active { color: #4527a0; background: #ede7f6; }
    #anav-settings { color: #37474f; } #anav-settings.active { color: #37474f; background: #eceff1; }
    #anav-questions { color: #1565c0; } #anav-questions.active { color: #1565c0; background: #e3f2fd; }
    #anav-quizlibrary { color: #6a1b9a; } #anav-quizlibrary.active { color: #6a1b9a; background: #f3e8fd; }
    #anav-warnings { color: #e65100; } #anav-warnings.active { color: #e65100; background: #fff3e0; }
    #anav-grader { color: #7c3aed; } #anav-grader.active { color: #7c3aed; background: #f3e8ff; }
    #anav-session { color: #455a64; } #anav-session.active { color: #455a64; background: #eceff1; }
    #anav-sentry { color: #b91c1c; } #anav-sentry.active { color: #b91c1c; background: #fef2f2; }
    .anav-badge { margin-left:auto; background:#dc2626; color:#fff; font-size:10.5px; font-weight:700; padding:2px 7px; border-radius:999px; line-height:1.3; min-width:18px; text-align:center; box-shadow:0 1px 3px rgba(220,38,38,0.35); }
    /* ── Grader view: one-session-at-a-time carousel + pending accordion ──
       NOTE: buttons here are scoped under #adminContent + !important so they
       outrank the global `.container.admin-expanded button { background:#000 }`
       and the bare `button { padding:14px 36px; text-transform:uppercase }`. */
    .gr-section-label { font-size:12px; font-weight:800; letter-spacing:.05em; text-transform:uppercase; color:#6b7280; }
    .gr-counter { font-size:12px; font-weight:700; color:#7c3aed; }
    #adminContent .gr-toggle { display:inline-flex !important; align-items:center; gap:7px; font-family:inherit; font-size:12px !important; font-weight:700 !important; padding:6px 13px !important; border-radius:999px !important; border:1px solid #e5e5ea !important; background:#fff !important; color:#6b7280 !important; cursor:pointer; text-transform:none !important; letter-spacing:normal !important; transition:background .15s, border-color .15s, color .15s; }
    #adminContent .gr-toggle:hover { border-color:#e9d5ff !important; color:#7c3aed !important; }
    #adminContent .gr-toggle.active { background:#7c3aed !important; border-color:#7c3aed !important; color:#fff !important; }
    .gr-toggle-dot { width:8px; height:8px; border-radius:50%; background:#c7c7cc; transition:background .15s; flex:0 0 auto; }
    .gr-toggle.active .gr-toggle-dot { background:#fff; }
    .gr-card.gr-muted { opacity:.5; }
    .gr-dots.muted { opacity:.55; }
    .gr-carousel { display:flex; align-items:stretch; gap:10px; }
    #adminContent .gr-arrow { flex:0 0 auto; width:34px !important; height:34px; align-self:center; border:1px solid #e5e5ea !important; background:#fff !important; color:#6b7280 !important; border-radius:50% !important; padding:0 !important; font-size:16px !important; font-weight:700 !important; line-height:1; text-transform:none !important; letter-spacing:normal !important; cursor:pointer; display:flex; align-items:center; justify-content:center; transition:background .15s, color .15s, border-color .15s; }
    #adminContent .gr-arrow:hover:not(:disabled) { background:#f3e8ff !important; color:#7c3aed !important; border-color:#e9d5ff !important; }
    #adminContent .gr-arrow:disabled { opacity:.3; cursor:default; }
    .gr-card { flex:1 1 auto; min-width:0; border:1px solid #e5e5ea; border-radius:14px; padding:14px 18px; background:linear-gradient(180deg,#fafafa,#ffffff); display:flex; flex-direction:column; gap:9px; }
    .gr-card-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
    .gr-dot2 { width:9px; height:9px; border-radius:50%; flex:0 0 auto; }
    .gr-op { font-weight:800; color:#1d1d1f; font-size:15px; }
    .gr-run-id { font-size:12px; color:#86868b; font-weight:600; }
    .gr-src { font-size:10px; font-weight:800; letter-spacing:.03em; text-transform:uppercase; color:#6b7280; background:#f3f4f6; padding:2px 8px; border-radius:999px; }
    .gr-status { font-size:10px; font-weight:800; letter-spacing:.03em; text-transform:uppercase; padding:2px 9px; border-radius:999px; margin-left:auto; }
    .gr-status-completed { color:#16a34a; background:#dcfce7; }
    .gr-status-running { color:#d97706; background:#fef3c7; }
    .gr-status-failed { color:#dc2626; background:#fee2e2; }
    .gr-status-stalled { color:#6b7280; background:#f3f4f6; }
    .gr-card-time { font-size:12px; color:#6b7280; }
    .gr-card-sub { font-size:12px; color:#86868b; }
    .gr-counts { display:flex; gap:8px; flex-wrap:wrap; }
    .gr-count { font-size:13px; font-weight:700; padding:4px 12px; border-radius:10px; }
    .gr-count.approve { color:#166534; background:#dcfce7; }
    .gr-count.reject { color:#991b1b; background:#fee2e2; }
    .gr-count.warn { color:#92400e; background:#fef3c7; }
    .gr-card-foot { font-size:11px; color:#9ca3af; }
    #adminContent .gr-revert { align-self:flex-start; font-size:11px !important; font-weight:700 !important; padding:4px 12px !important; border:1px solid #fecaca !important; color:#dc2626 !important; background:#fff !important; border-radius:999px !important; cursor:pointer; font-family:inherit; text-transform:none !important; letter-spacing:normal !important; }
    #adminContent .gr-revert:hover { background:#fef2f2 !important; }
    .gr-dots { display:flex; align-items:center; justify-content:center; gap:6px; flex-wrap:wrap; padding:2px 0; }
    #adminContent .gr-dot { width:7px !important; height:7px; border-radius:50% !important; background:#d4d4d8 !important; border:none !important; padding:0 !important; cursor:pointer; transition:transform .15s, background .15s; }
    #adminContent .gr-dot.active { background:#7c3aed !important; transform:scale(1.45); }
    #adminContent .gr-dot:hover { background:#a78bfa !important; }
    .gr-accordion { border:1px solid #e5e5ea; border-radius:14px; background:#fff; overflow:hidden; flex:0 0 auto; }
    #adminContent .gr-acc-head { width:100%; display:flex !important; align-items:center; gap:10px; padding:12px 16px !important; background:#fff !important; color:#1d1d1f !important; border:none !important; border-radius:0 !important; cursor:pointer; font-family:inherit; text-align:left; text-transform:none !important; letter-spacing:normal !important; }
    #adminContent .gr-acc-head:hover { background:#fafafa !important; }
    .gr-acc-chevron { font-size:11px; color:#9ca3af; transition:transform .18s ease; flex:0 0 auto; }
    .gr-acc-chevron.open { transform:rotate(90deg); }
    .gr-acc-title { font-size:12px; font-weight:800; letter-spacing:.03em; color:#1d1d1f; text-transform:uppercase; }
    .gr-acc-count { font-size:12px; font-weight:800; padding:2px 10px; border-radius:999px; color:#7c3aed; background:#f3e8ff; }
    .gr-acc-count.clear { color:#16a34a; background:#dcfce7; }
    .gr-acc-hint { font-size:12px; color:#9ca3af; margin-left:auto; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .gr-acc-body { max-height:38vh; overflow:auto; border-top:1px solid #f0f0f3; overscroll-behavior:contain; }
    .admin-nav-section { display: flex; align-items: center; gap: 10px; padding: 9px 12px; font-size: 13px; font-weight: 500; text-transform: none; letter-spacing: 0; color: #4b5563; user-select: none; cursor: pointer; border-radius: 10px; margin: 1px 0; transition: background 150ms ease, color 150ms ease; font-family: inherit; }
    .admin-nav-section svg { width: 16px; height: 16px; stroke-width: 1.75; flex-shrink: 0; opacity: 0.7; }
    .admin-nav-section:hover { background: #f3f4f6; color: #1f2937; }
    .admin-nav-section:hover svg { opacity: 1; }
    .admin-nav-section-toggle { margin-left: auto; font-size: 10px; color: #9ca3af; transition: transform 0.15s; }
    .admin-nav-section-toggle.collapsed { transform: rotate(-90deg); }
    .admin-nav-children { margin-left: 16px; overflow: hidden; transition: max-height 0.2s ease; }
    .admin-nav-children.collapsed { max-height: 0 !important; }
    /* Mobile submission card action buttons — force clean 2-per-row wrap inside card */
    .sub-mob-actions { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }
    .sub-mob-actions > * { flex: 1 1 calc(50% - 4px); min-width: 0; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .sub-mob-card { overflow: hidden; }
    .admin-nav-children .admin-nav-item { padding: 7px 12px; font-size: 12.5px; position: relative; }
    .admin-nav-children .admin-nav-item::before { content: none; }
    .admin-nav-children .admin-nav-item:hover { background: #f3f4f6; color: #1f2937; }
    .active-badge { display: inline-block; background: #4CAF50; color: #fff; border-radius: 3px; padding: 1px 6px; font-size: 10px; margin-left: 6px; font-weight: 700; }
    /* History search bar */
    .history-search { position: relative; margin-bottom: 18px; }
    .history-search input { width: 100%; padding: 11px 16px 11px 40px; font-size: 13px; border: 1.5px solid #e5e7eb; border-radius: 10px; background: #f9fafb; color: #1f2937; outline: none; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; transition: border-color 180ms, background 180ms, box-shadow 180ms; box-sizing: border-box; }
    .history-search input:focus { border-color: #007aff; background: #fff; box-shadow: 0 0 0 3px rgba(0,122,255,0.12); }
    .history-search input::placeholder { color: #9ca3af; }
    .history-search-icon { position: absolute; left: 13px; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; color: #9ca3af; pointer-events: none; }
    .history-search-clear { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); width: 22px; height: 22px; border-radius: 50%; border: none; background: transparent; color: #9ca3af; cursor: pointer; display: none; align-items: center; justify-content: center; font-size: 14px; line-height: 1; padding: 0; font-family: inherit; }
    .history-search-clear:hover { background: rgba(0,0,0,0.06); color: #1f2937; }
    .history-search.has-query .history-search-clear { display: inline-flex; }
    /* Stats insights */
    .stats-insights { display: flex; flex-direction: column; gap: 8px; margin-bottom: 18px; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; }
    .stats-insight { padding: 12px 16px; border-radius: 12px; font-size: 13.5px; line-height: 1.4; display: flex; align-items: center; gap: 11px; letter-spacing: -0.05px; }
    .stats-insight .insight-emoji { font-size: 18px; flex-shrink: 0; }
    .stats-insight b { font-weight: 600; }
    .stats-insight.up { background: #e6f4ea; color: #137333; border-left: 3px solid #137333; }
    .stats-insight.down { background: #fce8e6; color: #c5221f; border-left: 3px solid #c5221f; }
    .stats-insight.flat { background: #fef3e2; color: #b06000; border-left: 3px solid #b06000; }
    .stats-insight.info { background: #e8f0fe; color: #1a73e8; border-left: 3px solid #1a73e8; }
    .stats-insight.streak { background: #fff3e0; color: #d84315; border-left: 3px solid #d84315; }
    /* Sidebar / nav count badge — flex-centered so digits sit on the text's optical midline */
    .nav-count-badge { display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; min-width: 18px; height: 18px; padding: 0 6px; border-radius: 999px; font-size: 10px; font-weight: 700; line-height: 1; margin-left: 6px; font-variant-numeric: tabular-nums; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; letter-spacing: 0; text-transform: none; box-sizing: border-box; color: #fff; background: #e74c3c; box-shadow: 0 1px 3px rgba(231,76,60,0.28); }
    .nav-count-badge.warn { background: #f39c12; box-shadow: 0 1px 3px rgba(243,156,18,0.28); }
    .admin-main { flex: 1; padding: 32px 40px; min-width: 0; margin-left: 260px; }

    /* macOS glass segmented control (timetable Normal / Calendar switch) */
    .tt-seg { display: inline-flex; position: relative; padding: 3px; gap: 2px; border-radius: 10px; background: rgba(118,118,128,0.12); -webkit-backdrop-filter: blur(20px) saturate(180%); backdrop-filter: blur(20px) saturate(180%); border: 1px solid rgba(255,255,255,0.5); box-shadow: inset 0 1px 1px rgba(255,255,255,0.4); font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', sans-serif; }
    .tt-seg-btn { position: relative; z-index: 1; display: inline-flex; align-items: center; gap: 6px; padding: 6px 16px; border: none; background: transparent; font-family: inherit; font-size: 13px; font-weight: 500; color: #4b5563; cursor: pointer; border-radius: 7px; transition: color 200ms ease; -webkit-appearance: none; }
    .tt-seg-btn svg { width: 15px; height: 15px; stroke-width: 2; }
    .tt-seg-btn:hover:not(.active) { color: #1f2937; }
    .tt-seg-btn.active { color: #111; background: rgba(255,255,255,0.92); box-shadow: 0 1px 3px rgba(0,0,0,0.14), 0 0 0 0.5px rgba(0,0,0,0.04); }

    /* Error Logs right-side drawer */
    .sentry-panel-btn { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; padding: 0; background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; cursor: pointer; color: #374151; transition: background 0.15s, border-color 0.15s, color 0.15s; }
    .sentry-panel-btn:hover { background: #f3f4f6; border-color: #d1d5db; color: #111827; }
    .sentry-panel-btn .material-symbols-outlined { font-size: 22px; line-height: 1; }
    .sentry-right-panel { position: fixed; top: 80px; right: 10px; width: 380px; max-width: 92vw; height: calc(100vh - 100px); background: #fbfbfd; border: 1px solid #e5e5ea; border-radius: 16px; box-shadow: 0 2px 8px rgba(0,0,0,0.06), -8px 16px 48px rgba(0,0,0,0.08); z-index: 900; transform: translateX(calc(100% + 20px)); transition: transform 0.28s cubic-bezier(0.32, 0.72, 0.32, 1); display: flex; flex-direction: column; overflow: hidden; }
    .sentry-right-panel.open { transform: translateX(0); }
    body.sentry-panel-open .admin-main { margin-right: 400px; transition: margin-right 0.28s cubic-bezier(0.32, 0.72, 0.32, 1); }
    .admin-main { transition: margin-right 0.28s cubic-bezier(0.32, 0.72, 0.32, 1); }
    @media (max-width: 900px) { body.sentry-panel-open .admin-main { margin-right: 0; } .sentry-right-panel { width: 92vw; } }
    .sentry-right-panel-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 18px; border-bottom: 1px solid #f1f5f9; }
    .sentry-right-panel-header h4 { margin: 0; font-size: 14px; font-weight: 700; color: #111827; letter-spacing: 0.3px; }
    .sentry-right-panel-close { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; background: transparent; border: none; border-radius: 6px; cursor: pointer; color: #6b7280; }
    .sentry-right-panel-close:hover { background: #f3f4f6; color: #111827; }
    .sentry-right-panel-close .material-symbols-outlined { font-size: 20px; line-height: 1; }
    .sentry-right-panel-body { flex: 1; overflow-y: auto; padding: 16px 18px; font-size: 13px; color: #374151; }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) {
      .admin-layout { flex-direction: column; }
      .admin-sidebar {
        display: flex;
        width: calc(100vw - 8px); height: calc(100svh - 8px);
        top: 4px; left: 4px; right: 4px; bottom: 4px;
        margin: 0; border-radius: 16px; border: none; box-shadow: 0 8px 40px rgba(0,0,0,0.32);
        z-index: 10500;
        clip-path: inset(100% 0% 0% 0% round 16px);
        -webkit-clip-path: inset(100% 0% 0% 0% round 16px);
        transition: clip-path 0.65s cubic-bezier(0.76, 0, 0.24, 1), -webkit-clip-path 0.65s cubic-bezier(0.76, 0, 0.24, 1);
        will-change: clip-path;
        pointer-events: none;
        overflow: hidden;
      }
      .admin-sidebar.open {
        clip-path: inset(0% 0% 0% 0% round 16px);
        -webkit-clip-path: inset(0% 0% 0% 0% round 16px);
        pointer-events: auto;
      }
      .admin-sidebar-close { display: inline-flex; border-color: rgba(255,255,255,0.22); color: #fff; }
      .admin-sidebar-close:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.4); }
      .admin-sidebar-brand { padding-right: 66px; }
      .admin-main { padding: 16px; margin-left: 0; }
      body.admin-menu-open { overflow: hidden; }

      /* Mobile overlay: monochrome black-and-white theme (match student overlay) */
      .admin-sidebar { background: #0a0a0a; color: #fff; }
      .admin-sidebar-brand { color: rgba(255,255,255,0.85); font-weight: 500; letter-spacing: 1.2px; text-transform: uppercase; font-size: 12px; }
      .admin-sidebar-brand::before { box-shadow: none; }
      .admin-sidebar-search { border-bottom-color: rgba(255,255,255,0.08); }
      .admin-sidebar-search-field { background: rgba(255,255,255,0.08); }
      .admin-sidebar-search-field:focus-within { background: rgba(255,255,255,0.14); box-shadow: 0 0 0 3px rgba(255,255,255,0.18); }
      .admin-sidebar-search-icon { color: rgba(255,255,255,0.5); }
      #adminSidebarSearch.admin-sidebar-search-input,
      #adminSidebarSearch.admin-sidebar-search-input:focus { color: #fff; }
      .admin-sidebar-search-input::placeholder { color: rgba(255,255,255,0.4); }
      .admin-sidebar-search-clear { background: rgba(255,255,255,0.3); }
      .admin-sidebar-search-clear:hover { background: rgba(255,255,255,0.45); }
      .admin-sidebar-nav { padding: 16px 10px 14px; }
      .admin-nav-item,
      .admin-sidebar [id^="anav-"] { color: rgba(255,255,255,0.55) !important; background: transparent !important; border-radius: 10px; }
      .admin-nav-item:hover,
      .admin-sidebar [id^="anav-"]:hover { color: #fff !important; background: rgba(255,255,255,0.06) !important; }
      .admin-nav-item.active,
      .admin-sidebar [id^="anav-"].active { color: #fff !important; background: rgba(255,255,255,0.12) !important; font-weight: 600; }
      .admin-nav-item svg, .admin-nav-section svg { color: inherit; opacity: 0.85; }
      .admin-nav-section { color: rgba(255,255,255,0.72); }
      .admin-nav-section:hover { color: #fff; background: rgba(255,255,255,0.06); }
      .admin-nav-section-toggle { color: rgba(255,255,255,0.5); }
      .admin-nav-children .admin-nav-item::before { background: rgba(255,255,255,0.18); }
      .admin-sidebar-nav::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.18); }
      .admin-status { background: transparent; color: rgba(255,255,255,0.7); border-top-color: rgba(255,255,255,0.08); }
      .admin-status:hover { background: rgba(255,255,255,0.04); }
      .admin-status-detail { background: rgba(255,255,255,0.04); color: rgba(255,255,255,0.7); border-top-color: rgba(255,255,255,0.08); }
      .active-badge { background: rgba(255,255,255,0.85); color: #0a0a0a; }
      .nav-count-badge { background: #fff; color: #0a0a0a; box-shadow: none; }
      .nav-count-badge.warn { background: #fff; color: #0a0a0a; box-shadow: none; }
    }
    /* ── Full-screen doubts view (dialog-style, Apple cuboid) ─────────────────────────── */
    #doubtsBackdrop { display:none; position:fixed; inset:0; background:#000; z-index:199; }
    #doubtsBackdrop.open { display:block; }
    .doubts-fullscreen { display:none; position:fixed; top:4px; right:4px; bottom:4px; left:4px; z-index:200; background:#fff; border-radius:18px; overflow:hidden; border:none; box-shadow: 0 2px 8px rgba(0,0,0,0.12), 0 16px 48px rgba(0,0,0,0.18); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    .doubts-fullscreen.open { display:flex; flex-direction:column; }
    .doubts-fs-topbar { position:relative; height:52px; background:#fff; border-bottom:1px solid #e5e7eb; display:flex; align-items:center; padding:0 18px; gap:14px; flex-shrink:0; border-radius:18px 18px 0 0; }
    .doubts-fs-topbar .back-btn { background:#fff !important; border:1.5px solid #d1d5db; color:#374151 !important; border-radius:6px; padding:6px 14px; font-size:13px; font-weight:600; cursor:pointer; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; display:flex; align-items:center; gap:6px; position:relative; z-index:1; transition:border-color 150ms,background 150ms,color 150ms; -webkit-tap-highlight-color:transparent; }
    .doubts-fs-topbar .back-btn:hover { background:#f3f4f6 !important; border-color:#9ca3af; color:#111 !important; }
    .doubts-fs-topbar .back-btn:active { background:#e5e7eb !important; color:#111 !important; }
    .doubts-fs-topbar h3 { margin:0; font-size:20px; font-weight:300; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; letter-spacing:0.3px; color:#000; }
    #doubtPanel .doubts-fs-topbar h3, #doubtsFullscreen .doubts-fs-topbar h3 { position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); white-space:nowrap; pointer-events:none; }
    .doubts-fs-body { display:flex; flex:1; min-height:0; }
    .doubts-fs-list { width:320px; flex-shrink:0; background:#fff; border-right:1px solid #e5e7eb; display:flex; flex-direction:column; overflow:hidden; }
    .doubts-list-pane { flex-shrink:0; padding:4px 4px 0; display:flex; flex-direction:column; min-height:0; }
    .doubts-list-pane.pane-resolved { flex:1; padding-top:0; padding-bottom:4px; }
    .doubts-card { flex:1; background:#fff; border-radius:14px; overflow:hidden; box-shadow:0 2px 8px rgba(0,0,0,0.08); display:flex; flex-direction:column; min-height:0; }
    .doubts-card-header { flex-shrink:0; padding:10px 14px 9px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid #f2f2f7; }
    .doubts-card-header-label { font-size:12px; font-weight:300; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; text-transform:uppercase; letter-spacing:1px; color:#8e8e93; }
    .doubts-card-header-count { font-size:11px; font-weight:600; color:#8e8e93; background:#f2f2f7; border-radius:20px; padding:1px 8px; }
    .doubts-card-body { flex:1; overflow-y:auto; min-height:0; }
    .doubts-list-empty { padding:18px 14px; font-size:12px; color:#aaa; text-align:center; }
    .doubts-list-divider { height:12px; background:#f2f2f7; flex-shrink:0; cursor:row-resize; display:flex; align-items:center; justify-content:center; user-select:none; touch-action:none; }
    .doubts-list-divider::before { content:''; width:40px; height:4px; border-radius:2px; background:rgba(0,0,0,0.18); transition:background 180ms ease,width 180ms ease; }
    .doubts-list-divider:hover::before { background:rgba(0,0,0,0.32); width:56px; }
    .doubts-list-divider.dragging::before { background:rgba(0,0,0,0.45); width:56px; }
    .doubts-fs-list-item { padding:12px 14px; border-bottom:1px solid #f2f2f7; cursor:pointer; transition:background 0.1s; }
    .doubts-fs-list-item:last-child { border-bottom:none; }
    .doubts-fs-list-item:hover { background:#f9f9fb; }
    .doubts-fs-list-item.active { background:#f0f4ff; border-left:3px solid #1c1c1e; }
    .doubts-fs-list-item .dfl-subject { font-weight:600; font-size:13px; color:#1c1c1e; margin-bottom:3px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
    .doubts-fs-list-item .dfl-meta { font-size:11px; color:#8e8e93; }
    .doubts-fs-list-item .dfl-badge { display:inline-block; font-size:10px; font-weight:700; padding:2px 7px; border-radius:10px; margin-right:6px; }
    .doubts-fs-list-item .dfl-badge.open { background:#fef2f2; color:#dc2626; }
    .doubts-fs-list-item .dfl-badge.resolved { background:#f0fdf4; color:#16a34a; }
    .doubts-fs-chat { flex:1; display:flex; flex-direction:column; min-width:0; background:#fff; }
    .doubts-fs-chat-header { padding:16px 24px; background:#fff; border-bottom:1px solid #e5e7eb; display:flex; align-items:center; justify-content:space-between; flex-shrink:0; }
    .doubts-fs-chat-header h4 { margin:0; font-size:20px; font-weight:300; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; letter-spacing:0.3px; color:#000; }

    /* ── Structured Doubt Card (rendered inside chat bubble) ── */
    .msg-bubble.msg-bubble--structured { padding:0 !important; background:transparent !important; white-space:normal !important; max-width:620px !important; }
    .sdc-card {
      background:#ffffff;
      border:1px solid #e5e7eb;
      border-radius:14px;
      padding:18px 20px 16px;
      color:#1f2937;
      font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;
      box-shadow: 0 1px 2px rgba(15,23,42,0.04), 0 4px 12px rgba(15,23,42,0.06);
      overflow:hidden;
    }
    .msg-row.right .sdc-card { background:#0f172a; border-color:#1e293b; color:#e2e8f0; }
    .msg-row.right .sdc-card { box-shadow: 0 1px 2px rgba(0,0,0,0.2), 0 6px 18px rgba(0,0,0,0.25); }
    .msg-row.right .sdc-section-label { color:#94a3b8; }
    .msg-row.right .sdc-section-body  { color:#e2e8f0; }
    .msg-row.right .sdc-checklist { background:rgba(255,255,255,0.04); border-color:rgba(255,255,255,0.07); }
    .msg-row.right .sdc-line-pill { background:rgba(239,68,68,0.15); border-color:rgba(239,68,68,0.4); color:#fecaca; }
    .msg-row.right .sdc-eyebrow { color:#94a3b8; }
    .msg-row.right .sdc-tried-box, .msg-row.right .sdc-guess-box { background:rgba(99,102,241,0.08); border-color:rgba(99,102,241,0.18); }
    .msg-row.right .sdc-grid > div { background:rgba(255,255,255,0.025); border-color:rgba(255,255,255,0.06); }

    .sdc-eyebrow {
      display:flex; align-items:center; gap:7px;
      font-size:10.5px; font-weight:700; letter-spacing:1.2px;
      text-transform:uppercase; color:#6366f1;
      margin-bottom:14px;
    }
    .sdc-eyebrow .sdc-eyebrow-dot { width:6px; height:6px; border-radius:50%; background:#6366f1; }
    .sdc-checklist {
      display:flex; flex-direction:column; gap:6px;
      background:#f9fafb;
      border:1px solid #f1f5f9;
      border-radius:10px;
      padding:10px 12px;
      margin-bottom:14px;
    }
    .sdc-check-row { display:flex; align-items:center; gap:9px; font-size:13px; line-height:1.45; }
    .sdc-check-icon {
      flex:0 0 18px; width:18px; height:18px; border-radius:5px;
      display:flex; align-items:center; justify-content:center;
      font-size:11px; font-weight:800; color:#fff;
      background:#22c55e;
    }
    .sdc-check-icon.unchecked { background:#e5e7eb; color:#94a3b8; }
    .sdc-section { margin-top:12px; }
    .sdc-section:first-of-type { margin-top:0; }
    .sdc-section-label {
      font-size:10.5px; font-weight:700; letter-spacing:1.1px;
      text-transform:uppercase; color:#64748b;
      margin-bottom:5px;
    }
    .sdc-section-body {
      font-size:13.5px; line-height:1.55; color:#1f2937;
      white-space:pre-wrap; word-break:break-word;
    }
    .sdc-tried-box, .sdc-guess-box {
      background:#eef2ff;
      border:1px solid #e0e7ff;
      border-radius:10px;
      padding:10px 12px;
    }
    .sdc-line-pill {
      display:inline-flex; align-items:center; gap:7px;
      margin-top:12px;
      padding:6px 12px 6px 10px;
      background:#fef2f2;
      border:1px solid #fecaca;
      color:#b91c1c;
      border-radius:999px;
      font-size:12.5px; font-weight:700;
    }
    .sdc-line-pill::before {
      content:''; width:7px; height:7px; border-radius:50%; background:#ef4444;
      box-shadow: 0 0 0 3px rgba(239,68,68,0.18);
    }
    .sdc-grid {
      display:grid;
      grid-template-columns:1fr 1fr;
      gap:10px;
      margin-top:12px;
    }
    .sdc-grid > div {
      background:#f8fafc;
      border:1px solid #f1f5f9;
      border-radius:10px;
      padding:10px 12px;
    }
    .sdc-attachments {
      display:flex; flex-wrap:wrap; gap:8px;
      margin-top:14px;
      padding-top:12px;
      border-top:1px dashed #e5e7eb;
    }
    .msg-row.right .sdc-attachments { border-top-color:rgba(255,255,255,0.1); }
    .sdc-att {
      width:84px; height:84px;
      border-radius:10px; overflow:hidden;
      border:1px solid #e5e7eb;
      background:#f3f4f6;
      transition:transform 0.15s, box-shadow 0.15s;
      display:block;
    }
    .sdc-att:hover { transform:translateY(-2px); box-shadow:0 6px 14px rgba(15,23,42,0.18); }
    .sdc-att img { width:100%; height:100%; object-fit:cover; display:block; }
    @media (max-width: 640px) {
      .sdc-grid { grid-template-columns:1fr; }
      .msg-bubble.msg-bubble--structured { max-width:100% !important; }
    }
    .doubts-fs-chat-msgs { flex:1; overflow-y:auto; padding:24px; display:flex; flex-direction:column; gap:4px; }
    .msg-row { display:flex; flex-direction:column; max-width:70%; }
    .msg-row.left { align-self:flex-start; align-items:flex-start; }
    .msg-row.right { align-self:flex-end; align-items:flex-end; }
    .msg-row .msg-bubble { padding:10px 14px; font-size:14px; line-height:1.6; white-space:pre-wrap; word-break:break-word; }
    .msg-row.left .msg-bubble { background:#f3f4f6; border-radius:14px; color:#111; }
    .msg-row.right .msg-bubble { background:#000; color:#fff; border-radius:14px; }
    .msg-row .msg-info { font-size:10px; color:#9ca3af; margin-top:2px; padding:0 4px; }
    .sdc-qtitle { display:flex; align-items:baseline; flex-wrap:wrap; gap:6px 8px; margin:2px 0 12px; padding-bottom:10px; border-bottom:1px solid rgba(15,23,42,0.07); font-size:13px; line-height:1.35; letter-spacing:-0.01em; }
    .sdc-qtitle .sdc-qtask { font-weight:700; color:#0f172a; }
    .sdc-qtitle .sdc-qttl { font-weight:600; color:#475569; }
    .sdc-qnum { display:inline-flex; align-items:center; font-size:11px; font-weight:700; letter-spacing:0.02em; color:#4f46e5; background:rgba(99,102,241,0.10); border:1px solid rgba(99,102,241,0.20); padding:1px 8px; border-radius:999px; }
    .open-coder-btn { display:inline-flex; align-items:center; gap:6px; align-self:inherit; margin-top:8px; padding:8px 14px; min-height:36px; font-family:inherit; font-size:12px; font-weight:700; letter-spacing:-0.01em; color:#4f46e5; background:rgba(99,102,241,0.10); border:1px solid rgba(99,102,241,0.22); border-radius:12px; cursor:pointer; white-space:nowrap; -webkit-backdrop-filter:blur(12px) saturate(160%); backdrop-filter:blur(12px) saturate(160%); box-shadow:0 1px 2px rgba(15,23,42,0.04),0 4px 12px rgba(99,102,241,0.10); transition:background 150ms ease, transform 120ms ease, box-shadow 150ms ease; }
    .open-coder-btn:hover { background:rgba(99,102,241,0.16); box-shadow:0 1px 2px rgba(15,23,42,0.05),0 6px 16px rgba(99,102,241,0.16); }
    .open-coder-btn:active { transform:scale(0.97); }
    .open-coder-btn:focus-visible { outline:2px solid #6366f1; outline-offset:2px; }
    .msg-row.right .sdc-qtitle { border-bottom-color:rgba(255,255,255,0.08); }
    .msg-row.right .sdc-qtitle .sdc-qtask { color:#e2e8f0; }
    .msg-row.right .sdc-qtitle .sdc-qttl { color:#94a3b8; }
    .msg-row.right .sdc-qnum { color:#c7d2fe; background:rgba(99,102,241,0.18); border-color:rgba(99,102,241,0.35); }
    .msg-row.right .open-coder-btn { color:#c7d2fe; background:rgba(99,102,241,0.16); border-color:rgba(99,102,241,0.30); }
    .doubts-fs-chat-input { padding:14px 24px; background:#fff; border-top:1px solid #e5e7eb; display:flex; gap:10px; flex-shrink:0; align-items:stretch; }
    .doubts-fs-chat-input textarea { flex:1; padding:10px 14px; border:1.5px solid #e5e7eb; border-radius:8px; font-family:inherit; font-size:14px; resize:none; outline:none; min-height:44px; max-height:120px; background:#fff; color:#111; }
    .doubts-fs-chat-input textarea::placeholder { color:#9ca3af; }
    .doubts-fs-chat-input textarea:focus { border-color:#9ca3af; }
    .doubts-fs-chat-input button { flex:0 0 auto; align-self:stretch; min-width:120px; padding:0 28px; background:#000; color:#fff; border:none; border-radius:8px; font-family:inherit; font-size:15px; font-weight:600; cursor:pointer; transition:background 150ms,transform 150ms; display:inline-flex; align-items:center; justify-content:center; gap:6px; }
    .doubts-fs-chat-input button:hover { background:#1f2937; }
    .doubts-fs-chat-input button:active { transform:scale(0.98); }
    .doubts-fs-chat-input button:hover { background:#222; color:#fff; }
    /* "+" quick-topic picker in the doubt / conversation composer.
       !important beats the global `button{}`, `.container.admin-expanded button`
       and `.doubts-fs-chat-input button` overrides (all force black pills). */
    .dtp-wrap { position:relative; flex:0 0 auto; align-self:stretch; display:flex; }
    .dtp-wrap--chip { align-self:center; display:inline-flex; }
    .dtp-plus { width:46px !important; min-width:46px !important; align-self:stretch; padding:0 !important; background:#f3f4f6 !important; color:#4f46e5 !important; border:1.5px solid #e5e7eb !important; border-radius:8px !important; font-size:24px !important; font-weight:400 !important; line-height:1; letter-spacing:0 !important; text-transform:none !important; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; font-family:inherit; transition:background 150ms,color 150ms,border-color 150ms; }
    .dtp-plus:hover { background:#eef2ff !important; color:#4f46e5 !important; border-color:#c7d2fe !important; transform:none; }
    .dtp-plus.dtp-open { background:#4f46e5 !important; color:#fff !important; border-color:#4f46e5 !important; }
    .dtp-chip { min-width:0 !important; padding:5px 13px !important; background:#f5f3ff !important; color:#4f46e5 !important; border:1px solid #ddd6fe !important; border-radius:999px !important; font-size:11.5px !important; font-weight:600 !important; letter-spacing:0.2px !important; text-transform:none !important; cursor:pointer; font-family:inherit; transition:background 150ms; }
    .dtp-chip:hover { background:#ede9fe !important; color:#4f46e5 !important; transform:none; box-shadow:none; }
    .dtp-chip.dtp-open { background:#4f46e5 !important; color:#fff !important; }
    .dtp-pop { position:absolute; left:0; z-index:2147483600; width:302px; max-width:80vw; max-height:min(64vh,440px); overflow-y:auto; background:#fff; border:1px solid #e5e7eb; border-radius:14px; box-shadow:0 12px 40px rgba(0,0,0,0.18); padding:7px; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; animation:dtpPop 130ms ease; }
    .dtp-pop--up { bottom:calc(100% + 8px); }
    .dtp-pop--down { top:calc(100% + 8px); }
    .dtp-pop--r { right:0; left:auto; }
    @keyframes dtpPop { from { opacity:0; transform:translateY(6px); } to { opacity:1; transform:translateY(0); } }
    .dtp-head { font-size:11px; font-weight:700; letter-spacing:0.04em; text-transform:uppercase; color:#9ca3af; padding:7px 10px 5px; display:flex; align-items:center; gap:8px; }
    .dtp-back { cursor:pointer; color:#4f46e5; font-weight:700; margin-right:2px; }
    .dtp-back:hover { text-decoration:underline; }
    .dtp-item { display:flex; align-items:center; gap:11px; padding:9px 10px; border-radius:9px; cursor:pointer; user-select:none; }
    .dtp-item:hover { background:#f5f3ff; }
    .dtp-ic { width:28px; height:28px; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; font-size:15px; background:#f3f4f6; border-radius:8px; }
    .dtp-tx { min-width:0; flex:1; }
    .dtp-tx > b { display:block; font-size:13.5px; font-weight:600; color:#111827; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .dtp-tx > span { display:block; font-size:11.5px; color:#6b7280; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
    .dtp-chev { color:#c4b5fd; font-size:17px; font-weight:700; }
    .dtp-empty { padding:13px 12px; font-size:12.5px; color:#6b7280; text-align:center; line-height:1.5; }
    .dtp-pill { display:inline-block; font-size:9.5px; font-weight:700; padding:1px 7px; border-radius:9px; margin-left:7px; text-transform:capitalize; vertical-align:middle; }

    /* ── Code box inside doubt messages (auto-boxed paste or the "</>" button) ──
       Self-contained dark block so it reads clearly on ANY bubble colour (blue /
       black / grey). Copy control is a <span>, not a <button>, so the global
       black-pill `button{}` rules never touch it. */
    .doubt-code-box { margin:8px 0; border:1px solid #26314a; border-radius:10px; overflow:hidden; background:#0f172a; box-shadow:0 1px 2px rgba(0,0,0,0.25); text-align:left; }
    .doubt-code-box:first-child { margin-top:0; }
    .doubt-code-box:last-child { margin-bottom:0; }
    .doubt-code-head { display:flex; align-items:center; justify-content:space-between; gap:8px; padding:5px 8px 5px 12px; background:#111c34; border-bottom:1px solid #26314a; }
    .doubt-code-lang { font-size:10.5px; font-weight:700; letter-spacing:0.06em; text-transform:uppercase; color:#7c8db5; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }
    .doubt-code-copy { display:inline-flex; align-items:center; gap:4px; font-size:11px; font-weight:600; color:#cbd5e1; background:rgba(255,255,255,0.06); border:1px solid rgba(255,255,255,0.12); border-radius:6px; padding:3px 9px; cursor:pointer; user-select:none; white-space:nowrap; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; transition:background 140ms,color 140ms,border-color 140ms; }
    .doubt-code-copy:hover { background:rgba(255,255,255,0.13); color:#fff; border-color:rgba(255,255,255,0.25); }
    .doubt-code-copy.copied { background:#16a34a; color:#fff; border-color:#16a34a; }
    .doubt-code-pre { margin:0; padding:11px 13px; overflow-x:auto; max-height:360px; overflow-y:auto; background:#0f172a; }
    .doubt-code-pre code { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,'Liberation Mono',monospace; font-size:12.5px; line-height:1.55; color:#e2e8f0; white-space:pre; word-break:normal; tab-size:4; }
    .doubt-text-seg { white-space:pre-wrap; word-break:break-word; }
    .doubt-text-seg + .doubt-code-box, .doubt-code-box + .doubt-text-seg { margin-top:8px; }

    /* "</>" Code button in the composer action row — !important beats the global
       `button{}`, `.container.admin-expanded button` and `.doubts-fs-chat-input
       button` black-pill rules, matching the sibling `.dtp-plus`/`.dtp-chip`. */
    .dcode-btn { flex:0 0 auto; align-self:stretch; width:46px !important; min-width:46px !important; padding:0 !important; background:#f3f4f6 !important; color:#0f766e !important; border:1.5px solid #e5e7eb !important; border-radius:8px !important; font-size:13px !important; font-weight:700 !important; line-height:1; letter-spacing:0 !important; text-transform:none !important; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; font-family:ui-monospace,Menlo,Consolas,monospace !important; transition:background 150ms,color 150ms,border-color 150ms; }
    .dcode-btn:hover { background:#ecfdf5 !important; color:#0f766e !important; border-color:#99f6e4 !important; transform:none; box-shadow:none; }
    .dcode-btn:active { transform:scale(0.97); }
    .dcode-chip { min-width:0 !important; padding:5px 12px !important; background:#f0fdfa !important; color:#0f766e !important; border:1px solid #99f6e4 !important; border-radius:999px !important; font-size:11.5px !important; font-weight:600 !important; letter-spacing:0.2px !important; text-transform:none !important; cursor:pointer; font-family:inherit !important; transition:background 150ms; }
    .dcode-chip:hover { background:#ccfbf1 !important; color:#0f766e !important; transform:none; box-shadow:none; }
    .dcode-flash { pointer-events:none; }

    .doubts-fs-empty { flex:1; display:flex; align-items:center; justify-content:center; color:#9ca3af; font-size:14px; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; }
    /* Floating action button — the pill IS the panel; morphs in place, all-black theme */
    .doubts-fab-wrap { position:absolute; right:calc(100% - 310px); bottom:20px; z-index:10; width:56px; height:56px; background:#0a0a0a; color:#fff; border-radius:28px; overflow:hidden; box-shadow: 0 1px 0 rgba(255,255,255,0.08) inset, 0 8px 18px rgba(0,0,0,0.35), 0 18px 44px rgba(0,0,0,0.25); transition: width 360ms cubic-bezier(0.16,1,0.3,1), height 380ms cubic-bezier(0.16,1,0.3,1), border-radius 340ms ease, box-shadow 260ms ease; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; display:flex; flex-direction:column; }
    .doubts-fab-wrap:hover:not(.expanded) { width:300px; box-shadow: 0 1px 0 rgba(255,255,255,0.12) inset, 0 10px 22px rgba(0,0,0,0.4), 0 22px 52px rgba(0,0,0,0.3); }
    .doubts-fab-wrap.expanded { width:300px; height:440px; border-radius:20px; }

    /* Pill button (collapsed / hover state) */
    .fab-pill-btn { flex-shrink:0; width:100%; height:56px; background:transparent; border:none; color:#fff; cursor:pointer; padding:0; display:flex; align-items:center; font-family:inherit; transition: opacity 200ms ease, height 300ms cubic-bezier(0.16,1,0.3,1); overflow:hidden; }
    .doubts-fab-wrap.expanded .fab-pill-btn { opacity:0; height:0; pointer-events:none; }
    .fab-pill-btn:active { transform: scale(0.98); }
    .fab-plus { flex-shrink:0; width:56px; height:56px; position:relative; }
    .fab-plus::before, .fab-plus::after { content:''; position:absolute; top:50%; left:50%; background:#fff; border-radius:2px; transition: transform 380ms cubic-bezier(0.16,1,0.3,1); }
    .fab-plus::before { width:20px; height:2.5px; transform: translate(-50%,-50%); }
    .fab-plus::after { width:2.5px; height:20px; transform: translate(-50%,-50%); }
    .fab-label { white-space:nowrap; font-size:13px; font-weight:600; letter-spacing:0.1px; padding-right:18px; opacity:0; transform: translateX(-6px); transition: opacity 200ms ease 80ms, transform 280ms cubic-bezier(0.16,1,0.3,1) 60ms; pointer-events:none; overflow:hidden; text-overflow:ellipsis; }
    .doubts-fab-wrap:hover:not(.expanded) .fab-label { opacity:1; transform: translateX(0); }
    .doubts-fab-wrap:hover:not(.expanded) .fab-plus::before { transform: translate(-50%,-50%) rotate(180deg); }
    .doubts-fab-wrap:hover:not(.expanded) .fab-plus::after { transform: translate(-50%,-50%) rotate(270deg); }

    /* Expanded panel view (revealed inside wrap when .expanded) */
    .fab-expanded-view { flex:1; display:flex; flex-direction:column; opacity:0; transform: translateY(8px); pointer-events:none; transition: opacity 240ms ease 140ms, transform 320ms cubic-bezier(0.16,1,0.3,1) 120ms; min-height:0; position:relative; }
    .doubts-fab-wrap.expanded .fab-expanded-view { opacity:1; transform: translateY(0); pointer-events:auto; }
    .doubts-fab-wrap.resizing { transition: none !important; }
    .doubts-fab-wrap.resizing * { user-select: none !important; }

    /* Grab handle (drag upward to enlarge the dialog) */
    .cfab-grab { position:absolute; top:0; left:0; right:0; height:18px; display:flex; align-items:center; justify-content:center; cursor:ns-resize; z-index:5; touch-action:none; }
    .cfab-grab::before { content:''; width:40px; height:4px; border-radius:2px; background:rgba(255,255,255,0.22); transition: background 180ms ease, width 180ms ease; }
    .cfab-grab:hover::before { background:rgba(255,255,255,0.55); width:56px; }
    .doubts-fab-wrap.resizing .cfab-grab::before { background:#fff; width:56px; }

    .cfab-head { padding:20px 16px 10px; display:flex; align-items:center; justify-content:space-between; border-bottom:1px solid rgba(255,255,255,0.08); flex-shrink:0; }
    .cfab-head .cfab-title { font-size:22px; font-weight:200; color:#fff; letter-spacing:-0.2px; line-height:1.2; }
    .cfab-close { background:rgba(255,255,255,0.1); border:1px solid rgba(255,255,255,0.12); width:32px; height:32px; border-radius:50%; color:#fff; font-size:18px; line-height:1; cursor:pointer; display:flex; align-items:center; justify-content:center; padding:0; font-family:inherit; transition: background 180ms ease, border-color 180ms ease, transform 180ms ease; }
    .cfab-close:hover { background:rgba(255,255,255,0.2); border-color:rgba(255,255,255,0.22); transform: rotate(90deg); }
    .cfab-close:active { transform: rotate(90deg) scale(0.94); }

    .cfp-search { margin:10px 14px 8px; padding:9px 12px 9px 36px; border:1px solid rgba(255,255,255,0.1); border-radius:10px; background:rgba(255,255,255,0.06) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none' stroke='%23999' stroke-width='2'%3E%3Ccircle cx='9' cy='9' r='6'/%3E%3Cpath d='m14 14 4 4'/%3E%3C/svg%3E") no-repeat 11px center / 16px 16px; color:#fff; font-size:13px; outline:none; font-family:inherit; transition: border-color 180ms ease, background-color 180ms ease; }
    .cfp-search::placeholder { color:rgba(255,255,255,0.4); }
    .cfp-search:focus { border-color:rgba(255,255,255,0.3); background-color:rgba(255,255,255,0.1); }

    .cfp-list { flex:1; overflow-y:auto; padding:4px 8px 8px; min-height:0; }
    .cfp-list::-webkit-scrollbar { width:6px; }
    .cfp-list::-webkit-scrollbar-thumb { background:rgba(255,255,255,0.15); border-radius:3px; }
    .cfp-student { padding:9px 10px; border-radius:10px; cursor:pointer; transition: background 150ms ease; font-size:13px; display:flex; align-items:center; gap:10px; color:#fff; }
    .cfp-student:hover { background:rgba(255,255,255,0.06); }
    .cfp-student.selected { background:rgba(255,255,255,0.14); }
    .cfp-avatar { width:30px; height:30px; border-radius:50%; background:linear-gradient(135deg,#3a3a3a,#1a1a1a); color:#fff; display:flex; align-items:center; justify-content:center; font-weight:700; font-size:12px; flex-shrink:0; border:1px solid rgba(255,255,255,0.1); }
    .cfp-info .cfp-name { font-weight:600; color:#f5f5f5; line-height:1.2; }
    .cfp-info .cfp-user { font-size:11px; color:rgba(255,255,255,0.5); margin-top:2px; }
    .cfp-empty { padding:22px; text-align:center; color:rgba(255,255,255,0.4); font-size:12px; }

    .cfp-fields { padding:0 14px 10px; display:none; flex-direction:column; gap:8px; flex-shrink:0; }
    .doubts-fab-wrap.has-selected .cfp-fields { display:flex; }
    .cfp-fields input, .cfp-fields textarea { width:100%; padding:9px 11px; border:1px solid rgba(255,255,255,0.1); border-radius:10px; background:rgba(255,255,255,0.06); color:#fff; font-size:13px; font-family:inherit; outline:none; box-sizing:border-box; transition: border-color 180ms ease, background 180ms ease; }
    .cfp-fields input::placeholder, .cfp-fields textarea::placeholder { color:rgba(255,255,255,0.4); }
    .cfp-fields input:focus, .cfp-fields textarea:focus { border-color:rgba(255,255,255,0.3); background:rgba(255,255,255,0.1); }
    .cfp-fields textarea { resize:none; min-height:52px; }

    .cfp-start { margin:4px 14px 14px; padding:11px 18px; background:#2a2a2a; color:#fff; border:1.5px solid rgba(255,255,255,0.35); border-radius:100px; font-weight:600; font-size:12px; letter-spacing:0.8px; text-transform:uppercase; cursor:pointer; font-family:inherit; flex-shrink:0; transition: transform 180ms ease, box-shadow 220ms ease, opacity 220ms ease, background 220ms ease, border-color 220ms ease; }
    .cfp-start:hover:not(:disabled) { transform: translateY(-1px); background:#3a3a3a; border-color:rgba(255,255,255,0.55); box-shadow: 0 6px 18px rgba(0,0,0,0.5); }
    .cfp-start:active:not(:disabled) { transform: translateY(0) scale(0.98); }
    .cfp-start:disabled { opacity:0.4; cursor:not-allowed; background:rgba(255,255,255,0.08); color:rgba(255,255,255,0.45); border-color:rgba(255,255,255,0.08); }
    .cfp-err { padding:0 16px 8px; font-size:12px; color:#ff6b6b; min-height:0; flex-shrink:0; }
    .cfp-err:empty { padding:0; }
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) {
      .doubts-fs-list { width:100%; position:absolute; inset:0; top:52px; z-index:2; overflow-y:auto; }
      .doubts-fs-chat { position:absolute; inset:0; top:52px; z-index:3; }
      .doubts-fs-chat.hidden-mobile { display:none; }
      .doubts-fab-wrap { position:fixed; right:16px; bottom:24px; z-index:210; }
      .doubts-fab-wrap:hover:not(.expanded) { width: calc(100vw - 32px); }
      .doubts-fab-wrap.expanded { width: calc(100vw - 16px); right: 8px; }
    }

    /* Tasks filter — mobile bottom sheet */
    @media (max-width: 640px), (max-height: 500px) and (orientation: landscape) and (pointer: coarse) {
      .tasks-filter-desktop { display: none !important; }
      .tasks-filter-mobile-btn { display: inline-flex !important; }
    }
    @keyframes taskSheetIn {
      from { transform: translateY(110%); }
      to   { transform: translateY(0); }
    }
    @keyframes taskSheetOut {
      from { transform: translateY(0); }
      to   { transform: translateY(110%); }
    }
    @keyframes taskSheetBackdropIn {
      from { opacity: 0; }
      to   { opacity: 1; }
    }
    @keyframes taskSheetBackdropOut {
      from { opacity: 1; }
      to   { opacity: 0; }
    }

    /* Admin tables */
    .admin-users-table { width: 100%; border-collapse: collapse; font-size: 13px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    .admin-users-table th { background: #f5f5f5; padding: 10px 10px; text-align: left; color: #000; font-weight: 700; border-bottom: 2px solid #000; font-size: 11px; text-transform: uppercase; letter-spacing: 0.5px; }
    th.sortable { cursor: pointer; user-select: none; position: relative; padding-right: 22px !important; }
    th.sortable:hover { background: #eee; }
    th.sortable::after { content: '⇅'; position: absolute; right: 6px; top: 50%; transform: translateY(-50%); font-size: 10px; color: #999; }
    th.sortable.sort-asc::after { content: '▲'; color: #000; }
    th.sortable.sort-desc::after { content: '▼'; color: #000; }
    .admin-users-table td { padding: 9px 10px; border-bottom: 1px solid #e0e0e0; color: #1a1a1a; }
    .admin-users-table tr.clickable { cursor: pointer; }
    .admin-users-table tr.clickable:hover td { background: #f8f8f8; }
    .admin-empty { text-align: center; color: #999; padding: 40px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    /* Admin stat cards */
    .container.admin-expanded .stat-card { background: #fbfbfd; border: 2px solid #2f2a1f; border-radius: 0; }
    .container.admin-expanded .stat-card .stat-value { color: #000; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 32px; }
    .container.admin-expanded .stat-card .stat-label { color: #666; font-size: 11px; text-transform: uppercase; letter-spacing: 1px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; }
    .container.admin-expanded .q-bar-wrap { background: #e0e0e0; }
    .container.admin-expanded .q-option { background: #f8f8f8; color: #1a1a1a; border: 1px solid #ddd; }
    .container.admin-expanded .q-option.correct { background: #e8f5e9; border-left: 3px solid #4CAF50; }
    .container.admin-expanded .q-stats { color: #555; }
    .q-nav { display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; padding-bottom: 18px; border-bottom: 2px solid #eee; }
    .q-nav button { padding: 10px 24px; }
    .q-nav button:disabled { background: #ccc; cursor: not-allowed; }
    .q-counter { font-size: 15px; color: #555; font-weight: 600; }
    .q-option { display: flex; align-items: center; gap: 12px; padding: 12px 16px; margin: 6px 0; border-radius: 8px; background: #f8f9fa; font-size: 15px; transition: background 0.15s; }
    .q-option:hover { background: #f0f2f5; }
    .q-option.correct { background: #e8f5e9; border-left: 4px solid #4CAF50; }
    .q-option-dot { width: 14px; height: 14px; border-radius: 50%; border: 2px solid #bbb; flex-shrink: 0; }
    .q-option.correct .q-option-dot { background: #4CAF50; border-color: #4CAF50; }
    .q-stats { display: flex; flex-wrap: wrap; gap: 14px; margin: 14px 0 8px; font-size: 13px; align-items: center; }
    .q-bar-wrap { background: #eee; border-radius: 4px; height: 8px; margin-bottom: 16px; }
    .q-bar { background: #4CAF50; height: 8px; border-radius: 4px; }
    .q-students-table { width: 100%; border-collapse: collapse; font-size: 14px; }
    .q-students-table th { background: #f0f2f5; padding: 9px 8px; text-align: left; color: #555; font-weight: 600; border-bottom: 2px solid #ddd; }
    .q-students-table td { padding: 9px 8px; border-bottom: 1px solid #eee; }
    .q-student-name { color: #007bff; cursor: pointer; }
    .q-student-name:hover { text-decoration: underline; }
    /* Admin overrides for q-nav, tables, buttons */
    .container.admin-expanded .q-nav { border-bottom-color: #e0e0e0; }
    .container.admin-expanded .q-counter { color: #555; }
    .container.admin-expanded .q-nav button { background: #000; color: #fff; border: none; }
    .container.admin-expanded .q-nav button:hover { background: #333; }
    .container.admin-expanded .q-nav button:disabled { background: #ccc; color: #888; }
    .container.admin-expanded .q-students-table th { background: #f5f5f5; color: #000; border-bottom: 2px solid #000; font-size: 11px; text-transform: uppercase; }
    .container.admin-expanded .q-students-table td { border-bottom-color: #e0e0e0; color: #1a1a1a; }
    .container.admin-expanded .q-students-table tr[style*="background:#fdecea"] td { color: #1a1a1a !important; }
    .container.admin-expanded .q-students-table tr[style*="background:#fff8e1"] td { color: #1a1a1a !important; }
    .container.admin-expanded .q-student-name { color: #0066cc; }
    .container.admin-expanded .q-option-dot { border-color: #999; }
    .container.admin-expanded .q-option.correct .q-option-dot { background: #4CAF50; border-color: #4CAF50; }
    .container.admin-expanded button { background: #000; color: #fff; border: none; }
    .container.admin-expanded button:hover { background: #333; transform: none; box-shadow: none; }

    /* Notification Bell */
    .notif-bell { position: relative; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; width: 40px; height: 40px; padding: 0; background: transparent; border: none; border-radius: 50%; margin-right: 2px; font-family: inherit; line-height: 1; color: #1f2937; }
    .notif-badge { position: absolute; top: -6px; right: -6px; background: #ff3b30; color: #fff; font-size: 9px; font-weight: 700; min-width: 16px; height: 16px; padding: 0 4px; line-height: 16px; text-align: center; border-radius: 999px; pointer-events: none; box-shadow: 0 1px 3px rgba(255,59,48,0.35); box-sizing: border-box; }
    .notif-backdrop { display:none; position:fixed; inset:0; background:rgba(0,0,0,0.18); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); z-index:9999; opacity:0; transition:opacity 0.25s ease; }
    .notif-backdrop.open { display:block; opacity:1; }
    .notif-panel { position: fixed; top: 10px; right: 10px; bottom: 10px; width: 380px; background: rgba(255,255,255,0.65); -webkit-backdrop-filter: blur(28px) saturate(180%); backdrop-filter: blur(28px) saturate(180%); border: 1px solid rgba(255,255,255,0.7); border-radius: 16px; z-index: 10000; overflow: hidden; box-shadow: 0 8px 32px rgba(0,0,0,0.10), 0 24px 64px rgba(0,0,0,0.14); transform: translateX(calc(100% + 20px)); transition: transform 0.35s cubic-bezier(0.16,1,0.3,1); display: flex; flex-direction: column; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', 'Segoe UI', Roboto, sans-serif; }
    .notif-panel.open { transform: translateX(0); }
    .notif-panel-header { padding: 16px 20px; border-bottom: 1px solid rgba(0,0,0,0.08); display: flex; justify-content: space-between; align-items: center; flex-shrink: 0; }
    .notif-panel-header h3 { font-size: 16px; font-weight: 600; letter-spacing: -0.2px; text-transform: none; margin: 0; color: #1f2937; }
    .notif-panel-close { background: transparent; border: none; width: 30px; height: 30px; border-radius: 50%; font-size: 18px; cursor: pointer; color: #6b7280; padding: 0; display: flex; align-items: center; justify-content: center; transition: background 150ms ease, color 150ms ease; }
    .notif-panel-close:hover { background: #f3f4f6; color: #1f2937; }
    #notifList { flex: 1; overflow-y: auto; min-height: 0; padding: 4px 8px 10px; scrollbar-width: thin; scrollbar-color: rgba(0,0,0,0.12) transparent; }
    #notifList::-webkit-scrollbar { width: 6px; }
    #notifList::-webkit-scrollbar-thumb { background: rgba(0,0,0,0.12); border-radius: 3px; }
    #notifList::-webkit-scrollbar-track { background: transparent; }
    .notif-item { padding: 12px 14px 14px; border-radius: 12px; margin: 4px 0; cursor: default; background: transparent; position: relative; transition: background 150ms ease; }
    .notif-item + .notif-item { border-top: 1px solid #f3f4f6; border-top-left-radius: 0; border-top-right-radius: 0; }
    .notif-item:hover { background: #f9fafb !important; }
    .notif-item.unread { background: transparent; border-left: none; padding-left: 24px; }
    .notif-item.unread:hover { background: #f3f6ff !important; }
    .notif-item.unread::before { content: ''; position: absolute; top: 18px; left: 10px; width: 7px; height: 7px; border-radius: 50%; background: #007aff; box-shadow: 0 0 0 3px rgba(0,122,255,0.15); }
    .notif-item.unread::after { content: none; }
    .notif-item .notif-title { font-weight: 600; font-size: 13.5px; margin-bottom: 3px; color: #1f2937; letter-spacing: -0.1px; }
    .notif-item.unread .notif-title { color: #0040dd; }
    .notif-item .notif-msg { font-size: 12.5px; color: #4b5563; line-height: 1.4; }
    .notif-item.unread .notif-msg { color: #4b5563; }
    .notif-item .notif-time { font-size: 11px; color: #9ca3af; margin-top: 5px; }
    .notif-empty { text-align: center; padding: 60px 20px; color: #9ca3af; font-size: 13px; }
    @media (max-width: 600px) { .notif-panel { width: auto; left: 10px; right: 10px; top: 10px; bottom: 10px; } }

    /* Mac-style toast notification */
    .notif-toast { position: fixed; top: 16px; right: 16px; width: 340px; background: #fff; border: 1px solid #d0d0d0; border-radius: 12px; box-shadow: 0 8px 32px rgba(0,0,0,0.12), 0 2px 8px rgba(0,0,0,0.06); z-index: 99999; padding: 14px 18px; display: flex; gap: 12px; align-items: flex-start; animation: toastSlideIn 0.35s cubic-bezier(0.16,1,0.3,1); font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', sans-serif; pointer-events: auto; }
    .notif-toast.leaving { animation: toastSlideOut 0.3s ease forwards; }
    .notif-toast-icon { font-size: 20px; flex-shrink: 0; margin-top: 1px; }
    .notif-toast-body { flex: 1; min-width: 0; }
    .notif-toast-title { font-weight: 600; font-size: 13px; color: #1a1a1a; margin-bottom: 2px; letter-spacing: -0.1px; }
    .notif-toast-msg { font-size: 12px; color: #666; line-height: 1.35; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .notif-toast-close { background: none; border: none; font-size: 14px; color: #bbb; cursor: pointer; padding: 0; line-height: 1; flex-shrink: 0; margin-top: 1px; }
    .notif-toast-close:hover { color: #666; }
    @keyframes toastSlideIn { from { transform: translateX(120%); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
    @keyframes toastSlideOut { from { transform: translateX(0); opacity: 1; } to { transform: translateX(120%); opacity: 0; } }
    .admin-action-toast { position: fixed; bottom: 24px; right: 24px; display: flex; align-items: center; gap: 10px; padding: 12px 18px; border-radius: 10px; font-size: 13px; font-weight: 600; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Inter', sans-serif; box-shadow: 0 6px 24px rgba(0,0,0,0.15); z-index: 99999; animation: toastSlideIn 0.3s cubic-bezier(0.16,1,0.3,1); pointer-events: none; }
    .admin-action-toast.leaving { animation: toastSlideOut 0.25s ease forwards; }
    .admin-action-toast.success { background: #16a34a; color: #fff; }
    .admin-action-toast.error { background: #dc2626; color: #fff; }

    /* iOS-style glass notification banner — mobile admin */
    #iosNotifWrap { position: fixed; top: 0; left: 0; right: 0; z-index: 100001; display: flex; flex-direction: column; align-items: center; gap: 8px; padding-top: 14px; pointer-events: none; }
    .ios-notif-card { width: calc(100% - 24px); max-width: 390px; background: rgba(242,242,247,0.86); backdrop-filter: blur(40px) saturate(200%); -webkit-backdrop-filter: blur(40px) saturate(200%); border: 1px solid rgba(255,255,255,0.72); border-radius: 20px; box-shadow: 0 8px 40px rgba(0,0,0,0.18), 0 1px 0 rgba(255,255,255,0.85) inset; padding: 14px 16px; display: flex; gap: 12px; align-items: flex-start; pointer-events: auto; transform: translateY(-130%); animation: iosIn 0.45s cubic-bezier(0.16,1,0.3,1) forwards; cursor: pointer; font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Helvetica Neue', sans-serif; }
    .ios-notif-card.ios-out { animation: iosOut 0.3s cubic-bezier(0.4,0,1,1) forwards; }
    .ios-notif-icon { width: 40px; height: 40px; border-radius: 11px; flex-shrink: 0; background: linear-gradient(145deg,#1a73e8,#0b52cc); display: flex; align-items: center; justify-content: center; font-size: 20px; color: #fff; box-shadow: 0 2px 8px rgba(26,115,232,0.38); }
    .ios-notif-body { flex: 1; min-width: 0; }
    .ios-notif-header { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 2px; }
    .ios-notif-app { font-size: 10.5px; font-weight: 600; color: rgba(0,0,0,0.4); text-transform: uppercase; letter-spacing: 0.5px; }
    .ios-notif-when { font-size: 10.5px; color: rgba(0,0,0,0.33); }
    .ios-notif-title { font-size: 13.5px; font-weight: 700; color: rgba(0,0,0,0.86); line-height: 1.3; }
    .ios-notif-msg { font-size: 13px; color: rgba(0,0,0,0.5); line-height: 1.4; margin-top: 2px; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
    @keyframes iosIn { from { transform: translateY(-130%); opacity: 0.6; } to { transform: translateY(0); opacity: 1; } }
    @keyframes iosOut { from { transform: translateY(0); opacity: 1; } to { transform: translateY(-130%); opacity: 0; } }

    /* Anti-cheat protection */
    .protected-content {
      -webkit-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }

    /* Score animation */
    @keyframes scorePopIn {
      0% { transform: scale(0.4); opacity: 0; }
      70% { transform: scale(1.15); }
      100% { transform: scale(1); opacity: 1; }
    }
    .score-animated { animation: scorePopIn 0.6s cubic-bezier(0.34,1.56,0.64,1) forwards; }

    @keyframes countUp {
      from { opacity: 0.3; } to { opacity: 1; }
    }

    /* Leaderboard row animation */
    @keyframes lbRowIn {
      from { opacity: 0; transform: translateX(40px); }
      to   { opacity: 1; transform: translateX(0); }
    }
    .lb-row-anim { animation: lbRowIn 0.4s ease forwards; opacity: 0; }

    /* Leaderboard — clean rows, animation on names only */
    .lb-rank-1, .lb-rank-2, .lb-rank-3 {
      animation: lbRowIn 0.4s ease forwards !important;
    }
    .lb-rank-1 .lb-name { font-weight: 900; }
    .lb-rank-2 .lb-name { font-weight: 800; }
    .lb-rank-3 .lb-name { font-weight: 700; }
    @keyframes nameGlow {
      0%, 100% { text-shadow: none; }
      50% { text-shadow: 0 0 8px rgba(0,0,0,0.3); }
    }
    .lb-rank-1 .lb-name { animation: nameGlow 2s ease-in-out infinite; }
    .lb-rank-2 .lb-name { animation: nameGlow 2.4s ease-in-out infinite; }
    .lb-rank-3 .lb-name { animation: nameGlow 2.8s ease-in-out infinite; }

    @keyframes confettiFall { 0% { transform:translateY(-20px) rotate(0deg); opacity:1; } 100% { transform:translateY(60px) rotate(360deg); opacity:0; } }
    /* The old piggybank-podium rules (.pb-crown / .pb-spark / .pb-first-row /
       .pb-lb-fs-wrap, plus crownBounce, sparkle and goldPulse) lived here. The
       Piggybank / Streaks / Quiz board now styles itself from leaderboard.js, so
       they had no remaining selector. The .lb-rank-* rules ABOVE are still live —
       they belong to the post-quiz results leaderboard, a different surface. */
    /* Tab-switch warning overlay */
    #tabWarningOverlay {
      display: none; position: fixed; inset: 0;
      background: rgba(231,76,60,0.97); z-index: 99999;
      flex-direction: column; align-items: center; justify-content: center;
      color: #fff; text-align: center; padding: 40px;
    }
    #tabWarningOverlay h2 { font-size: 32px; margin-bottom: 16px; }
    #tabWarningOverlay p { font-size: 18px; margin-bottom: 28px; opacity: 0.9; }
    #tabWarningOverlay button { background: #fff; color: #e74c3c; font-weight: bold; font-size: 16px; padding: 14px 36px; }
    #tabWarningOverlay button:hover { background: #f8d7da; }

    /* Fullscreen exit blocker */
    #fsWarningBar {
      display: none; position: fixed; inset: 0;
      background: rgba(44,62,80,0.98); z-index: 99998;
      flex-direction: column; align-items: center; justify-content: center;
      color: #fff; text-align: center; padding: 40px;
    }
    #fsWarningBar h2 { font-size: 32px; margin-bottom: 12px; }
    #fsWarningBar p { font-size: 16px; margin-bottom: 28px; opacity: 0.85; max-width: 500px; line-height: 1.5; }
    #fsWarningBar button {
      background: #fff; color: #2c3e50; font-weight: bold; font-size: 16px;
      padding: 14px 40px; border: none; border-radius: 8px; cursor: pointer;
    }
    #fsWarningBar button:hover { background: #ecf0f1; }


    /* Quiz Editor */
    .quiz-edit-card { border: 1px solid #e0e0e0; border-radius: 10px; padding: 20px; margin-bottom: 14px; background: #fff; transition: border-color 0.2s, box-shadow 0.2s; }
    .quiz-edit-card:focus-within { border-color: #4CAF50; box-shadow: 0 0 0 3px rgba(76,175,80,0.08); }
    .quiz-edit-num { font-size: 11px; color: #aaa; font-weight: 700; text-transform: uppercase; letter-spacing: 1px; margin-bottom: 10px; }
    .quiz-edit-qtxt { width: 100%; padding: 6px 0; border: none; border-bottom: 2px solid #eee; font-size: 15px; resize: none; outline: none; margin-bottom: 16px; font-family: inherit; background: transparent; color: #222; line-height: 1.5; box-sizing: border-box; }
    .quiz-edit-qtxt:focus { border-bottom-color: #4CAF50; }
    .quiz-edit-opt-row { display: flex; align-items: center; gap: 10px; margin-bottom: 9px; }
    .quiz-edit-opt-radio { accent-color: #4CAF50; width: 16px; height: 16px; cursor: pointer; flex-shrink: 0; }
    .quiz-edit-opt-input { flex: 1; padding: 8px 12px; border: 1px solid #eee; border-radius: 6px; font-size: 14px; color: #333; }
    .quiz-edit-opt-input:focus { border-color: #4CAF50; outline: none; background: #f9fff9; }
    .quiz-edit-opt-rm { background: none; border: none; color: #ddd; cursor: pointer; font-size: 22px; padding: 0 2px; line-height: 1; flex-shrink: 0; }
    .quiz-edit-opt-rm:hover { color: #e74c3c; }
    .quiz-edit-card-footer { display: flex; justify-content: space-between; align-items: center; margin-top: 14px; padding-top: 12px; border-top: 1px solid #f5f5f5; }
    .quiz-edit-add-opt { background: none; border: none; color: #4CAF50; cursor: pointer; font-size: 13px; font-weight: 600; padding: 0; }
    .quiz-edit-add-opt:hover { text-decoration: underline; }
    .quiz-edit-del-q { background: none; border: none; color: #bbb; cursor: pointer; font-size: 13px; padding: 5px 10px; border-radius: 5px; }
    .quiz-edit-del-q:hover { color: #e74c3c; background: #fdecea; }
    /* Admin overrides — editor, misc */
    .container.admin-expanded .quiz-edit-card { background: #fbfbfd; border-color: #e5e5ea; }
    .container.admin-expanded .quiz-edit-card:focus-within { border-color: #000; box-shadow: 0 0 0 2px rgba(0,0,0,0.08); }
    .container.admin-expanded .quiz-edit-num { color: #888; }
    .container.admin-expanded .quiz-edit-qtxt { color: #000; border-bottom-color: #ddd; }
    .container.admin-expanded .quiz-edit-qtxt:focus { border-bottom-color: #000; }
    .container.admin-expanded .quiz-edit-opt-input { background: #fff; border-color: #ddd; color: #1a1a1a; }
    .container.admin-expanded .quiz-edit-opt-input:focus { border-color: #000; background: #fff; }
    .container.admin-expanded .quiz-edit-opt-radio { accent-color: #000; }
    .container.admin-expanded .quiz-edit-opt-rm:hover { color: #e74c3c; }
    .container.admin-expanded .quiz-edit-card-footer { border-top-color: #eee; }
    .container.admin-expanded .quiz-edit-add-opt { color: #000; }
    .container.admin-expanded .quiz-edit-del-q { color: #999; }
    .container.admin-expanded .quiz-edit-del-q:hover { color: #e74c3c; background: #fdecea; }
    .container.admin-expanded input[type="text"],
    .container.admin-expanded input[type="password"],
    .container.admin-expanded select { background: #fff; border: 1px solid #ccc; color: #1a1a1a; border-radius: 0; }
    .container.admin-expanded input:focus { border-color: #000; outline: none; }
    /* Copy button for text blocks */
    .copy-text-btn { position:absolute; top:6px; right:6px; background:#fff; border:1px solid #ddd; border-radius:4px; padding:3px 7px; font-size:12px; cursor:pointer; opacity:0.5; transition:opacity .15s, background .15s; z-index:2; line-height:1; }
    .copy-text-btn:hover { opacity:1; background:#f0f0f0; }
    .copy-text-btn.copied { opacity:1; background:#e8f5e9; border-color:#4CAF50; }

    /* ====== Quiz Intro Animation ====== */
    #quizIntro { position:fixed; inset:0; z-index:100000; pointer-events:none; display:none; }
    #quizIntro.active { display:block; pointer-events:all; }
    #quizIntroCircle {
      position:absolute; top:50%; left:50%; width:0; height:0;
      background:#0a0a0a; border-radius:50%;
      transform:translate(-50%,-50%);
      transition: width 1s cubic-bezier(0.65,0,0.35,1), height 1s cubic-bezier(0.65,0,0.35,1);
    }
    #quizIntroCircle.qi-expand { width:300vmax; height:300vmax; }
    #quizIntroCircle.qi-shrink {
      transition: width 0.9s cubic-bezier(0.65,0,0.35,1), height 0.9s cubic-bezier(0.65,0,0.35,1), opacity 0.4s ease 0.5s;
      width:0; height:0; opacity:0;
    }
    #quizIntroFloating { position:absolute; inset:0; z-index:5; overflow:hidden; pointer-events:none; }
    #quizIntroContent {
      position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
      flex-direction:column; z-index:10; opacity:0; transition:opacity 0.6s ease;
    }
    #quizIntroContent.qi-visible { opacity:1; }
    #quizIntroContent.qi-fadeout { opacity:0; transition:opacity 0.5s ease; }
    .qi-line { width:0; height:1px; background:#333; transition:width 0.7s cubic-bezier(0.25,1,0.5,1); margin:18px 0; }
    #quizIntroContent.qi-s1 .qi-line { width:min(350px,60vw); }
    .qi-welcome {
      font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
      font-size:clamp(12px,2vw,14px); letter-spacing:5px; color:#666; text-transform:uppercase;
      opacity:0; transform:translateY(6px); transition:all 0.6s cubic-bezier(0.25,1,0.5,1);
    }
    #quizIntroContent.qi-s2 .qi-welcome { opacity:1; transform:translateY(0); }
    .qi-title {
      font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
      font-size:clamp(32px,7vw,56px); font-weight:700; color:#fff; letter-spacing:3px;
      opacity:0; transform:translateY(10px); transition:all 0.7s cubic-bezier(0.25,1,0.5,1);
    }
    #quizIntroContent.qi-s3 .qi-title { opacity:1; transform:translateY(0); }
    .qi-subtitle {
      font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
      font-size:clamp(10px,1.5vw,12px); color:#555; letter-spacing:4px; text-transform:uppercase;
      opacity:0; transition:opacity 0.6s ease; margin-top:8px;
    }
    #quizIntroContent.qi-s4 .qi-subtitle { opacity:1; }
    .qi-book {
      position:absolute; width:32px; height:42px; border-radius:3px; opacity:0;
      animation: qiFloatSpin var(--qi-dur) ease-in-out var(--qi-del) forwards;
    }
    .qi-book-cover {
      width:100%; height:100%; border-radius:3px; position:relative;
    }
    .qi-book-cover::before {
      content:''; position:absolute; left:3px; top:6px; bottom:6px; width:1.5px;
      background:rgba(255,255,255,0.25); border-radius:1px;
    }
    .qi-book-cover::after {
      content:''; position:absolute; right:5px; top:10px; width:14px; height:1px;
      background:rgba(255,255,255,0.15);
      box-shadow:0 4px 0 rgba(255,255,255,0.12),0 8px 0 rgba(255,255,255,0.1),0 12px 0 rgba(255,255,255,0.08),0 16px 0 rgba(255,255,255,0.06);
    }
    .qi-book-pages {
      position:absolute; right:-2px; top:3px; bottom:3px; width:3px;
      background:#ddd; border-radius:0 2px 2px 0;
    }
    @keyframes qiFloatSpin {
      0%   { transform:translate(0,0) rotate(0deg) scale(0.8); opacity:0; }
      10%  { opacity:0.7; }
      50%  { transform:translate(var(--qi-dx),var(--qi-dy)) rotate(180deg) scale(1); opacity:0.6; }
      90%  { opacity:0.5; }
      100% { transform:translate(calc(var(--qi-dx)*2),calc(var(--qi-dy)*2)) rotate(360deg) scale(0.7); opacity:0; }
    }
    .qi-wire { position:absolute; opacity:0; }
    .qi-wire svg { overflow:visible; }
    @keyframes qiWireGrow {
      0%   { stroke-dashoffset:200; opacity:0; }
      10%  { opacity:0.6; }
      50%  { stroke-dashoffset:0; opacity:0.5; }
      80%  { opacity:0.3; }
      100% { stroke-dashoffset:-200; opacity:0; }
    }
    .qi-dot {
      position:absolute; width:8px; height:8px; border:1.5px solid; border-radius:50%; opacity:0;
      animation: qiPulseDot var(--qi-dur) ease-in-out var(--qi-del) forwards;
    }
    @keyframes qiPulseDot {
      0%   { transform:scale(0); opacity:0; }
      20%  { transform:scale(1.2); opacity:0.8; }
      50%  { transform:scale(1); opacity:0.6; }
      80%  { transform:scale(0.8); opacity:0.3; }
      100% { transform:scale(0); opacity:0; }
    }

    /* ====== Login Welcome Animation ====== */
    #loginWelcome { position:fixed; inset:0; z-index:100000; pointer-events:none; display:none; background:#050505; overflow:hidden; }
    #loginWelcome.active { display:flex; pointer-events:all; }
    #loginWelcomeCircle { display:none; }
    #loginWelcomeFloating { display:none; }
    #loginWelcomeContent {
      position:absolute; inset:0; display:flex; align-items:flex-end; justify-content:flex-start;
      padding:clamp(28px,5vw,80px); opacity:0; transition:opacity 0.5s ease;
    }
    #loginWelcomeContent.lw-visible { opacity:1; }
    #loginWelcomeContent.lw-fadeout { opacity:0; transition:opacity 0.65s ease; }
    .lw-topbar {
      position:absolute; top:0; left:0; right:0; height:3px; background:#fff;
      transform:scaleX(0); transform-origin:left;
    }
    .lw-topbar.lw-animate { animation:lwBarSweep 0.9s cubic-bezier(0.25,1,0.5,1) forwards; }
    .lw-stack { display:flex; flex-direction:column; align-items:flex-start; gap:0; width:100%; }
    .lw-hello {
      font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;
      font-size:min(16vw,36vh); font-weight:800; color:#fff;
      letter-spacing:-0.03em; line-height:0.93;
      opacity:0; transform:translateX(-30px);
    }
    .lw-hello.lw-animate { animation:lwSlideRight 0.9s cubic-bezier(0.16,1,0.3,1) 0.35s forwards; }
    .lw-title {
      font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;
      font-size:min(16vw,36vh); font-weight:800; color:transparent;
      -webkit-text-stroke:clamp(1.5px,0.2vw,3px) rgba(255,255,255,0.4);
      letter-spacing:-0.03em; line-height:0.93;
      opacity:0; transform:translateX(-20px);
    }
    .lw-title.lw-animate { animation:lwSlideRight 0.9s cubic-bezier(0.16,1,0.3,1) 0.6s forwards; }
    .lw-reminder {
      margin-top:clamp(18px,2.5vw,40px);
      display:flex; align-items:center; gap:16px;
      opacity:0; transform:translateY(10px);
    }
    .lw-reminder.lw-animate { animation:lwFadeUp 0.7s cubic-bezier(0.16,1,0.3,1) 1.15s forwards; }
    .lw-remind-line { width:clamp(28px,3vw,50px); height:2px; background:rgba(255,255,255,0.3); flex-shrink:0; }
    .lw-remind-text {
      font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;
      font-size:clamp(13px,2vw,22px); font-weight:700;
      color:rgba(255,255,255,0.7); letter-spacing:0.3px;
    }
    .lw-remind-text strong { color:#fff; }
    @keyframes lwBarSweep  { to { transform:scaleX(1); } }
    @keyframes lwSlideRight { to { opacity:1; transform:translateX(0); } }
    @keyframes lwFadeUp    { to { opacity:1; transform:translateY(0); } }
    #samarGifOverlay {
      position:absolute; inset:0; display:none; overflow:hidden; background:#000; z-index:2;
    }
    #samarGifOverlay.active { display:block; }
    #samarGifImg { width:100vw; height:100vh; object-fit:cover; display:block; }

    /* ====== iOS Segmented Picker ====== */
    .seg-picker {
      display: flex; position: relative;
      background: #e9e9eb; border-radius: 9px;
      padding: 2px; margin-bottom: 18px;
    }
    .seg-pill {
      position: absolute; top: 2px; bottom: 2px;
      background: #fff; border-radius: 7px;
      box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.08);
      transition: left 0.22s cubic-bezier(0.25,0.46,0.45,0.94),
                  width 0.22s cubic-bezier(0.25,0.46,0.45,0.94);
      pointer-events: none; z-index: 0;
    }
    .seg-btn {
      flex: 1; border: none; background: transparent !important;
      border-radius: 7px; padding: 8px 4px; margin: 0 !important;
      font-size: 13px; font-weight: 500;
      color: rgba(0,0,0,0.45); cursor: pointer;
      font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
      position: relative; z-index: 1;
      transition: color 0.18s ease;
      letter-spacing: -0.1px; white-space: nowrap;
      text-align: center; line-height: 1;
      display: inline-flex; align-items: center; justify-content: center;
      min-height: 0;
    }
    .seg-btn:hover { background: transparent !important; }
    .seg-btn.active { color: #000; font-weight: 600; }

    /* ====== Haunt Mode Styling ====== */
    .question.haunted {
      border:1px solid #3a2a4a;
      background:linear-gradient(135deg, #faf8ff 0%, #f4f0fa 100%);
      padding:20px;
      position:relative;
    }
    .question.haunted label { background:#f8f5fc; border-color:#d6cce6; }
    .question.haunted label:hover { border-color:#8060a0; background:#f0eaf8; }
    .question.haunted::before {
      content:''; position:absolute; inset:-1px;
      background:linear-gradient(90deg, transparent 0%, rgba(120,80,180,0.15) 50%, transparent 100%);
      background-size:200% 100%;
      animation:hauntShimmer 3s ease-in-out infinite;
      z-index:-1; pointer-events:none;
    }
    @keyframes hauntShimmer {
      0%,100% { background-position:-200% 0; }
      50% { background-position:200% 0; }
    }
    .haunt-badge {
      display:inline-flex; align-items:center; gap:6px;
      background:#2a1a3a; color:#c8b0e8;
      font-size:11px; font-weight:600; letter-spacing:0.5px;
      padding:5px 12px; border-radius:0; margin-bottom:14px;
    }
    .haunt-badge .ghost-icon {
      font-size:13px;
      animation:hauntGhostBob 2s ease-in-out infinite;
    }
    @keyframes hauntGhostBob {
      0%,100% { transform:translateY(0); }
      50% { transform:translateY(-2px); }
    }

    /* ====== Haunt Intro Overlay ====== */
    #hauntIntro { position:fixed; inset:0; z-index:100000; display:none; align-items:center; justify-content:center; flex-direction:column; overflow:hidden; background:#0a0a0f; }
    #hauntIntro.active { display:flex; }
    .hi-fog { position:absolute; width:120%; height:100%; opacity:0; pointer-events:none; }
    .hi-fog-1 { background:radial-gradient(ellipse at 30% 80%, rgba(60,40,90,0.3) 0%, transparent 60%); animation:hiFogDrift1 6s ease-in-out infinite; }
    .hi-fog-2 { background:radial-gradient(ellipse at 70% 60%, rgba(40,30,70,0.2) 0%, transparent 55%); animation:hiFogDrift2 8s ease-in-out infinite; }
    @keyframes hiFogDrift1 { 0%,100%{transform:translateX(-5%);} 50%{transform:translateX(5%);} }
    @keyframes hiFogDrift2 { 0%,100%{transform:translateX(3%);} 50%{transform:translateX(-7%);} }
    #hauntIntro.hi-step0 .hi-fog { opacity:1; transition:opacity 1s ease; }
    #hauntIntroFloating { position:absolute; inset:0; z-index:5; overflow:hidden; pointer-events:none; }
    .hi-ghost { position:absolute; opacity:0; animation:hiFloatSpin var(--hi-dur) ease-in-out var(--hi-del) forwards; }
    .hi-ghost-body { font-size:var(--hi-size); filter:drop-shadow(0 0 8px rgba(160,100,220,0.3)); }
    .hi-pumpkin { position:absolute; opacity:0; animation:hiFloatSpin var(--hi-dur) ease-in-out var(--hi-del) forwards; }
    .hi-pumpkin-body { font-size:var(--hi-size); filter:drop-shadow(0 0 8px rgba(220,140,40,0.3)); }
    @keyframes hiFloatSpin {
      0%   { transform:translate(0,0) rotate(0deg) scale(0.6); opacity:0; }
      10%  { opacity:0.7; }
      50%  { transform:translate(var(--hi-dx),var(--hi-dy)) rotate(180deg) scale(1); opacity:0.6; }
      90%  { opacity:0.4; }
      100% { transform:translate(calc(var(--hi-dx)*2),calc(var(--hi-dy)*2)) rotate(360deg) scale(0.5); opacity:0; }
    }
    .hi-text { position:relative; z-index:10; text-align:center; opacity:0; transform:translateY(10px); transition:all 0.8s cubic-bezier(0.25,1,0.5,1); }
    #hauntIntro.hi-step1 .hi-text { opacity:1; transform:translateY(0); }
    .hi-text h2 { font-size:clamp(24px,5vw,42px); font-weight:700; color:#c8a0f0; letter-spacing:2px; margin-bottom:12px; text-shadow:0 0 40px rgba(160,100,220,0.3); }
    .hi-text p { font-size:clamp(11px,2vw,14px); color:#6a5a7a; letter-spacing:4px; text-transform:uppercase; }
    #hauntIntro.hi-fadeout { opacity:0; transition:opacity 0.8s ease; }

    /* ====== Coder Boot Transition (Open Coder) ======
       Cosmetic overlay shown while opening a coder task. All classes are
       namespaced cb-* and CSS vars are scoped to #coderBoot so nothing
       leaks into the rest of the page. Monochrome (matches login welcome).
       NOTE: the card has NO backdrop-filter on purpose — nesting one inside
       #coderBoot's frosted layer freezes child animations in WebKit/Blink. */
    #coderBoot{
      --cb-ink:#f4f6fa; --cb-soft:#b6bcc7; --cb-faint:#6b7280;
      --cb-acc:#ffffff; --cb-acc2:#cfd4dd; --cb-glow:rgba(255,255,255,0.40);
      --cb-ok:#f4f6fa; --cb-hair:rgba(255,255,255,0.10); --cb-hair2:rgba(255,255,255,0.18);
      --cb-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
      position:fixed;inset:0;z-index:100000;display:none;align-items:center;justify-content:center;
      background:linear-gradient(180deg, rgba(8,8,10,0.62), rgba(12,12,14,0.72));
      -webkit-backdrop-filter:blur(24px) saturate(140%);backdrop-filter:blur(24px) saturate(140%);
      opacity:0;transition:opacity .55s ease;overflow:hidden;
    }
    #coderBoot.active{display:flex;opacity:1;}
    #coderBoot.cb-leaving{opacity:0;}
    #cbTokens{position:absolute;inset:0;overflow:hidden;pointer-events:none;}
    .cb-tok{position:absolute;font-family:var(--cb-mono);font-weight:600;color:rgba(255,255,255,0.16);user-select:none;white-space:nowrap;filter:blur(.3px);opacity:0;will-change:transform,opacity;animation:cbTokDrift var(--d) linear var(--dl) infinite;}
    @keyframes cbTokDrift{0%{opacity:0;transform:translate(0,0) rotate(var(--r0));}12%{opacity:1;}88%{opacity:1;}100%{opacity:0;transform:translate(var(--dx),var(--dy)) rotate(var(--r1));}}
    .cb-card{position:relative;z-index:2;width:min(720px,calc(100vw - 36px));padding:36px 42px 34px;border-radius:30px;text-align:center;background:linear-gradient(180deg, rgba(26,26,30,0.92), rgba(14,14,16,0.94));border:1px solid var(--cb-hair2);box-shadow:0 1px 0 rgba(255,255,255,.08) inset,0 30px 90px rgba(0,0,0,.6),0 0 0 1px rgba(0,0,0,.25);transform:translateY(14px) scale(.96);opacity:0;transition:transform .6s cubic-bezier(.16,1,.3,1),opacity .6s ease;}
    #coderBoot.active .cb-card{transform:translateY(0) scale(1);opacity:1;}
    #coderBoot.cb-leaving .cb-card{transform:translateY(-6px) scale(1.03);opacity:0;transition:transform .45s cubic-bezier(.4,0,1,1),opacity .45s ease;}
    .cb-dots{display:flex;gap:7px;justify-content:flex-start;margin-bottom:22px;}
    .cb-dots i{width:11px;height:11px;border-radius:50%;background:rgba(255,255,255,.14);}
    .cb-dots i:nth-child(1){animation:cbDotBlink 3s ease-in-out infinite;}
    .cb-dots i:nth-child(2){animation:cbDotBlink 3s ease-in-out .4s infinite;}
    .cb-dots i:nth-child(3){animation:cbDotBlink 3s ease-in-out .8s infinite;}
    @keyframes cbDotBlink{0%,100%{background:rgba(255,255,255,.14);}50%{background:var(--cb-acc2);box-shadow:0 0 12px var(--cb-glow);}}
    .cb-body{display:flex;align-items:center;gap:24px;}
    .cb-left{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;}
    .cb-divider{align-self:stretch;width:1px;flex:0 0 auto;background:linear-gradient(180deg,transparent,var(--cb-hair2),transparent);}
    .cb-right{flex:1 1 0;min-width:0;display:flex;justify-content:center;align-items:center;}
    .cb-reactor{position:relative;width:146px;height:146px;margin:0 auto 18px;}
    .cb-reactor .cb-ring{position:absolute;inset:0;border-radius:50%;}
    .cb-reactor .cb-ring.cb-outer{background:conic-gradient(from 0deg,transparent 0deg,var(--cb-acc2) 70deg,var(--cb-acc) 150deg,transparent 220deg,transparent 360deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 5px));mask:radial-gradient(farthest-side,transparent calc(100% - 6px),#000 calc(100% - 5px));animation:cbSpin 2.6s linear infinite;filter:drop-shadow(0 0 8px var(--cb-glow));will-change:transform;}
    .cb-reactor .cb-ring.cb-inner{inset:20px;background:conic-gradient(from 180deg,transparent 0deg,rgba(255,255,255,.6) 90deg,transparent 200deg);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 3px));mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 3px));animation:cbSpinRev 3.4s linear infinite;will-change:transform;}
    .cb-reactor .cb-track{position:absolute;inset:0;border-radius:50%;border:2px solid rgba(255,255,255,.12);}
    .cb-reactor .cb-core{position:absolute;inset:30px;border-radius:50%;background:radial-gradient(circle at 50% 36%,rgba(46,46,52,.95),rgba(16,16,20,.92));box-shadow:0 6px 24px rgba(255,255,255,.18),inset 0 0 0 1px rgba(255,255,255,.10);display:flex;align-items:center;justify-content:center;animation:cbCorePulse 2.6s ease-in-out infinite;}
    .cb-reactor .cb-glyph{font-family:var(--cb-mono);font-weight:600;font-size:35px;color:var(--cb-acc2);text-shadow:0 0 14px var(--cb-glow);line-height:1;transition:opacity .18s ease,transform .18s ease;}
    @keyframes cbSpin{to{transform:rotate(360deg);}}
    @keyframes cbSpinRev{to{transform:rotate(-360deg);}}
    @keyframes cbCorePulse{0%,100%{box-shadow:0 6px 24px rgba(255,255,255,.16),inset 0 0 0 1px rgba(255,255,255,.10);}50%{box-shadow:0 6px 34px rgba(255,255,255,.34),inset 0 0 0 1px rgba(255,255,255,.18);}}
    .cb-status{font-family:var(--cb-mono);font-size:15.5px;font-weight:500;color:var(--cb-ink);letter-spacing:-0.01em;min-height:22px;display:flex;align-items:center;justify-content:center;gap:9px;}
    .cb-status .cb-cursor{display:inline-block;width:9px;height:18px;background:var(--cb-acc2);border-radius:1px;box-shadow:0 0 8px var(--cb-glow);animation:cbCaret 1s steps(2) infinite;transform:translateY(2px);}
    @keyframes cbCaret{0%,49%{opacity:1;}50%,100%{opacity:0;}}
    .cb-sub{font-size:13px;color:var(--cb-faint);margin-top:8px;font-family:var(--cb-mono);min-height:17px;}
    .cb-meter{position:relative;height:4px;border-radius:999px;background:rgba(255,255,255,.14);overflow:hidden;margin-top:24px;}
    .cb-meter::before{content:"";position:absolute;top:0;bottom:0;left:0;width:40%;border-radius:999px;background:linear-gradient(90deg,transparent,var(--cb-acc),var(--cb-acc2),transparent);will-change:transform;transform:translateX(-110%);animation:cbSweep 1.6s ease-in-out infinite;}
    @keyframes cbSweep{0%{transform:translateX(-110%);}100%{transform:translateX(260%);}}
    .cb-steps{text-align:left;display:inline-flex;flex-direction:column;gap:13px;}
    .cb-step{display:flex;align-items:center;gap:11px;font-family:var(--cb-mono);font-size:13px;color:var(--cb-faint);transition:color .3s ease;}
    .cb-step .cb-mk{width:18px;height:18px;border-radius:50%;flex-shrink:0;border:1.5px solid rgba(255,255,255,.18);position:relative;transition:all .3s ease;}
    .cb-step.cb-active{color:var(--cb-ink);}
    .cb-step.cb-active .cb-mk{border-color:var(--cb-acc2);box-shadow:0 0 0 3px rgba(255,255,255,.18);}
    .cb-step.cb-active .cb-mk::after{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--cb-acc2);animation:cbCorePulse 1.2s ease-in-out infinite;}
    .cb-step.cb-done{color:var(--cb-soft);}
    .cb-step.cb-done .cb-mk{border-color:var(--cb-ok);background:var(--cb-ok);}
    .cb-step.cb-done .cb-mk::after{content:"";position:absolute;inset:0;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23101014' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center/11px no-repeat;}
    @media (max-width:520px){.cb-card{padding:26px 22px 22px;}.cb-reactor{width:108px;height:108px;}.cb-body{flex-direction:column;gap:20px;}.cb-divider{width:60%;height:1px;background:linear-gradient(90deg,transparent,var(--cb-hair2),transparent);}.cb-right{width:100%;}.cb-steps{align-items:center;}}
    @media (prefers-reduced-motion: reduce){#coderBoot .cb-tok,#coderBoot .cb-ring,#coderBoot .cb-core,#coderBoot .cb-meter::before,#coderBoot .cb-dots i,#coderBoot .cb-step.cb-active .cb-mk::after{animation:none!important;}#coderBoot .cb-meter::before{transform:translateX(0);width:100%;opacity:.6;}#coderBoot .cb-card,#coderBoot{transition:opacity .2s ease;}}

    /* ====== Submit Animation ====== */
    #submitCubeOverlay {
      position:fixed; inset:0; z-index:100000;
      display:none; align-items:center; justify-content:center;
      flex-direction:column; background:#fff;
      opacity:0; transition:opacity 0.4s ease;
    }
    #submitCubeOverlay.active { display:flex; opacity:1; }
    .sc-grid { display:grid; grid-template-columns:1fr 1fr; gap:12px; width:100px; height:100px; }
    .sc-cell { perspective:200px; }
    .sc-cube {
      width:44px; height:44px; position:relative;
      transform-style:preserve-3d; transition:transform 0.5s ease-in-out;
    }
    .sc-face { position:absolute; width:44px; height:44px; background:#000; transition:background 0.3s ease; }
    .sc-face.sf  { transform:translateZ(22px); }
    .sc-face.sb  { transform:rotateY(180deg) translateZ(22px); }
    .sc-face.sl  { transform:rotateY(-90deg) translateZ(22px); }
    .sc-face.sr  { transform:rotateY(90deg) translateZ(22px); }
    .sc-face.st  { transform:rotateX(90deg) translateZ(22px); }
    .sc-face.sbo { transform:rotateX(-90deg) translateZ(22px); }
    .sc-face.sc-red { background:#e74c3c; }
    #submitCubeText {
      margin-top:28px; font-size:13px; letter-spacing:3px;
      text-transform:uppercase; color:#555; transition:color 0.3s;
    }
    #submitCubeText.sc-err { color:#e74c3c; }

    #submitDoneOverlay {
      position:fixed; inset:0; z-index:100001;
      display:none; align-items:center; justify-content:center;
      flex-direction:column; background:#fff;
    }
    #submitDoneOverlay.active { display:flex; }
    .sd-box { text-align:center; opacity:0; transform:scale(0.9); transition:all 0.5s cubic-bezier(0.25,1,0.5,1); }
    .sd-box.sd-visible { opacity:1; transform:scale(1); }
    .sd-check {
      width:56px; height:56px; border:2px solid #000; border-radius:50%;
      display:flex; align-items:center; justify-content:center;
      margin:0 auto 14px; font-size:24px;
    }
    .sd-check.sd-fail { border-color:#e74c3c; color:#e74c3c; }
    .sd-box h2 { font-size:14px; letter-spacing:3px; text-transform:uppercase; font-weight:700; }
    .sd-box h2.sd-fail { color:#e74c3c; }
    .sd-box p { font-size:11px; color:#888; margin-top:6px; letter-spacing:1px; }
    .sd-box p.sd-fail { color:#b44; }
    @media (max-width: 640px) { .doubt-msg-eagrid { grid-template-columns: 1fr !important; } }

    /* ── Milestones view (ported from milestones.html, scoped under #milestonesView) ── */
    #milestonesView{--ms-ink:#111;--ms-sec:#6b7280;--ms-mute:#9ca3af;--ms-teal:#0d7377;--ms-hair:#e5e7eb;--ms-green:#065f46;--ms-amber:#b45309;color:var(--ms-ink);font-family:-apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,sans-serif}
    #milestonesView *{box-sizing:border-box}
    #milestonesView .ms-top{display:flex;align-items:center;gap:14px;margin-bottom:18px}
    #milestonesView .ms-top h1{font-size:18px;margin:0;font-weight:700}
    #milestonesView .ms-top .ms-sub{font-size:11px;color:var(--ms-sec);text-transform:uppercase;letter-spacing:.12em;font-weight:600}
    #milestonesView .ms-bar{background:#fff;border:1px solid var(--ms-hair);border-radius:12px;padding:14px 16px;display:flex;gap:14px;align-items:flex-end;flex-wrap:wrap;margin-bottom:18px}
    #milestonesView .ms-fld{display:flex;flex-direction:column;gap:4px}
    #milestonesView .ms-fld label{font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--ms-sec);font-weight:700}
    #milestonesView select,#milestonesView input[type=text],#milestonesView input[type=date]{font:inherit;font-size:13px;padding:7px 9px;border:1px solid #d1d5db;border-radius:8px;background:#fff}
    #milestonesView button{font:inherit;font-weight:700;font-size:12px;padding:8px 14px;border-radius:8px;border:1px solid var(--ms-teal);background:var(--ms-teal);color:#fff;cursor:pointer}
    #milestonesView button.ms-ghost{background:#fff;color:var(--ms-teal)}
    #milestonesView button.ms-mini{padding:4px 8px;font-size:11px}
    #milestonesView .ms-msg{font-size:13px;color:var(--ms-sec);padding:30px 4px}
    #milestonesView .ms-skill{background:#fff;border:1px solid var(--ms-hair);border-radius:14px;padding:14px 18px 18px;margin-bottom:16px}
    #milestonesView .ms-skill-head{display:flex;align-items:center;gap:9px;margin-bottom:4px}
    #milestonesView .ms-skill-head .ms-dot{width:10px;height:10px;border-radius:50%}
    #milestonesView .ms-skill-head h3{margin:0;font-size:14px;font-weight:700}
    #milestonesView .ms-skill-head .ms-now{margin-left:auto;font-size:11px;color:var(--ms-sec)}
    #milestonesView .ms-skill-head .ms-now b{color:var(--ms-teal)}
    #milestonesView .ms-track{position:relative;display:flex;margin:6px 0 4px}
    #milestonesView .ms-ln{position:absolute;top:30px;height:0;z-index:1;border-top:2px dashed #d1d5db}
    #milestonesView .ms-ln.ms-done{border-top:3px solid var(--ms-teal)}
    #milestonesView .ms-node{flex:1;display:flex;flex-direction:column;align-items:center;text-align:center;position:relative;z-index:2;padding:0 2px}
    #milestonesView .ms-badge{height:14px;display:flex;align-items:flex-end;justify-content:center}
    #milestonesView .ms-nowb{font-size:7px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:#fff;background:var(--ms-teal);padding:1px 6px;border-radius:4px}
    #milestonesView .ms-bubwrap{height:32px;display:flex;align-items:center;justify-content:center}
    #milestonesView .ms-bub{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;background:#fff}
    #milestonesView .ms-bub.completed{background:var(--ms-teal);color:#fff}
    #milestonesView .ms-bub.current{position:relative;background:var(--ms-teal);color:#fff;border:2px solid #fff}
    #milestonesView .ms-bub.current::after{content:"";position:absolute;inset:-4px;border-radius:50%;border:2px solid var(--ms-teal)}
    #milestonesView .ms-bub.upcoming{border:2px dashed #cbd5e1;color:#cbd5e1}
    #milestonesView .ms-nlab{margin-top:8px;font-size:9px;line-height:1.25;color:var(--ms-sec)}
    #milestonesView .ms-node.ms-cur .ms-nlab{color:var(--ms-ink);font-weight:700}
    #milestonesView .ms-edit{margin-top:12px;border-top:1px solid var(--ms-hair);padding-top:10px}
    #milestonesView .ms-erow{display:grid;grid-template-columns:1.6fr 1fr 1fr auto;gap:8px;align-items:center;padding:5px 0;border-bottom:1px solid #f3f4f6;font-size:12px}
    @media (max-width:640px){ #milestonesView .ms-erow{ grid-template-columns:1fr; gap:6px; } }
    #milestonesView .ms-erow .ms-mname{font-weight:600}
    #milestonesView .ms-erow .ms-ovr{color:var(--ms-amber);font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;margin-left:6px}
    #milestonesView .ms-erow .ms-cust{color:var(--ms-teal);font-size:10px;font-weight:700;margin-left:6px}
    #milestonesView .ms-esel{font-size:11px;padding:4px 6px;border:1px solid #d1d5db;border-radius:6px;background:#fff;width:100%}
    #milestonesView .ms-add{display:flex;gap:8px;margin-top:10px;align-items:center}
    #milestonesView .ms-add input{flex:1}
    .ms-toast{position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:#111;color:#fff;padding:10px 18px;border-radius:8px;font-size:13px;opacity:0;transition:opacity .2s;z-index:50;pointer-events:none}
    .ms-toast.show{opacity:1}
    #milestonesView .ms-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
    #milestonesView .ms-tab{font:inherit;font-size:12px;font-weight:600;padding:6px 13px;border-radius:999px;
      border:1px solid var(--ms-hair);background:#fff;color:var(--ms-sec);cursor:pointer;display:inline-flex;
      align-items:center;gap:7px}
    #milestonesView .ms-tab .ms-tab-dot{width:7px;height:7px;border-radius:50%;opacity:.55}
    #milestonesView .ms-tab[aria-selected="true"]{color:var(--ms-ink);border-color:currentColor}
    #milestonesView .ms-tab[aria-selected="true"] .ms-tab-dot{opacity:1}

    /* ── Topic Mode (coach curriculum planner, scoped under #topicModeView) ──
       Sits beside Milestones and shares its palette, but deliberately uses a
       VERTICAL spine rather than repeating the horizontal rail: this screen is
       a syllabus you plan down, not a progress bar you read across. */
    #topicModeView{--tm-ink:#111;--tm-sec:#6b7280;--tm-mute:#9ca3af;--tm-hair:#e5e7eb;
      --tm-teal:#0d7377;--tm-amber:#b45309;--tm-accent:var(--tm-teal);
      --tm-ease:cubic-bezier(.23,1,.32,1);
      color:var(--tm-ink);font-family:-apple-system,BlinkMacSystemFont,"Helvetica Neue",Helvetica,Arial,sans-serif;
      text-align:left}
    #topicModeView *{box-sizing:border-box}
    /* Reset the page-level h1/button rules (uppercase, centred, 3rem, black pill)
       that would otherwise shout over this screen — same approach the Grader
       view takes. Class selectors below still win over this blanket. */
    #topicModeView h1,#topicModeView h2,#topicModeView h3,#topicModeView h4{
      margin:0;text-align:left;text-transform:none;letter-spacing:-.01em;color:var(--tm-ink);font-weight:700}
    #topicModeView button{text-transform:none;letter-spacing:normal;font-family:inherit;border-radius:8px}
    #topicModeView input,#topicModeView textarea,#topicModeView select{font-family:inherit;color:var(--tm-ink)}

    /* header */
    #topicModeView .tm-top{display:flex;align-items:flex-start;gap:16px;flex-wrap:wrap;margin-bottom:16px}
    #topicModeView .tm-top h1{font-size:18px;font-weight:700;letter-spacing:-.01em}
    #topicModeView .tm-eyebrow{font-size:11px;color:var(--tm-sec);text-transform:uppercase;letter-spacing:.12em;font-weight:600}
    #topicModeView .tm-spacer{flex:1}

    /* two-pane planner */
    #topicModeView .tm-grid{display:grid;grid-template-columns:262px minmax(0,1fr);gap:18px;align-items:start;
      height:calc(100vh - 168px);min-height:420px}
    #topicModeView .tm-pane{background:#fff;border:1px solid var(--tm-hair);border-radius:16px;
      display:flex;flex-direction:column;min-height:0;height:100%;overflow:hidden}
    #topicModeView .tm-pane-head{padding:12px 14px 10px;border-bottom:1px solid var(--tm-hair);flex:0 0 auto}
    #topicModeView .tm-pane-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain}

    /* roster */
    #topicModeView .tm-search{width:100%;font:inherit;font-size:13px;padding:8px 11px;border:1px solid #d1d5db;
      border-radius:9px;background:#fff;color:var(--tm-ink)}
    #topicModeView .tm-search::placeholder{color:var(--tm-mute)}
    #topicModeView .tm-stu{display:flex;gap:10px;align-items:flex-start;width:100%;text-align:left;background:none;
      border:0;border-bottom:1px solid #f3f4f6;padding:10px 14px;cursor:pointer;font:inherit;color:inherit;
      transition:background-color 150ms ease,transform 150ms var(--tm-ease)}
    #topicModeView .tm-stu:last-child{border-bottom:0}
    #topicModeView .tm-stu:active{transform:scale(.985)}
    #topicModeView .tm-stu[aria-selected="true"]{background:#f0fdfa}
    #topicModeView .tm-stu-dot{width:8px;height:8px;border-radius:50%;background:#d1d5db;margin-top:5px;flex:0 0 auto;
      transition:background-color 150ms ease}
    #topicModeView .tm-stu[data-set="1"] .tm-stu-dot{background:var(--tm-teal)}
    #topicModeView .tm-stu-name{font-size:13px;font-weight:600;line-height:1.3}
    #topicModeView .tm-stu-now{font-size:11px;color:var(--tm-sec);line-height:1.35;margin-top:2px}
    #topicModeView .tm-stu-now.unset{color:var(--tm-mute);font-style:italic}
    #topicModeView .tm-stu-eye{margin-left:auto;flex:0 0 auto;font-size:10px;font-weight:700;letter-spacing:.04em;
      text-transform:uppercase;color:var(--tm-amber);margin-top:3px}

    /* "now" card */
    #topicModeView .tm-now{display:flex;gap:14px;align-items:flex-start;padding:16px 18px;border-bottom:1px solid var(--tm-hair)}
    #topicModeView .tm-now-bar{width:3px;border-radius:2px;background:var(--tm-accent);align-self:stretch;flex:0 0 auto}
    #topicModeView .tm-now-topic{font-size:19px;font-weight:700;letter-spacing:-.015em;line-height:1.2}
    #topicModeView .tm-now-sub{font-size:13px;color:var(--tm-accent);font-weight:600;margin-top:3px}
    #topicModeView .tm-now-meta{font-size:11.5px;color:var(--tm-sec);margin-top:5px}
    #topicModeView .tm-now-unset{font-size:14px;color:var(--tm-sec)}

    /* pillar tabs */
    #topicModeView .tm-tabs{display:flex;gap:6px;flex-wrap:wrap;padding:10px 18px;border-bottom:1px solid var(--tm-hair)}
    #topicModeView .tm-tab{font:inherit;font-size:12px;font-weight:600;padding:6px 13px;border-radius:999px;
      border:1px solid var(--tm-hair);background:#fff;color:var(--tm-sec);cursor:pointer;display:inline-flex;
      align-items:center;gap:7px;transition:color 150ms ease,border-color 150ms ease,transform 150ms var(--tm-ease)}
    #topicModeView .tm-tab:active{transform:scale(.96)}
    #topicModeView .tm-tab .tm-tab-dot{width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.55}
    #topicModeView .tm-tab[aria-selected="true"]{color:var(--tm-ink);border-color:currentColor}
    #topicModeView .tm-tab[aria-selected="true"] .tm-tab-dot{opacity:1}

    /* the spine — the one thing this screen is remembered by */
    #topicModeView .tm-spine{padding:6px 18px 18px}
    #topicModeView .tm-node{display:flex;gap:14px;align-items:stretch;width:100%;text-align:left;background:none;
      border:0;padding:0;cursor:pointer;font:inherit;color:inherit;position:relative;
      transition:transform 160ms var(--tm-ease)}
    #topicModeView .tm-node:active{transform:scale(.995)}
    #topicModeView .tm-node[disabled]{cursor:default}
    #topicModeView .tm-rail{position:relative;width:28px;flex:0 0 auto;display:flex;justify-content:center}
    /* Two half-segments meeting at the bubble's centre line, so each node owns
       the colour of the spine above and below it. Geometry is deliberate:
       the bubble sits at 10px→40px (10 margin + 26 box + 2×2 border), so the
       split is at 25px and each segment shows in the gap between rows. Changing
       .tm-bub's margin-top or size means re-deriving these three numbers. */
    #topicModeView .tm-rail::before,#topicModeView .tm-rail::after{content:"";position:absolute;left:50%;
      width:2px;margin-left:-1px;background:#e5e7eb}
    #topicModeView .tm-rail::before{top:0;height:25px}
    #topicModeView .tm-rail::after{top:25px;bottom:0}
    #topicModeView .tm-node:first-child .tm-rail::before,
    #topicModeView .tm-node:last-of-type .tm-rail::after{display:none}
    #topicModeView .tm-node[data-status="completed"] .tm-rail::before,
    #topicModeView .tm-node[data-status="completed"] .tm-rail::after,
    #topicModeView .tm-node[data-status="current"] .tm-rail::before{background:var(--tm-accent)}
    #topicModeView .tm-node[data-status="upcoming"] .tm-rail::before,
    #topicModeView .tm-node[data-status="upcoming"] .tm-rail::after{background:transparent;
      background-image:linear-gradient(#d1d5db 55%,transparent 0);background-size:2px 7px;background-repeat:repeat-y}
    #topicModeView .tm-bub{position:relative;z-index:2;width:26px;height:26px;margin-top:10px;border-radius:50%;
      display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;background:#fff;
      border:2px solid #e5e7eb;color:var(--tm-mute);flex:0 0 auto;
      transition:background-color 180ms var(--tm-ease),border-color 180ms var(--tm-ease),color 180ms var(--tm-ease)}
    #topicModeView .tm-node[data-status="completed"] .tm-bub{background:var(--tm-accent);border-color:var(--tm-accent);color:#fff}
    #topicModeView .tm-node[data-status="current"] .tm-bub{background:var(--tm-accent);border-color:#fff;color:#fff;
      box-shadow:0 0 0 2px var(--tm-accent)}
    #topicModeView .tm-node-body{flex:1;min-width:0;padding:15px 0 17px;display:flex;gap:12px;align-items:baseline}
    #topicModeView .tm-node-label{font-size:13.5px;font-weight:600;line-height:1.35}
    #topicModeView .tm-node[data-status="upcoming"] .tm-node-label{color:var(--tm-sec);font-weight:500}
    #topicModeView .tm-node[data-status="current"] .tm-node-label{font-weight:750}
    #topicModeView .tm-node-uni{font-size:11px;color:var(--tm-mute);white-space:nowrap}
    #topicModeView .tm-node-tail{margin-left:auto;display:flex;align-items:center;gap:8px;flex:0 0 auto}
    #topicModeView .tm-q{font-size:11px;color:var(--tm-mute);font-variant-numeric:tabular-nums}
    #topicModeView .tm-nowtag{font-size:9.5px;font-weight:800;letter-spacing:.07em;text-transform:uppercase;
      color:#fff;background:var(--tm-accent);padding:2px 7px;border-radius:5px}
    #topicModeView .tm-warn{font-size:9.5px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;
      color:var(--tm-amber);background:#fef3c7;padding:2px 7px;border-radius:5px}
    #topicModeView .tm-node:hover .tm-node-label{color:var(--tm-ink)}
    #topicModeView .tm-hint{opacity:0;font-size:11px;color:var(--tm-accent);font-weight:600;white-space:nowrap;
      transition:opacity 150ms ease}
    @media (hover:hover) and (pointer:fine){ #topicModeView .tm-node:hover .tm-hint{opacity:1} }
    #topicModeView .tm-node:focus-visible .tm-hint{opacity:1}

    /* subtopic chips — only under the current milestone (progressive disclosure) */
    #topicModeView .tm-subs{margin:0 0 10px 42px;padding:12px 14px;border:1px solid var(--tm-hair);
      border-radius:12px;background:#fcfcfd}
    #topicModeView .tm-subs-head{font-size:10px;text-transform:uppercase;letter-spacing:.09em;font-weight:700;
      color:var(--tm-sec);margin-bottom:9px}
    #topicModeView .tm-chips{display:flex;flex-wrap:wrap;gap:6px}
    /* Expanded, the longest keyword lists run to 60+ chips — give them their own
       scroll so the cloud can never push the spine off the screen. */
    #topicModeView .tm-chips-all{max-height:188px;overflow-y:auto;overscroll-behavior:contain;padding-right:4px}
    #topicModeView .tm-more{margin-top:8px;font:inherit;font-size:11.5px;font-weight:600;color:var(--tm-accent);
      background:none;border:0;padding:2px 0;cursor:pointer;border-radius:4px}
    #topicModeView .tm-more:hover{text-decoration:underline}
    #topicModeView .tm-chip{font:inherit;font-size:12px;padding:5px 11px;border-radius:999px;border:1px solid var(--tm-hair);
      background:#fff;color:var(--tm-sec);cursor:pointer;
      transition:color 150ms ease,border-color 150ms ease,background-color 150ms ease,transform 150ms var(--tm-ease)}
    #topicModeView .tm-chip:active{transform:scale(.95)}
    #topicModeView .tm-chip[aria-pressed="true"]{background:var(--tm-accent);border-color:var(--tm-accent);color:#fff;font-weight:600}
    #topicModeView .tm-sub-free{display:flex;gap:8px;margin-top:10px;align-items:center}
    #topicModeView .tm-sub-free input{flex:1;min-width:0;font:inherit;font-size:12.5px;padding:7px 10px;
      border:1px solid #d1d5db;border-radius:8px;background:#fff}
    #topicModeView .tm-note{margin-top:9px;width:100%;font:inherit;font-size:12.5px;padding:8px 10px;
      border:1px solid #d1d5db;border-radius:8px;background:#fff;resize:vertical;line-height:1.5}

    /* buttons */
    #topicModeView .tm-btn{font:inherit;font-weight:700;font-size:12px;padding:7px 14px;border-radius:999px;
      border:1px solid var(--tm-teal);background:var(--tm-teal);color:#fff;cursor:pointer;
      transition:transform 150ms var(--tm-ease),opacity 150ms ease}
    #topicModeView .tm-btn:active{transform:scale(.96)}
    #topicModeView .tm-btn.ghost{background:#fff;color:var(--tm-teal)}
    #topicModeView .tm-btn.danger{background:#fff;color:#dc2626;border-color:#fecaca}
    #topicModeView .tm-btn[disabled]{opacity:.45;cursor:default;transform:none}

    /* visibility gate — this governs what a parent reads, so it states its state */
    #topicModeView .tm-gate{display:flex;align-items:center;gap:11px;padding:11px 14px;border:1px solid var(--tm-hair);
      border-radius:12px;background:#fff}
    #topicModeView .tm-gate.on{border-color:#99f6e4;background:#f0fdfa}
    #topicModeView .tm-switch{position:relative;width:38px;height:22px;flex:0 0 auto}
    #topicModeView .tm-switch input{position:absolute;inset:0;width:100%;height:100%;opacity:0;margin:0;cursor:pointer}
    #topicModeView .tm-switch .tm-track{position:absolute;inset:0;border-radius:999px;background:#d1d5db;
      transition:background-color 180ms var(--tm-ease);pointer-events:none}
    #topicModeView .tm-switch .tm-knob{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;
      background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.25);transition:transform 180ms var(--tm-ease);pointer-events:none}
    #topicModeView .tm-switch input:checked ~ .tm-track{background:var(--tm-teal)}
    #topicModeView .tm-switch input:checked ~ .tm-knob{transform:translateX(16px)}
    #topicModeView .tm-switch input:focus-visible ~ .tm-track{outline:2px solid var(--tm-teal);outline-offset:2px}
    #topicModeView .tm-gate-txt{font-size:12.5px;font-weight:600;line-height:1.35}
    #topicModeView .tm-gate-sub{font-size:11px;color:var(--tm-sec);margin-top:1px}

    /* history */
    #topicModeView .tm-hist{border-top:1px solid var(--tm-hair);padding:14px 18px 18px}
    #topicModeView .tm-hist-row{display:flex;gap:10px;align-items:center;padding:7px 0;border-bottom:1px solid #f3f4f6;font-size:12.5px}
    #topicModeView .tm-hist-row:last-child{border-bottom:0}
    #topicModeView .tm-hist-when{color:var(--tm-sec);white-space:nowrap;font-variant-numeric:tabular-nums;flex:0 0 auto}
    #topicModeView .tm-hist-what{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    #topicModeView .tm-hist-sub{color:var(--tm-accent);font-weight:600}
    #topicModeView .tm-hist-act{margin-left:auto;display:flex;gap:6px;flex:0 0 auto}
    #topicModeView .tm-hist input[type=date]{font:inherit;font-size:11.5px;padding:4px 7px;border:1px solid #d1d5db;border-radius:7px;background:#fff}

    /* states */
    #topicModeView .tm-msg{font-size:13px;color:var(--tm-sec);padding:34px 20px;text-align:center;line-height:1.6}
    #topicModeView .tm-msg b{color:var(--tm-ink)}
    #topicModeView .tm-skel{height:34px;margin:9px 18px;border-radius:9px;
      background:linear-gradient(90deg,#f3f4f6 25%,#e9eaee 37%,#f3f4f6 63%);background-size:400% 100%;
      animation:tmShimmer 1.3s linear infinite}
    @keyframes tmShimmer{from{background-position:100% 0}to{background-position:0 0}}
    #topicModeView :focus-visible{outline:2px solid var(--tm-teal);outline-offset:2px;border-radius:6px}

    /* motion: the spine filling in is the one animation, and it means something */
    #topicModeView .tm-node[data-anim="1"] .tm-bub{animation:tmPop 260ms var(--tm-ease) both}
    @keyframes tmPop{from{transform:scale(.86);opacity:.5}to{transform:scale(1);opacity:1}}

    @media (max-width:900px){
      #topicModeView .tm-grid{grid-template-columns:1fr;height:auto;min-height:0}
      #topicModeView .tm-pane{height:auto;max-height:none}
      #topicModeView .tm-pane.tm-roster{max-height:320px}
      #topicModeView .tm-pane-scroll{overflow-y:visible}
      #topicModeView .tm-pane.tm-roster .tm-pane-scroll{overflow-y:auto}
      #topicModeView .tm-node-body{flex-wrap:wrap;gap:2px 10px}
      #topicModeView .tm-subs{margin-left:0}
    }
    @media (prefers-reduced-motion:reduce){
      #topicModeView *,#topicModeView *::before,#topicModeView *::after{
        animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
    }

  /* ── Did You Know? — daily login takeover (ported from didyouknow-mockup.html) ── */
  #didYouKnow{ --dyk-ink:#111111; --dyk-paper:#ffffff; --dyk-rule:#dcdcdc; --dyk-accent:#e2231a; --dyk-muted:#6b6b6b;
    --dyk-hn:'Helvetica Neue',Helvetica,Arial,sans-serif; --dyk-ease:cubic-bezier(.23,1,.32,1); --dyk-pad:clamp(18px,4.5vw,64px);
    position:fixed; inset:0; z-index:2147483000; display:none; flex-direction:column;
    background:var(--dyk-paper); color:var(--dyk-ink); font-family:var(--dyk-hn);
    -webkit-font-smoothing:antialiased; text-align:left;
    transition:opacity .5s var(--dyk-ease), transform .5s var(--dyk-ease); }
  #didYouKnow.active{ display:flex; }
  #didYouKnow.leaving{ opacity:0; transform:translateY(-10px); pointer-events:none; }
  body.dyk-open{ overflow:hidden; }
  #didYouKnow .dyk-mast{ display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:16px;
    padding:11px var(--dyk-pad); border-bottom:1px solid var(--dyk-ink); flex-shrink:0; }
  #didYouKnow .dyk-wordmark{ display:flex; align-items:center; gap:9px; justify-self:start;
    font-weight:700; font-size:12px; letter-spacing:.18em; text-transform:uppercase; color:var(--dyk-ink); }
  #didYouKnow .dyk-sq{ width:10px; height:10px; background:var(--dyk-accent); display:block; flex:0 0 auto; }
  #didYouKnow .dyk-progress{ display:flex; align-items:center; gap:12px; justify-self:center; }
  #didYouKnow .dyk-ticks{ display:flex; align-items:center; gap:6px; }
  #didYouKnow .dyk-tick{ width:18px; height:5px; flex:0 0 auto; align-self:center; background:var(--dyk-rule); transition:background .3s var(--dyk-ease); }
  #didYouKnow .dyk-tick.done{ background:var(--dyk-ink); }
  #didYouKnow .dyk-tick.active{ background:var(--dyk-accent); }
  #didYouKnow .dyk-index{ font-variant-numeric:tabular-nums; font-weight:500; font-size:12px; letter-spacing:.14em; color:var(--dyk-muted); }
  #didYouKnow .dyk-index b{ color:var(--dyk-ink); font-weight:700; }
  #didYouKnow .dyk-lock{ justify-self:end; display:inline-flex; align-items:center; gap:8px;
    font-size:10.5px; font-weight:700; letter-spacing:.16em; text-transform:uppercase; color:var(--dyk-muted); }
  #didYouKnow .dyk-lock svg{ width:13px; height:13px; }
  #didYouKnow .dyk-scroll{ flex:1; overflow-y:auto; }
  #didYouKnow .dyk-scroll::-webkit-scrollbar{ width:0; }
  #didYouKnow .dyk-stage{ max-width:1240px; margin:0 auto; padding:clamp(20px,4vw,44px) var(--dyk-pad) 30px; }
  #didYouKnow .dyk-kicker{ font-size:11px; font-weight:700; letter-spacing:.2em; text-transform:uppercase; color:var(--dyk-accent); margin-bottom:14px; }
  #didYouKnow .dyk-headline{ font-family:var(--dyk-hn); font-weight:700; letter-spacing:-.022em; line-height:1.05;
    font-size:clamp(2rem,5.2vw,4rem); max-width:24ch; margin:0; color:var(--dyk-ink); text-wrap:balance; }
  #didYouKnow .dyk-rule{ width:64px; height:4px; background:var(--dyk-accent); margin:20px 0 30px; }
  #didYouKnow .dyk-cols{ display:grid; grid-template-columns:minmax(0,5fr) minmax(0,7fr); gap:clamp(22px,4vw,56px); align-items:start; }
  #didYouKnow .dyk-figure{ position:sticky; top:6px; margin:0; }
  #didYouKnow .dyk-frame{ border:1px solid var(--dyk-ink); overflow:hidden; background:#f1f1f1; aspect-ratio:4/5; }
  #didYouKnow .dyk-frame img{ width:100%; height:100%; object-fit:cover; display:block; }
  #didYouKnow .dyk-fallback{ width:100%; height:100%; display:flex; align-items:center; justify-content:center;
    font-weight:700; letter-spacing:.1em; color:#9a9a9a; font-size:14px; text-transform:uppercase; padding:16px; text-align:center; }
  #didYouKnow .dyk-figcap{ display:flex; gap:10px; margin-top:10px; padding-top:9px; border-top:1px solid var(--dyk-rule);
    font-size:10.5px; letter-spacing:.09em; text-transform:uppercase; color:var(--dyk-muted); }
  #didYouKnow .dyk-figcap .dyk-n{ color:var(--dyk-ink); font-weight:700; }
  #didYouKnow .dyk-prose{ max-width:64ch; }
  #didYouKnow .dyk-prose p{ font-size:clamp(1rem,1.35vw,1.15rem); line-height:1.62; color:#222; margin:0 0 15px;
    opacity:0; transform:translateY(8px); animation:dyk-reveal .45s var(--dyk-ease) forwards; }
  #didYouKnow .dyk-prose p:nth-child(1){ animation-delay:.02s } #didYouKnow .dyk-prose p:nth-child(2){ animation-delay:.08s }
  #didYouKnow .dyk-prose p:nth-child(3){ animation-delay:.14s } #didYouKnow .dyk-prose p:nth-child(4){ animation-delay:.2s }
  @keyframes dyk-reveal{ to{ opacity:1; transform:none; } }
  #didYouKnow .dyk-prose p strong{ font-weight:700; color:var(--dyk-ink); }
  #didYouKnow .dyk-prose p em{ font-style:normal; box-shadow:inset 0 -0.5em 0 rgba(226,35,26,.12); }
  #didYouKnow .dyk-check{ margin-top:26px; border:1px solid var(--dyk-ink); }
  #didYouKnow .dyk-check .dyk-hd{ display:flex; align-items:center; justify-content:space-between;
    padding:11px 16px; border-bottom:1px solid var(--dyk-ink); background:var(--dyk-ink); color:#fff; }
  #didYouKnow .dyk-hd .dyk-lbl{ font-size:10.5px; font-weight:700; letter-spacing:.18em; text-transform:uppercase; }
  #didYouKnow .dyk-hd .dyk-st{ font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:#bdbdbd; }
  #didYouKnow .dyk-check .dyk-bd{ padding:18px 16px; }
  #didYouKnow .dyk-check.locked .dyk-bd{ opacity:.4; pointer-events:none; }
  #didYouKnow .dyk-q{ font-size:1.06rem; font-weight:700; line-height:1.35; margin-bottom:14px; color:var(--dyk-ink); }
  #didYouKnow .dyk-opts{ display:grid; gap:0; border:1px solid var(--dyk-rule); }
  #didYouKnow .dyk-opt{ display:flex; align-items:center; gap:14px; text-align:left; padding:14px 15px; border:none;
    border-bottom:1px solid var(--dyk-rule); background:var(--dyk-paper); color:#1a1a1a;
    font-family:var(--dyk-hn); font-size:1rem; font-weight:500; text-transform:none; letter-spacing:normal; cursor:pointer;
    transition:background .15s var(--dyk-ease), color .15s var(--dyk-ease); width:100%; min-height:48px; border-radius:0; }
  #didYouKnow .dyk-opt:last-child{ border-bottom:none; }
  #didYouKnow .dyk-opt .dyk-key{ font-variant-numeric:tabular-nums; font-weight:700; font-size:12px; letter-spacing:.1em;
    color:var(--dyk-muted); border:1px solid var(--dyk-rule); width:24px; height:24px; flex:0 0 auto;
    display:flex; align-items:center; justify-content:center; transition:all .15s var(--dyk-ease); }
  #didYouKnow .dyk-opt:hover{ background:#f6f6f6; }
  #didYouKnow .dyk-opt:focus-visible{ outline:2px solid var(--dyk-accent); outline-offset:-2px; }
  #didYouKnow .dyk-opt.correct{ background:var(--dyk-ink); color:#fff; }
  #didYouKnow .dyk-opt.correct .dyk-key{ background:var(--dyk-accent); color:#fff; border-color:var(--dyk-accent); }
  #didYouKnow .dyk-opt.wrong{ background:#fbe9e8; color:var(--dyk-accent); }
  #didYouKnow .dyk-opt.wrong .dyk-key{ border-color:var(--dyk-accent); color:var(--dyk-accent); }
  #didYouKnow .dyk-opt[disabled]{ cursor:default; }
  #didYouKnow .dyk-msg{ margin-top:12px; font-size:.92rem; font-weight:600; letter-spacing:.01em; min-height:1.1em; }
  #didYouKnow .dyk-msg.bad{ color:var(--dyk-accent); } #didYouKnow .dyk-msg.good{ color:#111; }
  #didYouKnow .dyk-foot{ display:grid; grid-template-columns:1fr auto; align-items:center; gap:20px;
    padding:14px var(--dyk-pad); border-top:1px solid var(--dyk-ink); flex-shrink:0; background:var(--dyk-paper); }
  #didYouKnow .dyk-timer{ max-width:420px; }
  #didYouKnow .dyk-tl{ display:flex; justify-content:space-between; font-size:10.5px; font-weight:700;
    letter-spacing:.14em; text-transform:uppercase; color:var(--dyk-muted); margin-bottom:7px; }
  #didYouKnow .dyk-tl .dyk-now{ color:var(--dyk-ink); }
  #didYouKnow .dyk-bar{ height:3px; background:var(--dyk-rule); overflow:hidden; }
  #didYouKnow .dyk-bar span{ display:block; height:100%; width:0%; background:var(--dyk-accent); transition:width .1s linear; }
  #didYouKnow .dyk-cta{ display:inline-flex; align-items:center; gap:12px; padding:15px 30px; border:none; border-radius:0;
    background:var(--dyk-ink); color:#fff; font-family:var(--dyk-hn); font-size:12px; font-weight:700;
    letter-spacing:.16em; text-transform:uppercase; cursor:pointer; min-height:48px;
    transition:transform .12s var(--dyk-ease), background .2s var(--dyk-ease), opacity .2s var(--dyk-ease); }
  #didYouKnow .dyk-cta:not([disabled]):active{ transform:scale(.97); }
  #didYouKnow .dyk-cta:focus-visible{ outline:2px solid var(--dyk-accent); outline-offset:2px; }
  #didYouKnow .dyk-cta[disabled]{ background:#e6e6e6; color:#a3a3a3; cursor:not-allowed; }
  #didYouKnow .dyk-arw{ width:20px; height:8px; }
  #didYouKnow .dyk-done{ max-width:620px; padding:clamp(30px,7vh,80px) 0; }
  #didYouKnow .dyk-done .dyk-k{ font-size:11px; font-weight:700; letter-spacing:.2em; text-transform:uppercase; color:var(--dyk-accent); margin-bottom:16px; }
  #didYouKnow .dyk-done h2{ font-weight:700; letter-spacing:-.02em; line-height:1.03; font-size:clamp(2rem,5.5vw,3.4rem); max-width:15ch; margin:0; color:var(--dyk-ink); }
  #didYouKnow .dyk-done .dyk-rule{ margin:22px 0; }
  #didYouKnow .dyk-done p{ font-size:1.08rem; line-height:1.6; color:#333; max-width:52ch; margin:0; }
  #didYouKnow .dyk-mark{ width:56px; height:56px; border:2px solid var(--dyk-ink); display:flex; align-items:center; justify-content:center; margin-bottom:24px; }
  #didYouKnow .dyk-mark svg{ width:30px; height:30px; }
  @media (max-width:860px){
    #didYouKnow .dyk-cols{ grid-template-columns:1fr; gap:22px; }
    #didYouKnow .dyk-figure{ position:static; }
    #didYouKnow .dyk-frame{ aspect-ratio:16/10; }
    #didYouKnow .dyk-mast{ grid-template-columns:auto 1fr; }
    #didYouKnow .dyk-lock{ display:none; }
    #didYouKnow .dyk-progress{ justify-self:end; }
    #didYouKnow .dyk-foot{ grid-template-columns:1fr; }
    #didYouKnow .dyk-cta{ justify-content:center; }
  }
  @media (prefers-reduced-motion:reduce){
    #didYouKnow .dyk-prose p{ animation:none; opacity:1; transform:none; }
    #didYouKnow, #didYouKnow .dyk-tick, #didYouKnow .dyk-opt, #didYouKnow .dyk-cta, #didYouKnow .dyk-bar span{ transition:none; }
  }

  /* ══ Quiz Creator ═══════════════════════════════════════════════════════════
     The admin panel's hand-authoring surface (view key `quizedit`).

     Two things shape this stylesheet:

     1. It has to WIN. `button {}` at the top of this file and
        `.container.admin-expanded button {}` both set background/color/border
        unconditionally, so every control here restates them. `!important` appears
        only where those two rules collide — the same convention `.pw-toggle` and
        `.btn-secondary` already use.

     2. Colour is never the only signal. The correct option carries a filled radio,
        a green rule AND the word "Correct"; a coverage gap carries an icon and a
        sentence, not just red. The palette is lifted from surfaces that already
        exist in this panel (genre pills from the quiz viewer, amber from the
        Question Source card, green from the answer key) so the view reads as part
        of the product rather than a guest in it. */
  .qc-root {
    --qc-ink: #111; --qc-ink-2: #555; --qc-ink-3: #8a8a8f;
    --qc-rule: #e3e3e6; --qc-surface: #fff; --qc-surface-2: #f7f7f9;
    --qc-ok: #15803d; --qc-ok-bg: #f0fdf4;
    --qc-warn: #b45309; --qc-warn-bg: #fffbeb;
    --qc-bad: #b91c1c; --qc-bad-bg: #fef2f2;
    --qc-tag: #0369a1; --qc-tag-bg: #e0f2fe;
    --qc-ease: cubic-bezier(0.23, 1, 0.32, 1);
    display: grid; grid-template-columns: minmax(0, 1fr) 300px; gap: 20px;
    align-items: start; color: var(--qc-ink);
    font-variant-numeric: tabular-nums;
  }

  /* ── action bar ─────────────────────────────────────────────────────────── */
  .qc-bar {
    grid-column: 1 / -1; position: sticky; top: 0; z-index: 30;
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
    padding: 12px 0 14px; margin-bottom: 4px;
    background: #f5f5f7; border-bottom: 2px solid #000;
  }
  .qc-bar-id { min-width: 0; flex: 1; }
  .qc-eyebrow {
    display: flex; align-items: center; gap: 8px;
    font-size: 11px; font-weight: 700; letter-spacing: 0.08em;
    text-transform: uppercase; color: var(--qc-ink-3);
  }
  .qc-target {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 2px 8px; border: 1px solid var(--qc-ink); color: var(--qc-ink);
    font-size: 10px; font-weight: 700; letter-spacing: 0.08em;
  }
  .qc-target.saved { border-color: var(--qc-ok); color: var(--qc-ok); background: var(--qc-ok-bg); }
  .qc-target.live { border-color: var(--qc-warn); color: var(--qc-warn); background: var(--qc-warn-bg); }
  .qc-bar-title {
    display: block; margin-top: 3px; font-size: 17px; font-weight: 700; line-height: 1.25;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .qc-bar-sub { font-size: 12px; color: var(--qc-ink-2); margin-top: 2px; }
  .qc-bar-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
  .qc-dot {
    width: 7px; height: 7px; border-radius: 50%; background: var(--qc-warn);
    flex-shrink: 0; transition: opacity 150ms var(--qc-ease);
  }

  /* ── buttons ────────────────────────────────────────────────────────────── */
  .qc-btn, .qc-modal .qc-btn {
    padding: 8px 16px !important; font-size: 12px !important;
    font-weight: 700 !important; letter-spacing: 0.06em !important;
    text-transform: uppercase !important; border-radius: 0 !important;
    font-family: inherit; cursor: pointer; white-space: nowrap;
    background: #fff !important; color: #000 !important;
    border: 1.5px solid #000 !important;
    transition: background 140ms var(--qc-ease, ease), color 140ms var(--qc-ease, ease), transform 110ms var(--qc-ease, ease);
  }
  .qc-btn:hover, .qc-modal .qc-btn:hover { background: #f0f0f2 !important; }
  .qc-btn:active, .qc-modal .qc-btn:active { transform: scale(0.97); }
  .qc-btn.primary, .qc-modal .qc-btn.primary { background: #000 !important; color: #fff !important; }
  .qc-btn.primary:hover, .qc-modal .qc-btn.primary:hover { background: #2b2b2b !important; }
  .qc-btn.go, .qc-modal .qc-btn.go { background: var(--qc-warn, #b45309) !important; color: #fff !important; border-color: var(--qc-warn, #b45309) !important; }
  .qc-btn.go:hover, .qc-modal .qc-btn.go:hover { background: #92400e !important; }
  .qc-btn.ghost, .qc-modal .qc-btn.ghost { border-color: #c9c9cf !important; color: #444 !important; }
  .qc-btn.ghost:hover, .qc-modal .qc-btn.ghost:hover { border-color: #000 !important; color: #000 !important; }
  .qc-btn:disabled, .qc-modal .qc-btn:disabled {
    background: #f2f2f4 !important; color: #a5a5ab !important;
    border-color: #dcdce1 !important; cursor: not-allowed; transform: none;
  }
  .qc-btn:focus-visible, .qc-modal .qc-btn:focus-visible,
  .qc-icon-btn:focus-visible, .qc-addq:focus-visible, .qc-doorway:focus-visible {
    outline: 2px solid #000; outline-offset: 2px;
  }
  /* Label swap on the Save button. The blur bridges the two words so the eye reads
     one control changing state instead of two labels trading places. */
  .qc-btn-label { display: inline-block; transition: filter 180ms ease, opacity 180ms ease; }
  .qc-btn-label.swapping { filter: blur(2.5px); opacity: 0.45; }

  .qc-icon-btn {
    width: 26px; height: 26px; display: inline-flex; align-items: center; justify-content: center;
    padding: 0 !important; background: transparent !important; border: 1px solid transparent !important;
    color: #a0a0a8 !important; cursor: pointer; border-radius: 0 !important; flex-shrink: 0;
    transition: color 140ms var(--qc-ease, ease), border-color 140ms var(--qc-ease, ease), background 140ms var(--qc-ease, ease);
  }
  .qc-icon-btn:hover { color: #000 !important; border-color: var(--qc-rule, #e3e3e6) !important; background: #f2f2f4 !important; }
  .qc-icon-btn.danger:hover { color: var(--qc-bad, #b91c1c) !important; border-color: #f3c8c8 !important; background: var(--qc-bad-bg, #fef2f2) !important; }
  .qc-icon-btn:disabled { opacity: 0.3; cursor: not-allowed; }
  .qc-icon-btn svg { width: 15px; height: 15px; }

  /* ── cards & fields ─────────────────────────────────────────────────────── */
  .qc-card { background: var(--qc-surface); border: 1px solid var(--qc-rule); padding: 18px 20px; margin-bottom: 14px; }
  .qc-label { font-size: 11px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--qc-ink-3); }
  .qc-card > .qc-label { display: block; margin-bottom: 14px; }
  .qc-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px 14px; }
  .qc-field { min-width: 0; display: flex; flex-direction: column; gap: 5px; }
  .qc-field.wide { grid-column: 1 / -1; }
  .qc-field label { font-size: 11px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--qc-ink-2); }
  .qc-field .qc-hint { font-size: 11px; color: var(--qc-ink-3); line-height: 1.45; }
  .qc-input, .qc-select {
    width: 100%; box-sizing: border-box; padding: 8px 10px; min-height: 34px;
    font-family: inherit; font-size: 13px; color: var(--qc-ink);
    background: #fff; border: 1px solid #cfcfd6; border-radius: 0;
    transition: border-color 140ms var(--qc-ease), box-shadow 140ms var(--qc-ease);
  }
  .qc-select { cursor: pointer; }
  .qc-input:hover, .qc-select:hover { border-color: #9d9da6; }
  .qc-input:focus, .qc-select:focus { outline: none; border-color: #000; box-shadow: inset 0 -2px 0 #000; }
  .qc-input::placeholder { color: #b4b4bb; }

  /* ── question cards ─────────────────────────────────────────────────────── */
  .qc-qlist { display: block; }
  .qc-q {
    position: relative; background: var(--qc-surface); border: 1px solid var(--qc-rule);
    padding: 16px 18px 14px; margin-bottom: 12px;
    transition: border-color 160ms var(--qc-ease), box-shadow 160ms var(--qc-ease);
  }
  /* inset, so gaining focus never nudges the layout */
  .qc-q:focus-within { border-color: #b9b9c1; box-shadow: inset 3px 0 0 #000; }
  .qc-q.qc-flag { border-color: #f0cfa0; box-shadow: inset 3px 0 0 var(--qc-warn); }
  .qc-q.qc-enter { animation: qcEnter 200ms var(--qc-ease) both; }
  @keyframes qcEnter { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
  .qc-q-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
  .qc-q-num { font-size: 11px; font-weight: 700; letter-spacing: 0.08em; color: var(--qc-ink-3); flex-shrink: 0; }
  .qc-q-head .qc-select { width: auto; max-width: 190px; margin-left: auto; font-size: 12px; min-height: 30px; padding: 4px 8px; }
  .qc-q-tools { display: flex; align-items: center; gap: 2px; flex-shrink: 0; }
  .qc-qtext {
    width: 100%; box-sizing: border-box; padding: 4px 0 8px; margin-bottom: 12px;
    font-family: inherit; font-size: 15px; line-height: 1.5; color: var(--qc-ink);
    background: transparent; border: none; border-bottom: 1.5px solid var(--qc-rule);
    resize: vertical; min-height: 46px;
    transition: border-color 140ms var(--qc-ease);
  }
  .qc-qtext:focus { outline: none; border-bottom-color: #000; }
  .qc-qtext::placeholder { color: #b4b4bb; }

  .qc-opt {
    display: flex; align-items: center; gap: 10px; padding: 5px 8px 5px 6px; margin-bottom: 5px;
    border-left: 3px solid transparent; background: transparent;
    transition: background 140ms var(--qc-ease), border-color 140ms var(--qc-ease);
  }
  .qc-opt.correct { background: var(--qc-ok-bg); border-left-color: var(--qc-ok); }
  .qc-opt input[type="radio"] { width: 15px; height: 15px; accent-color: var(--qc-ok); cursor: pointer; flex-shrink: 0; margin: 0; }
  .qc-opt input[type="radio"]:focus-visible { outline: 2px solid #000; outline-offset: 2px; }
  .qc-opt-key { font-size: 11px; font-weight: 700; color: var(--qc-ink-3); width: 12px; flex-shrink: 0; }
  .qc-opt.correct .qc-opt-key { color: var(--qc-ok); }
  .qc-opt-input {
    flex: 1; min-width: 0; padding: 6px 8px; font-family: inherit; font-size: 14px; color: var(--qc-ink);
    background: #fff; border: 1px solid #e1e1e6; border-radius: 0;
    transition: border-color 140ms var(--qc-ease);
  }
  .qc-opt-input:hover { border-color: #bfbfc7; }
  .qc-opt-input:focus { outline: none; border-color: #000; }
  .qc-opt-input::placeholder { color: #bcbcc3; }
  /* the word, not just the colour */
  .qc-opt-mark {
    font-size: 10px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
    color: var(--qc-ok); flex-shrink: 0; width: 54px; text-align: right;
  }
  .qc-q-foot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; padding-top: 10px; border-top: 1px solid #f2f2f4; }
  .qc-linkbtn {
    padding: 2px 0 !important; background: none !important; border: none !important;
    color: var(--qc-ink-2) !important; font-family: inherit; font-size: 12px !important;
    font-weight: 600 !important; letter-spacing: 0 !important; text-transform: none !important;
    cursor: pointer; border-radius: 0 !important;
  }
  .qc-linkbtn:hover { color: #000 !important; background: none !important; text-decoration: underline; }
  .qc-linkbtn:focus-visible { outline: 2px solid #000; outline-offset: 2px; }
  .qc-q-flagline { font-size: 11px; color: var(--qc-warn); font-weight: 600; }

  .qc-addq {
    width: 100%; padding: 13px !important; margin-bottom: 18px;
    background: transparent !important; color: #7a7a82 !important;
    border: 1.5px dashed #c4c4cc !important; border-radius: 0 !important;
    font-family: inherit; font-size: 12px !important; font-weight: 700 !important;
    letter-spacing: 0.06em !important; text-transform: uppercase !important; cursor: pointer;
    transition: border-color 150ms var(--qc-ease), color 150ms var(--qc-ease);
  }
  .qc-addq:hover { border-color: #000 !important; color: #000 !important; background: transparent !important; }

  /* ── delivery rail — the point of the view ──────────────────────────────── */
  .qc-rail { position: sticky; top: 96px; display: flex; flex-direction: column; gap: 12px; }
  .qc-rail-card { background: var(--qc-surface); border: 1px solid var(--qc-rule); padding: 14px 15px; }
  .qc-rail-card.accent { border: 2px solid #000; }
  .qc-rail-card > .qc-label { display: block; margin-bottom: 10px; }
  .qc-meter { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; font-size: 12px; }
  .qc-meter-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--qc-ink); }
  .qc-meter-n { font-weight: 700; font-size: 12px; flex-shrink: 0; }
  .qc-meter-track { height: 4px; background: #ececf0; flex-shrink: 0; width: 62px; }
  .qc-meter-fill { display: block; height: 100%; background: var(--qc-tag); transition: width 240ms var(--qc-ease); }
  .qc-meter.bad .qc-meter-fill { background: var(--qc-warn); }
  .qc-meter.bad .qc-meter-name, .qc-meter.bad .qc-meter-n { color: var(--qc-warn); font-weight: 700; }

  .qc-group { display: flex; align-items: baseline; gap: 7px; font-size: 12px; padding: 3px 0; line-height: 1.4; }
  .qc-group-mark { font-weight: 700; flex-shrink: 0; width: 11px; }
  .qc-group.ok .qc-group-mark { color: var(--qc-ok); }
  .qc-group.bad .qc-group-mark { color: var(--qc-bad); }
  .qc-group.bad .qc-group-name { color: var(--qc-bad); font-weight: 700; }
  .qc-group-n { color: var(--qc-ink-3); font-size: 11px; }

  .qc-note { font-size: 11.5px; line-height: 1.5; padding: 8px 10px; border-left: 3px solid; margin-top: 10px; }
  .qc-note.warn { color: var(--qc-warn); border-color: var(--qc-warn); background: var(--qc-warn-bg); }
  .qc-note.bad { color: var(--qc-bad); border-color: var(--qc-bad); background: var(--qc-bad-bg); }
  .qc-note.ok { color: var(--qc-ok); border-color: var(--qc-ok); background: var(--qc-ok-bg); }
  .qc-note.plain { color: var(--qc-ink-2); border-color: var(--qc-rule); background: var(--qc-surface-2); }
  .qc-note b { color: inherit; }

  .qc-chip {
    display: inline-block; padding: 2px 8px; margin: 0 4px 4px 0;
    background: var(--qc-tag-bg); color: var(--qc-tag);
    font-size: 10px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase;
  }

  /* ── empty state ────────────────────────────────────────────────────────── */
  .qc-empty { grid-column: 1 / -1; max-width: 640px; padding: 8px 0 40px; }
  .qc-empty h3 { font-size: 21px; font-weight: 700; margin: 0 0 6px; }
  .qc-empty p { font-size: 13px; color: var(--qc-ink-2); line-height: 1.6; margin: 0 0 22px; max-width: 62ch; }
  .qc-doorway {
    display: flex; align-items: flex-start; gap: 13px; width: 100%; text-align: left;
    padding: 15px 16px !important; margin-bottom: 10px; cursor: pointer;
    background: #fff !important; color: var(--qc-ink) !important;
    border: 1px solid var(--qc-rule) !important; border-radius: 0 !important;
    font-family: inherit; text-transform: none !important; letter-spacing: 0 !important;
    transition: border-color 150ms var(--qc-ease), transform 110ms var(--qc-ease);
  }
  .qc-doorway:hover { border-color: #000 !important; background: #fff !important; }
  .qc-doorway:active { transform: scale(0.995); }
  .qc-doorway-ico { flex-shrink: 0; color: var(--qc-ink-3); margin-top: 1px; }
  .qc-doorway-ico svg { width: 17px; height: 17px; }
  .qc-doorway:hover .qc-doorway-ico { color: #000; }
  .qc-doorway b { display: block; font-size: 13.5px; font-weight: 700; margin-bottom: 2px; }
  .qc-doorway span { display: block; font-size: 12px; font-weight: 400; color: var(--qc-ink-2); line-height: 1.5; }

  /* ── modal (deploy / library picker) ────────────────────────────────────── */
  .qc-modal {
    position: fixed; inset: 0; z-index: 1200; display: flex; align-items: center; justify-content: center;
    padding: 20px; background: rgba(0,0,0,0.5);
    --qc-ok: #15803d; --qc-ok-bg: #f0fdf4; --qc-warn: #b45309; --qc-warn-bg: #fffbeb;
    --qc-bad: #b91c1c; --qc-bad-bg: #fef2f2; --qc-tag: #0369a1; --qc-tag-bg: #e0f2fe;
    --qc-ink: #111; --qc-ink-2: #555; --qc-ink-3: #8a8a8f; --qc-rule: #e3e3e6; --qc-surface-2: #f7f7f9;
    --qc-ease: cubic-bezier(0.23, 1, 0.32, 1);
    animation: qcFade 140ms ease both;
  }
  @keyframes qcFade { from { opacity: 0; } to { opacity: 1; } }
  .qc-modal-box {
    background: #fff; width: min(560px, 100%); max-height: 86vh; overflow-y: auto;
    border: 2px solid #000; padding: 24px 26px; color: var(--qc-ink);
    font-variant-numeric: tabular-nums;
    /* centred, so it scales from centre — it is not anchored to a trigger */
    animation: qcPop 190ms var(--qc-ease) both;
  }
  @keyframes qcPop { from { opacity: 0; transform: scale(0.97) translateY(6px); } to { opacity: 1; transform: none; } }
  .qc-modal-box h3 { font-size: 18px; font-weight: 700; margin: 0 0 4px; }
  .qc-modal-box p { font-size: 13px; color: var(--qc-ink-2); line-height: 1.6; margin: 0 0 14px; }
  .qc-modal-foot { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; margin-top: 20px; }
  .qc-modal-foot .qc-spacer { flex: 1; }
  .qc-check { display: flex; align-items: flex-start; gap: 9px; padding: 11px 12px; background: var(--qc-surface-2); border: 1px solid var(--qc-rule); margin-top: 12px; cursor: pointer; }
  .qc-check input { width: 15px; height: 15px; margin: 1px 0 0; accent-color: #000; cursor: pointer; flex-shrink: 0; }
  .qc-check b { display: block; font-size: 12.5px; font-weight: 700; }
  .qc-check span { display: block; font-size: 11.5px; color: var(--qc-ink-2); line-height: 1.5; margin-top: 2px; }
  .qc-pick {
    display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; cursor: pointer;
    padding: 10px 12px !important; margin-bottom: 6px;
    background: #fff !important; color: var(--qc-ink) !important;
    border: 1px solid var(--qc-rule) !important; border-radius: 0 !important;
    font-family: inherit; text-transform: none !important; letter-spacing: 0 !important;
    transition: border-color 140ms var(--qc-ease);
  }
  .qc-pick:hover { border-color: #000 !important; background: #fff !important; }
  .qc-pick.is-active { border-color: var(--qc-warn) !important; background: var(--qc-warn-bg) !important; }
  .qc-pick b { display: block; font-size: 13px; font-weight: 700; }
  .qc-pick span { display: block; font-size: 11.5px; color: var(--qc-ink-3); margin-top: 1px; }
  .qc-pick-tag { margin-left: auto; flex-shrink: 0; font-size: 10px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--qc-warn); }

  .qc-kbd {
    display: inline-block; padding: 1px 5px; border: 1px solid #d3d3da; background: #fafafb;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10.5px; color: #444;
  }

  /* ── responsive ─────────────────────────────────────────────────────────── */
  @media (max-width: 1080px) {
    .qc-root { grid-template-columns: minmax(0, 1fr); }
    .qc-rail { position: static; order: -1; }
  }
  @media (max-width: 640px) {
    .qc-bar { position: static; padding-top: 4px; }
    .qc-bar-id { flex: 1 1 100%; }
    .qc-bar-actions { flex: 1 1 100%; }
    .qc-bar-actions .qc-btn { flex: 1; text-align: center; padding: 11px 12px !important; }
    .qc-q-head { flex-wrap: wrap; }
    .qc-q-head .qc-select { margin-left: 0; max-width: none; flex: 1 1 100%; min-height: 38px; }
    .qc-q-tools { margin-left: auto; }
    .qc-icon-btn { width: 34px; height: 34px; }
    .qc-opt-mark { width: auto; }
    .qc-input, .qc-select, .qc-opt-input { min-height: 40px; font-size: 16px; }
  }

  @media (prefers-reduced-motion: reduce) {
    .qc-root *, .qc-modal, .qc-modal * {
      transition-duration: 1ms !important;
      animation-duration: 1ms !important;
      animation-iteration-count: 1 !important;
    }
    .qc-btn:active, .qc-modal .qc-btn:active, .qc-doorway:active { transform: none; }
    .qc-btn-label.swapping { filter: none; }
  }

  /* ══ Code inside questions ══════════════════════════════════════════════════
     `pre.qcode` is what renderFencedText() emits for a ``` block, in the student
     quiz, the review page, the admin question viewer and the creator's preview —
     four different ancestors, three of which already have their own `… pre` rule
     at (0,1,2) specificity. Rather than chase each one, the properties that
     actually carry the meaning (block layout, preserved whitespace, tab width,
     monospace) are !important here, the same convention `.btn-secondary` and
     `.pw-toggle` already use in this file. Everything else is left overridable.

     white-space:pre — NOT pre-wrap. A wrapped line of Python reads as a different
     indent level, which is the exact failure this whole feature exists to prevent;
     long lines scroll instead. */
  pre.qcode {
    display: block !important;
    white-space: pre !important;
    tab-size: 4; -moz-tab-size: 4;
    overflow-x: auto;
    text-align: left;
    background: #f6f6f6;
    border: 1px solid #e0e0e0;
    border-left: 3px solid #b0b0b8;
    padding: 11px 14px;
    margin: 10px 0 6px;
    font-family: 'SF Mono', 'Consolas', 'Monaco', ui-monospace, monospace !important;
    font-size: 13px !important;
    line-height: 1.55;
    color: #1a1a1a;
    font-weight: 400;
  }
  pre.qcode code {
    font: inherit; background: none; padding: 0; border: none;
    white-space: inherit; color: inherit; display: block;
  }
  /* The fence's language, when the author gave one. A label, not decoration —
     it tells a student reading a mixed paper which language they are looking at. */
  pre.qcode[data-lang]::before {
    content: attr(data-lang);
    display: block;
    margin: -2px 0 7px;
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
    font-size: 9.5px; font-weight: 700; letter-spacing: 0.09em;
    text-transform: uppercase; color: #8a8a8f;
  }

  /* ══ Quiz Creator — code-capable fields ═════════════════════════════════════ */
  /* Monospace throughout the authoring fields: it is the only way indentation is
     visible while you type, and a quiz here is code more often than not. */
  .qc-qtext, .qc-opt-input {
    font-family: 'SF Mono', 'Consolas', 'Monaco', ui-monospace, monospace;
    tab-size: 4; -moz-tab-size: 4;
    white-space: pre-wrap;
  }
  .qc-qtext { min-height: 76px; font-size: 14px; line-height: 1.6; }
  /* Options are textareas now (an <input> cannot hold a newline at all), sized to
     their content so a snippet is reviewable without scrolling inside the row. */
  .qc-opt-input {
    resize: vertical; overflow: hidden; min-height: 30px;
    line-height: 1.55; font-size: 13px; box-sizing: border-box;
  }
  .qc-opt { align-items: flex-start; }
  .qc-opt input[type="radio"] { margin-top: 7px; }
  .qc-opt-key, .qc-opt-mark { margin-top: 7px; }
  .qc-opt .qc-icon-btn { margin-top: 3px; }

  .qc-q-meta { display: flex; justify-content: flex-end; margin: -6px 0 10px; }
  .qc-count {
    font-size: 10.5px; letter-spacing: 0.04em; color: #b0b0b8;
    font-variant-numeric: tabular-nums;
  }
  .qc-count.near { color: var(--qc-warn, #b45309); }
  .qc-count.over { color: var(--qc-bad, #b91c1c); font-weight: 700; }

  .qc-keyhelp {
    font-size: 11.5px; line-height: 1.9; color: #6f6f78;
    margin: 0 0 18px; max-width: 68ch;
  }
  .qc-keyhelp b { color: #333; }

  /* Preview — rendered by the same formatQuestionText/formatOptionText the student
     page calls, so what is shown here is the real output, not an approximation. */
  .qc-preview {
    margin-top: 12px; padding: 14px 16px;
    background: var(--qc-surface-2, #f7f7f9);
    border: 1px dashed #cfcfd6;
  }
  .qc-preview[hidden] { display: none; }
  .qc-preview-q { font-size: 14px; line-height: 1.6; color: #111; margin-bottom: 10px; }
  .qc-preview-opt {
    display: flex; gap: 9px; align-items: flex-start;
    padding: 5px 8px; margin-bottom: 4px; font-size: 13px; line-height: 1.55;
    border-left: 3px solid transparent;
  }
  .qc-preview-opt.correct { background: var(--qc-ok-bg, #f0fdf4); border-left-color: var(--qc-ok, #15803d); }
  .qc-preview-key { font-weight: 700; font-size: 11px; color: #8a8a8f; flex-shrink: 0; margin-top: 2px; }
  .qc-preview-opt.correct .qc-preview-key { color: var(--qc-ok, #15803d); }
  .qc-preview pre.qcode { margin: 6px 0; background: #fff; }

  /* The unfenced-indent warning carries its own fix, so it is a row, not a
     paragraph: the sentence explains, the button resolves. */
  .qc-note.qc-fixline {
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
    justify-content: space-between;
  }
  .qc-note.qc-fixline > span { flex: 1; min-width: 200px; }
  .qc-btn.sm, .qc-modal .qc-btn.sm {
    padding: 5px 11px !important; font-size: 10.5px !important; flex-shrink: 0;
  }
  .qc-note.qc-fixline .qc-btn.ghost {
    border-color: var(--qc-warn, #b45309) !important;
    color: var(--qc-warn, #b45309) !important;
    background: #fff !important;
  }
  .qc-note.qc-fixline .qc-btn.ghost:hover {
    background: var(--qc-warn, #b45309) !important; color: #fff !important;
  }

  /* ── containing the horizontal scroll ──────────────────────────────────────
     `white-space: pre` is deliberate (a wrapped line of Python reads as a
     different indent level), but it makes the code box un-shrinkable, and grid
     and flex items default to `min-width: auto` — they refuse to shrink below
     their min-content width. Without these, a long line of code pushes the whole
     PAGE sideways instead of scrolling inside its own box, which is the opposite
     of what the `overflow-x: auto` was for. Measured at 390px: the block scrolls,
     the document does not. */
  .qc-root > .qc-main, .qc-root > .qc-rail { min-width: 0; }
  .qc-preview-opt > span:last-child { min-width: 0; }
  .qc-note.qc-fixline > span { min-width: 0; }
  /* Belt to those braces: caps the block at its containing block's width no
     matter which layout mode an ancestor happens to use. */
  pre.qcode { max-width: 100%; }
