:root{
  --ink:#14181d;
  --ink-2:#1d232b;
  --ink-3:#2b333d;
  --paper:#f6f6f4;
  --card:#ffffff;
  --arterial:#b32b23;
  --arterial-soft:#fbeeec;
  --venous:#2b6670;
  --venous-soft:#e9f2f2;
  --amber:#8a6410;
  --amber-soft:#faf3e2;
  --text:#1a1e24;
  --text-2:#4d5661;
  --text-3:#7b8794;
  --rule:#dedcd6;
  --rule-soft:#ebeae5;
  --sans:'Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  --serif:'Noto Serif TC',Georgia,serif;
  --mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;
}

*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  font-family:var(--sans);
  background:var(--paper);
  color:var(--text);
  line-height:1.75;
  -webkit-font-smoothing:antialiased;
}

/* ---------- LAYOUT ---------- */
.shell{display:flex;min-height:100vh}

.sidebar{
  width:290px;flex-shrink:0;
  background:var(--ink);
  color:#c8cdd4;
  position:sticky;top:0;height:100vh;
  overflow-y:auto;
  padding:0 0 40px;
}
.sidebar::-webkit-scrollbar{width:6px}
.sidebar::-webkit-scrollbar-thumb{background:#3a434e;border-radius:3px}

.brand{
  padding:28px 24px 22px;
  border-bottom:1px solid #262d36;
  position:sticky;top:0;background:var(--ink);z-index:2;
}
.brand-mark{
  display:flex;gap:5px;margin-bottom:14px;
}
.brand-mark span{height:3px;flex:1;border-radius:2px}
.brand-mark span:nth-child(1){background:var(--arterial)}
.brand-mark span:nth-child(2){background:var(--venous)}
.brand-title{
  font-family:var(--serif);font-weight:700;font-size:19px;
  color:#fff;letter-spacing:.02em;line-height:1.4;
}
.brand-sub{
  font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:#6f7986;margin-top:7px;
}

.mod-head{
  padding:22px 24px 8px;
  font-family:var(--mono);font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:#68727f;
}
.mod-head strong{color:#a8b1bb;font-weight:500}

.nav-item{
  display:flex;align-items:baseline;gap:10px;
  padding:8px 24px 8px 24px;
  font-size:13.5px;color:#aab2bc;
  cursor:pointer;border:none;background:none;width:100%;text-align:left;
  font-family:var(--sans);line-height:1.5;
  border-left:2px solid transparent;
  transition:background .12s,color .12s;
}
.nav-item:hover{background:#1c222a;color:#e4e8ec}
.nav-item.active{background:var(--ink-2);color:#fff;border-left-color:var(--arterial)}
.nav-item.active .nav-num{color:var(--arterial)}
.nav-num{
  font-family:var(--mono);font-size:10.5px;color:#5c6673;
  flex-shrink:0;width:22px;
}
.nav-item.done .nav-num::after{content:'·';color:var(--venous);margin-left:3px}

/* ---------- CONTENT ---------- */
.main{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{
  display:none;
  position:sticky;top:0;z-index:20;
  background:var(--ink);color:#fff;
  padding:12px 18px;align-items:center;gap:14px;
}
.menu-btn{
  background:#2b333d;border:none;color:#fff;font-size:13px;
  padding:7px 13px;border-radius:5px;cursor:pointer;font-family:var(--sans);
}
.topbar-title{font-size:14px;font-weight:500}

.pane{
  max-width:820px;width:100%;
  margin:0 auto;              /* 在寬螢幕上置中，不要黏在左邊 */
  padding:56px 56px 120px;
  animation:rise .32s ease both;
}
@keyframes rise{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.pane{animation:none}html{scroll-behavior:auto}}

.eyebrow{
  font-family:var(--mono);font-size:11px;letter-spacing:.15em;
  text-transform:uppercase;color:var(--text-3);margin-bottom:12px;
}
h1{
  font-family:var(--serif);font-size:34px;font-weight:700;
  line-height:1.35;letter-spacing:-.01em;margin-bottom:10px;
}
h2{
  font-family:var(--serif);font-size:21px;font-weight:700;
  margin:44px 0 14px;line-height:1.5;
  padding-bottom:9px;border-bottom:1px solid var(--rule);
}
h3{
  font-size:16px;font-weight:700;margin:30px 0 10px;
  color:var(--ink);
}
h4{font-size:14.5px;font-weight:700;margin:20px 0 8px;color:var(--text-2)}
p{margin-bottom:14px;color:var(--text)}
.lede{font-size:16px;color:var(--text-2);margin-bottom:8px}

ul,ol{margin:0 0 16px;padding-left:22px}
li{margin-bottom:7px}
li::marker{color:var(--text-3)}
ul ul,ol ol,ul ol{margin-top:7px;margin-bottom:4px}

strong{font-weight:700;color:var(--ink)}
em{font-style:normal;background:linear-gradient(transparent 62%,var(--amber-soft) 62%);font-weight:500}

/* English terms in mono */
.t{font-family:var(--mono);font-size:.92em;font-weight:500;color:var(--ink)}

hr{border:none;border-top:1px solid var(--rule);margin:38px 0}

/* ---------- TABLES ---------- */
.tw{overflow-x:auto;margin:0 0 20px;border:1px solid var(--rule);border-radius:7px;background:var(--card)}
table{border-collapse:collapse;width:100%;font-size:14px;min-width:440px}
th{
  text-align:left;padding:11px 14px;
  background:#f0efec;font-weight:700;font-size:12.5px;
  color:var(--ink);border-bottom:1px solid var(--rule);
  white-space:nowrap;
}
td{padding:11px 14px;border-bottom:1px solid var(--rule-soft);vertical-align:top;line-height:1.65}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fafaf8}
td:first-child{font-weight:500}

/* ---------- DUALITY CARD (signature) ---------- */
.duality{
  display:grid;grid-template-columns:1fr 1fr;gap:0;
  border:1px solid var(--rule);border-radius:8px;overflow:hidden;
  margin:0 0 22px;background:var(--card);
}
.duality > div{padding:18px 20px 20px}
.d-a{background:var(--arterial-soft);border-right:1px solid var(--rule)}
.d-b{background:var(--venous-soft)}
.d-tag{
  font-family:var(--mono);font-size:10px;letter-spacing:.13em;
  text-transform:uppercase;margin-bottom:7px;font-weight:500;
}
.d-a .d-tag{color:var(--arterial)}
.d-b .d-tag{color:var(--venous)}
.d-title{font-family:var(--serif);font-size:17px;font-weight:700;margin-bottom:10px;line-height:1.4}
.duality ul{margin-bottom:0;padding-left:18px;font-size:13.5px}
.duality li{margin-bottom:6px}
.duality p{font-size:13.5px;margin-bottom:9px}
.duality p:last-child{margin-bottom:0}

/* ---------- CALLOUTS ---------- */
.note{
  border-left:3px solid var(--venous);
  background:var(--venous-soft);
  padding:15px 18px;border-radius:0 7px 7px 0;margin:0 0 20px;
  font-size:14px;
}
.warn{
  border-left:3px solid var(--arterial);
  background:var(--arterial-soft);
  padding:15px 18px;border-radius:0 7px 7px 0;margin:0 0 20px;
  font-size:14px;
}
.flag{
  border-left:3px solid var(--amber);
  background:var(--amber-soft);
  padding:15px 18px;border-radius:0 7px 7px 0;margin:0 0 20px;
  font-size:14px;
}
.note p:last-child,.warn p:last-child,.flag p:last-child,
.note ul:last-child,.warn ul:last-child,.flag ul:last-child{margin-bottom:0}
.co-label{
  font-family:var(--mono);font-size:10px;letter-spacing:.13em;
  text-transform:uppercase;display:block;margin-bottom:6px;font-weight:500;
}
.note .co-label{color:var(--venous)}
.warn .co-label{color:var(--arterial)}
.flag .co-label{color:var(--amber)}

/* ---------- FLOW ---------- */
.flow{
  background:var(--ink);color:#dbe0e6;
  font-family:var(--mono);font-size:12.5px;line-height:1.95;
  padding:19px 22px;border-radius:8px;margin:0 0 20px;
  overflow-x:auto;white-space:pre;
}
.flow .hl{color:#f0a89f}
.flow .hl2{color:#8fc4cb}

/* ---------- MYTHS ---------- */
.myth{
  background:var(--card);border:1px solid var(--rule);
  border-radius:8px;padding:16px 18px;margin-bottom:12px;
}
.myth-q{font-weight:700;color:var(--arterial);margin-bottom:7px;font-size:14.5px}
.myth-q::before{content:'✕';margin-right:8px;font-weight:400}
.myth-a{font-size:14px;color:var(--text-2);margin:0}
.myth-a::before{content:'→';margin-right:8px;color:var(--venous);font-weight:700}

/* ---------- VOCAB ---------- */
.vocab-bar{
  display:flex;gap:10px;align-items:center;flex-wrap:wrap;
  margin-bottom:16px;
}
.vsearch{
  flex:1;min-width:180px;
  padding:9px 13px;border:1px solid var(--rule);border-radius:6px;
  font-family:var(--sans);font-size:13.5px;background:var(--card);color:var(--text);
}
.vsearch:focus{outline:2px solid var(--venous);outline-offset:1px;border-color:transparent}
.tgl{
  padding:9px 15px;border:1px solid var(--rule);border-radius:6px;
  background:var(--card);cursor:pointer;font-family:var(--sans);
  font-size:13px;color:var(--text-2);white-space:nowrap;
}
.tgl:hover{border-color:var(--text-3)}
.tgl.on{background:var(--ink);color:#fff;border-color:var(--ink)}

.vlist{display:flex;flex-direction:column;gap:8px}
.vrow{
  background:var(--card);border:1px solid var(--rule);
  border-radius:7px;padding:13px 16px;
}
.vterm{font-family:var(--mono);font-size:14px;font-weight:500;color:var(--ink)}
.vzh{font-size:13.5px;color:var(--venous);font-weight:500;margin-top:3px}
.vzh.hidden{filter:blur(5px);cursor:pointer;user-select:none}
.vuse{
  font-family:var(--mono);font-size:12.5px;font-style:italic;
  color:var(--text-3);margin-top:6px;line-height:1.6;
}
.vcount{font-family:var(--mono);font-size:11.5px;color:var(--text-3)}

/* ---------- QUIZ ---------- */
.q{
  background:var(--card);border:1px solid var(--rule);
  border-radius:9px;padding:20px 22px;margin-bottom:16px;
}
.q-n{
  font-family:var(--mono);font-size:11px;letter-spacing:.1em;
  color:var(--text-3);margin-bottom:8px;
}
.q-text{font-weight:500;margin-bottom:14px;line-height:1.7}
.q textarea{
  width:100%;min-height:88px;padding:11px 13px;
  border:1px solid var(--rule);border-radius:6px;
  font-family:var(--sans);font-size:14px;line-height:1.7;
  resize:vertical;background:#fcfcfb;color:var(--text);
}
.q textarea:focus{outline:2px solid var(--venous);outline-offset:1px;border-color:transparent}
.q-btn{
  margin-top:11px;padding:8px 17px;
  background:var(--ink);color:#fff;border:none;border-radius:6px;
  font-family:var(--sans);font-size:13.5px;cursor:pointer;
}
.q-btn:hover{background:var(--ink-3)}
.q-ans{
  margin-top:15px;padding:16px 18px;
  background:var(--venous-soft);border-radius:7px;
  border-left:3px solid var(--venous);font-size:14px;
}
.q-ans[hidden]{display:none}
.q-ans h4{margin-top:14px}
.q-ans h4:first-child{margin-top:0}
.q-ans ul{margin-bottom:10px}
.q-ans p:last-child,.q-ans ul:last-child{margin-bottom:0}

.myans{
  background:#f4f3ef;border-radius:7px;padding:13px 16px;
  margin-bottom:13px;font-size:14px;color:var(--text-2);
  border-left:3px solid var(--text-3);
}
.myans .co-label{color:var(--text-3)}

.verdict{
  display:inline-block;font-family:var(--mono);font-size:11px;
  letter-spacing:.08em;padding:3px 9px;border-radius:4px;
  margin-bottom:10px;font-weight:500;
}
.v-ok{background:var(--venous-soft);color:var(--venous)}
.v-part{background:var(--amber-soft);color:var(--amber)}
.v-fix{background:var(--arterial-soft);color:var(--arterial)}

/* ---------- FOOTER NAV ---------- */
.pagenav{
  display:flex;justify-content:space-between;gap:14px;
  margin-top:56px;padding-top:26px;border-top:1px solid var(--rule);
}
.pagenav button{
  flex:1;padding:14px 18px;text-align:left;
  background:var(--card);border:1px solid var(--rule);border-radius:8px;
  cursor:pointer;font-family:var(--sans);color:var(--text);
  transition:border-color .12s;
}
.pagenav button:hover:not(:disabled){border-color:var(--ink)}
.pagenav button:disabled{opacity:.35;cursor:default}
.pagenav .pn-lab{
  font-family:var(--mono);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--text-3);display:block;margin-bottom:4px;
}
.pagenav .pn-t{font-size:14px;font-weight:500}
.pn-next{text-align:right !important}

.mark-read{
  display:flex;align-items:center;gap:9px;
  margin-top:30px;padding:13px 17px;
  background:var(--card);border:1px solid var(--rule);border-radius:8px;
  cursor:pointer;font-family:var(--sans);font-size:13.5px;color:var(--text-2);
  width:100%;text-align:left;
}
.mark-read:hover{border-color:var(--venous)}
.mark-read.on{background:var(--venous-soft);border-color:var(--venous);color:var(--venous)}
.mr-box{
  width:16px;height:16px;border:1.5px solid var(--text-3);border-radius:4px;
  flex-shrink:0;display:grid;place-items:center;font-size:11px;color:transparent;
}
.mark-read.on .mr-box{background:var(--venous);border-color:var(--venous);color:#fff}

/* ---------- RESPONSIVE ---------- */
@media (max-width:900px){
  .topbar{display:flex}
  .sidebar{
    position:fixed;left:0;top:0;z-index:30;
    transform:translateX(-100%);transition:transform .22s ease;
    box-shadow:2px 0 24px rgba(0,0,0,.3);
  }
  .sidebar.open{transform:none}
  .scrim{
    position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:25;
    opacity:0;pointer-events:none;transition:opacity .22s;
  }
  .scrim.on{opacity:1;pointer-events:auto}
  .pane{padding:32px 20px 90px}
  h1{font-size:26px}
  h2{font-size:19px}
  .duality{grid-template-columns:1fr}
  .d-a{border-right:none;border-bottom:1px solid var(--rule)}
  .pagenav{flex-direction:column}
}

/* ============================================================
   AI 批改 / 發問 元件
   ============================================================ */
.set-btn{
  margin-top:14px;padding:6px 12px;font-size:12px;
  background:#2b333d;color:#c8cdd4;border:none;border-radius:5px;
  cursor:pointer;font-family:var(--sans);
}
.set-btn:hover{background:#3a434e;color:#fff}

.ai-bar{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  margin-top:11px;
}
.ai-chk{
  display:flex;align-items:center;gap:6px;
  font-size:12.5px;color:var(--text-3);cursor:pointer;
}
.ai-chk input{accent-color:var(--venous);cursor:pointer}
.ai-status{font-size:12.5px;color:var(--text-3);display:flex;align-items:center;gap:7px}
.ai-err{color:var(--arterial);white-space:pre-wrap;line-height:1.6}

.spin{
  width:12px;height:12px;border:2px solid var(--rule);
  border-top-color:var(--venous);border-radius:50%;
  display:inline-block;animation:sp .7s linear infinite;
}
@keyframes sp{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.spin{animation:none}}

.ai-out{
  margin-top:16px;padding:18px 20px;
  background:#fbfbfa;border:1px solid var(--rule);
  border-left:3px solid var(--ink);border-radius:0 8px 8px 0;
  font-size:14px;
}
.ai-out[hidden]{display:none}
.ai-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ai-out .verdict{margin-bottom:0}
.ai-searched{
  font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;
  color:var(--venous);background:var(--venous-soft);
  padding:3px 8px;border-radius:4px;
}
.ai-sum{
  font-weight:700;color:var(--ink);margin:11px 0 0;font-size:15px;
}
.ai-out h4{margin:19px 0 8px;font-size:13.5px;color:var(--text-2)}
.ai-out ul{margin-bottom:0;padding-left:20px}
.ai-out li{margin-bottom:7px}
.ai-ok li::marker{color:var(--venous)}
.ai-gap li::marker{color:var(--arterial)}
.ai-body p{margin-bottom:11px}
.ai-body p:last-child{margin-bottom:0}
.ai-body ul{margin-bottom:11px}
.ai-terms{
  display:flex;flex-wrap:wrap;gap:7px;
  margin-top:16px;padding-top:14px;border-top:1px solid var(--rule-soft);
}
.ai-terms span{
  font-family:var(--mono);font-size:11.5px;
  background:var(--card);border:1px solid var(--rule);
  padding:4px 9px;border-radius:4px;color:var(--text-2);
}

/* ---------- 隨時發問 ---------- */
.ask{
  margin-top:40px;padding:20px 22px;
  background:var(--card);border:1px solid var(--rule);border-radius:9px;
}
.ask-head{display:flex;align-items:baseline;gap:11px;flex-wrap:wrap;margin-bottom:11px}
.ask-head .co-label{color:var(--venous);margin-bottom:0}
.ask-hint{font-size:12.5px;color:var(--text-3)}
.ask textarea{
  width:100%;min-height:66px;padding:11px 13px;
  border:1px solid var(--rule);border-radius:6px;
  font-family:var(--sans);font-size:14px;line-height:1.7;
  resize:vertical;background:#fcfcfb;color:var(--text);
}
.ask textarea:focus{outline:2px solid var(--venous);outline-offset:1px;border-color:transparent}

/* ---------- 設定視窗 ---------- */
.modal{
  position:fixed;inset:0;z-index:50;
  background:rgba(20,24,29,.55);
  display:grid;place-items:center;padding:20px;
}
.modal[hidden]{display:none}
.modal-box{
  background:var(--card);border-radius:11px;
  padding:26px 28px;max-width:460px;width:100%;
  box-shadow:0 20px 60px rgba(0,0,0,.25);
}
.modal-box h3{font-family:var(--serif);font-size:19px;margin:0 0 12px}
.modal-p{font-size:13.5px;color:var(--text-2);margin-bottom:16px;line-height:1.75}
.modal-p code{font-family:var(--mono);font-size:12.5px;background:#f0efec;padding:1px 5px;border-radius:3px}
.modal-lab{display:block;font-size:12.5px;color:var(--text-2);margin-bottom:6px;font-weight:500}
.modal-in{
  width:100%;padding:10px 13px;border:1px solid var(--rule);border-radius:6px;
  font-family:var(--mono);font-size:13px;background:#fcfcfb;color:var(--text);
}
.modal-in:focus{outline:2px solid var(--venous);outline-offset:1px;border-color:transparent}
.modal-note{font-size:12px;color:var(--text-3);margin:8px 0 0}
.modal-act{display:flex;gap:10px;justify-content:flex-end;margin-top:20px}
