:root{--bg: #f6f7f9;--card: #fff;--text: #1c2430;--muted: #667085;--line: #e3e7ee;--primary: #2f5bea;--danger: #c0392b;--ok: #1b8a4b;--code: #0f172a;--code-text: #e2e8f0}@media (prefers-color-scheme: dark){:root{--bg: #0e1218;--card: #171d26;--text: #e6eaf0;--muted: #98a2b3;--line: #273041;--primary: #6b8cff;--code: #0a0e14}}*{box-sizing:border-box}body{margin:0;font:15px/1.55 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}a{color:var(--primary);text-decoration:none}h1,h2,h3,h4{line-height:1.25}.muted{color:var(--muted)}.center{min-height:100vh;display:grid;place-items:center;padding:16px}.topbar{display:flex;align-items:center;gap:20px;padding:10px 20px;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5;flex-wrap:wrap}.brand{font-weight:700;font-size:17px;color:var(--text)}.topbar nav{display:flex;gap:4px;flex:1;flex-wrap:wrap}.topbar nav a{padding:6px 10px;border-radius:6px;color:var(--muted)}.topbar nav a.active{background:var(--bg);color:var(--text);font-weight:600}.who{display:flex;gap:12px;align-items:center}.page{max-width:1100px;margin:0 auto;padding:24px 20px 60px}.page.narrow{max-width:460px}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:20px}.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin:20px 0}.db-card{border-top:4px solid;color:var(--text);display:block}.db-card h3{margin:0 0 6px}.compare-cta{display:block;color:var(--text)}label{display:block;margin:12px 0;font-weight:500}input,select{display:block;width:100%;padding:9px 11px;margin-top:5px;border:1px solid var(--line);border-radius:7px;background:var(--bg);color:var(--text);font:inherit}button{font:inherit;cursor:pointer}.primary{background:var(--primary);color:#fff;border:0;padding:9px 16px;border-radius:7px;font-weight:600}.primary:disabled{opacity:.6}.btn{border:1px solid var(--line);background:var(--card);color:var(--text);padding:8px 14px;border-radius:7px}.btn.done{background:#e8f6ee;color:var(--ok);border-color:#b7e2c8;padding:9px 16px;font-weight:600}.link{background:none;border:0;color:var(--primary);padding:0}.link.danger{color:var(--danger)}.error{color:var(--danger);margin:10px 0}.success{color:var(--ok);margin:10px 0}.notice{background:#fff6dd;color:#5b4500;border:1px solid #f1dc9a;padding:12px 14px;border-radius:8px;margin:14px 0}@media (prefers-color-scheme: dark){.notice{background:#2a2410;color:#f3dd8f;border-color:#55481a}.btn.done{background:#12301f;border-color:#1e5a38}}.login{width:100%;max-width:380px}.login h1{margin:0 0 4px}.bar{height:8px;background:var(--line);border-radius:99px;overflow:hidden;margin:10px 0 4px}.bar>div{height:100%;background:var(--primary);border-radius:99px}.lesson-layout{display:grid;grid-template-columns:280px 1fr;gap:24px;align-items:start}@media (max-width: 800px){.lesson-layout{grid-template-columns:1fr}}.toc{list-style:none;padding:0;margin:0}.toc li a{display:flex;gap:8px;padding:8px 10px;border-radius:7px;color:var(--text);align-items:flex-start}.toc li.active a{background:var(--card);border:1px solid var(--line);font-weight:600}.tick{width:18px;height:18px;flex:none;border:1.5px solid var(--line);border-radius:50%;font-size:11px;display:grid;place-items:center;margin-top:2px}.tick.on{background:var(--ok);border-color:var(--ok);color:#fff}.analogy{background:var(--bg);border-left:4px solid var(--primary);padding:10px 14px;border-radius:6px}.lesson-actions{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:24px;flex-wrap:wrap}.code{background:var(--code);border-radius:8px;overflow:hidden;margin:8px 0}.code-head{display:flex;justify-content:space-between;padding:6px 12px;color:#94a3b8;font-size:12px;border-bottom:1px solid #1e293b}.code pre{margin:0;padding:14px;overflow-x:auto;color:var(--code-text);font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace}.table-wrap{overflow-x:auto;margin-top:16px;background:var(--card);border:1px solid var(--line);border-radius:10px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:13px;background:var(--bg)}td code{font:12.5px ui-monospace,Menlo,monospace;white-space:pre-wrap}.actions{display:flex;gap:12px;white-space:nowrap}.search{max-width:380px}.inline-form{display:grid;grid-template-columns:1fr 1fr 140px auto;gap:10px;align-items:end}.inline-form input,.inline-form select{margin:0}@media (max-width: 800px){.inline-form{grid-template-columns:1fr}}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.small{font-size:13px}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.grow{flex:1}.lab-page{max-width:1280px}.lab-tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:16px}.lab-tabs a{padding:8px 14px;color:var(--muted);border-bottom:3px solid transparent;margin-bottom:-1px}.lab-tabs a.active{color:var(--text);font-weight:600}.lab{display:grid;grid-template-columns:300px minmax(0,1fr);gap:20px;align-items:start}@media (max-width: 900px){.lab{grid-template-columns:1fr}}.lab-side section{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:14px}.lab-side h4{margin:0 0 8px}.schema,.plain,.exercises,.tips{margin:0;padding:0;list-style:none}.schema li{margin-bottom:10px}.cols{font:12px/1.4 ui-monospace,Menlo,monospace;color:var(--muted)}.plain li{margin:4px 0}.link.left{text-align:left}.exercises{counter-reset:ex}.exercises li{counter-increment:ex;padding:10px 0;border-top:1px solid var(--line)}.exercises li:first-child{border-top:0;padding-top:0}.exercises li>strong:before{content:counter(ex) ". "}.exercises p{margin:4px 0}.solution pre{margin:6px 0;padding:10px;background:var(--code);color:var(--code-text);border-radius:6px;overflow-x:auto;font:12px/1.45 ui-monospace,Menlo,monospace}.editor{display:block;width:100%;padding:12px;margin:0 0 10px;background:var(--code);color:var(--code-text);border:1px solid var(--line);border-radius:8px;font:14px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;resize:vertical;-moz-tab-size:2;tab-size:2}.editor:focus{outline:2px solid var(--primary);outline-offset:1px}.lab-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.tips{margin:10px 0 18px;display:grid;gap:2px}.tips li:before{content:"• "}.results{display:grid;gap:14px}.res-label{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin-bottom:4px}.res-err,.res-msg,.json{margin:0;padding:12px 14px;border-radius:8px;white-space:pre-wrap;word-break:break-word;font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace}.res-err{background:#fdecea;color:#8a1c10;border:1px solid #f3b8b1}.res-msg{background:var(--card);border:1px solid var(--line)}.json{background:var(--card);border:1px solid var(--line);max-height:520px;overflow:auto}@media (prefers-color-scheme: dark){.res-err{background:#3a1613;color:#ffb4a9;border-color:#6d2a22}}.result-table{max-height:460px;overflow:auto;margin-top:0}.result-table th{position:sticky;top:0}.result-table td{white-space:nowrap;font:13px ui-monospace,Menlo,monospace}.null{color:var(--muted);font-style:italic}.alt{margin:16px 0 0;text-align:center;font-size:14px}
