:root{--bg:#faf9f6;--card:#fff;--ink:#1c1c1c;--muted:#6b6b6b;--brand:#0f2456;--gold:#b98a1c;--line:#e5e0d5;--good:#2e7d32}
body.dark{--bg:#14161c;--card:#1d2029;--ink:#e8e6df;--muted:#a3a3a3;--brand:#8fa8ff;--gold:#d9a92e;--line:#33363f;--good:#66bb6a}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--ink);font-family:Georgia,serif;line-height:1.7}
.topbar{position:sticky;top:0;z-index:10;background:var(--card);border-bottom:2px solid var(--gold);padding:10px 16px;display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.topbar b{font-family:Arial,sans-serif;color:var(--brand);font-size:15px}
.topbar input{flex:1;min-width:140px;padding:8px 12px;border:1px solid var(--line);border-radius:20px;background:var(--bg);color:var(--ink);font-size:14px}
.topbar button,.btn{border:1px solid var(--line);background:var(--bg);color:var(--ink);border-radius:20px;padding:7px 14px;cursor:pointer;font-size:13px;font-family:Arial,sans-serif}
.btn.gold{border-color:var(--gold);color:var(--gold)}.btn.solid{background:var(--gold);color:#fff;border-color:var(--gold)}
.layout{display:flex;max-width:1240px;margin:auto;min-height:calc(100vh - 60px)}
nav.sidebar{width:280px;flex-shrink:0;border-right:1px solid var(--line);padding:14px;background:var(--card);font-family:Arial,sans-serif}
nav.sidebar .grp{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--muted);margin:12px 4px 4px}
nav.sidebar a{display:block;padding:7px 10px;border-radius:8px;color:var(--ink);text-decoration:none;font-size:13.5px}
nav.sidebar a:hover{background:var(--bg)}nav.sidebar a.active{background:var(--brand);color:#fff}
nav.sidebar a .tick{float:right;color:var(--gold)}nav.sidebar a.active .tick{color:#ffe9a8}
main{flex:1;padding:22px 30px;max-width:880px;background:var(--card);margin:14px;border:1px solid var(--line);border-radius:12px}
h1{font-size:24px;color:var(--brand);border-bottom:3px solid var(--gold);padding-bottom:8px}
h2{font-size:16px;background:var(--brand);color:#fff!important;padding:7px 12px;border-radius:7px;cursor:pointer;margin-top:1.5em;font-family:Arial,sans-serif}
h2.collapsed+div{display:none}h2 .arrow{float:right}
h3{font-size:15px;color:var(--brand);margin-top:1.2em;font-family:Arial,sans-serif}
table{border-collapse:collapse;width:100%;font-size:13px;margin:10px 0;font-family:Arial,sans-serif}
th{background:var(--brand);color:#fff;padding:6px 8px;text-align:left}
td{border:1px solid var(--line);padding:5px 8px}tr:nth-child(even) td{filter:brightness(.97)}
code{font-family:Consolas,monospace;background:var(--bg);padding:1px 5px;border-radius:4px;font-size:13px}
pre{background:var(--bg);border-left:4px solid var(--brand);padding:10px;overflow-x:auto;font-size:13px}
blockquote{border-left:4px solid var(--gold);background:var(--bg);margin:10px 0;padding:8px 14px;font-style:italic}
svg.fig{max-width:100%;height:auto;display:block;margin:12px auto;background:#fff;border:1px solid var(--line);border-radius:8px;padding:6px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin:14px 0}
.card{border:1px solid var(--line);border-radius:10px;padding:14px;background:var(--bg)}
.card h3{margin-top:0}.card a{color:var(--brand)}
.lab{background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:16px;margin:16px 0}
.lab label{font-family:Arial,sans-serif;font-size:13px;display:block;margin:8px 0 2px}
.lab input[type=range]{width:100%}.lab output{font-family:Arial,sans-serif;font-weight:bold;color:var(--brand)}
.fcard{border:2px solid var(--gold);border-radius:14px;min-height:220px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:20px;padding:24px;cursor:pointer;background:var(--bg);margin:14px 0}
.streak{font-family:Arial,sans-serif}.streak b{color:var(--gold);font-size:22px}
.dotgrid{display:flex;gap:4px;flex-wrap:wrap;margin:8px 0}.dotgrid span{width:12px;height:12px;border-radius:3px;background:var(--line)}.dotgrid span.on{background:var(--good)}
.progress{height:12px;background:var(--line);border-radius:6px;overflow:hidden;margin:10px 0}
.progress>div{height:100%;background:var(--gold);width:0%}
.pagenav{border:1px solid var(--line);border-radius:10px;padding:10px 14px;background:var(--bg);font-family:Arial,sans-serif;font-size:13px;margin:12px 0}
.pagenav b{display:block;margin-bottom:6px}.pagenav a{display:inline-block;margin:3px 8px 3px 0;color:var(--brand);text-decoration:none}
.pagenav a.seen{color:var(--good)}.pagenav a.cur{background:var(--brand);color:#fff;border-radius:12px;padding:1px 9px}
.secprog{height:8px;background:var(--line);border-radius:4px;overflow:hidden;margin:8px 0}
.secprog>div{height:100%;background:var(--good);width:0%}
.prevnext{margin:22px 0 6px;font-family:Arial,sans-serif;font-size:14px;overflow:hidden}
.prevnext a{color:var(--brand)}
.katex{font-size:1.05em}
.readbtn{border:1px solid var(--gold);background:none;color:var(--gold);border-radius:20px;padding:8px 18px;cursor:pointer;font-size:14px;margin:14px 0}
.readbtn.done{background:var(--gold);color:#fff}
.searchres{border-bottom:1px solid var(--line);padding:10px 4px;font-size:14px}
.searchres a{color:var(--brand);font-family:Arial,sans-serif}
mark{background:var(--gold);color:#000}
.timer{font-size:40px;font-family:Arial,sans-serif;text-align:center;color:var(--brand)}
@media(max-width:860px){nav.sidebar{display:none}main{margin:8px}}
#topbtn{position:fixed;bottom:18px;right:18px;display:none}
footer{text-align:center;color:var(--muted);font-size:12px;padding:18px;font-family:Arial,sans-serif}