@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}

/* ── 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)}
.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:.9rem 1rem;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:.3rem 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:wrap}
.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)}
.fc-note{width:100%;min-height:40px;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:vertical;margin-top:.38rem;display:none}
.fc-note.open{display:block}

/* ── 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:#9FE1CB;color:#04342C}
.sr-due-badge{font-size:.65em;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}

/* ── 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}
@keyframes spin{to{transform:rotate(360deg)}}

/* ── 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:center;gap:0;border:1px solid var(--border);border-radius:6px;overflow:hidden;flex-shrink:0}
.speed-btn{width:24px;height:26px;border:none;background:var(--surface);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:0;line-height:1}
.speed-btn:hover{background:var(--accent2);color:var(--accent)}
.speed-label{font-size:10.5px;font-weight:500;color:var(--ink2);padding:0 .3rem;min-width:34px;text-align:center;font-family:'DM Sans',sans-serif}
.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)}

/* ── 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;}
