
    /* ========== CSS VARIABLES ========== */
    :root {
      color-scheme: light;
      --bg: #f5f5f5;
      --card: #ffffff;
      --text-1: #1a1a1a;
      --text-2: #666666;
      --accent: #2563eb;
      --accent-muted: rgba(37,99,235,0.08);
      --correct: #16a34a;
      --correct-bg: #dcfce7;
      --wrong: #dc2626;
      --wrong-bg: #fee2e2;
      --border: #e5e5e5;
      --menu-bg: #ffffff;
      --pill-bg: #f0f0f0;
      --pill-active-bg: #1a1a1a;
      --pill-active-text: #ffffff;
      --chip-bg: #f0f0f0;
      --chip-active-bg: #1a1a1a;
      --chip-active-text: #ffffff;
      --divider: #e5e5e5;
      --font-ui: 'DM Sans', system-ui, -apple-system, sans-serif;
      --font-hz: 'Noto Sans SC', 'PingFang SC', 'Microsoft YaHei', 'SimHei', sans-serif;
    }
    html.dark {
      color-scheme: dark;
      --bg: #0f0f0f;
      --card: #1a1a1a;
      --text-1: #e8e8e8;
      --text-2: #888888;
      --accent: #4a90d9;
      --accent-muted: rgba(74,144,217,0.15);
      --correct: #34d058;
      --correct-bg: rgba(52,208,88,0.12);
      --wrong: #f85149;
      --wrong-bg: rgba(248,81,73,0.12);
      --border: #2a2a2a;
      --menu-bg: #1a1a1a;
      --pill-bg: #222222;
      --pill-active-bg: #4a90d9;
      --pill-active-text: #ffffff;
      --chip-bg: #222222;
      --chip-active-bg: #4a90d9;
      --chip-active-text: #ffffff;
      --divider: #2a2a2a;
    }

    /* ========== RESET ========== */
    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
    html, body { height: 100%; overflow: hidden; }
    body {
      font-family: var(--font-ui);
      background: var(--bg);
      color: var(--text-1);
      display: flex;
      flex-direction: column;
      -webkit-font-smoothing: antialiased;
      transition: background-color 0.2s, color 0.2s;
    }
    ::selection { background: var(--accent); color: #fff; }
    button { font-family: var(--font-ui); }
    input, textarea, select { font-family: var(--font-ui); }

    /* ========== HEADER ========== */
    .header {
      height: 48px; display: flex; align-items: center; justify-content: space-between;
      padding: 0 8px; border-bottom: 1px solid var(--border); flex-shrink: 0; z-index: 10;
      background: var(--bg); transition: background-color 0.2s, border-color 0.2s;
    }
    .header-actions { display: flex; align-items: center; gap: 2px; }
    .header-btn {
      width: 40px; height: 40px; display: flex; align-items: center; justify-content: center;
      background: none; border: none; color: var(--text-1); font-size: 20px; cursor: pointer;
      border-radius: 10px; transition: background 0.15s; -webkit-tap-highlight-color: transparent;
      line-height: 1;
    }
    .header-btn:hover { background: var(--border); }
    .header-title {
      font-size: 15px; font-weight: 600; letter-spacing: -0.01em; white-space: nowrap;
      overflow: hidden; text-overflow: ellipsis; max-width: 200px; text-align: center;
    }
    @media (min-width: 480px) { .header-title { max-width: none; } }

    /* ========== VIEW PRESET BAR ========== */
    .preset-bar {
      display: flex; gap: 6px; padding: 10px 16px; overflow-x: auto; flex-shrink: 0;
      border-bottom: 1px solid var(--border); background: var(--bg);
      scrollbar-width: none; -ms-overflow-style: none;
      transition: background-color 0.2s, border-color 0.2s;
    }
    .preset-bar::-webkit-scrollbar { display: none; }
    .preset-pill {
      flex-shrink: 0; padding: 6px 14px; border: 1px solid var(--border); border-radius: 20px;
      background: var(--pill-bg); color: var(--text-2); font-size: 13px; font-weight: 500;
      cursor: pointer; transition: all 0.15s; white-space: nowrap; -webkit-tap-highlight-color: transparent;
    }
    .preset-pill:hover { border-color: var(--accent); color: var(--text-1); }
    .preset-pill.active {
      background: var(--pill-active-bg); color: var(--pill-active-text); border-color: var(--pill-active-bg);
    }
    .swap-pill { font-size: 16px; }
    .preset-info {
      padding: 6px 16px 8px; font-size: 12.5px; color: var(--text-2);
      border-bottom: 1px solid var(--border); background: var(--bg);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      transition: background-color 0.2s, border-color 0.2s;
    }
    .preset-info b { color: var(--text-1); font-weight: 400; font-family: var(--font-hz); }
    .preset-info-sep { color: var(--text-2); opacity: 0.5; margin: 0 4px; }
    .up-item {
      display: flex; align-items: center; justify-content: space-between; gap: 8px;
      padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; margin-bottom: 8px;
    }
    .up-info b { font-size: 13.5px; color: var(--text-1); }
    .up-desc { font-size: 12px; color: var(--text-2); font-family: var(--font-hz); }
    .up-actions { display: flex; gap: 6px; flex-shrink: 0; }
    .up-btn {
      padding: 5px 10px; font-size: 12px; border: 1px solid var(--border); border-radius: 8px;
      background: var(--pill-bg); color: var(--text-1); cursor: pointer;
    }
    .up-btn:hover { border-color: var(--accent); }
    .up-btn.up-del { color: var(--wrong); }
    .up-btn.up-del:hover { background: var(--wrong-bg); border-color: transparent; }
    .up-empty { font-size: 12.5px; color: var(--text-2); }

    /* ========== SIDE MENU ========== */
    .menu-backdrop {
      position: fixed; inset: 0; background: rgba(0,0,0,0.3); z-index: 90;
      opacity: 0; pointer-events: none; transition: opacity 0.2s;
    }
    .menu-backdrop.open { opacity: 1; pointer-events: auto; }
    .side-menu {
      position: fixed; top: 0; left: 0; bottom: 0; width: 300px; max-width: 85vw;
      background: var(--menu-bg); border-right: 1px solid var(--border); z-index: 100;
      transform: translateX(-100%); transition: transform 0.22s ease, background-color 0.2s, border-color 0.2s;
      display: flex; flex-direction: column; overflow-y: auto; overscroll-behavior: contain;
    }
    .side-menu.open { transform: translateX(0); }
    .menu-header {
      height: 48px; display: flex; align-items: center; justify-content: space-between;
      padding: 0 16px; border-bottom: 1px solid var(--border); flex-shrink: 0;
    }
    .menu-title { font-size: 15px; font-weight: 600; }
    .menu-close {
      width: 32px; height: 32px; display: flex; align-items: center; justify-content: center;
      background: none; border: none; color: var(--text-2); font-size: 18px; cursor: pointer;
      border-radius: 8px; transition: background 0.15s;
    }
    .menu-close:hover { background: var(--border); }
    .menu-body { padding: 16px; flex: 1; overflow-y: auto; }
    .menu-section { margin-bottom: 20px; }
    .menu-label {
      font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em;
      color: var(--text-2); margin-bottom: 8px; display: block;
    }
    .menu-select {
      width: 100%; padding: 9px 32px 9px 12px; border: 1px solid var(--border); border-radius: 8px;
      background: var(--bg); color: var(--text-1); font-size: 14px; font-family: var(--font-ui);
      cursor: pointer; transition: border-color 0.15s; -webkit-appearance: none; appearance: none;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23999' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M2 4l4 4 4-4'/%3E%3C/svg%3E");
      background-repeat: no-repeat; background-position: right 12px center;
    }
    .menu-select:focus { outline: none; border-color: var(--accent); }

    /* Chapter chips */
    .chapter-grid {
      display: flex; flex-wrap: wrap; gap: 6px;
    }
    .chapter-chip {
      padding: 6px 12px; border-radius: 6px; font-size: 13px; font-weight: 500;
      background: var(--chip-bg); color: var(--text-2); border: 1px solid transparent;
      cursor: pointer; transition: all 0.15s; -webkit-tap-highlight-color: transparent;
      display: flex; align-items: center; gap: 4px; user-select: none;
    }
    .chapter-chip:hover { border-color: var(--accent); }
    .chapter-chip.active {
      background: var(--chip-active-bg); color: var(--chip-active-text); border-color: transparent;
    }
    .chapter-chip .ch-count {
      font-size: 11px; opacity: 0.6; font-weight: 400;
    }
    .chapter-all-btn {
      padding: 6px 12px; border-radius: 6px; font-size: 13px; font-weight: 600;
      background: var(--accent-muted); color: var(--accent); border: 1px solid transparent;
      cursor: pointer; transition: all 0.15s; -webkit-tap-highlight-color: transparent;
      margin-bottom: 8px; display: inline-block;
    }
    .chapter-all-btn:hover { opacity: 0.85; }

    /* Menu dividers & buttons */
    .menu-divider { border: none; border-top: 1px solid var(--border); margin: 16px 0; }
    .menu-btn {
      width: 100%; padding: 10px 12px; border: 1px solid var(--border); border-radius: 8px;
      background: var(--bg); color: var(--text-1); font-size: 14px; font-family: var(--font-ui);
      cursor: pointer; text-align: left; margin-bottom: 8px; transition: background 0.15s;
      -webkit-tap-highlight-color: transparent;
    }
    .menu-btn:hover { background: var(--border); }
    .menu-btn-primary { background: var(--accent); color: #fff; border-color: var(--accent); text-align: center; font-weight: 500; }
    .menu-btn-primary:hover { opacity: 0.9; background: var(--accent); }
    .menu-btn-danger { color: var(--wrong); border-color: transparent; }
    .menu-btn-danger:hover { background: var(--wrong-bg); border-color: transparent; }

    /* Toggle button group */
    .toggle-group { display: flex; gap: 6px; flex-wrap: wrap; }
    .toggle-btn {
      flex: 1; min-width: 0; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px;
      background: var(--bg); color: var(--text-2); font-size: 13px; font-weight: 500;
      font-family: var(--font-ui); cursor: pointer; text-align: center;
      transition: all 0.15s; -webkit-tap-highlight-color: transparent;
    }
    .toggle-btn:hover { border-color: var(--accent); color: var(--text-1); }
    .toggle-btn.active {
      background: var(--accent); color: #fff; border-color: var(--accent);
    }

    /* ========== MAIN ========== */
    .main { flex: 1; display: flex; flex-direction: column; align-items: center; overflow: hidden; min-height: 0; }
    .card-wrapper { flex: 1; display: flex; align-items: center; justify-content: center; width: 100%; padding: 12px 16px; min-height: 0; }

    /* ========== FLASHCARD ========== */
    .flashcard {
      width: 100%; max-width: 500px; min-height: 240px; border: 1px solid var(--border);
      border-radius: 16px; background: var(--card); display: flex; flex-direction: column;
      align-items: center; justify-content: center; padding: 32px 24px;
      transition: background-color 0.2s, border-color 0.2s, opacity 0.15s; position: relative;
      user-select: text; -webkit-tap-highlight-color: transparent;
    }
    .flashcard.fade-out { opacity: 0; }
    .card-hanzi {
      font-family: var(--font-hz); font-size: 64px; font-weight: 400; color: var(--text-1);
      line-height: 1.2; text-align: center;
    }
    .card-pinyin {
      font-size: 22px; color: var(--text-2); margin-top: 6px; text-align: center;
      letter-spacing: 0.01em;
    }
    .card-pos {
      font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.08em;
      color: var(--text-2); margin-top: 8px; opacity: 0.6; text-align: center;
    }
    .card-divider {
      width: 60px; height: 1px; background: var(--divider); margin: 20px 0; flex-shrink: 0;
    }
    .card-back { opacity: 0; transition: opacity 0.2s; text-align: center; width: 100%; }
    .card-back.revealed { opacity: 1; }
    .card-meaning {
      font-size: 24px; font-weight: 600; color: var(--accent); text-align: center; line-height: 1.4;
    }
    .state-msg { text-align: center; padding: 20px; }
    .state-emoji { font-size: 48px; margin-bottom: 12px; line-height: 1; }
    .state-title { font-size: 22px; font-weight: 600; margin-bottom: 8px; }
    .state-sub { font-size: 14px; color: var(--text-2); line-height: 1.5; }
    .state-accent { color: var(--correct); }

    /* ========== ACTIONS ========== */
    .actions { width: 100%; max-width: 500px; padding: 4px 16px 0; flex-shrink: 0; }
    .btn {
      width: 100%; height: 50px; border: none; border-radius: 12px; font-size: 16px; font-weight: 500;
      font-family: var(--font-ui); cursor: pointer; display: flex; align-items: center; justify-content: center;
      gap: 6px; transition: background 0.15s, opacity 0.15s; -webkit-tap-highlight-color: transparent;
    }
    .btn:active { opacity: 0.8; }
    .btn-reveal { background: var(--border); color: var(--text-1); }
    .btn-reveal:hover { background: var(--text-2); color: var(--card); }
    .btn-group { display: flex; gap: 8px; }
    .btn-group .btn { flex: 1; }
    .btn-wrong { background: var(--wrong-bg); color: var(--wrong); font-weight: 600; }
    .btn-correct { background: var(--correct-bg); color: var(--correct); font-weight: 600; }

    /* ========== STATS ========== */
    .stats-bar {
      width: 100%; max-width: 500px; padding: 8px 16px 14px; text-align: center; font-size: 13px;
      color: var(--text-2); flex-shrink: 0;
    }

    /* ========== DIALOG ========== */
    dialog {
      border: none; border-radius: 16px; padding: 24px; max-width: 440px; width: 92%;
      background: var(--card); color: var(--text-1);
      box-shadow: 0 4px 24px rgba(0,0,0,0.12);
    }
    dialog::backdrop { background: rgba(0,0,0,0.45); }
    .dialog-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
    .dialog-header h3 { font-size: 17px; font-weight: 600; }
    .dialog-close {
      width: 32px; height: 32px; display: flex; align-items: center; justify-content: center;
      background: none; border: none; color: var(--text-2); font-size: 20px; cursor: pointer;
      border-radius: 8px; transition: background 0.15s;
    }
    .dialog-close:hover { background: var(--border); }
    .upload-zone {
      border: 2px dashed var(--border); border-radius: 12px; padding: 28px 16px; text-align: center;
      cursor: pointer; transition: background 0.15s, border-color 0.15s, color 0.15s;
      color: var(--text-2); font-size: 14px; display: flex; flex-direction: column; align-items: center;
      gap: 8px; margin-bottom: 16px;
    }
    .upload-zone:hover, .upload-zone.drag-over { background: var(--accent-muted); border-color: var(--accent); color: var(--accent); }
    .upload-icon { width: 36px; height: 36px; opacity: 0.5; }
    .upload-zone:hover .upload-icon, .upload-zone.drag-over .upload-icon { opacity: 1; }
    .dialog-sep { text-align: center; font-size: 12px; color: var(--text-2); margin-bottom: 16px; opacity: 0.6; }
    .dialog-input {
      width: 100%; padding: 10px 14px; border: 1px solid var(--border); border-radius: 10px;
      background: var(--bg); color: var(--text-1); font-size: 14px; font-family: var(--font-ui);
      margin-bottom: 12px; transition: border-color 0.15s;
    }
    .dialog-input:focus { outline: none; border-color: var(--accent); }
    .dialog-textarea {
      width: 100%; height: 120px; padding: 10px 14px; border: 1px solid var(--border);
      border-radius: 10px; background: var(--bg); color: var(--text-1); font-size: 12px;
      font-family: 'SF Mono', 'Fira Code', monospace; resize: vertical; margin-bottom: 16px;
      transition: border-color 0.15s; line-height: 1.5;
    }
    .dialog-textarea:focus { outline: none; border-color: var(--accent); }
    .btn-save {
      background: var(--accent); color: #fff; width: 100%; height: 46px; font-size: 15px;
      font-weight: 600; border-radius: 10px; cursor: pointer; border: none; font-family: var(--font-ui);
      transition: opacity 0.15s;
    }
    .btn-save:hover { opacity: 0.9; }

    /* ========== RESPONSIVE ========== */
    @media (min-width: 600px) {
      .side-menu { width: 320px; }
      .card-hanzi { font-size: 72px; }
      .flashcard { min-height: 300px; }
    }
    @media (max-height: 580px) {
      .card-hanzi { font-size: 48px; }
      .flashcard { padding: 20px; min-height: 180px; }
      .card-pinyin { font-size: 18px; }
      .card-meaning { font-size: 20px; }
      .card-divider { margin: 12px 0; }
    }
    @media (prefers-reduced-motion: reduce) {
      *, *::before, *::after { transition-duration: 0.01ms !important; }
    }
  

    /* ========== DICTIONARY POPUP ========== */
    .dict-popup {
      position: fixed; z-index: 300; width: min(340px, 88vw); max-height: 60vh;
      overflow-y: auto; background: var(--menu-bg); color: var(--text-1);
      border: 1px solid var(--border); border-radius: 14px;
      box-shadow: 0 14px 40px rgba(0,0,0,0.25); padding: 14px 16px;
      font-family: var(--font-ui); overscroll-behavior: contain;
    }
    .dict-popup .dp-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; margin-bottom: 8px; }
    .dict-popup .dp-word { font-family: var(--font-hz); font-size: 22px; font-weight: 400; line-height: 1.2; }
    .dict-popup .dp-py { color: var(--accent); font-size: 13.5px; margin-top: 3px; }
    .dict-popup .dp-close { flex-shrink: 0; width: 26px; height: 26px; border: none; background: var(--pill-bg); color: var(--text-2); border-radius: 8px; font-size: 15px; cursor: pointer; line-height: 1; }
    .dict-popup .dp-close:hover { background: var(--border); color: var(--text-1); }
    .dict-popup .dp-entries { border-top: 1px solid var(--divider); padding-top: 8px; }
    .dict-popup .dp-entry { margin-bottom: 9px; }
    .dict-popup .dp-entry-head { font-weight: 600; font-size: 13px; }
    .dict-popup .dp-entry-head span[style*="font-family"] { font-weight: 400; }
    .dict-popup .dp-def-list { list-style: none; }
    .dict-popup .dp-def-list li { font-size: 13.5px; line-height: 1.5; color: var(--text-1); padding-left: 14px; position: relative; margin-top: 3px; }
    .dict-popup .dp-def-list li::before { content: '·'; position: absolute; left: 2px; color: var(--accent); }
    .dict-popup .dp-empty { color: var(--text-2); font-size: 13px; }
    .dict-popup .dp-char-sec { border-top: 1px solid var(--divider); margin-top: 6px; padding-top: 10px; }
    .dict-popup .dp-char-sec-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-2); margin-bottom: 4px; }
    .dict-popup .dp-char { display: flex; gap: 10px; align-items: baseline; padding: 5px 0; border-bottom: 1px dashed var(--divider); }
    .dict-popup .dp-char:last-child { border-bottom: none; }
    .dict-popup .dp-char-hz { font-family: var(--font-hz); font-size: 18px; font-weight: 400; min-width: 30px; }
    .dict-popup .dp-char-py { color: var(--accent); font-size: 12.5px; min-width: 92px; }
    .dict-popup .dp-char-def { font-size: 12.5px; color: var(--text-2); }
    .dict-popup .dp-also-sec { border-top: 1px solid var(--divider); margin-top: 6px; padding-top: 10px; }
    .dict-popup .dp-also-sec-label { font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; color: var(--text-2); margin-bottom: 6px; }
    .dict-popup .dp-also { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 2px; scrollbar-width: none; -ms-overflow-style: none; }
    .dict-popup .dp-also::-webkit-scrollbar { display: none; }
    .dict-popup .dp-also-item {
      flex-shrink: 0; min-width: 72px; max-width: 140px; padding: 8px 10px;
      display: flex; flex-direction: column; align-items: center; gap: 3px;
      border: 1px solid var(--border); border-radius: 10px;
      background: var(--pill-bg); color: var(--text-1); cursor: pointer;
      font-family: var(--font-ui); -webkit-tap-highlight-color: transparent;
      transition: border-color 0.15s, color 0.15s;
    }
    .dict-popup .dp-also-item:hover { border-color: var(--accent); color: var(--text-1); }
    .dict-popup .dp-also-hz { font-family: var(--font-hz); font-size: 16px; font-weight: 400; max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .dict-popup .dp-also-py { font-size: 12px; color: var(--text-2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
    .dict-popup .dp-also-def { font-size: 11px; color: var(--text-2); max-width: 112px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }


    /* ========== HOVER FEEDBACK ========== */
    .flashcard:hover {
      border-color: var(--accent);
      box-shadow: 0 8px 24px rgba(0,0,0,0.10);
    }
    html.dark .flashcard:hover { box-shadow: 0 8px 24px rgba(0,0,0,0.5); }
    .card-hanzi {
      cursor: pointer;
      transition: color 0.15s;
    }
    .hz-char { cursor: pointer; transition: color 0.15s; }
    .hz-char:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 4px; text-decoration-thickness: 2px; }

    /* ========== SCROLLBARS ========== */
    * {
      scrollbar-width: thin;
      scrollbar-color: var(--border) transparent;
    }
    *::-webkit-scrollbar { width: 10px; height: 10px; }
    *::-webkit-scrollbar-track { background: transparent; }
    *::-webkit-scrollbar-thumb {
      background: var(--border);
      border-radius: 8px;
      border: 2px solid transparent;
      background-clip: content-box;
    }
    *::-webkit-scrollbar-thumb:hover { background: var(--text-2); background-clip: content-box; }
    *::-webkit-scrollbar-corner { background: transparent; }

