@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;700&family=DM+Sans:wght@400;500;600&display=swap');

*{box-sizing:border-box;margin:0;padding:0}

:root{
  --ink:#1a1a1a;--ink2:#555;--ink3:#999;
  --paper:#fafaf7;--surface:#fff;--border:#e8e3db;
  --accent:#b5311f;--accent2:#f0ddd8;--accent3:#faf4f0;
  --teal:#1a6060;--teal-bg:#eaf4f4;
  --gold:#8a6420;--gold-bg:#faf3e0;
  --ai:#5a3a8a;--ai-bg:#f2eeff;
  --admin:#1a4a8a;--admin-bg:#eef3ff;--admin-border:#c5d5f5;
  --green:#1a6a3a;--green-bg:#eafaf0;
  --red:#8a1a1a;--red-bg:#ffeef0;
  --blue:#1a3a8a;--blue-bg:#eef0ff;
  --fs:15px;
}

html{font-size:var(--fs)}
body{font-family:'DM Sans',sans-serif;background:var(--paper);color:var(--ink);min-height:100vh;-webkit-tap-highlight-color:transparent}

/* ── STICKY HEADER WRAPPER ──────────────────────────────────────────── */
#stickyHeader{position:sticky;top:0;z-index:300}

/* ── BREADCRUMB NAV ─────────────────────────────────────────────────── */
.breadcrumb{display:flex;align-items:center;background:var(--surface);border-bottom:1px solid var(--border);padding:0 .75rem;gap:0;min-height:44px;flex-wrap:nowrap;overflow-x:auto}
.bc-item{display:flex;align-items:center;white-space:nowrap;flex-shrink:0}
.bc-btn{padding:.5rem .6rem;font-size:12px;font-weight:500;color:var(--ink2);background:none;border:none;cursor:pointer;font-family:'DM Sans',sans-serif;border-radius:6px;transition:all .12s}
.bc-btn:hover{background:var(--accent3);color:var(--ink)}
.bc-btn.active{color:var(--accent);font-weight:600}
.bc-sep{color:var(--border);font-size:16px;padding:0 .1rem;flex-shrink:0}
.bc-admin-btn{flex-shrink:0;padding:.4rem .75rem;border-radius:6px;border:1px solid var(--admin-border);background:var(--admin-bg);color:var(--admin);font-size:11.5px;font-weight:500;cursor:pointer;font-family:'DM Sans',sans-serif;white-space:nowrap;transition:all .15s}
.bc-admin-btn:hover{background:var(--admin);color:#fff}
.bc-admin-btn.active{background:var(--admin);color:#fff}

.bc-brand{font-family:var(--zh-font);font-weight:700;color:var(--accent);font-size:15px;padding:.5rem .75rem .5rem 0;border-right:1px solid var(--border);margin-right:.5rem;white-space:nowrap;border-top:none;border-left:none;border-bottom:none;background:none;cursor:pointer;transition:opacity .15s}
.bc-brand:hover{opacity:.7}

/* ── TAB BAR ────────────────────────────────────────────────────────── */
.tab-bar{display:flex;background:var(--surface);border-bottom:1px solid var(--border);overflow-x:auto}
.tab-btn{padding:.6rem .9rem;font-size:12.5px;font-weight:500;color:var(--ink3);border:none;background:transparent;cursor:pointer;border-bottom:2.5px solid transparent;white-space:nowrap;font-family:'DM Sans',sans-serif;transition:all .15s}
.tab-btn.active{color:var(--accent);border-bottom-color:var(--accent)}
.tab-btn:hover:not(.active){color:var(--ink);background:var(--accent3)}
.tab-btn.admin-tab{color:var(--admin)}
.tab-btn.admin-tab.active{border-bottom-color:var(--admin);color:var(--admin)}

/* ── FONT SIZE CONTROL ──────────────────────────────────────────────── */
.fs-control{display:flex;align-items:center;gap:.4rem;padding:.3rem .75rem;background:var(--accent3);border-bottom:1px solid var(--border);font-size:11px;color:var(--ink3)}
.fs-btn{width:22px;height:22px;border-radius:50%;border:1px solid var(--border);background:var(--surface);cursor:pointer;font-size:13px;display:flex;align-items:center;justify-content:center;line-height:1;color:var(--ink2);transition:all .12s}
.fs-btn:hover{background:var(--accent);color:#fff;border-color:var(--accent)}
.fs-label{font-size:11px;color:var(--ink3);min-width:28px;text-align:center}
.fs-user{font-size:11px;color:var(--ink3);white-space:nowrap}
.fs-signout-btn{font-size:10.5px;padding:.1rem .4rem;border-radius:4px;border:1px solid var(--border);background:transparent;cursor:pointer;color:var(--ink3);font-family:'DM Sans',sans-serif;transition:all .12s;white-space:nowrap}
.fs-signout-btn:hover{background:var(--accent2);color:var(--accent);border-color:var(--accent)}

/* ── VIEWS ──────────────────────────────────────────────────────────── */
.view{display:none;padding:1rem .9rem 14rem;max-width:820px;margin:0 auto}
.view.active{display:block}

/* ── CARDS & GRIDS ──────────────────────────────────────────────────── */
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.75rem;margin-bottom:1.25rem}
.nav-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1rem;cursor:pointer;transition:all .18s;text-align:center}
.nav-card:hover{border-color:var(--accent);box-shadow:0 3px 12px rgba(0,0,0,.07);transform:translateY(-1px)}
.nav-card-icon{font-size:26px;margin-bottom:.4rem}
.nav-card-label{font-size:13px;font-weight:500;color:var(--ink)}
.nav-card-sub{font-size:11px;color:var(--ink3);margin-top:.15rem}

/* ── CHAPTER LIST ───────────────────────────────────────────────────── */
.ch-list{display:flex;flex-direction:column;gap:.5rem}
.ch-row{background:var(--surface);border:1px solid var(--border);border-radius:10px;display:flex;align-items:center;padding:.7rem .9rem;cursor:pointer;transition:all .15s;gap:.75rem}
.ch-row:hover{border-color:var(--accent);box-shadow:0 2px 8px rgba(0,0,0,.06)}
.ch-row-num{font-size:11px;font-weight:600;color:var(--ink3);min-width:28px}
.ch-row-title{font-family:var(--zh-font);font-size:14.5px;color:var(--ink);flex:1}
.ch-row-sub{font-size:11px;color:var(--ink3)}
.ch-row-arrow{color:var(--border);font-size:16px}

/* ── TEXT PAGE ──────────────────────────────────────────────────────── */
.page-title{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:.85rem;padding-bottom:.6rem;border-bottom:1px solid var(--border)}
.page-title-zh{font-family:var(--zh-font);font-size:16px;color:var(--ink)}
.page-title-en{font-size:11px;color:var(--ink3)}

/* controls */
.ctrl-row{display:flex;gap:.4rem;margin-bottom:.8rem;flex-wrap:wrap;align-items:center}
.btn{padding:.3rem .7rem;border-radius:6px;border:1px solid var(--border);background:var(--surface);font-size:11.5px;font-weight:500;cursor:pointer;color:var(--ink2);font-family:'DM Sans',sans-serif;transition:all .15s;white-space:nowrap}
.btn.on{background:var(--teal);color:#fff;border-color:var(--teal)}
.btn.ai-on{background:var(--ai);color:#fff;border-color:var(--ai)}
.btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}
.btn.admin-btn{background:var(--admin-bg);color:var(--admin);border-color:var(--admin-border)}
.btn.admin-btn:hover{background:var(--admin);color:#fff}
.btn.danger{background:var(--red-bg);color:var(--red);border-color:#f5c0c0}
.btn.danger:hover{background:var(--red);color:#fff}
.btn.success{background:var(--green-bg);color:var(--green);border-color:#b0e0c0}
.btn:disabled{opacity:.4;cursor:default}

/* audio bar */
.audio-bar{display:flex;align-items:center;gap:.6rem;margin-bottom:.8rem;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.5rem .8rem}
.play-btn{width:30px;height:30px;border-radius:50%;background:var(--accent);color:#fff;border:none;cursor:pointer;font-size:12px;flex-shrink:0;display:flex;align-items:center;justify-content:center}
.play-btn.ai{background:var(--ai)}.play-btn:disabled{opacity:.4;cursor:default}
.prog-wrap{flex:1;height:4px;background:var(--border);border-radius:2px;cursor:pointer;position:relative}
.prog-fill{height:100%;background:var(--accent);border-radius:2px;width:0%;transition:width .08s linear;pointer-events:none}
.prog-fill.ai{background:var(--ai)}
.atime{font-size:10.5px;color:var(--ink3);min-width:72px;text-align:right}
.src-badge{font-size:10px;padding:.12rem .38rem;border-radius:4px;white-space:nowrap;font-weight:500}
.src-badge.book{background:var(--accent2);color:var(--accent)}
.src-badge.ai{background:var(--ai-bg);color:var(--ai)}
.src-badge.loading{background:var(--gold-bg);color:var(--gold)}

/* text card */
.text-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:1rem 1.15rem;margin-bottom:1.25rem}
.hint{font-size:11px;color:var(--ink3);margin-bottom:.75rem;padding:.35rem .6rem;background:var(--teal-bg);border-radius:6px;border-left:3px solid var(--teal)}
/* ── TOGGLE PILL (slide switch) ─────────────────────────────────────── */
.toggle-pill{display:inline-flex;align-items:center;gap:.42rem;cursor:pointer;user-select:none;padding:.28rem .72rem;background:var(--surface);border:1px solid var(--border);border-radius:8px;flex-shrink:0;transition:background .18s,border-color .18s}
.toggle-pill-track{width:28px;height:16px;border-radius:9px;background:var(--border);position:relative;transition:background .2s;flex-shrink:0}
.toggle-pill.on .toggle-pill-track{background:var(--teal)}
.toggle-pill-track::after{content:'';position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#fff;transition:transform .18s;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.toggle-pill.on .toggle-pill-track::after{transform:translateX(12px)}
.toggle-pill-label{font-size:.75em;color:var(--ink);font-weight:500;transition:color .18s;font-family:'DM Sans',sans-serif}
.toggle-pill.on{background:var(--teal-bg);border-color:var(--teal)}
.toggle-pill.on .toggle-pill-label{color:var(--teal);font-weight:600}
/* ── HINT ROW (below audio, above text) ─────────────────────────────── */
.hint-row{display:flex;align-items:center;gap:.6rem;margin-bottom:.65rem;flex-wrap:wrap}
.hint-text{font-size:11px;color:var(--ink3)}
/* ── FLASHCARD FRONT PINYIN ─────────────────────────────────────────── */
.fc-front-py{font-size:.8em;color:var(--teal);text-align:center;margin:.1rem 0 .05rem;min-height:1.3em}
/* visibility:hidden keeps space reserved → no layout shift when toggling */
.fc-front-py.hidden{visibility:hidden}
.fc-py.hidden{visibility:hidden}
.fc-back-def.hidden{visibility:hidden}
/* examples inside collapsible: use display:none (no reserved space needed) */
.ex-py.hidden,.ex-en.hidden{display:none}
/* ── FLASHCARD GRID — READING PAGE (responsive 2/3/4 col) ──────────── */
.fc-grid-reading{display:grid;grid-template-columns:repeat(2,1fr);gap:.5rem}
@media(min-width:560px){.fc-grid-reading{grid-template-columns:repeat(3,1fr)}}
@media(min-width:800px){.fc-grid-reading{grid-template-columns:repeat(4,1fr)}}
.fc-grid-reading .fc{padding:.45rem .65rem .7rem;min-height:80px}
.fc-grid-reading .fc-hz{font-size:1.4em}
.fc-grid-reading .fc-hint{font-size:.62em}
/* ── PINYIN-ON-CARDS TOGGLE BAR (sticky) ────────────────────────────── */
.fc-py-bar{display:flex;align-items:center;gap:.5rem;position:sticky;top:0;z-index:200;background:var(--paper);margin:.3rem -.9rem .35rem;padding:.4rem .9rem;border-bottom:1px solid var(--border)}
/* ── BOTTOM TEXT NAV ────────────────────────────────────────────────── */
.text-nav-bar--bottom{margin-top:1.5rem;border-top:1px solid var(--border);padding-top:1rem}
.char-unit{display:inline-flex;flex-direction:column;align-items:center;cursor:pointer;padding:0 1px;vertical-align:bottom}
.char-unit .hz{font-family:var(--zh-font);font-size:1.27em;color:var(--ink);transition:color .1s;line-height:1.5}
.char-unit .py{font-size:.63em;color:var(--teal);line-height:1.3;min-height:.85em;white-space:nowrap}
.char-unit:hover:not(.punct) .hz{color:var(--accent)}
.char-unit.playing .hz{color:var(--accent);background:var(--accent2);border-radius:3px}
.char-unit.punct{cursor:default}.char-unit.punct .hz{color:var(--ink3)}
.sent-row{display:flex;flex-wrap:wrap;align-items:flex-end;cursor:pointer;padding:2px 3px;border-radius:5px;margin-bottom:1px;transition:background .1s}
.sent-row:hover{background:rgba(181,49,31,.06)}
.sent-row.active-sent{background:rgba(181,49,31,.04)}
.spk-tag{font-size:.72em;font-weight:600;color:var(--gold);font-family:'DM Sans',sans-serif;margin-right:3px;white-space:nowrap;padding-top:5px;align-self:flex-start}

/* ── VOCAB SECTION ──────────────────────────────────────────────────── */
.vocab-section{margin-top:1.25rem}
.section-head{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem;padding-bottom:.5rem;border-bottom:1px solid var(--border)}
.section-head-title{font-size:13.5px;font-weight:500;color:var(--ink);flex:1}
.fc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(246px,1fr));gap:.75rem}
.fc-grid.fc-grid-single{grid-template-columns:1fr}
.fc{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:.45rem 1rem .9rem;cursor:pointer;transition:box-shadow .18s,border-color .18s;position:relative;min-height:110px}
.fc:hover{border-color:#c8b8b0;box-shadow:0 3px 14px rgba(0,0,0,.07)}
.fc.flagged{border-left:3px solid var(--gold)}
.fc-front{display:block}.fc-back{display:none}
.fc.flipped .fc-front{display:none}.fc.flipped .fc-back{display:block}
.fc-badge{position:absolute;top:.38rem;right:.42rem;font-size:9.5px;padding:.08rem .3rem;border-radius:4px;background:var(--gold-bg);color:var(--gold);font-weight:500}
.fc-hz{font-family:var(--zh-font);font-size:1.73em;text-align:center;margin:.15rem 0;color:var(--ink)}
.fc-py{font-size:.85em;text-align:center;color:var(--teal);margin-bottom:.3rem}
.fc-def{font-size:.85em;color:var(--ink2);text-align:center;line-height:1.5}
.fc-hint{font-size:.68em;color:var(--ink3);text-align:center;margin-top:.2rem}
.fc-audio-row{display:flex;gap:.3rem;justify-content:center;margin:.4rem 0 .05rem;flex-wrap:wrap}
.fc-examples{font-size:1em;margin-top:.55rem;border-top:1px solid var(--border);padding-top:.55rem}
.ex-row{display:flex;align-items:flex-start;gap:.35rem;margin-bottom:.15rem;padding:3px 4px;border-radius:4px;transition:background .1s}
.ex-row:hover{background:var(--ai-bg)}
.ex-icon{font-size:.85em;color:var(--ai);flex-shrink:0;margin-top:1px;padding-top:.1rem}
.ex-hz-row{font-family:var(--zh-font);font-size:.88em;color:var(--ink2);line-height:1.6}
.ex-py{font-size:.72em;color:var(--teal);line-height:1.3;margin-bottom:.1rem}
.ex-en{font-size:.75em;color:var(--ink3);margin-bottom:.3rem}
.fc-actions{display:flex;gap:.3rem;margin-top:.5rem;justify-content:center;flex-wrap:nowrap}
.fc-act{padding:.2rem .55rem;border-radius:5px;border:1px solid var(--border);background:transparent;font-size:.72em;cursor:pointer;font-family:'DM Sans',sans-serif;color:var(--ink2);transition:all .12s}
.fc-act:hover{background:var(--accent3)}
.fc-act.star.on{color:var(--gold);border-color:var(--gold);background:#fff8dc}
.fc-act.active{background:var(--accent3);color:var(--ink);font-weight:600}
.fc-act.danger-act{color:#c0392b;border-color:#e0b0aa}
.fc-act.danger-act:hover{background:#fdecea}
/* User-added card: light red tint (matches reading page accent palette) */
.fc.fc--user{background:var(--accent2);border-color:var(--accent)}
/* Flag star in top-right of card front */
.fc-flag-corner{position:absolute;top:.55rem;right:.65rem;font-size:13px;line-height:1;pointer-events:none}
.fc-front{position:relative}
.fc-note{width:100%;min-height:1em;border:1px solid var(--border);border-radius:5px;font-size:.75em;padding:.28rem .48rem;font-family:'DM Sans',sans-serif;color:var(--ink);background:var(--accent3);resize:none;overflow:hidden;margin-top:.38rem;display:none}
.fc-note.open{display:block}
.fc-due{font-size:.72em;color:var(--ink);margin-top:.18rem}
.fc-due.overdue{color:var(--accent);font-weight:600}

/* ── SPACED REPETITION ──────────────────────────────────────────────── */
.sr-bar{display:flex;gap:.35rem;justify-content:center;margin-top:.6rem;flex-wrap:wrap}
.sr-btn{padding:.28rem .6rem;border-radius:6px;border:none;font-size:.75em;cursor:pointer;font-family:'DM Sans',sans-serif;font-weight:500;transition:all .15s;opacity:.85}
.sr-btn:hover{opacity:1;transform:translateY(-1px)}
.sr-btn.unknown{background:#f7c1c1;color:#7a1a1a}
.sr-btn.barely{background:#fac775;color:#6b3a00}
.sr-btn.ok{background:#e0e8ff;color:#1a3a8a}
.sr-btn.good{background:#c0dd97;color:#274010}
.sr-btn.perfect{background:#ffd700;color:#5a3a00}
.sr-due-badge{font-size:12px;padding:.08rem .3rem;border-radius:4px;background:var(--ai-bg);color:var(--ai);margin-left:.3rem}
.sr-due-badge.overdue{background:var(--accent2);color:var(--accent)}

/* ── VOCAB CHAPTER PAGER ────────────────────────────────────────────── */
.vocab-pager{display:flex;gap:.35rem;margin-bottom:.85rem;flex-wrap:wrap;align-items:center}
.vp-btn{padding:.28rem .7rem;border-radius:16px;border:1px solid var(--border);font-size:11.5px;cursor:pointer;background:var(--surface);color:var(--ink2);transition:all .14s;font-family:'DM Sans',sans-serif;white-space:nowrap}
.vp-btn.active{background:var(--gold);color:#fff;border-color:var(--gold)}
.vp-btn.has-due{border-color:var(--accent);color:var(--accent)}
.vocab-stats{font-size:11px;color:var(--ink3);margin-bottom:.75rem}

/* ── REVIEW MODE ────────────────────────────────────────────────────── */
.rv-wrap{max-width:600px;margin:0 auto;padding:0 .25rem 3rem}
/* Setup */
.rv-setup-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:1.1rem 1.2rem 1.4rem;margin-top:.6rem}
.rv-setting-row{display:flex;gap:.8rem;margin-bottom:.9rem;flex-wrap:wrap}
.rv-setting{flex:1;min-width:130px}
.rv-label{display:block;font-size:10.5px;font-weight:700;color:var(--ink3);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.35rem}
.rv-sel{width:100%;border:1px solid var(--border);border-radius:7px;padding:.38rem .6rem;font-size:13px;font-family:'DM Sans',sans-serif;background:var(--surface);color:var(--ink)}
.rv-sel:disabled{opacity:.45}
.rv-opt-group{display:flex;gap:.3rem;flex-wrap:wrap}
.rv-opt-btn{padding:.28rem .65rem;border:1px solid var(--border);border-radius:6px;background:transparent;font-size:12px;cursor:pointer;font-family:'DM Sans',sans-serif;color:var(--ink2);transition:all .12s}
.rv-opt-btn.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.rv-stats-row{display:flex;gap:1.2rem;margin:.9rem 0;flex-wrap:wrap}
.rv-stat{font-size:12px;color:var(--ink3)}
.rv-stat-n{font-weight:700;font-size:16px;color:var(--ink);display:block}
.rv-stat--due .rv-stat-n{color:var(--accent)}
.rv-stat--known .rv-stat-n{color:var(--green)}
.rv-stat--avail .rv-stat-n{color:var(--teal)}
.rv-start-btn{width:100%;padding:.72rem;border:none;border-radius:9px;background:var(--accent);color:#fff;font-size:15px;font-weight:600;cursor:pointer;font-family:'DM Sans',sans-serif;transition:opacity .15s;margin-top:.2rem}
.rv-start-btn:disabled{opacity:.35;cursor:default}
/* Progress */
.rv-progress{margin:.2rem 0 .9rem}
.rv-progress-bar-wrap{height:7px;background:var(--border);border-radius:4px;overflow:hidden;display:flex}
.rv-pb-learned{background:var(--green);transition:width .4s}
.rv-pb-again{background:var(--accent);transition:width .4s}
.rv-progress-text{display:flex;justify-content:space-between;font-size:11.5px;color:var(--ink3);margin-top:.3rem}
.rv-p-pos{font-weight:700;color:var(--ink)}
.rv-p-learned{color:var(--green)}
.rv-p-again{color:var(--accent)}
/* Card */
.rv-card-wrap{margin:.2rem 0 .8rem}
.rv-card{background:var(--surface);border:1.5px solid var(--border);border-radius:16px;padding:2rem 1.4rem 1.4rem;display:flex;flex-direction:column;align-items:center;position:relative;min-height:240px}
.rv-card--user{background:#fffae0;border-color:#dfc84a}
.rv-flag-corner{position:absolute;top:.7rem;right:.8rem;font-size:1.25rem;line-height:1}
.rv-card-front{display:flex;flex-direction:column;align-items:center;width:100%}
.rv-card-hz{font-family:var(--zh-font);font-size:3.2rem;line-height:1.15;color:var(--ink);margin-bottom:.5rem;text-align:center}
.rv-card-audio{display:flex;gap:.5rem;margin-bottom:1.2rem}
.rv-reveal-btn{padding:.6rem 2.2rem;border:1.5px solid var(--accent);border-radius:9px;background:transparent;color:var(--accent);font-size:14px;font-weight:600;cursor:pointer;font-family:'DM Sans',sans-serif;transition:all .15s;margin-top:auto}
.rv-reveal-btn:hover{background:var(--accent);color:#fff}
.rv-card-back{width:100%}
.rv-card-divider{width:36px;height:2px;background:var(--border);border-radius:2px;margin:.4rem auto .7rem}
.rv-card-py{font-size:1.05rem;color:var(--ink3);text-align:center;margin-bottom:.15rem}
.rv-card-def{font-size:1.05rem;font-weight:600;color:var(--ink);text-align:center;margin-bottom:.1rem}
.rv-card-extra{font-size:.78rem;color:var(--gold);text-align:center;margin-bottom:.5rem}
.rv-card-ex{font-size:.82rem;color:var(--ink2);line-height:1.55;margin:.5rem 0 .2rem;padding:.5rem .6rem;background:var(--accent3);border-radius:8px;width:100%}
.rv-note-wrap{width:100%;margin:.4rem 0 .2rem}
.rv-card-note{background:var(--gold-bg);border:1px solid #e0d090;border-radius:8px;padding:.45rem .7rem;font-size:.82rem;color:var(--ink);line-height:1.55;white-space:pre-wrap;width:100%;box-sizing:border-box}
.rv-note-area{width:100%;min-height:52px;border:1px solid #ddd0a0;border-radius:8px;padding:.45rem .65rem;font-size:.82rem;font-family:'DM Sans',sans-serif;color:var(--ink);background:var(--gold-bg);resize:none;overflow:hidden;line-height:1.55;box-sizing:border-box}
.rv-note-area:focus{outline:none;border-color:var(--gold)}
.rv-card-actions{display:flex;gap:.4rem;margin:.5rem 0;flex-wrap:wrap}
.rv-card-act{padding:.22rem .6rem;border-radius:5px;border:1px solid var(--border);background:transparent;font-size:.72em;cursor:pointer;font-family:'DM Sans',sans-serif;color:var(--ink2);transition:all .12s}
.rv-card-act:hover{background:var(--accent3)}
.rv-card-act.active{background:var(--accent3);font-weight:600;color:var(--ink)}
.rv-flag-btn.on{color:var(--gold);border-color:var(--gold);background:#fff8dc}
/* Rating bar */
.rv-rating-bar{display:flex;gap:.35rem;flex-wrap:wrap;justify-content:center;width:100%;margin-top:.6rem}
.rv-rate-btn{flex:1;min-width:54px;padding:.5rem .2rem;border:1.5px solid var(--border);border-radius:9px;background:var(--surface);font-size:.78rem;cursor:pointer;font-family:'DM Sans',sans-serif;color:var(--ink);transition:all .12s;text-align:center;line-height:1.3}
.rv-rate-btn:hover{border-color:var(--accent);background:var(--accent2)}
.rv-rate-btn.again{border-color:#e0b0a0}
.rv-rate-btn.again:hover{background:var(--red-bg)}
.rv-rate-btn.learned{border-color:#a8cca8}
.rv-rate-btn.learned:hover{background:var(--green-bg)}
/* End screen */
.rv-end-box{text-align:center;padding:1.6rem .5rem 1.2rem;background:var(--surface);border:1px solid var(--border);border-radius:14px;margin:.6rem 0 1rem}
.rv-end-icon{font-size:3rem;margin-bottom:.4rem}
.rv-end-title{font-size:1.25rem;font-weight:700;color:var(--ink);margin-bottom:1rem}
.rv-end-stats{display:flex;justify-content:center;gap:3rem;margin-bottom:1.4rem}
.rv-end-stat-n{font-size:2.2rem;font-weight:700;line-height:1}
.rv-end-stat-l{font-size:.8rem;color:var(--ink3);margin-top:.2rem}
.rv-end-stat--learned .rv-end-stat-n{color:var(--green)}
.rv-end-stat--again .rv-end-stat-n{color:var(--accent)}
.rv-end-btns{display:flex;flex-direction:column;gap:.55rem;max-width:300px;margin:0 auto}
.rv-end-btn{padding:.65rem 1.4rem;border-radius:9px;border:1.5px solid var(--border);background:transparent;font-size:14px;cursor:pointer;font-family:'DM Sans',sans-serif;color:var(--ink);transition:all .12s}
.rv-end-btn:hover{background:var(--accent3)}
.rv-end-btn.primary{background:var(--accent);color:#fff;border-color:var(--accent)}
.rv-end-btn.primary:hover{opacity:.88}

/* ── POPUP DICT ─────────────────────────────────────────────────────── */
.popup{position:absolute;background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:.8rem .95rem;min-width:200px;max-width:270px;box-shadow:0 8px 28px rgba(0,0,0,.14);z-index:500;display:none;animation:popIn .12s ease}
@keyframes popIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.popup.open{display:block}
.popup-word{font-family:var(--zh-font);font-size:1.47em;font-weight:700;color:var(--ink)}
.popup-py{font-size:.85em;color:var(--teal)}
.popup-hsk{font-size:.65em;color:var(--gold);font-weight:600;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.28rem}
.popup-defs{font-size:.82em;color:var(--ink2);line-height:1.6}
.popup-related{margin-top:.4rem;font-size:.75em;color:var(--ink3)}
.popup-close{position:absolute;top:.3rem;right:.6rem;background:none;border:none;font-size:14px;cursor:pointer;color:var(--ink3)}
.popup-footer{display:flex;gap:.35rem;margin-top:.5rem;flex-wrap:wrap}
.snd-btn{display:inline-flex;align-items:center;gap:.25rem;padding:.2rem .5rem;border-radius:5px;border:1px solid var(--border);background:var(--ai-bg);color:var(--ai);font-size:.72em;cursor:pointer;font-family:'DM Sans',sans-serif;transition:all .12s;white-space:nowrap}
.snd-btn:hover{background:var(--ai);color:#fff}
.snd-btn:disabled{opacity:.4;cursor:default}
.spin{display:inline-block;width:9px;height:9px;border:1.5px solid rgba(90,58,138,.3);border-top-color:var(--ai);border-radius:50%;animation:spin .6s linear infinite}
.spin-sm{display:inline-block;width:8px;height:8px;border:1.5px solid rgba(26,96,96,.25);border-top-color:var(--teal);border-radius:50%;animation:spin .6s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
/* ── SEGMENTED CONTROL (audio source) ──────────────────────────────── */
.seg-ctrl{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--accent3)}
.seg-btn{padding:.28rem .72rem;border:none;background:transparent;font-size:.75em;cursor:pointer;font-family:'DM Sans',sans-serif;color:var(--ink2);transition:background .15s,color .15s;white-space:nowrap}
.seg-btn.active{background:var(--teal);color:#fff;font-weight:500}
/* ── FLASHCARD FRONT TRANSLATION ────────────────────────────────────── */
.fc-front-def{font-size:.72em;color:var(--ink2);text-align:center;margin:.12rem 0 .05rem;line-height:1.4;min-height:4.2em}
.fc-front-def.hidden{visibility:hidden}
/* ── FLASHCARD BACK SECTIONS ─────────────────────────────────────────── */
.fc-back-main{display:flex;flex-direction:column;align-items:center;width:100%}
.fc-back-def{font-size:.8em;color:var(--ink2);text-align:center;margin:.12rem 0 .1rem;line-height:1.4}
.fc-back-def.hidden{display:none}
.fc-extra{font-size:.7em;color:var(--gold);text-align:center;margin:.05rem 0 .1rem}
/* ── COLLAPSIBLE EXAMPLES SECTION ───────────────────────────────────── */
.fc-ex-section{width:100%;border-top:1px solid var(--border);margin-top:.55rem}
.fc-ex-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.38rem .1rem;background:none;border:none;cursor:pointer;font-size:.75em;color:var(--ink2);font-family:'DM Sans',sans-serif;font-weight:500}
.fc-ex-toggle:hover{color:var(--teal)}
.fc-ex-arrow{display:inline-block;transition:transform .18s;font-size:.9em}
.fc-ex-section.open .fc-ex-arrow{transform:rotate(90deg)}
.fc-ex-body{display:none;padding-top:.2rem}
.fc-ex-section.open .fc-ex-body{display:block}

/* ── TOAST ──────────────────────────────────────────────────────────── */
.toast{position:fixed;bottom:1.5rem;left:50%;transform:translateX(-50%);background:#222;color:#fff;font-size:12.5px;padding:.5rem 1.1rem;border-radius:8px;z-index:1000;opacity:0;transition:opacity .2s;pointer-events:none;white-space:nowrap}
.toast.show{opacity:1}

/* ── STATUS BAR ─────────────────────────────────────────────────────── */
.status-bar{display:flex;align-items:center;gap:.5rem;padding:.32rem .65rem;border-radius:7px;margin-bottom:.8rem;font-size:11px;border:1px solid var(--border);background:var(--surface)}
.cache-bar{display:flex;align-items:center;gap:.75rem;padding:.4rem .65rem;border-radius:7px;margin-top:.5rem;font-size:11px;border:1px solid var(--border);background:var(--surface);flex-wrap:wrap}
.cache-status{color:var(--ink3);flex:1}
.cache-audio-btn{font-size:11px;padding:.2rem .6rem;margin:0}
.sdot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.sdot.ok{background:#2d9a4e}.sdot.err{background:var(--accent)}
.sdot.checking{background:#e0a020;animation:pulse 1s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.4}}
.stxt{color:var(--ink2);flex:1}.schars{color:var(--ink3)}

/* ── ADMIN ──────────────────────────────────────────────────────────── */
.admin-bar{background:var(--admin-bg);border:1px solid var(--admin-border);border-radius:8px;padding:.5rem .8rem;margin-bottom:.8rem;display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.admin-bar-label{font-size:11px;font-weight:600;color:var(--admin);flex:1}

/* MODAL */
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:800;display:none;align-items:center;justify-content:center;padding:1rem}
.modal-overlay.open{display:flex}
.modal{background:var(--surface);border-radius:14px;padding:1.4rem;width:100%;max-width:660px;max-height:90vh;overflow-y:auto;box-shadow:0 16px 48px rgba(0,0,0,.18)}
.modal h2{font-size:15.5px;font-weight:500;margin-bottom:1rem;color:var(--ink)}
.modal h3{font-size:13px;font-weight:500;margin:.85rem 0 .45rem;color:var(--ink2)}
.form-row{display:flex;flex-direction:column;gap:.28rem;margin-bottom:.7rem}
.form-row label{font-size:11px;color:var(--ink2);font-weight:500}
.form-row input,.form-row textarea,.form-row select{border:1px solid var(--border);border-radius:7px;padding:.42rem .62rem;font-size:13px;font-family:'DM Sans',sans-serif;color:var(--ink);background:var(--surface);width:100%}
.form-row textarea{resize:vertical;min-height:58px}
.form-row input:focus,.form-row textarea:focus{outline:none;border-color:var(--admin);box-shadow:0 0 0 2px rgba(26,74,138,.1)}
.modal-footer{display:flex;gap:.45rem;justify-content:flex-end;margin-top:1rem;flex-wrap:wrap}
.form-grid-2{display:grid;grid-template-columns:1fr 1fr;gap:.55rem}

/* Sentence editor */
.sent-editor-wrap{border:1px solid var(--border);border-radius:8px;overflow:hidden;margin-bottom:.45rem}
.sent-editor-row{display:grid;grid-template-columns:16px 78px 1fr 108px 145px 22px;gap:.35rem;align-items:center;padding:.38rem .5rem;border-bottom:1px solid var(--border)}
.sent-editor-row:last-child{border-bottom:none}
.sent-editor-row.hdr{background:var(--paper);font-size:9.5px;font-weight:600;color:var(--ink3);text-transform:uppercase;letter-spacing:.05em}
.sent-hz-in{font-family:var(--zh-font);font-size:13.5px;border:none;background:transparent;color:var(--ink);width:100%;min-width:0}
.sent-hz-in:focus{outline:none}
.sent-spk-in{width:100%;border:none;background:transparent;font-size:11px;color:var(--gold);font-weight:600;font-family:'DM Sans',sans-serif;min-width:0}
.sent-spk-in:focus{outline:none}
.sent-py-prev{font-size:9.5px;color:var(--teal);line-height:1.4;overflow:hidden;min-width:0;word-break:break-all}
.sent-voice-sel{font-size:10px;border:1px solid var(--border);background:var(--paper);color:var(--ink);border-radius:4px;padding:.15rem .2rem;width:100%;min-width:0}
.sent-drag{color:var(--ink3);cursor:grab;font-size:13px;user-select:none;text-align:center}
.sent-del{width:21px;height:21px;border-radius:50%;border:1px solid #f5c0c0;background:var(--red-bg);color:var(--red);font-size:11px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .12s}
.sent-del:hover{background:var(--red);color:#fff}
.add-sent-btn{width:100%;padding:.35rem;border:1.5px dashed var(--border);border-radius:6px;background:transparent;color:var(--ink3);font-size:11.5px;cursor:pointer;font-family:'DM Sans',sans-serif;transition:all .12s;margin-top:.32rem}
.add-sent-btn:hover{border-color:var(--admin);color:var(--admin)}

/* Speaker voice panel */
.spk-voice-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:.45rem;margin-bottom:.85rem}
.spk-voice-card{border:1px solid var(--border);border-radius:7px;padding:.45rem .6rem;background:var(--paper)}
.spk-voice-label{font-size:11px;font-weight:600;color:var(--gold);margin-bottom:.28rem}
.spk-voice-sel{width:100%;font-size:11px;border:1px solid var(--border);border-radius:5px;padding:.18rem .3rem;color:var(--ink);background:var(--surface)}

/* Admin chapter list */
.admin-ch-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:.75rem .9rem;margin-bottom:.5rem}
.admin-ch-head{display:flex;align-items:center;gap:.45rem;border-radius:6px;padding:.2rem .1rem;transition:background .12s;user-select:none}
.admin-ch-head:hover{background:var(--accent3)}
.admin-ch-body{margin-top:.4rem;padding-top:.35rem;border-top:1px solid var(--border)}
.admin-ch-title{font-weight:500;font-size:13.5px;flex:1}
.admin-ch-id{font-size:10px;color:var(--ink3)}
.admin-text-row{display:flex;align-items:center;gap:.45rem;padding:.32rem .45rem;border-radius:6px;border:1px solid var(--border);margin-bottom:.3rem;background:var(--paper);font-size:12px}
.admin-vocab-row{display:flex;align-items:center;gap:.45rem;padding:.35rem .45rem;border-radius:6px;border:1px solid var(--border);margin-bottom:.3rem;background:var(--paper)}
.ava-hz{font-family:var(--zh-font);font-size:15px;width:65px;flex-shrink:0}
.ava-py{font-size:10.5px;color:var(--teal);width:78px;flex-shrink:0}
.ava-def{font-size:11px;color:var(--ink2);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.order-btns{display:flex;flex-direction:column;gap:2px}
.order-btn{width:20px;height:16px;border:1px solid var(--border);border-radius:3px;background:var(--paper);color:var(--ink3);font-size:10px;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:all .1s}
.order-btn:hover{background:var(--admin);color:#fff;border-color:var(--admin)}

/* AI gen panel */
.ai-gen-panel{background:var(--ai-bg);border:1px solid rgba(90,58,138,.2);border-radius:8px;padding:.6rem .8rem;margin-top:.75rem}
.ai-gen-title{font-size:12px;font-weight:500;color:var(--ai);margin-bottom:.35rem}
.ai-gen-desc{font-size:11px;color:var(--ink2);margin-bottom:.45rem}

@media(max-width:500px){
  .card-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr))}
  .fc-grid{grid-template-columns:1fr}
  .sent-editor-row{grid-template-columns:14px 65px 1fr 90px 22px}
  .form-grid-2{grid-template-columns:1fr}
}

/* Admin vocab tree */
.admin-tree-level{margin-bottom:.6rem;border:1px solid var(--border);border-radius:9px;overflow:hidden}
.admin-tree-lv-head{display:flex;align-items:center;gap:.4rem;padding:.55rem .8rem;background:var(--admin-bg);color:var(--admin);font-size:12.5px;font-weight:600;cursor:pointer;user-select:none}
.admin-tree-lv-head:hover{background:var(--admin);color:#fff}
.admin-tree-lv-body{padding:.4rem .5rem}
.admin-tree-book{margin-bottom:.35rem;border:1px solid var(--border);border-radius:7px;overflow:hidden}
.admin-tree-bk-head{display:flex;align-items:center;gap:.4rem;padding:.42rem .7rem;background:var(--accent3);color:var(--ink2);font-size:12px;font-weight:500;cursor:pointer;user-select:none}
.admin-tree-bk-head:hover{background:var(--accent2)}
.admin-tree-bk-body{padding:.3rem .4rem}
.admin-tree-ch{margin-bottom:.25rem;border:1px solid var(--border);border-radius:6px;overflow:hidden}
.admin-tree-ch-head{display:flex;align-items:center;gap:.35rem;padding:.35rem .6rem;background:var(--paper);color:var(--ink2);font-size:11.5px;cursor:pointer;user-select:none}
.admin-tree-ch-head:hover{background:var(--teal-bg)}
.admin-tree-ch-body{padding:.2rem .3rem}
.admin-tree-arrow{font-size:10px;color:var(--ink3);flex-shrink:0}
.admin-tree-count{font-size:10px;color:var(--ink3);background:var(--border);padding:.05rem .3rem;border-radius:4px;flex-shrink:0}

.bc-logout-btn{flex-shrink:0;padding:.38rem .6rem;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--ink3);font-size:11px;cursor:pointer;font-family:'DM Sans',sans-serif;white-space:nowrap;transition:all .15s;margin-left:.25rem}
.bc-logout-btn:hover{background:var(--red-bg);color:var(--red);border-color:#f5c0c0}
.bc-text-select{padding:.35rem .5rem;font-size:12px;font-weight:500;color:var(--ink);background:var(--surface);border:1px solid var(--border);border-radius:6px;cursor:pointer;font-family:'DM Sans',sans-serif;max-width:160px;flex-shrink:0}
.bc-text-select:focus{outline:none;border-color:var(--accent)}
.text-nav-bar{display:flex;align-items:center;justify-content:space-between;padding:.5rem 0 .75rem;gap:.75rem}
.text-nav-btn{flex:0 0 auto;min-width:90px}
.text-nav-btn.disabled,.text-nav-btn:disabled{opacity:.35;cursor:not-allowed}
.text-nav-counter{flex:1;text-align:center;font-size:12px;color:var(--ink3);font-variant-numeric:tabular-nums}

/* Speed control */
.speed-ctrl{display:flex;align-items:stretch;gap:0;border:1px solid var(--border);border-radius:8px;overflow:hidden;flex-shrink:0;background:var(--surface)}
.speed-btn{width:26px;border:none;background:transparent;color:var(--ink2);font-size:14px;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:'DM Sans',sans-serif;transition:background .12s;padding:.28rem 0;line-height:1}
.speed-btn:hover{background:var(--accent2);color:var(--accent)}
.speed-label{font-size:.75em;font-weight:500;color:var(--ink2);padding:.28rem .35rem;min-width:38px;text-align:center;font-family:'DM Sans',sans-serif;display:flex;align-items:center;justify-content:center}
.ch-jump-row{display:flex;align-items:center;gap:.6rem;padding:.5rem 0 .75rem;border-bottom:1px solid var(--border);margin-bottom:.5rem}
.ch-jump-label{font-size:12px;color:var(--ink3);white-space:nowrap}
.ch-jump-select{flex:1;padding:.35rem .5rem;font-size:13px;font-weight:500;color:var(--ink);background:var(--surface);border:1px solid var(--border);border-radius:6px;cursor:pointer;font-family:'DM Sans',sans-serif}
.ch-jump-select:focus{outline:none;border-color:var(--accent)}

/* ── NOTES FIELD ────────────────────────────────────────────────────────── */
.notes-section{margin:.9rem 0;padding:.7rem .85rem;background:var(--gold-bg);border:1px solid #e8d9a0;border-radius:10px}
.notes-label{font-size:11px;font-weight:600;color:var(--gold);margin-bottom:.4rem;letter-spacing:.03em}
.notes-area{width:100%;min-height:42px;border:1px solid #ddd0a0;border-radius:7px;padding:.5rem .65rem;font-size:13px;font-family:'DM Sans',sans-serif;color:var(--ink);background:#fffef5;resize:none;overflow:hidden;line-height:1.6;transition:border-color .15s;display:block}
.notes-area:focus{outline:none;border-color:var(--gold);box-shadow:0 0 0 2px rgba(138,100,32,.1)}
.notes-area::placeholder{color:var(--ink3)}
.notes-save-status{display:block;font-size:11px;min-height:16px;margin-top:3px;transition:color .2s}
.notes-save-status.saving{color:var(--ink3)}
.notes-save-status.saved{color:#3a8a3a}
.notes-save-status.failed{color:#c0392b}

/* ── WAVEFORM PLAYER ────────────────────────────────────────────────────── */
.waveform-section{background:var(--teal-bg);border:1px solid rgba(26,96,96,.2);border-radius:12px;padding:.85rem 1rem;margin-bottom:1.1rem}
.waveform-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:.55rem}
.waveform-title{font-size:12.5px;font-weight:600;color:var(--teal)}
.waveform-time{font-size:11px;color:var(--teal);font-variant-numeric:tabular-nums;font-family:'DM Sans',sans-serif}
.waveform-wrap{position:relative;height:80px;background:rgba(26,96,96,.07);border-radius:8px;overflow:hidden;cursor:crosshair;margin-bottom:.6rem}
.waveform-wrap:hover{background:rgba(26,96,96,.11)}
.waveform-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.waveform-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:.5rem;font-size:11.5px;color:var(--teal);background:rgba(234,244,244,.7)}
.waveform-cursor{position:absolute;top:0;bottom:0;width:2px;background:var(--teal);transform:translateX(-50%);pointer-events:none;left:50%}
.wave-jog-btn{padding:.25rem .5rem;border-radius:6px;border:1px solid rgba(26,96,96,.3);background:rgba(26,96,96,.1);color:var(--teal);font-size:11px;font-weight:600;font-family:'DM Sans',sans-serif;cursor:pointer;transition:background .12s;white-space:nowrap}
.wave-jog-btn:hover{background:rgba(26,96,96,.2)}
.waveform-controls{display:flex;align-items:center;gap:.5rem}

/* ── LOOP BUTTON ────────────────────────────────────────────────────────── */
.loop-btn{width:26px;height:26px;border-radius:6px;border:1px solid var(--border);background:var(--surface);color:var(--ink3);font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:'DM Sans',sans-serif;transition:all .15s;flex-shrink:0;padding:0;line-height:1}
.loop-btn:hover{background:var(--teal-bg);color:var(--teal);border-color:var(--teal)}
.loop-btn.on{background:var(--teal);color:#fff;border-color:var(--teal)}

/* ── WORKBOOK ACCORDION ─────────────────────────────────────────────────── */
.wb-wave-container{margin-bottom:.75rem}
.wb-accordion{display:flex;flex-direction:column;gap:.4rem}

.wb-part{border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--surface)}
.wb-part-head{display:flex;align-items:center;gap:.5rem;padding:.65rem .85rem;cursor:pointer;user-select:none;background:var(--accent3);transition:background .12s}
.wb-part-head:hover{background:var(--accent2)}
.wb-part-arrow{font-size:11px;color:var(--ink3);flex-shrink:0;width:10px}
.wb-part-label{font-size:13px;font-weight:600;color:var(--ink);flex:1}
.wb-part-count{font-size:10.5px;color:var(--ink3);flex-shrink:0}
.wb-part-body{padding:.35rem .5rem;display:block;border-top:1px solid var(--border)}

.wb-item{border-radius:7px;margin:.25rem 0;overflow:hidden}
.wb-item-head{display:flex;align-items:center;gap:.5rem;padding:.5rem .7rem;cursor:pointer;user-select:none;background:var(--paper);border:1px solid var(--border);border-radius:7px;transition:background .12s}
.wb-item-head:hover{background:var(--teal-bg)}
.wb-item-arrow{font-size:10px;color:var(--ink3);flex-shrink:0;width:9px}
.wb-item-q{font-size:11.5px;font-weight:700;color:var(--teal);min-width:28px;flex-shrink:0}
.wb-item-title{font-size:12.5px;color:var(--ink2);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wb-item-body{padding:.6rem .7rem .4rem;background:var(--surface);border:1px solid var(--border);border-top:none;border-radius:0 0 7px 7px}
.wb-item-card{background:var(--paper);border-radius:8px;padding:.6rem .75rem .5rem;margin-bottom:.5rem}
.wb-item-card-title{font-size:11px;color:var(--ink3);margin-bottom:.3rem;font-style:italic}

/* ── FONT TOGGLE ─────────────────────────────────────────────────────────── */
.font-toggle{display:flex;align-items:center;justify-content:center;height:24px;padding:0 .45rem;border-radius:5px;border:1px solid var(--border);background:var(--surface);cursor:pointer;font-size:13px;color:var(--ink2);white-space:nowrap;transition:all .15s;user-select:none;flex-shrink:0;margin-left:.2rem}
.font-toggle:hover{border-color:var(--accent);color:var(--accent);background:var(--accent3)}

/* ── READING EXERCISES ───────────────────────────────────────────────────────── */
.rd-section{margin-top:1.25rem;border-top:2px solid var(--border);padding-top:1rem}
.rd-section-head{font-size:12px;font-weight:700;color:var(--ink3);letter-spacing:.06em;text-transform:uppercase;margin-bottom:.15rem}
.rd-title{font-family:var(--zh-font);font-size:14px;font-weight:600;color:var(--ink);margin-bottom:.1rem}
.rd-instr{font-size:11.5px;color:var(--ink3);margin-bottom:.9rem;line-height:1.5}

/* Ex1: dialogue matching */
.rd-ex1-wrap{display:flex;flex-direction:column;gap:.9rem}
.rd-ex1-list{display:flex;flex-direction:column;gap:.45rem}
.rd-ex1-slot{display:flex;flex-direction:row;align-items:stretch;gap:.5rem}
.rd-ex1-slot .rd-ex1-rows{display:flex;flex-direction:column;flex:1;gap:.3rem}
.rd-ex1-slot .rd-ex1-rows>*:nth-child(2){margin-left:1.5rem}
.rd-ex1-slot .rd-flip-col{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:42px;visibility:hidden}
.rd-ex1-slot.paired .rd-flip-col{visibility:visible}
.rd-ex1-options{display:flex;flex-direction:column;gap:.4rem;margin-top:.3rem;padding-top:.6rem;border-top:1px dashed var(--border)}
.rd-option{display:flex;align-items:flex-start;gap:.5rem;padding:.5rem .65rem;background:#f0f7f7;border:1.5px solid #c8dede;border-radius:8px;cursor:pointer;transition:all .15s;user-select:none}
.rd-option:hover{border-color:var(--teal);background:var(--teal-bg)}
.rd-option.selected{border-color:var(--teal);background:var(--teal-bg);box-shadow:0 0 0 2px rgba(26,96,96,.15)}
.rd-option.used{opacity:1;cursor:pointer}
.rd-option.correct{border-color:#2a7a3b;background:#edfaf0;cursor:default}
.rd-option.wrong{border-color:var(--accent);background:var(--accent2)}
.rd-option-id{font-size:11px;font-weight:700;color:var(--teal);min-width:16px;flex-shrink:0;padding-top:1px}
.rd-option-text{font-family:var(--zh-font);font-size:13.5px;color:var(--ink);line-height:1.5}
.rd-questions{display:flex;flex-direction:column;gap:.45rem}
.rd-q-row{display:flex;align-items:center;gap:.55rem;padding:.5rem .65rem;background:#fdf6ee;border:1.5px solid #e8d9c0;border-radius:8px;cursor:pointer;transition:all .15s;user-select:none;min-height:44px}
.rd-q-row:hover:not(.answered){border-color:var(--accent);background:var(--accent3)}
.rd-q-row.active-q{border-color:var(--accent);background:var(--accent3);box-shadow:0 0 0 2px rgba(181,49,31,.12)}
.rd-q-row.answered{cursor:default}
.rd-q-row.correct-pair{border-color:#2a7a3b;background:#edfaf0}
.rd-q-row.wrong-pair{border-color:var(--accent);background:var(--accent2)}
.rd-q-num{font-size:11px;font-weight:700;color:var(--ink3);min-width:20px;flex-shrink:0}
.rd-q-text{font-family:var(--zh-font);font-size:13.5px;color:var(--ink);flex:1;line-height:1.5}
.rd-flip-btn{width:38px;align-self:stretch;font-size:16px;font-weight:400;background:var(--teal-bg);border:1px solid var(--teal);border-radius:7px;color:var(--teal);cursor:pointer;font-family:'DM Sans',sans-serif;transition:all .15s;display:flex;align-items:center;justify-content:center}
.rd-flip-btn:hover{background:var(--teal);color:#fff}
.rd-check-btn{margin-top:.75rem;padding:.45rem .9rem;background:var(--teal);color:#fff;border:none;border-radius:7px;font-size:12.5px;font-weight:600;cursor:pointer;font-family:'DM Sans',sans-serif;transition:opacity .15s}
.rd-check-btn:hover{opacity:.85}
.rd-check-btn:disabled{opacity:.4;cursor:default}
.rd-reset-btn{margin-top:.5rem;padding:.35rem .7rem;background:none;color:var(--ink3);border:1px solid var(--border);border-radius:7px;font-size:11.5px;cursor:pointer;font-family:'DM Sans',sans-serif;margin-left:.4rem}
.rd-score{font-size:12px;font-weight:600;color:var(--teal);margin-top:.5rem;padding:.4rem .65rem;background:var(--teal-bg);border-radius:6px;display:inline-block}

/* Ex2: fill in the blanks */
.rd-ex2-words{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.9rem}
.rd-word-chip{padding:.35rem .7rem;background:var(--surface);border:1.5px solid var(--border);border-radius:20px;font-family:var(--zh-font);font-size:13.5px;color:var(--ink);cursor:pointer;transition:all .15s;user-select:none;font-weight:600}
.rd-word-chip:hover{border-color:var(--teal);background:var(--teal-bg);color:var(--teal)}
.rd-word-chip.selected{border-color:var(--teal);background:var(--teal);color:#fff}
.rd-word-chip.used{opacity:.4;cursor:pointer}
.rd-word-chip.correct{border-color:#2a7a3b;background:#edfaf0;color:#2a7a3b;cursor:default}
.rd-word-chip.wrong{border-color:var(--accent);background:var(--accent2);color:var(--accent)}
.rd-fill-questions{display:flex;flex-direction:column;gap:.5rem}
.rd-fill-row{display:flex;align-items:center;gap:.5rem;padding:.55rem .65rem;background:var(--paper);border:1.5px solid var(--border);border-radius:8px;cursor:pointer;transition:all .15s;min-height:44px;user-select:none}
.rd-fill-row:hover:not(.filled){border-color:var(--teal);background:var(--teal-bg)}
.rd-fill-row.active-fill{border-color:var(--teal);background:var(--teal-bg);box-shadow:0 0 0 2px rgba(26,96,96,.15)}
.rd-fill-row.filled{cursor:default}
.rd-fill-row.correct-fill{border-color:#2a7a3b;background:#edfaf0}
.rd-fill-row.wrong-fill{border-color:var(--accent);background:var(--accent2)}
.rd-fill-num{font-size:11px;font-weight:700;color:var(--ink3);min-width:20px;flex-shrink:0}
.rd-fill-text{font-family:var(--zh-font);font-size:13.5px;color:var(--ink);flex:1;line-height:1.6}
.rd-gap{display:inline-block;min-width:36px;padding:1px 6px;border-radius:4px;background:var(--teal-bg);border:1.5px dashed var(--teal);color:var(--teal);font-weight:700;text-align:center;transition:all .2s;vertical-align:baseline}
.rd-gap.filled-gap{background:var(--teal);color:#fff;border-style:solid;border-color:var(--teal)}
.rd-gap.correct-gap{background:#2a7a3b;color:#fff;border-color:#2a7a3b;border-style:solid}
.rd-gap.wrong-gap{background:var(--accent2);color:var(--accent);border-color:var(--accent);border-style:solid}
.rd-fill-badge{font-size:11px;font-weight:700;width:22px;height:22px;border-radius:5px;display:flex;align-items:center;justify-content:center;flex-shrink:0}

/* Ex3: multiple choice */
.rd-mc-questions{display:flex;flex-direction:column;gap:.85rem}
.rd-mc-item{background:var(--surface);border:1.5px solid var(--border);border-radius:10px;overflow:hidden}
.rd-mc-passage{font-family:var(--zh-font);font-size:13.5px;color:var(--ink);line-height:1.7;padding:.65rem .75rem .4rem;border-bottom:1px solid var(--border)}
.rd-mc-q{font-family:var(--zh-font);font-size:13px;font-weight:600;color:var(--teal);padding:.35rem .75rem .3rem}
.rd-mc-opts{display:flex;gap:.4rem;padding:.3rem .65rem .55rem;flex-wrap:wrap}
.rd-mc-opt{padding:.35rem .75rem;border:1.5px solid var(--border);border-radius:20px;font-family:var(--zh-font);font-size:13px;color:var(--ink);cursor:pointer;transition:all .15s;user-select:none;background:var(--paper)}
.rd-mc-opt:hover:not(.answered){border-color:var(--teal);background:var(--teal-bg);color:var(--teal)}
.rd-mc-opt.chosen{border-color:var(--teal);background:var(--teal-bg);color:var(--teal);font-weight:600}
.rd-mc-opt.correct-mc{border-color:#2a7a3b;background:#edfaf0;color:#2a7a3b;font-weight:600;cursor:default}
.rd-mc-opt.wrong-mc{border-color:var(--accent);background:var(--accent2);color:var(--accent);cursor:default}
.rd-mc-opt.answered:not(.chosen):not(.correct-mc){cursor:default;opacity:.6}

/* ── OFFLINE DOWNLOAD PANEL ─────────────────────────────────────────── */
.dl-panel{margin:.75rem 0;background:var(--surface);border:1.5px solid var(--border);border-radius:12px;overflow:hidden;font-size:13px}
.dl-panel-header{display:flex;align-items:center;justify-content:space-between;padding:.5rem .85rem;background:var(--paper);gap:.5rem;flex-wrap:wrap}
.dl-panel-title{font-size:13px;font-weight:500;color:var(--ink);white-space:nowrap}
.dl-panel-count{font-size:12px;color:var(--ink3)}
.dl-panel-btns{padding:.35rem .85rem .5rem;display:flex;gap:.5rem}
.dl-panel-ok{font-size:12px;color:var(--green);padding:.4rem .85rem;font-weight:500}
.dl-panel .btn{font-size:12px;padding:.25rem .6rem}
.dl-prog-wrap{height:6px;background:var(--border);margin:.45rem .85rem .15rem;border-radius:99px;overflow:hidden}
.dl-prog-bar{height:100%;background:var(--teal);border-radius:99px;transition:width .3s}
.dl-prog-lbl{font-size:12px;color:var(--ink3);padding:.1rem .85rem .5rem;}

/* ── LECTURE NOTES POPUP ─────────────────────────────────────────────────── */
.ln-overlay{position:fixed;inset:0;z-index:9998;background:#fff;display:flex;flex-direction:column;font-family:'DM Sans',sans-serif;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.ln-toolbar{flex:0 0 auto;display:flex;align-items:center;gap:3px;padding:5px 8px;background:var(--bar);border-bottom:1px solid var(--border);flex-wrap:wrap;min-height:46px}
.ln-tbtn{min-width:34px;height:34px;border:1.5px solid transparent;border-radius:7px;background:transparent;cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center;padding:0 6px;color:var(--ink);-webkit-tap-highlight-color:transparent}
.ln-tbtn:active{opacity:.7}
.ln-tbtn.active{background:var(--teal);color:#fff;border-color:var(--teal)}
.ln-tbtn:disabled{opacity:.3;cursor:default}
.ln-sbtn{min-width:27px;height:27px;border:1.5px solid var(--border);border-radius:5px;background:transparent;cursor:pointer;font-size:11px;font-weight:600;color:var(--ink);-webkit-tap-highlight-color:transparent}
.ln-sbtn.active{background:var(--teal);color:#fff;border-color:var(--teal)}
.ln-colors{display:flex;gap:3px;align-items:center}
.ln-color{width:22px;height:22px;border-radius:50%;border:2.5px solid transparent;cursor:pointer;padding:0;outline:none;-webkit-tap-highlight-color:transparent}
.ln-color.active{border-color:var(--teal);box-shadow:0 0 0 2px #fff,0 0 0 4px var(--teal)}
.ln-div{width:1px;height:24px;background:var(--border);margin:0 3px;flex-shrink:0}
.ln-spacer{flex:1}
.ln-save-status{font-size:11px;white-space:nowrap;padding:0 4px;transition:color .2s}
.ln-save-status.saving{color:var(--ink3)}
.ln-save-status.saved{color:#3a8a3a}
.ln-save-status.failed{color:#c0392b}
.ln-del-btn{height:32px;border:1.5px solid var(--border);border-radius:7px;background:transparent;cursor:pointer;font-size:13px;padding:0 9px;color:var(--ink);transition:background .15s,border-color .15s,color .15s;-webkit-tap-highlight-color:transparent}
.ln-del-btn.warn{background:#fff7e0;border-color:#e07a00;color:#9a5000;font-weight:600}
.ln-del-btn.danger{background:#fdecea;border-color:#b5311f;color:#b5311f;font-weight:700}
.ln-close-btn{min-width:34px;height:34px;border:none;border-radius:7px;background:transparent;cursor:pointer;font-size:17px;font-weight:700;color:var(--ink);-webkit-tap-highlight-color:transparent}
.ln-close-btn:hover{background:var(--accent2)}
.ln-scroll{flex:1;overflow-y:auto;overflow-x:auto;-webkit-overflow-scrolling:touch;position:relative;display:flex;flex-direction:column;align-items:flex-start}
.ln-inner{position:relative;flex-shrink:0}
.ln-text{padding:16px 16px 8px;pointer-events:none;user-select:none;-webkit-user-select:none}
.ln-text-body{font-family:'DM Sans',sans-serif;color:var(--ink)}
.ln-title{font-weight:600;font-size:1.1em;margin-bottom:12px}
.ln-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px;margin-bottom:8px;line-height:1.5}
.ln-spk{color:var(--teal);font-weight:600;margin-right:4px;font-size:.85em}
.ln-char{display:inline-flex;flex-direction:column;align-items:center}
.ln-char .hz{font-size:1em;line-height:1.25}
.ln-char .py{font-size:.58em;color:var(--ink3);line-height:1.1}
.ln-char.punct .hz{font-size:1em}
.ln-extra{min-height:40vh;background:repeating-linear-gradient(to bottom,transparent 0,transparent 31px,var(--border) 31px,var(--border) 32px)}
/* Prevent double-tap zoom on all overlay controls; scroll/canvas override below */
.ln-overlay{touch-action:manipulation}
.ln-canvas{position:absolute;top:0;left:0;touch-action:none;cursor:crosshair}
/* Pan mode: canvas passes both axes of touch scroll to the parent */
.ln-pan-mode .ln-canvas{cursor:grab;touch-action:pan-x pan-y}
/* Scroll container handles both scroll directions; pinch is managed in JS */
.ln-scroll{touch-action:pan-x pan-y}
.ln-notes-btn{margin-top:8px;font-size:12px;padding:.3rem .7rem}
.ln-notes-btn.has-notes{background:var(--teal);color:#fff;border-color:var(--teal)}
.ln-size-group{display:flex;align-items:center;gap:3px;flex-shrink:0}
.ln-tbtn#lnBtnText{font-weight:700;font-size:15px;font-family:'DM Sans',sans-serif}
.ln-add-space-bar{display:flex;justify-content:center;align-items:center;width:100%;box-sizing:border-box;padding:12px 0 16px;background:var(--paper);border-top:1px dashed var(--border);position:relative;z-index:2;flex-shrink:0}
.ln-add-space-btn{font-size:13px;font-weight:500;padding:.45rem 1.2rem;border:1.5px solid var(--teal);border-radius:8px;background:transparent;color:var(--teal);cursor:pointer;-webkit-tap-highlight-color:transparent}
.ln-add-space-btn:active{background:var(--teal);color:#fff}
.ln-text-input{position:fixed;background:transparent;border:none;border-bottom:1.5px dashed currentColor;outline:none;font-family:'DM Sans',sans-serif;min-width:100px;padding:0 2px;z-index:10000}

/* Text popup — 50% transparent glass so the underlying lecture note stays visible */
.ln-tp{position:fixed;z-index:10001;background:rgba(255,255,255,0.2);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);border:1.5px solid rgba(180,180,180,0.3);border-radius:10px;box-shadow:0 2px 12px rgba(0,0,0,.08);min-width:140px;overflow:hidden;font-family:'DM Sans',sans-serif;display:flex;flex-direction:column;box-sizing:border-box}
.ln-tp-handle{padding:11px 12px;background:var(--bar);cursor:grab;font-size:12px;color:var(--ink3);user-select:none;touch-action:none;border-bottom:1px solid var(--border)}
.ln-tp-handle:active{cursor:grabbing}
/* Padding must match .ln-ta-body for WYSIWYG line-break matching */
.ln-tp-area{display:block;width:100%;box-sizing:border-box;padding:8px 12px;border:none;outline:none;font-family:'DM Sans',sans-serif;font-size:15px;resize:none;flex:1;min-height:60px;color:var(--ink);background:transparent}
/* Resize grip — bottom-right corner, clear of Done button */
.ln-tp-resize{position:absolute;bottom:6px;right:6px;width:24px;height:24px;display:flex;align-items:center;justify-content:center;cursor:nwse-resize;touch-action:none;font-size:16px;color:var(--ink3);user-select:none;line-height:1;pointer-events:auto}

/* Text annotation elements */
.ln-ta{position:absolute;z-index:2;cursor:default;box-sizing:border-box}
.ln-ta.active{z-index:6}
/* Padding must match .ln-tp-area for identical line-break behaviour */
.ln-ta-body{white-space:pre-wrap;word-break:break-word;line-height:1.45;padding:8px 12px;box-sizing:border-box;user-select:none;-webkit-user-select:none}
/* No gap between text and tool row; hovered OR active shows tools */
.ln-ta-tools{display:none;gap:3px;margin-top:0;padding:0 8px 4px}
.ln-ta.hovered .ln-ta-tools,.ln-ta.active .ln-ta-tools{display:flex}
/* ~2× larger buttons: 44px tall, 44px min-width, SVG icons inside */
.ln-ta-btn{height:44px;min-width:44px;border:1.5px solid var(--border);border-radius:8px;background:var(--paper);cursor:pointer;padding:0 8px;color:var(--ink);display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent}
.ln-ta-btn svg{display:block;flex-shrink:0}
.ln-ta-drag{cursor:grab;touch-action:none}
.ln-ta-drag:active{cursor:grabbing}
.ln-ta-del{color:var(--accent)}

/* Photo annotation elements */
.ln-pa{position:absolute;z-index:1;box-sizing:border-box;cursor:default}
.ln-pa.active{z-index:5}
.ln-pa-tools{display:none;gap:3px;padding:4px 8px;background:var(--paper);border-bottom:1px solid var(--border)}
.ln-pa.hovered .ln-pa-tools,.ln-pa.active .ln-pa-tools{display:flex}
.ln-pa-btn{height:44px;min-width:44px;border:1.5px solid var(--border);border-radius:8px;background:var(--paper);cursor:pointer;padding:0 8px;color:var(--ink);display:flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent}
.ln-pa-btn svg{display:block;flex-shrink:0}
.ln-pa-drag{cursor:grab;touch-action:none}
.ln-pa-drag:active{cursor:grabbing}
.ln-pa-del{color:var(--accent)}
.ln-pa-resize{position:absolute;bottom:4px;right:4px;width:28px;height:28px;cursor:nwse-resize;display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--ink3);background:var(--paper);border:1.5px solid var(--border);border-radius:6px;opacity:0;transition:opacity .15s;touch-action:none;user-select:none}
.ln-pa.hovered .ln-pa-resize,.ln-pa.active .ln-pa-resize{opacity:1}

/* ── LOGIN MODAL ─────────────────────────────────────────────────────────── */
.login-overlay{position:fixed;inset:0;z-index:99999;background:var(--paper);display:flex;align-items:center;justify-content:center;font-family:'DM Sans',sans-serif}
.login-box{width:100%;max-width:340px;padding:2rem 1.5rem;display:flex;flex-direction:column;gap:.9rem}
.login-logo{font-size:2rem;text-align:center;letter-spacing:3px;color:var(--teal)}
.login-title{font-size:1.2rem;font-weight:600;text-align:center;color:var(--ink);margin:-.25rem 0 .25rem}
.login-error{color:var(--accent);font-size:13px;text-align:center;background:var(--accent2);padding:.5rem .75rem;border-radius:6px}
.login-input{width:100%;padding:.75rem 1rem;border:1.5px solid var(--border);border-radius:8px;font-size:16px;background:var(--paper);color:var(--ink);box-sizing:border-box;outline:none;transition:border-color .15s;-webkit-appearance:none}
.login-input:focus{border-color:var(--teal)}
.login-btn{width:100%;padding:.75rem;background:var(--teal);color:#fff;border:none;border-radius:8px;font-size:16px;font-weight:500;cursor:pointer;transition:opacity .15s}
.login-btn:active,.login-btn:disabled{opacity:.7}

/* ── USER BADGE ──────────────────────────────────────────────────────────── */
.user-badge{display:flex;align-items:center;gap:6px;padding:4px 10px;font-size:12px;color:var(--ink3);border-top:1px solid var(--border);background:var(--bar)}
.user-badge button{background:none;border:1px solid var(--border);color:var(--ink3);cursor:pointer;font-size:11px;padding:2px 8px;border-radius:4px}
.user-badge button:hover{background:var(--accent2);color:var(--accent)}

/* ── ADMIN USER LIST ─────────────────────────────────────────────────────── */
.admin-user-row{display:flex;align-items:center;gap:.5rem;padding:.4rem .5rem;border-bottom:1px solid var(--border);flex-wrap:wrap}
.admin-user-name{flex:1;font-size:14px;font-weight:500;min-width:100px}
.admin-user-date{font-size:11px;color:var(--ink3);min-width:70px}
.admin-badge{font-size:10px;background:var(--teal);color:#fff;border-radius:3px;padding:1px 5px;vertical-align:middle;margin-left:4px}

/* ── NON-HSK GENERATOR ───────────────────────────────────────────────────── */
.gen-view{padding:.5rem 0 2rem}
.gen-section{margin:.5rem .9rem 1rem;background:var(--paper);border:1px solid var(--border);border-radius:12px;overflow:hidden}
.gen-section-hdr{display:flex;align-items:baseline;gap:.5rem;padding:.6rem .9rem;border-bottom:1px solid var(--border);background:var(--bar)}
.gen-sec-title{font-size:.95rem;font-weight:600;color:var(--ink)}
.gen-sec-sub{font-size:.75rem;color:var(--ink3)}

/* Vocab / grammar tree */
.gen-tree{padding:.5rem .5rem .6rem}
.gen-tree-src{margin-bottom:.3rem}
.gen-tree-level{font-size:.8rem;font-weight:600;color:var(--teal);padding:.2rem .4rem .15rem;letter-spacing:.03em;text-transform:uppercase}
.gen-tree-ch-wrap{padding-left:.4rem}
.gen-tree-ch{border-left:2px solid var(--border);margin:.15rem 0;border-radius:0 6px 6px 0}
.gen-tree-ch-hdr{display:flex;align-items:center;gap:.4rem;padding:.3rem .5rem;cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;border-radius:6px}
.gen-tree-ch-hdr:active{background:var(--accent3)}
.gen-tree-arrow{font-size:.75rem;color:var(--ink3);width:.9rem;flex-shrink:0}
.gen-tree-ch-lbl{font-size:.82rem;color:var(--ink2)}
.gen-tree-body{padding:.3rem .5rem .4rem 1.3rem}
.gen-tree-chips{display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.35rem}
.gen-tree-chip{display:inline-block;padding:.22rem .5rem;border:1px solid var(--border);border-radius:6px;font-size:.78rem;color:var(--ink2);background:var(--surface);cursor:pointer;-webkit-tap-highlight-color:transparent}
.gen-tree-chip:active,.gen-tree-chip:hover{background:var(--teal-bg);border-color:var(--teal);color:var(--teal)}
.gen-tree-chip.grammar{border-color:#c5b8e8;color:#7c5cbf;background:#f3f0fc}
.gen-tree-chip.grammar:active,.gen-tree-chip.grammar:hover{background:#e9e3fa;border-color:#9c7ed4}
.gen-tree-empty{font-size:.78rem;color:var(--ink3)}
.gen-loading{font-size:.8rem;color:var(--ink3);padding:.2rem 0}
.gen-add-all-btn{font-size:.75rem;padding:.18rem .55rem;border:1px solid var(--teal);border-radius:6px;background:transparent;color:var(--teal);cursor:pointer;margin-bottom:.2rem;-webkit-tap-highlight-color:transparent}
.gen-add-all-btn:active{background:var(--teal-bg)}

/* Chip pool */
.gen-pool-wrap{padding:.5rem .7rem .65rem;display:flex;flex-wrap:wrap;gap:.35rem;align-items:center;min-height:2.8rem}
.gen-pool-empty{font-size:.8rem;color:var(--ink3);font-style:italic}
.gen-chip{display:inline-flex;align-items:center;gap:.25rem;padding:.22rem .45rem .22rem .55rem;border:1.5px solid var(--border);border-radius:20px;font-size:.8rem;color:var(--ink3);background:var(--surface);cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;transition:border-color .12s,background .12s,color .12s}
.gen-chip.on{border-color:var(--teal);background:var(--teal-bg);color:var(--teal)}
.gen-chip-rm{font-size:.75rem;color:var(--ink3);line-height:1;padding:.05rem .1rem;cursor:pointer;opacity:.6}
.gen-chip-rm:hover{opacity:1;color:var(--accent)}
.gen-clear-btn{font-size:.75rem;padding:.18rem .55rem;border:1px solid var(--accent);border-radius:6px;background:transparent;color:var(--accent);cursor:pointer;margin-left:.2rem;-webkit-tap-highlight-color:transparent}
.gen-clear-btn:active{background:var(--accent2)}

/* Controls */
.gen-controls{padding:.5rem .75rem .7rem;display:flex;flex-direction:column;gap:.55rem}
.gen-ctrl-row{display:flex;align-items:center;gap:.55rem}
.gen-ctrl-label{font-size:.82rem;font-weight:500;color:var(--ink2);min-width:4.5rem;flex-shrink:0}
.gen-slider{flex:1;height:4px;accent-color:var(--teal);cursor:pointer}
.gen-len-val{font-size:.82rem;font-weight:600;color:var(--teal);min-width:2rem;text-align:right}
.gen-ctrl-unit{font-size:.75rem;color:var(--ink3)}
.gen-select{flex:1;padding:.3rem .5rem;border:1px solid var(--border);border-radius:7px;background:var(--paper);color:var(--ink);font-size:.82rem;outline:none;cursor:pointer;-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23888'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .55rem center;padding-right:1.6rem}

/* Output */
.gen-btn{display:block;width:calc(100% - 1.5rem);margin:.5rem .75rem;padding:.65rem 1rem;background:var(--teal);color:#fff;border:none;border-radius:9px;font-size:.95rem;font-weight:600;cursor:pointer;-webkit-tap-highlight-color:transparent;transition:opacity .15s}
.gen-btn:active{opacity:.8}
.gen-prompt-out{display:block;width:calc(100% - 1.5rem);margin:.5rem .75rem;padding:.65rem .8rem;border:1px solid var(--border);border-radius:8px;font-size:.8rem;color:var(--ink2);background:var(--surface);resize:vertical;font-family:monospace;line-height:1.55;box-sizing:border-box}
.gen-out-actions{display:flex;gap:.5rem;padding:.2rem .75rem .7rem;flex-wrap:wrap}
.gen-action-btn{padding:.4rem .9rem;border:1.5px solid var(--teal);border-radius:8px;background:transparent;color:var(--teal);font-size:.82rem;font-weight:500;cursor:pointer;-webkit-tap-highlight-color:transparent}
.gen-action-btn:active{background:var(--teal-bg)}
.gen-action-btn.sm{padding:.28rem .65rem;font-size:.75rem}

/* My Texts */
.gen-text-list{padding:.5rem .7rem .7rem;display:flex;flex-direction:column;gap:.7rem}
.gen-empty-msg{font-size:.85rem;color:var(--ink3);padding:.5rem .25rem;line-height:1.6}
.gen-text-card{border:1px solid var(--border);border-radius:10px;padding:.6rem .8rem;background:var(--surface);display:flex;flex-direction:column;gap:.4rem}
.gen-text-meta{display:flex;align-items:baseline;gap:.5rem;flex-wrap:wrap}
.gen-text-title{font-size:.88rem;font-weight:600;color:var(--ink);flex:1}
.gen-text-date{font-size:.75rem;color:var(--ink3)}
.gen-text-tags{display:flex;flex-wrap:wrap;gap:.25rem}
.gen-tag{font-size:.72rem;padding:.1rem .4rem;border-radius:4px;background:var(--accent3);color:var(--ink2);border:1px solid var(--border)}
.gen-text-toggle-btn{font-size:.78rem;color:var(--teal);background:none;border:none;padding:0;cursor:pointer;text-align:left;width:fit-content}
.gen-text-prompt{font-size:.78rem;color:var(--ink2);background:var(--paper);border:1px solid var(--border);border-radius:7px;padding:.5rem .7rem;white-space:pre-wrap;font-family:monospace;line-height:1.5;margin-top:.25rem}
.gen-text-del-btn{font-size:.75rem;padding:.22rem .6rem;border:1px solid var(--accent);border-radius:6px;background:transparent;color:var(--accent);cursor:pointer;width:fit-content;-webkit-tap-highlight-color:transparent}
.gen-text-del-btn:active{background:var(--accent2)}
.btn.danger{color:var(--accent);border-color:var(--accent)}
