:root{--bg:#faf8f4;--fg:#1d1d1f;--muted:#6b6b70;--line:#e3ded4;--card:#fff;--acc:#2563eb;--acc-bg:#e8effd;--mark:#fde68a}
@media (prefers-color-scheme:dark){:root{--bg:#161618;--fg:#ececee;--muted:#9a9aa2;--line:#2e2e33;--card:#1f1f23;--acc:#7aa2ff;--acc-bg:#232b44;--mark:#6b5a1a}}
*{box-sizing:border-box}
body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.7 "PingFang TC","Noto Sans TC","Microsoft JhengHei",system-ui,sans-serif}
a{color:var(--acc);text-decoration:none}a:hover{text-decoration:underline}
.wrap{max-width:980px;margin:0 auto;padding:0 16px}
.top{background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.top .wrap{display:flex;align-items:center;gap:20px;flex-wrap:wrap;padding-top:10px;padding-bottom:10px}
.brand{font-weight:700;color:var(--fg)}
nav{display:flex;gap:4px}nav a{padding:4px 12px;border-radius:999px;color:var(--muted)}
nav a.on{background:var(--acc-bg);color:var(--acc);font-weight:600;text-decoration:none}
main{padding-bottom:60px}
h1{font-size:1.3rem;margin:24px 0 8px}
.years{display:flex;flex-wrap:wrap;gap:6px;margin:20px 0}
.years a{padding:4px 14px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--fg)}
.years a.on{background:var(--acc);border-color:var(--acc);color:#fff;text-decoration:none}
.exam h2{font-size:1.25rem;margin:28px 0 2px}
.meta{color:var(--muted);margin:0 0 10px;font-size:.9rem}
.grp{font-size:1rem;margin:26px 0 8px;padding-bottom:4px;border-bottom:2px solid var(--line)}
details.pdfview{margin:8px 0 14px}summary{cursor:pointer;color:var(--acc)}
details iframe{width:100%;height:78vh;border:1px solid var(--line);border-radius:8px;margin-top:8px;background:#fff}
.q{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 16px;margin:10px 0}
.q-head{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;font-size:.85rem}
.qno{font-weight:700;font-size:1rem;min-width:2.2em}
.chip{padding:1px 9px;border-radius:999px;border:1px solid var(--line);color:var(--muted);white-space:nowrap}
.chip.piece{background:var(--acc-bg);border-color:transparent;color:var(--acc)}
.exam-ref{color:var(--muted)}
.pdf{margin-left:auto;font-size:.85rem}
.stem{margin:8px 0 4px}
blockquote{margin:6px 0;padding:6px 12px;border-left:3px solid var(--line);color:var(--muted);background:rgba(127,127,127,.06)}
.opts{margin:6px 0 2px;padding-left:12px}
.tags{margin-top:6px;font-size:.82rem;display:flex;gap:10px;flex-wrap:wrap}.tags a{color:var(--muted)}
mark{background:var(--mark);color:inherit;border-radius:2px;padding:0 1px}
form.search input[type=search]{width:100%;font-size:1.05rem;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:var(--card);color:var(--fg);margin-top:20px}
.filters{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 6px;align-items:center}
.filters select,.filters button{font:inherit;padding:6px 10px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--fg)}
.filters button{background:var(--acc);border-color:var(--acc);color:#fff;cursor:pointer;padding:6px 20px}
.chk{color:var(--muted);font-size:.9rem}
.hint,.count{color:var(--muted)}
.toggles{display:flex;flex-wrap:wrap;gap:6px 24px;margin:10px 0 14px;color:var(--muted);font-size:.9rem}
.toggles b{display:none}.toggles a{padding:2px 10px;border-radius:999px;margin-left:2px}.toggles a.on{background:var(--acc-bg);color:var(--acc);font-weight:600}
.scroll{overflow-x:auto}
table.heat{border-collapse:separate;border-spacing:2px;min-width:640px;width:100%;font-variant-numeric:tabular-nums}
.heat th,.heat td{padding:6px 8px;text-align:center;font-weight:400;border-radius:4px}
.heat thead th{font-weight:600;font-size:.9rem}.heat small{display:block;font-size:.65rem;color:var(--muted);font-weight:400}
.heat th.l{text-align:left;white-space:nowrap}
.heat td{background:rgba(127,127,127,.07);color:var(--muted)}
.heat td a{color:inherit;font-weight:600;display:block}
.heat td.tot,.heat tfoot td{font-weight:700;color:var(--fg);background:none}
.heat td.bar{width:22%;text-align:left;background:none}.heat td.bar i{display:block;height:10px;border-radius:5px;background:var(--acc);opacity:.65}
.heat tfoot th,.heat tfoot td{border-top:1px solid var(--line)}
.note{color:var(--muted);font-size:.85rem;margin-top:14px}
@media (max-width:600px){.pdf{margin-left:0}.top .wrap{gap:8px}}
.doclinks{font-size:.88rem;color:var(--muted);margin:4px 0 8px}
.rbtns{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.rbtns button{font:inherit;font-size:.85rem;padding:3px 14px;border-radius:999px;border:1px solid var(--acc);background:none;color:var(--acc);cursor:pointer}
.rbtns button.on{background:var(--acc);color:#fff}
.rpanel{margin-top:8px;padding:10px 14px;border:1px solid var(--line);border-radius:10px;background:rgba(127,127,127,.05)}
.rblock+.rblock{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line)}
.rhead{font-weight:600;margin-bottom:4px}.rhead a{font-weight:400;font-size:.85rem;margin-left:8px}
.rtext{line-height:1.75}
.rnote{color:var(--muted);font-size:.8rem;margin-top:6px}
.admin table{border-collapse:collapse;width:100%;font-size:.9rem}.admin td,.admin th{border-bottom:1px solid var(--line);padding:4px 6px;text-align:left;vertical-align:top}
.admin input[type=text],.admin input[type=number],.admin select,.admin textarea{font:inherit;padding:4px 8px;border:1px solid var(--line);border-radius:6px;background:var(--card);color:var(--fg);max-width:100%}
.admin textarea{width:100%;min-height:120px}.admin button{font:inherit;padding:4px 14px;border-radius:8px;border:1px solid var(--acc);background:var(--acc);color:#fff;cursor:pointer}
.admin fieldset{border:1px solid var(--line);border-radius:10px;margin:16px 0;padding:10px 14px}.admin .ok{color:#2a8a3a}.admin .err{color:#c33}
.focus{margin:6px 0 0;font-size:.85rem;color:var(--muted)}.focus span{display:inline-block;margin-right:8px;padding:0 8px;border-radius:4px;background:rgba(127,127,127,.14);font-size:.75rem}
.chip.ea{border-color:var(--acc);color:var(--acc)}
.who{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:.88rem}.who form{margin:0}.who button{font:inherit;font-size:.82rem;padding:2px 10px;border-radius:8px;border:1px solid var(--line);background:none;color:var(--fg);cursor:pointer}
.login{max-width:340px;margin:40px auto}.login input{font:inherit;width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--card);color:var(--fg);box-sizing:border-box}
.login button{font:inherit;padding:8px 22px;border-radius:8px;border:1px solid var(--acc);background:var(--acc);color:#fff;cursor:pointer}.login .err{color:#c33}.login .ok{color:#2a8a3a}
