:root{--p:#3b2a8f;--p2:#5a46c9;--ok:#1f8a5b;--bad:#c2410c;--bg:#f6f4ff;--card:#fff;--text:#1d1b2e;--muted:#5f5b78;--line:#e4e0f5;--r:16px}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}
body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;min-height:100vh}
button{font:inherit;cursor:pointer}a{color:var(--p2)}
.top{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fffffff2;border-bottom:1px solid var(--line);backdrop-filter:blur(6px)}
.logo{font-weight:800;font-size:1.25rem;text-decoration:none;color:var(--text);display:flex;align-items:center;gap:8px}
.dot{width:22px;height:22px;border-radius:7px;background:linear-gradient(135deg,var(--p2),#f59e0b);display:inline-block}
.streak{margin-left:auto;font-weight:700;background:#fff0e8;border:1px solid #f6c3a5;border-radius:999px;padding:3px 10px;font-size:.92rem}
.xp{font-weight:700;background:#fff7e0;border:1px solid #f4d48a;border-radius:999px;padding:3px 12px;font-size:.92rem}
.install{background:var(--p);color:#fff;border:0;border-radius:999px;padding:7px 14px;font-weight:600;font-size:.9rem}
main{max-width:860px;margin:0 auto;padding:20px 16px 80px}
h1{font-size:clamp(1.6rem,5vw,2.3rem);line-height:1.15;margin:.2em 0 .4em}h2{font-size:1.25rem;margin:1.2em 0 .5em}
.muted{color:var(--muted)}.small{font-size:.88rem}
.panel{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:18px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--p);color:#fff;border:0;border-radius:12px;padding:13px 20px;font-weight:700;font-size:1rem;text-decoration:none}
.btn:hover{background:var(--p2)}.btn.sec{background:#fff;color:var(--p);border:2px solid var(--p)}.btn.block{width:100%}.btn[disabled]{opacity:.55;cursor:wait}
label.l{font-weight:700;display:block;margin:14px 0 6px}
input[type=text],select{width:100%;font:inherit;padding:12px 14px;border:1.5px solid #cfc9ea;border-radius:12px;background:#fff}
input[type=text]:focus,select:focus{outline:3px solid #c9bffa;border-color:var(--p2)}
.drop{display:block;border:2px dashed #b9b0e8;border-radius:var(--r);padding:18px;text-align:center;background:#fbfaff;cursor:pointer}
.thumbs{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.thumbs div{position:relative}.thumbs img{width:76px;height:76px;object-fit:cover;border-radius:10px;border:1px solid var(--line)}
.thumbs button{position:absolute;top:-6px;right:-6px;width:24px;height:24px;border-radius:50%;border:0;background:#1d1b2e;color:#fff;font-size:14px;line-height:1}
.hint{background:#eef6ff;border:1px solid #c9defa;border-radius:12px;padding:10px 14px;font-size:.92rem;margin:14px 0}
.warn{background:#fff4e5;border:1px solid #f5c98a;border-radius:12px;padding:10px 14px;font-size:.92rem;margin:12px 0}
.err{background:#fdeceb;border:1px solid #f3b3ad;color:#8a1c12;border-radius:12px;padding:10px 14px;margin:12px 0}
.games{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:12px}
.game{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:16px;text-align:left;display:flex;flex-direction:column;gap:4px;min-height:110px;transition:transform .12s}
.game:hover{transform:translateY(-2px);box-shadow:0 8px 24px #3b2a8f1a}.game b{font-size:1.1rem}.game .ico{font-size:1.8rem}
@media(max-width:520px){.games{grid-template-columns:1fr 1fr}.game{min-height:96px;padding:12px}}
ul.sum{padding-left:1.2em}ul.sum li{margin:6px 0}
.lib{display:flex;flex-direction:column;gap:8px}.lib a{display:flex;justify-content:space-between;gap:10px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:12px 14px;text-decoration:none;color:var(--text)}
.bar{height:8px;background:var(--line);border-radius:999px;overflow:hidden;margin:8px 0 16px}.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--p2),#f59e0b);transition:width .3s}
/* Muistipeli */
.mem{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}@media(max-width:520px){.mem{grid-template-columns:repeat(3,1fr)}}
.mc{display:block;position:relative;width:100%;aspect-ratio:3/4;perspective:800px;border:0;background:none;padding:0}
.mc .in{position:absolute;inset:0;transition:transform .35s;transform-style:preserve-3d}
.mc.open .in,.mc.done .in{transform:rotateY(180deg)}
.mc .f,.mc .b{position:absolute;inset:0;border-radius:12px;backface-visibility:hidden;display:flex;align-items:center;justify-content:center;padding:6px;text-align:center;font-size:clamp(.7rem,2.6vw,.95rem);font-weight:600;overflow:hidden;word-break:break-word;hyphens:auto}
.mc .f{background:linear-gradient(135deg,var(--p),var(--p2));color:#fff;font-size:1.6rem}
.mc .b{background:#fff;border:2px solid var(--line);transform:rotateY(180deg)}.mc .b.t{background:#f3efff}
.mc.done .b{border-color:var(--ok);background:#e8f7ef}
/* Visa */
.q{font-size:1.2rem;font-weight:700;margin:6px 0 14px}
.opts{display:flex;flex-direction:column;gap:10px}.opt{background:#fff;border:2px solid var(--line);border-radius:12px;padding:14px;text-align:left;font-size:1rem}
.opt.right{border-color:var(--ok);background:#e8f7ef}.opt.wrong{border-color:var(--bad);background:#fdeceb}.opt:disabled{cursor:default}
.tf{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}.tf .btn{padding:20px;font-size:1.15rem}
.flash{min-height:220px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:1.3rem;font-weight:700;background:#fff;border:2px solid var(--line);border-radius:var(--r);padding:24px;cursor:pointer;user-select:none}
.flash.back{background:#f3efff;font-weight:500;font-size:1.1rem}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.row .btn{flex:1}
.big{font-size:3rem;font-weight:800;margin:0}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(120px);background:var(--text);color:#fff;padding:12px 18px;border-radius:12px;transition:transform .25s;z-index:50;max-width:calc(100% - 32px);visibility:hidden}
.toast.show{transform:translateX(-50%);visibility:visible}
.spin{width:44px;height:44px;border:5px solid var(--line);border-top-color:var(--p2);border-radius:50%;animation:s 1s linear infinite;margin:30px auto 12px}@keyframes s{to{transform:rotate(360deg)}}
.center{text-align:center}

textarea{width:100%;font:inherit;padding:12px 14px;border:1.5px solid #cfc9ea;border-radius:12px;background:#fff;resize:vertical}
input[type=date]{font:inherit;padding:11px 12px;border:1.5px solid #cfc9ea;border-radius:12px;background:#fff;flex:1}
.back{margin:0 0 6px}
.daily{display:flex;gap:14px;align-items:center;background:linear-gradient(135deg,#ffb547,#f59e0b);color:#3a2300;border-radius:var(--r);padding:16px 18px;text-decoration:none;margin-bottom:14px;box-shadow:0 8px 24px #f59e0b40}
.daily .ico{font-size:2rem}.daily.done{background:#e8f7ef;color:#16503a;box-shadow:none;border:1px solid #bfe5cf}
.exam{display:block;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px 14px;text-decoration:none;color:var(--text);margin-bottom:10px;font-size:.95rem}
.srcs{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.src{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:#fbfaff;border:2px dashed #b9b0e8;border-radius:14px;padding:14px 6px;font-size:1.8rem;cursor:pointer;text-align:center;font-family:inherit;color:var(--text)}
.src span{font-size:.92rem;font-weight:700}.src small{font-size:.72rem;color:var(--muted)}
.flist{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.chip{background:#efeafe;border-radius:999px;padding:4px 10px;font-size:.85rem}
.examcard{margin-bottom:14px}.examcard .bar{margin:8px 0 4px}
.concepts{display:flex;flex-direction:column;gap:8px}.concept{display:flex;gap:10px;justify-content:space-between;align-items:center;background:#fff;border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.cbtn{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.mini{background:#f3efff;border:1px solid #d9d0fb;border-radius:999px;padding:6px 10px;font-size:.82rem;color:var(--p);white-space:nowrap}
.ai{background:#f3efff;border:1px solid #d9d0fb;border-radius:12px;padding:12px 14px;margin:10px 0;white-space:pre-line}
.games .game{text-decoration:none;color:inherit}
.modal{position:fixed;inset:0;background:#1d1b2e80;z-index:40;display:flex;align-items:flex-end;justify-content:center}.modal[hidden]{display:none}
.sheet{background:#fff;border-radius:20px 20px 0 0;padding:22px 18px 28px;width:100%;max-width:620px;max-height:85vh;overflow:auto;position:relative}
@media(min-width:700px){.modal{align-items:center}.sheet{border-radius:20px}}
.sheet .x{position:absolute;top:10px;right:12px;border:0;background:#f3efff;width:34px;height:34px;border-radius:50%;font-size:20px}
.sheet input[type=text]{margin-top:4px}
.stage{background:#14102e;border-radius:var(--r);aspect-ratio:9/12;max-height:62vh;display:flex;align-items:center;justify-content:center;overflow:hidden;color:#fff;margin:0 auto;max-width:420px}
.scene{text-align:center;padding:24px}.scene.in{animation:pop .5s ease}.scene .emo{font-size:4rem}.scene .bigt{font-size:1.9rem;font-weight:800;margin:12px 0}.scene .cap{color:#cfc8ff;font-size:1.05rem}
@keyframes pop{from{opacity:0;transform:scale(.92) translateY(10px)}to{opacity:1;transform:none}}
.limg{position:relative;margin-bottom:14px;border-radius:12px;overflow:hidden;border:1px solid var(--line)}.limg img{width:100%;display:block}
.pin{position:absolute;transform:translate(-50%,-50%);background:var(--p);color:#fff;font-weight:800;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;border:3px solid #fff;box-shadow:0 2px 8px #0005}
.pin.static{position:static;transform:none;flex:0 0 30px}
.lrow{display:flex;gap:10px;align-items:center;margin:8px 0}.lrow select{flex:1}.res{min-width:24px;font-weight:700}.res.ok{color:var(--ok)}.res.no{color:var(--bad);font-size:.85rem}
.board{list-style:none;padding:0;margin:0}.board li{display:flex;justify-content:space-between;padding:10px 4px;border-bottom:1px solid var(--line)}.board li:last-child{border:0}.board li.me{background:#fff7e0;border-radius:8px}
