*{box-sizing:border-box}
html,body{margin:0}
body{background:var(--bg);background-image:var(--pattern);background-size:28px 28px;color:var(--ink);
  font-family:var(--font);font-size:15px;line-height:1.5;min-height:100vh}
[data-skin="blocklands"] body, body[data-skin="blocklands"]{font-size:12px;line-height:1.8}
a{color:var(--accent2)}
h1,h2,h3{line-height:1.2;margin:.2em 0 .5em}
h1{font-size:1.6em}h2{font-size:1.2em}h3{font-size:1.05em}
.top{display:flex;gap:12px;align-items:center;flex-wrap:wrap;padding:10px 16px;border-bottom:1px solid var(--line);
  background:color-mix(in srgb,var(--panel) 85%,transparent);position:sticky;top:0;z-index:5}
.brand{font-weight:800;letter-spacing:.04em;color:var(--accent)}
.nav{display:flex;gap:4px;flex-wrap:wrap;flex:1}
.nav a{color:var(--ink);text-decoration:none;padding:6px 10px;border-radius:var(--radius)}
.nav a.on,.nav a:hover{background:var(--line)}
.who{font-size:.85em;color:var(--muted);display:flex;gap:8px;align-items:center}
.acting{background:var(--warn);color:#111;padding:4px 12px;font-weight:700;text-align:center}
main{overflow-wrap:anywhere;max-width:1120px;margin:0 auto;padding:20px 16px 60px}
.grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.card h2,.card h3{margin-top:0}
.muted{color:var(--muted)}
.pill{display:inline-block;height:fit-content;align-self:start;padding:1px 9px;border-radius:999px;font-size:.8em;border:1px solid var(--line);white-space:nowrap}
.pill.good{background:var(--good);color:#111;border:0}.pill.bad{background:var(--bad);color:#111;border:0}
.pill.warn{background:var(--warn);color:#111;border:0}.pill.accent{background:var(--accent);color:#111;border:0}
table{border-collapse:collapse;width:100%}
th,td{text-align:left;padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:.8em;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.scroll{overflow-x:auto}
button,.btn{background:var(--accent);color:#111;border:0;border-radius:var(--radius);padding:8px 14px;font:inherit;
  font-weight:700;cursor:pointer;text-decoration:none;display:inline-block}
button.ghost,.btn.ghost{background:transparent;color:var(--ink);border:1px solid var(--line)}
input,select,textarea{background:var(--bg);color:var(--ink);border:1px solid var(--line);border-radius:var(--radius);
  padding:8px 10px;font:inherit;max-width:100%}
textarea{width:100%;min-height:120px;font-family:ui-monospace,Menlo,monospace;font-size:13px}
form.inline{display:inline}
.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.stack>*+*{margin-top:10px}
.block{display:grid;grid-template-columns:110px 1fr;gap:8px;padding:6px 0;border-bottom:1px dashed var(--line)}
.block>.pill{justify-self:start}
.k-study{border-left:4px solid var(--accent);padding-left:8px}.k-ai{border-left:4px solid var(--accent2);padding-left:8px}
.k-rest{border-left:4px solid var(--muted);padding-left:8px}.k-sport{border-left:4px solid var(--good);padding-left:8px}
.k-exam{border-left:4px solid var(--bad);padding-left:8px;font-weight:700}.k-fixed{border-left:4px solid var(--warn);padding-left:8px}
.week{display:grid;grid-template-columns:repeat(7,minmax(130px,1fr));gap:8px;overflow-x:auto}
.week .day{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:8px;font-size:.85em;min-width:130px}
.week .day.today{outline:2px solid var(--accent)}
.week .b{margin:4px 0;padding:3px 6px;border-radius:4px;background:var(--bg)}
.summary .blk{margin:0 0 14px}
.src{margin:4px 0 0;font-size:.78em;color:var(--muted)}.src .lic{font-style:italic}.src .nc-note{display:block;color:var(--warn)}
.replace-marker{background:color-mix(in srgb,var(--warn) 22%,transparent);border:1px dashed var(--warn);padding:6px 10px;border-radius:var(--radius)}
.txt{white-space:pre-line}
.summary caption{caption-side:top;text-align:left;font-weight:700;padding:0 0 6px}
.summary .definition{border-left:4px solid var(--accent);padding:6px 12px;background:var(--bg)}
.summary .formula,.summary .x-formula{font-family:ui-monospace,Menlo,monospace;background:var(--bg);padding:8px 12px;border-radius:var(--radius)}
.summary .tip{background:color-mix(in srgb,var(--accent) 18%,transparent);padding:8px 12px;border-radius:var(--radius)}
.summary .example,.summary .x-example{border:1px dashed var(--line);padding:8px 12px;border-radius:var(--radius)}
.q{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px;margin:0 0 12px}
.q .marks{float:right;color:var(--muted)}
.q label{display:block;padding:3px 0;cursor:pointer}
.res-ok{border-left:5px solid var(--good)}.res-bad{border-left:5px solid var(--bad)}.res-open{border-left:5px solid var(--warn)}
.big{font-size:2.4em;font-weight:800}
.chat{display:flex;flex-direction:column;gap:8px;max-height:60vh;overflow-y:auto;padding:4px}
.msg{padding:8px 12px;border-radius:var(--radius);max-width:80%;white-space:pre-wrap}
.msg.user{align-self:flex-end;background:var(--accent);color:#111}
.msg.assistant{align-self:flex-start;background:var(--bg);border:1px solid var(--line)}
.msg.declined{border:1px dashed var(--warn)}
.msg.error{align-self:center;color:var(--bad);font-size:.85em}
.mascot{width:150px;height:auto}
.celebrate{display:flex;gap:16px;align-items:center}
.celebrate .mascot .mascot-arm-l{transform-origin:52px 112px;animation:wave 0.6s ease-in-out infinite alternate}
.celebrate .mascot .mascot-arm-r{transform-origin:148px 112px;animation:wave 0.6s ease-in-out infinite alternate-reverse}
.celebrate .mascot{animation:hop 0.6s ease-in-out infinite alternate}
.mascot-spark{animation:twinkle 0.9s ease-in-out infinite alternate}
@keyframes wave{from{transform:rotate(-12deg)}to{transform:rotate(14deg)}}
@keyframes hop{from{transform:translateY(0)}to{transform:translateY(-10px)}}
@keyframes twinkle{from{opacity:.3}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.celebrate .mascot,.celebrate .mascot *{animation:none!important}}
.sheet{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.swatch{background:var(--bg);background-image:var(--pattern);background-size:28px 28px;color:var(--ink);font-family:var(--font);
  border-radius:12px;border:1px solid var(--line);overflow:hidden}
.swatch .bar{background:var(--panel);padding:8px 12px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}
.swatch .body{padding:12px;display:grid;grid-template-columns:1fr 120px;gap:10px;align-items:center}
.swatch .mini{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:8px;font-size:.8em}
.swatch .mascot{width:110px}
.chips{display:flex;gap:4px;margin-top:6px}.chips span{width:22px;height:22px;border-radius:50%;border:1px solid rgba(0,0,0,.2)}
.err{background:var(--bad);color:#111;padding:8px 12px;border-radius:var(--radius)}
.notyet{background:color-mix(in srgb,var(--warn) 30%,transparent);border:1px solid var(--warn);padding:8px 12px;border-radius:var(--radius)}
.ok{background:var(--good);color:#111;padding:8px 12px;border-radius:var(--radius)}
pre.prompt{white-space:pre-wrap;background:var(--bg);border:1px solid var(--line);padding:10px;border-radius:var(--radius);font-size:12px}
@media (max-width:640px){.block{grid-template-columns:90px 1fr}.big{font-size:1.8em}.swatch .body{grid-template-columns:1fr 90px}}
