:root{--bg:#071018;--panel:#0b1621;--panel2:#0e1d2a;--line:#193246;--line2:#27475e;--txt:#d8e6ef;--muted:#728ca8;--accent:#2fd2c3;--accent2:#5b8cff;--good:#40db8a;--bad:#ff6d77;--warn:#ffc857;--shadow:0 18px 55px rgba(0,0,0,.34)}*{box-sizing:border-box}html,body{height:100%;margin:0}body{font-family:Inter,Segoe UI,Arial,sans-serif;background:var(--bg);color:var(--txt);overflow:hidden}.app{height:100%;display:flex;flex-direction:column}.topbar{height:58px;background:#09131d;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px;padding:8px 12px;flex:0 0 auto}.brand{font-weight:800;letter-spacing:.4px;color:#eafcff;margin-right:10px;white-space:nowrap}.brand small{font-weight:500;color:var(--muted)}button,select,.landing-actions a{font:inherit;color:var(--txt);background:#0d1b27;border:1px solid var(--line2);border-radius:7px;padding:8px 11px;cursor:pointer;transition:.18s ease}button:hover,select:hover,.landing-actions a:hover{border-color:var(--accent);background:#102333}.run,.landing-actions .primary{background:linear-gradient(135deg,#0e8e86,#235fdd);border-color:#35cfc2;color:white;font-weight:700}.kbd{font-size:10px;color:#d9f7f3;border:1px solid rgba(255,255,255,.2);padding:2px 5px;border-radius:4px;margin-left:5px}.spacer{flex:1}.workspace{display:grid;grid-template-columns:248px minmax(420px,1fr) 310px;min-height:0;flex:1}.panel{background:var(--panel);min-height:0;overflow:auto}.panel.left{border-right:1px solid var(--line)}.panel.right{border-left:1px solid var(--line)}.section-title{height:38px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;border-bottom:1px solid var(--line);color:#9eb7c9;font-size:12px;text-transform:uppercase;letter-spacing:.65px;position:sticky;top:0;background:var(--panel);z-index:2}.course-tree{padding:8px}.tree-group,.tree-item{width:100%;text-align:left;background:transparent;border:0;border-radius:5px;padding:9px 8px;color:#9fb5c5}.tree-item{padding-left:18px;font-size:13px}.tree-group:hover,.tree-item:hover{background:#102433}.tree-item.active{background:#112c39;color:#eafffd;border-left:3px solid var(--accent)}.tree-item.locked{opacity:.45;cursor:not-allowed}.mini-card{margin:10px;border:1px solid var(--line);border-radius:8px;padding:11px;background:#08131d;display:grid;gap:6px}.mini-card span{font-size:12px;color:var(--muted)}.xp{height:6px;background:#142332;border-radius:10px;overflow:hidden}.xp i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent2));transition:.4s}.center{min-width:0;min-height:0;height:100%;overflow:hidden;display:grid;grid-template-rows:minmax(0,1fr) 210px;background:#071018}.lab-wrap{min-height:0;height:100%;overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable;overscroll-behavior:contain;padding-bottom:18px}.lab-toolbar{height:38px;display:flex;align-items:center;gap:14px;padding:0 14px;background:#0a151f;border-bottom:1px solid var(--line);font-size:12px}.lab-toolbar span{color:var(--muted)}.lab-toolbar .status{margin-left:auto;color:var(--good)}.mission-head{display:flex;justify-content:space-between;gap:25px;padding:22px 24px 12px}.mission-head h1{font-size:23px;margin:4px 0 7px}.mission-head p{color:#8fa8ba;max-width:720px;margin:0;line-height:1.5}.eyebrow{font-size:11px;color:var(--accent);letter-spacing:1.4px;font-weight:800}.score-badge{min-width:96px;border:1px solid var(--line);border-radius:9px;background:#0a1721;padding:10px 14px;text-align:center;height:max-content}.score-badge span{display:block;color:var(--muted);font-size:11px;text-transform:uppercase}.score-badge b{font-size:23px}.ai-flow{display:flex;align-items:center;justify-content:center;gap:12px;margin:8px 24px 16px;padding:10px;border:1px dashed #23465e;background:#08141e;border-radius:9px;color:#a8c1d3}.ai-flow span{font-size:11px;letter-spacing:1px;border:1px solid var(--line2);padding:6px 10px;border-radius:20px}.ai-flow i{color:var(--accent);font-style:normal}.cards{padding:0 24px 25px;display:grid;grid-template-columns:repeat(4,minmax(130px,1fr));gap:12px}.choice{min-height:128px;text-align:left;background:linear-gradient(180deg,#0c1a26,#09141e);border:1px solid var(--line);padding:13px;display:flex;flex-direction:column;align-items:flex-start}.choice:hover{transform:translateY(-2px);box-shadow:0 10px 25px rgba(0,0,0,.18)}.choice.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent),0 0 28px rgba(47,210,195,.08)}.choice.correct{border-color:var(--good);background:#0b221c}.choice.wrong{border-color:var(--bad);background:#261218}.choice .icon{font-size:27px;margin-bottom:8px}.choice b{font-size:13px}.choice small{display:block;color:#7892a5;line-height:1.35;margin-top:5px}#missionStage{min-width:0;padding-bottom:24px}
.lab-wrap::-webkit-scrollbar{width:10px}
.lab-wrap::-webkit-scrollbar-track{background:#071018}
.lab-wrap::-webkit-scrollbar-thumb{background:#27475e;border:2px solid #071018;border-radius:10px}
.lab-wrap::-webkit-scrollbar-thumb:hover{background:#3b667f}
.results{border-top:1px solid var(--line);background:#08131c;min-height:0;overflow:auto}.tabs{height:39px;border-bottom:1px solid var(--line);display:flex;align-items:end;padding-left:10px}.tab{border:0;border-radius:0;background:transparent;color:#7f99ab;border-bottom:2px solid transparent}.tab.active{color:#dff;border-bottom-color:var(--accent)}.result-body{padding:16px;line-height:1.5}.empty{color:#6f899d}.result-ok{color:#bff5d8}.result-bad{color:#ffc0c4}.mission{padding:16px;border-bottom:1px solid var(--line)}.mission-no{font-size:10px;color:var(--accent);letter-spacing:1.2px}.mission h2{font-size:17px;margin:6px 0}.mission p{color:#849fb3;font-size:13px;line-height:1.45}.task-list{display:grid;gap:9px;margin:17px 0}.task-list label{font-size:12px;color:#a5bac8}.reward{display:flex;align-items:center;gap:9px;background:#0d1e29;border:1px solid var(--line);border-radius:8px;padding:10px}.reward span{font-size:24px}.reward small{display:block;color:var(--muted)}.history{padding:10px}.history-item{padding:8px 6px;border-bottom:1px solid #122636;font-size:12px;display:grid;grid-template-columns:52px 1fr;gap:7px;color:#95adbe}.history-item time{font-size:10px;color:#567187}.tip{margin:10px;padding:12px;background:#101d26;border:1px solid #283a45;border-radius:8px;font-size:12px}.tip b{color:var(--warn)}.tip p{color:#91a8b8;line-height:1.45}.statusbar{height:29px;background:#08121b;border-top:1px solid var(--line);display:flex;align-items:center;gap:10px;padding:0 10px;color:#607d91;font-size:10px;white-space:nowrap;overflow:hidden;flex:0 0 auto}.dot{width:7px;height:7px;background:var(--good);box-shadow:0 0 8px var(--good);border-radius:50%}.copyright{color:#839caf}.toast{position:fixed;right:18px;bottom:44px;background:#102330;border:1px solid var(--accent);padding:11px 14px;border-radius:8px;opacity:0;transform:translateY(12px);pointer-events:none;transition:.25s;box-shadow:var(--shadow);z-index:20}.toast.show{opacity:1;transform:none}.modal{position:fixed;inset:0;background:rgba(1,7,12,.76);display:grid;place-items:center;z-index:30}.modal.hidden{display:none}.modal-card{width:min(640px,92vw);max-height:82vh;overflow:auto;background:#0b1823;border:1px solid #29465a;border-radius:12px;padding:22px;box-shadow:var(--shadow);position:relative}.modal-close{position:absolute;right:10px;top:10px}.modal-card h2{margin-top:0}.modal-card p,.modal-card li{color:#9db2c0;line-height:1.55}.landing{overflow:auto;min-height:100%;display:grid;place-items:center;background:radial-gradient(circle at 50% 20%,#102b3a 0,#071018 45%,#050a0f 100%);position:relative}.neural-bg{position:fixed;inset:0;overflow:hidden;opacity:.55}.neural-bg i{position:absolute;width:5px;height:5px;border-radius:50%;background:var(--accent);box-shadow:0 0 18px var(--accent);animation:pulse 3.8s ease-in-out infinite}@keyframes pulse{50%{transform:scale(2.4);opacity:.2}}.landing-card{width:min(850px,92vw);position:relative;z-index:1;text-align:center;padding:42px;background:rgba(7,16,24,.88);border:1px solid #1b3b50;border-radius:18px;box-shadow:var(--shadow);backdrop-filter:blur(8px)}.landing-logo{font-size:29px;font-weight:900;letter-spacing:1.5px}.landing-logo span{color:var(--accent)}.version{color:#6f8da0;font-size:12px}.landing-card h1{font-size:38px;margin:28px 0 10px}.landing-card>p{color:#91aabd;line-height:1.6}.landing-actions{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin:28px 0}.landing-actions a{text-decoration:none}.landing-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:30px}.landing-grid div{padding:17px;border:1px solid var(--line);border-radius:10px;background:#09151f}.landing-grid b{display:block;color:#dff;font-size:17px}.landing-grid span{font-size:11px;color:#6f8ca0}.landing-card footer{margin-top:28px;color:#587386;font-size:11px}@media(max-width:1050px){.workspace{grid-template-columns:210px minmax(380px,1fr)}.panel.right{display:none}.cards{grid-template-columns:repeat(2,minmax(140px,1fr))}}@media(max-width:720px){body{overflow:auto}.app{min-height:100vh}.topbar{height:auto;flex-wrap:wrap}.workspace{display:block}.panel.left{max-height:240px;border-right:0;border-bottom:1px solid var(--line)}.center{height:auto;overflow:visible;grid-template-rows:auto auto}.lab-wrap{height:auto;overflow:visible}.cards{grid-template-columns:1fr}.statusbar{display:none}.landing-card{padding:26px 18px}.landing-card h1{font-size:28px}.landing-grid{grid-template-columns:1fr}}
.session-badge{font-size:11px;padding:6px 9px;border:1px solid #38516d;border-radius:999px;background:#101c28;color:#9fc8ef}.role-menu{display:grid;gap:7px;padding:10px}.role-menu button{width:100%;text-align:left}.role-hidden{display:none!important}.modal-card.wide{width:min(1000px,94vw);max-height:90vh;overflow:auto}.account-grid,.dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.dash-card{border:1px solid #29435d;background:#0d1824;border-radius:12px;padding:16px}.dash-card h3{margin-top:0}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.form-grid input,.form-grid select,.form-grid textarea{width:100%;box-sizing:border-box;background:#07111a;color:#d8e8f6;border:1px solid #31506d;border-radius:8px;padding:9px}.form-grid .full{grid-column:1/-1}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th,.data-table td{border-bottom:1px solid #22384d;padding:8px;text-align:left}.pill{display:inline-block;padding:3px 8px;border-radius:999px;background:#152c41;border:1px solid #31506d;font-size:11px}.danger{border-color:#6a3240!important;color:#ffb6c3!important}.toolbar-row{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.muted{color:#7f9bb5;font-size:12px}@media(max-width:760px){.account-grid,.dashboard-grid,.form-grid{grid-template-columns:1fr}.form-grid .full{grid-column:auto}}

/* v0.3 — mechaniki misji */
.stage-pad{padding:0 24px 26px}.category-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:8px 24px 16px}.category-box{border:1px solid var(--line2);border-radius:9px;padding:10px;text-align:center;background:#08141e}.category-box b{display:block;color:#dff}.category-box small{color:var(--muted)}
.classify-grid{padding:0 24px 25px;display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:12px}.classify-card{background:linear-gradient(180deg,#0c1a26,#09141e);border:1px solid var(--line);border-radius:9px;padding:14px;text-align:left}.classify-card h3{margin:0 0 6px;font-size:14px}.classify-card p{margin:0 0 10px;color:#7892a5;font-size:12px}.segmented{display:flex;gap:5px;flex-wrap:wrap}.segmented button{font-size:11px;padding:5px 8px}.segmented button.active{border-color:var(--accent);background:#123541;color:#dff}.classify-card.correct{border-color:var(--good)}.classify-card.wrong{border-color:var(--bad)}
.pipeline{padding:10px 24px 26px;display:flex;gap:10px;align-items:stretch;flex-wrap:wrap}.pipeline-card{flex:1 1 140px;min-height:105px;border:1px solid var(--line);background:#0a1721;border-radius:10px;padding:14px;cursor:pointer;position:relative}.pipeline-card.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.pipeline-card.correct{border-color:var(--good)}.pipeline-card.wrong{border-color:var(--bad)}.order-badge{position:absolute;right:8px;top:8px;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:#102738;color:var(--accent);font-weight:800}.pipeline-card h3{font-size:14px}.pipeline-card p{font-size:12px;color:#7892a5}.pipeline-actions{padding:0 24px 18px;display:flex;gap:8px}
.dataset-wrap{padding:0 24px 26px;overflow:auto}.edu-table{width:100%;border-collapse:collapse;background:#09151f;border:1px solid var(--line);font-size:13px}.edu-table th,.edu-table td{padding:10px;border:1px solid #183044;text-align:center}.edu-table th{background:#0e2230;color:#a9c6d8}.edu-table td{color:#bdd0dd}.hot{cursor:pointer;transition:.15s}.hot:hover{background:#103040}.hot.selected{outline:2px solid var(--accent);outline-offset:-2px;background:#103541}.hot.correct{outline:2px solid var(--good);outline-offset:-2px;background:#0c2b22}.hot.wrong{outline:2px solid var(--bad);outline-offset:-2px;background:#30141b}.dataset-legend{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.dataset-legend button.active{border-color:var(--accent);background:#123541}.clean-list{padding:0 24px 26px;display:grid;gap:9px}.clean-row{display:grid;grid-template-columns:38px 1fr auto;gap:10px;align-items:center;border:1px solid var(--line);background:#09151f;border-radius:9px;padding:10px;cursor:pointer}.clean-row.selected{border-color:var(--accent);background:#102a34}.clean-row.correct{border-color:var(--good)}.clean-row.wrong{border-color:var(--bad)}.clean-row code{color:#b9d8e8}.issue{font-size:11px;color:var(--warn)}.mission-complete{color:var(--good)!important}.progress-list{display:grid;gap:8px}.progress-line{display:flex;justify-content:space-between;gap:12px;border-bottom:1px solid #22384d;padding:8px 0}.progress-line b.done{color:var(--good)}
@media(max-width:720px){.classify-grid,.category-strip{grid-template-columns:1fr}.pipeline{display:grid}.clean-row{grid-template-columns:32px 1fr}.clean-row .issue{grid-column:2}}

/* v0.3.1 — niezależne przewijanie paneli misji i sekwencyjne przechodzenie */
.panel.left{display:flex;flex-direction:column;overflow:hidden}
.panel.left .course-tree{flex:1;min-height:0;overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line2) transparent}
.panel.left .mini-card,.panel.left .role-menu{flex:0 0 auto}
.panel.right{display:flex;flex-direction:column;overflow:hidden}
.mission-panel-scroll{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line2) transparent}
.mission-panel-scroll::-webkit-scrollbar,.course-tree::-webkit-scrollbar{width:9px}
.mission-panel-scroll::-webkit-scrollbar-thumb,.course-tree::-webkit-scrollbar-thumb{background:#27475e;border-radius:10px;border:2px solid #0b1621}
.mission-panel-scroll::-webkit-scrollbar-track,.course-tree::-webkit-scrollbar-track{background:#0b1621}
.next-mission{width:100%;margin-top:12px;padding:11px 12px;font-weight:800;background:linear-gradient(135deg,#0e8e86,#235fdd);border-color:#35cfc2;color:#fff}
.next-mission:disabled{opacity:.4;cursor:not-allowed;filter:grayscale(.35);background:#10202c;border-color:#263e50}
.mission-link.locked{opacity:.38;cursor:not-allowed;position:relative;padding-right:28px}
.mission-link.locked::after{content:'🔒';position:absolute;right:7px;top:8px;font-size:11px}
.mission-link.mission-complete{color:#bff5d8}


/* v0.3.4 — poprawa odpowiedzi + pomoc */
.hidden{display:none!important}
.improve{background:linear-gradient(135deg,#7c4d00,#c98100);border-color:#e7a326;color:#fff;font-weight:800}
.help-context h3{margin:14px 0 6px;color:#dff}.help-context p{color:#9db2c0;line-height:1.55}.help-context hr{border:0;border-top:1px solid var(--line);margin:18px 0}

/* v0.3.5 — Misja 6: KNN */
.knn-lab{padding:4px 24px 30px}.knn-toolbar{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap;margin:8px 0 14px}.knn-k{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}.knn-k button.active{border-color:var(--accent);background:#123541;color:#dff}.knn-k button.correct{border-color:var(--good)}.knn-tested{font-size:12px;color:var(--muted)}.knn-grid{display:grid;grid-template-columns:minmax(420px,1.5fr) minmax(230px,.7fr);gap:14px}.knn-chart-wrap,.knn-side{border:1px solid var(--line);border-radius:11px;background:#08141e;padding:12px}.knn-chart{width:100%;height:auto;display:block;background:linear-gradient(180deg,#091925,#07121b);border-radius:8px}.grid-lines line{stroke:#183246;stroke-width:1}.knn-point{stroke:#071018;stroke-width:3;transition:.18s}.knn-point.class-A{fill:#38bdf8}.knn-point.class-B{fill:#fb923c}.knn-point.neighbor{stroke:#f8fafc;stroke-width:5;filter:drop-shadow(0 0 6px #fff)}#knnLines line{stroke:#facc15;stroke-width:2;stroke-dasharray:5 4;opacity:.8}.unknown circle{fill:#e879f9;stroke:#fff;stroke-width:3}.unknown text{fill:#071018;font-weight:900;font-size:13px}.knn-legend{display:flex;gap:16px;flex-wrap:wrap;padding-top:10px;color:#8fa8ba;font-size:11px}.knn-legend i{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:5px}.dot-a{background:#38bdf8}.dot-b{background:#fb923c}.dot-q{background:#e879f9}.knn-side{display:flex;flex-direction:column;gap:14px}.knn-result{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:12px;background:#0c1d2a;border:1px solid #224257;border-radius:9px}.knn-result b,.knn-result strong{grid-column:1/-1}.knn-result strong{color:var(--good);font-size:16px}.knn-result span{color:#9eb4c2;font-size:12px}.knn-question{padding-top:4px}.knn-question>b{display:block;margin-bottom:8px;font-size:13px;line-height:1.4}.knn-question .segmented button{flex:1}.knn-question .segmented button.correct{border-color:var(--good);background:#0c2b22}.knn-question .segmented button.wrong{border-color:var(--bad);background:#30141b}.knn-note{margin-top:12px;padding:10px 12px;border-left:3px solid var(--accent);background:#0a1b25;color:#8fa8ba;font-size:12px;line-height:1.45}@media(max-width:900px){.knn-grid{grid-template-columns:1fr}.knn-chart-wrap{min-width:0}}@media(max-width:520px){.knn-lab{padding-left:12px;padding-right:12px}.knn-chart{min-width:430px}.knn-chart-wrap{overflow-x:auto}}


/* v0.3.6 — Decision Tree Lab */
.tree-lab{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(300px,.8fr);gap:18px;align-items:start}
.tree-builder,.tree-cases{background:rgba(10,21,36,.72);border:1px solid #213b55;border-radius:14px;padding:16px}
.tree-builder h3,.tree-cases h3{margin:0 0 12px}
.tree-selects{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:18px}.tree-selects label{display:grid;gap:6px;font-size:12px;color:#8fa8bf}.tree-selects select{width:100%;background:#091725;color:#dcecff;border:1px solid #294966;border-radius:9px;padding:9px}
.decision-tree{text-align:center;min-height:310px;overflow-x:auto;padding:8px}.tree-node,.tree-leaf{display:inline-flex;align-items:center;justify-content:center;min-height:48px;min-width:170px;max-width:260px;padding:8px 12px;border-radius:12px;border:1px solid #355b7c;background:#10283d}.tree-node.root{border-color:#49a7ff;box-shadow:0 0 22px rgba(73,167,255,.15)}.tree-leaf.service{border-color:#ffb454;background:rgba(117,67,20,.28)}.tree-leaf.ok{border-color:#67d69b;background:rgba(24,94,62,.28)}
.tree-branches{display:grid;grid-template-columns:1fr 1.35fr;gap:28px;margin-top:34px;position:relative}.tree-branches:before{content:"";position:absolute;top:-18px;left:25%;right:25%;height:1px;background:#3c6381}.branch>span,.tree-subbranches span{display:block;color:#79a7c8;font-size:11px;margin-bottom:7px}.tree-subbranches{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:20px}
.tree-case{border:1px solid #29465f;border-radius:12px;padding:12px;margin:10px 0;background:#0b1c2b;transition:.2s}.tree-case.active{border-color:#55aaf1;box-shadow:0 0 0 2px rgba(85,170,241,.08)}.tree-case>div:first-child{display:flex;justify-content:space-between;gap:10px}.tree-case small{display:block;color:#819bb0}.trace-case{margin:9px 0}.tree-answer{margin-top:6px}.tree-path{min-height:20px;margin-top:8px;font-size:12px;color:#99bad0;line-height:1.5}.tree-case.correct{border-color:#3f9b6e}.tree-case.wrong{border-color:#b65d66}.tree-selects select.correct{border-color:#3f9b6e}.tree-selects select.wrong{border-color:#b65d66}
@media(max-width:900px){.tree-lab{grid-template-columns:1fr}.tree-selects{grid-template-columns:1fr}.tree-branches{gap:10px}.tree-node,.tree-leaf{min-width:120px;font-size:12px}}


/* v0.3.7 — Spam Classifier Lab */
.spam-lab{display:grid;gap:18px}.spam-section{border:1px solid #263f58;background:#0c1724;border-radius:12px;padding:16px}.spam-section h3{margin:0 0 12px}.spam-training,.spam-tests{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.spam-card{border:1px solid #29445f;background:#101e2d;border-radius:10px;padding:14px;display:grid;gap:10px}.spam-card p{margin:0;line-height:1.45}.spam-card.correct{border-color:#2f9d69;box-shadow:inset 0 0 0 1px #2f9d69}.spam-card.wrong{border-color:#b84d59;box-shadow:inset 0 0 0 1px #b84d59}.spam-trainbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}.spam-weights{margin-top:12px;border-top:1px solid #263f58;padding-top:12px}.spam-weights>div{display:flex;gap:7px;flex-wrap:wrap;margin-top:8px}.weight{padding:5px 8px;border-radius:999px;background:#17283a;border:1px solid #304d68;font-family:ui-monospace,monospace;font-size:12px}.spam-w{border-color:#a45762}.ham-w{border-color:#3f8e75}.spam-meter{display:flex;justify-content:space-between;padding:8px 10px;background:#09131e;border-radius:8px}.spam-meter b{font-family:ui-monospace,monospace}.hidden{display:none!important}@media(max-width:900px){.spam-training,.spam-tests{grid-template-columns:1fr}}

/* v0.3.8 — result/explanation tabs */
.explanation-card{max-width:900px;background:#0b1a24;border:1px solid #244358;border-radius:10px;padding:16px 18px}.explanation-card h3{margin:0 0 9px;color:#dff}.explanation-card p{margin:0;color:#9db5c5;line-height:1.65}.explanation-feedback{margin-top:14px;padding-top:12px;border-top:1px solid var(--line);display:flex;gap:12px;align-items:center}.explanation-feedback b{color:var(--accent);font-size:18px}.explanation-feedback span{color:#86a0b2;font-size:12px}
/* Mission 9 — Linear regression */
.reg-lab{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,.9fr);gap:18px;align-items:start}.reg-chart-wrap,.reg-controls{background:var(--panel2,#101923);border:1px solid var(--line,#26384a);border-radius:14px;padding:14px}.reg-chart-wrap canvas{width:100%;height:auto;display:block;background:linear-gradient(180deg,rgba(39,55,72,.35),rgba(8,14,21,.35));border-radius:10px}.reg-legend{font-size:12px;color:#9eb1c6;margin-top:8px}.reg-controls label{display:grid;gap:7px;margin-bottom:14px}.reg-controls input[type=range]{width:100%}.reg-controls input[type=number]{width:100%;box-sizing:border-box}.reg-metrics{display:grid;grid-template-columns:1fr;gap:8px;margin:12px 0}.reg-metrics>div{display:flex;justify-content:space-between;gap:12px;padding:8px 10px;border:1px solid var(--line,#26384a);border-radius:10px}.reg-metrics small{color:#8fa6bd}.reg-controls hr{border:0;border-top:1px solid var(--line,#26384a);margin:16px 0}.reg-controls input.correct{outline:2px solid #22c55e}.reg-controls input.wrong{outline:2px solid #ef4444}@media(max-width:900px){.reg-lab{grid-template-columns:1fr}}


/* Mission 10 — cost function */
.cost-lab{display:grid;gap:16px;padding-bottom:24px}.cost-intro{display:flex;gap:14px;flex-wrap:wrap;align-items:center;padding:14px;border:1px solid #29425f;border-radius:12px;background:#0d1826}.cost-intro b{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;color:#8be9fd}.cost-intro span{color:#9fb2c8;flex-basis:100%}.cost-models{display:grid;grid-template-columns:repeat(3,minmax(240px,1fr));gap:12px}.cost-model{border:1px solid #29425f;border-radius:12px;background:#0b1521;padding:12px}.cost-model-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.cost-model-head h3{margin:0}.cost-table{width:100%;border-collapse:collapse;margin:10px 0;font-size:13px}.cost-table th,.cost-table td{padding:7px;border-bottom:1px solid #20344b;text-align:right}.cost-table th:first-child,.cost-table td:first-child{text-align:center}.cost-metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px}.cost-metrics>div{background:#101e2d;border-radius:8px;padding:9px}.cost-metrics small{display:block;color:#89a0b9}.cost-metrics b{font-size:18px}.cost-answers{display:grid;grid-template-columns:repeat(2,minmax(220px,1fr));gap:14px;border:1px solid #29425f;border-radius:12px;padding:14px;background:#0d1826}.cost-answers label{display:grid;gap:7px}.cost-answers input{width:100%}.cost-tested{display:flex;align-items:center;gap:8px}.cost-tested b{font-size:18px}@media(max-width:1050px){.cost-models{grid-template-columns:1fr}.cost-answers{grid-template-columns:1fr}}


/* Mission 11 — Gradient Descent */
.grad-lab{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(300px,.8fr);gap:16px;padding:0 24px 26px}.grad-chart-card,.grad-controls{border:1px solid var(--line);background:#08141e;border-radius:12px;padding:14px}.grad-chart{width:100%;height:auto;display:block;background:linear-gradient(180deg,#091925,#07121b);border-radius:10px}.grad-grid line{stroke:#183246;stroke-width:1}.grad-curve{fill:none;stroke:#5b8cff;stroke-width:3}.grad-path{fill:none;stroke:#facc15;stroke-width:2;stroke-dasharray:5 4}.grad-point{fill:#e879f9;stroke:white;stroke-width:3}.grad-point.correct{fill:var(--good)}.grad-point.wrong{fill:var(--bad)}.grad-label{fill:#d8e6ef;font-size:12px}.grad-equation{margin-top:10px;font-family:ui-monospace,Consolas,monospace;color:#9fdcf7}.grad-controls{display:grid;gap:14px}.grad-controls label{display:grid;gap:8px}.grad-metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px}.grad-metrics>div{padding:9px;background:#0d1e29;border:1px solid var(--line);border-radius:8px}.grad-metrics small{display:block;color:var(--muted)}.grad-metrics b{font-size:17px}.grad-buttons{display:flex;gap:8px;flex-wrap:wrap}.grad-tested{color:#8fa8ba;font-size:12px}.grad-question{display:grid;gap:8px}.grad-question>b{font-size:12px;line-height:1.4}.grad-question .segmented{display:flex;gap:6px;flex-wrap:wrap}.grad-question button.correct{border-color:var(--good);background:#0c2b22}.grad-question button.wrong{border-color:var(--bad);background:#30141b}@media(max-width:900px){.grad-lab{grid-template-columns:1fr;padding-left:12px;padding-right:12px}}

/* Mission 12 — neuron */
.neuron-lab{padding:0 24px 28px;display:grid;gap:16px}.neuron-visual{display:flex;align-items:center;justify-content:center;gap:15px;flex-wrap:wrap;padding:24px 14px;border:1px solid var(--line);border-radius:12px;background:#08141e}.neuron-inputs{display:grid;gap:10px}.neuron-node,.neuron-core,.neuron-activation,.neuron-output{min-width:76px;min-height:66px;display:grid;place-items:center;text-align:center;border:1px solid var(--line2);border-radius:50%;background:#0d1e29}.neuron-core{border-color:var(--accent);box-shadow:0 0 24px rgba(47,210,195,.12)}.neuron-activation{border-radius:12px;color:#facc15}.neuron-output{border-color:#5b8cff}.neuron-links{display:grid;gap:18px;color:#9eb4c2;font-size:12px}.neuron-arrow{font-size:24px;color:var(--accent)}.neuron-controls{display:grid;grid-template-columns:minmax(280px,.9fr) minmax(280px,.8fr) minmax(320px,1fr);gap:14px}.neuron-sliders,.neuron-formula,.neuron-questions{border:1px solid var(--line);border-radius:12px;background:#08141e;padding:14px}.neuron-sliders label{display:grid;grid-template-columns:100px 1fr 45px;gap:8px;align-items:center;margin-bottom:10px;font-size:12px}.neuron-sliders input{width:100%}.neuron-formula{display:grid;gap:12px;align-content:start}.neuron-formula code{padding:12px;background:#061019;border:1px solid #1b3448;border-radius:8px;color:#9fdcf7}.neuron-metrics{display:grid;grid-template-columns:1fr 1fr;gap:8px}.neuron-metrics>div{padding:10px;border:1px solid var(--line);border-radius:8px}.neuron-metrics small{display:block;color:var(--muted)}.neuron-metrics b{font-size:20px}.neuron-questions{display:grid;gap:12px}.neuron-questions label{display:grid;gap:6px;font-size:12px}.neuron-questions input{width:100%}.neuron-questions>div>b{display:block;margin-bottom:7px;font-size:12px}.neuron-questions input.correct,#nCalc.correct{outline:2px solid var(--good)}.neuron-questions input.wrong,#nCalc.wrong{outline:2px solid var(--bad)}.neuron-questions button.correct{border-color:var(--good);background:#0c2b22}.neuron-questions button.wrong{border-color:var(--bad);background:#30141b}@media(max-width:1100px){.neuron-controls{grid-template-columns:1fr 1fr}.neuron-questions{grid-column:1/-1}}@media(max-width:720px){.neuron-lab{padding-left:12px;padding-right:12px}.neuron-controls{grid-template-columns:1fr}.neuron-questions{grid-column:auto}.neuron-links{display:none}}


/* v0.4.4 — AI Lab */
.ai-lab-shell{display:grid;gap:14px;min-height:560px}.ai-lab-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.ai-lab-head h2{margin:0 0 5px}.ai-lab-head p{margin:0;color:var(--muted)}.ai-lab-tabs{display:flex;gap:8px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:10px}.ai-lab-tabs button.active{border-color:var(--accent);background:#103348;color:#dff}.lab-free-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(280px,.8fr);gap:14px}.lab-free-card{border:1px solid var(--line);background:#08141e;border-radius:12px;padding:14px}.lab-free-card h3{margin-top:0}.lab-free-card canvas{width:100%;height:auto;display:block;background:#07111a;border-radius:10px}.lab-free-card.controls{display:grid;gap:12px;align-content:start}.lab-free-card.controls label{display:grid;gap:7px}.lab-free-card.controls input,.lab-free-card.controls textarea,.lab-free-card.controls select{width:100%;box-sizing:border-box}.lab-readout{display:flex;justify-content:space-between;gap:14px;padding:10px;border:1px solid #29445f;border-radius:9px;background:#0d1e29}.lab-readout span{color:var(--muted)}.lab-readout b{font-family:ui-monospace,Consolas,monospace}.free-tree{display:grid;gap:12px;justify-items:center;padding:20px}.free-tree input{width:70px}.tree-arrow{color:var(--muted)}.lab-status-line{padding:10px;border-radius:8px;background:#0d1e29;color:#9fdcf7}.gradient-free{display:grid;gap:14px}.grad-meter{height:28px;border-radius:999px;background:linear-gradient(90deg,#7c2d12,#1d4ed8 50%,#7c2d12);position:relative}.grad-meter i{position:absolute;top:3px;width:22px;height:22px;border-radius:50%;background:#facc15;transform:translateX(-50%);transition:.25s}.free-neuron{font-family:ui-monospace,Consolas,monospace;font-size:18px;padding:26px;text-align:center;border:1px dashed #31506a;border-radius:10px}.free-neuron span{color:var(--accent);padding:0 8px}@media(max-width:900px){.lab-free-grid{grid-template-columns:1fr}.ai-lab-head{display:grid}}


/* Mission 13 — activation functions */
.activation-lab{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(320px,.85fr);gap:16px;padding:0 24px 28px}.activation-chart-card,.activation-controls{border:1px solid var(--line);background:#08141e;border-radius:12px;padding:14px}.activation-chart-card svg{width:100%;height:auto;display:block;background:#07121b;border-radius:10px}.activation-chart-card #actGrid line{stroke:#173146;stroke-width:1}.act-line{fill:none;stroke-width:3}.relu-line{stroke:#22c55e}.sigmoid-line{stroke:#38bdf8}.tanh-line{stroke:#f59e0b}.act-cursor{stroke:#e879f9;stroke-width:2;stroke-dasharray:5 4}.act-legend{display:flex;gap:16px;flex-wrap:wrap;margin-top:10px;font-size:12px;color:var(--muted)}.act-legend span{display:flex;align-items:center;gap:6px}.act-legend i{width:10px;height:10px;border-radius:50%;display:inline-block}.relu-dot{background:#22c55e}.sig-dot{background:#38bdf8}.tanh-dot{background:#f59e0b}.activation-controls{display:grid;gap:14px;align-content:start}.activation-controls>label{display:grid;gap:8px}.activation-controls input[type=range]{width:100%}.activation-values{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.activation-values>div{padding:10px;border:1px solid var(--line);border-radius:8px;background:#0d1e29}.activation-values small{display:block;color:var(--muted)}.activation-values b{font-size:18px;font-family:ui-monospace,Consolas,monospace}.act-tested{font-size:12px;color:var(--muted)}.correct-text{color:var(--good)!important}.wrong-text{color:var(--bad)!important}@media(max-width:900px){.activation-lab{grid-template-columns:1fr;padding-left:12px;padding-right:12px}.activation-values{grid-template-columns:1fr}}

/* Mission 14 — neural network builder */
.network-lab{display:grid;gap:16px;padding:0 24px 28px}.network-builder{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(280px,.7fr);gap:16px}.network-visual-wrap,.network-controls,.network-questions{border:1px solid var(--line);background:#08141e;border-radius:12px;padding:14px}.network-visual-wrap svg{width:100%;height:auto;display:block;background:#07121b;border-radius:10px}.network-link{stroke:#27465d;stroke-width:1.3;opacity:.8}.network-node{stroke:#cfe9f5;stroke-width:1.5;fill:#15344a;transition:.2s}.network-node.layer-1{fill:#24465f}.network-node.layer-2{fill:#2a5678}.network-node.pulse{fill:#facc15;filter:drop-shadow(0 0 8px #facc15)}.network-layer-label{fill:#d7e7f2;font-size:14px;font-weight:700}.network-status{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px}.network-status span{padding:7px 9px;background:#0d1e29;border:1px solid var(--line);border-radius:8px;font-size:12px;color:var(--muted)}.network-status b{color:#dff}.network-controls{display:grid;gap:14px;align-content:start}.network-controls label{display:grid;grid-template-columns:1fr 1.25fr 34px;gap:8px;align-items:center;font-size:12px}.network-controls input{width:100%}.network-questions{display:grid;grid-template-columns:repeat(2,minmax(260px,1fr));gap:14px}.network-questions>div{display:grid;gap:8px}.network-questions>div>b{font-size:12px;line-height:1.4}.network-questions button.correct{border-color:var(--good);background:#0c2b22}.network-questions button.wrong{border-color:var(--bad);background:#30141b}@media(max-width:950px){.network-builder{grid-template-columns:1fr}.network-questions{grid-template-columns:1fr}.network-lab{padding-left:12px;padding-right:12px}}


/* Mission 18 — Computer Vision */
.vision-lab{display:grid;gap:16px;padding:0 24px 28px}.vision-main{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(300px,.75fr);gap:16px}.vision-image-card,.vision-results{border:1px solid var(--line);background:#08141e;border-radius:12px;padding:14px}.vision-sample-tabs,.vision-noise-buttons{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}.vision-sample-tabs button.active,.vision-noise-buttons button.active{border-color:var(--accent);background:#103348;color:#dff}.vision-image-wrap{height:260px;position:relative;display:grid;place-items:center;overflow:hidden;border-radius:12px;border:1px solid #27445b;background:radial-gradient(circle at 50% 45%,#17334a,#07111a 70%)}.vision-emoji{font-size:132px;line-height:1;transition:.25s;user-select:none}.vision-noise{position:absolute;inset:0;pointer-events:none;opacity:0;background-image:radial-gradient(circle,#fff 0 1px,transparent 1.5px),radial-gradient(circle,#90caf9 0 1px,transparent 1.5px);background-size:8px 8px,13px 13px;background-position:0 0,4px 3px;mix-blend-mode:screen;transition:.25s}.vision-results{display:grid;gap:14px;align-content:start}.vision-pred{display:grid;gap:5px;padding:12px;border:1px solid #29445f;border-radius:10px;background:#0d1e29}.vision-pred small,.vision-pred span{color:var(--muted)}.vision-pred>b{font-size:28px}.vision-bar{display:grid;grid-template-columns:72px 1fr 62px;gap:9px;align-items:center;margin:12px 0}.vision-bar>div{height:16px;border:1px solid #29445f;border-radius:999px;overflow:hidden;background:#07111a}.vision-bar i{display:block;height:100%;background:linear-gradient(90deg,#2fd2c3,#5b8cff);transition:.3s}.vision-bar b{text-align:right;font-family:ui-monospace,Consolas,monospace}.vision-tested{font-size:12px;color:var(--muted)}.vision-questions{grid-template-columns:repeat(2,minmax(260px,1fr))}@media(max-width:900px){.vision-lab{padding-left:12px;padding-right:12px}.vision-main{grid-template-columns:1fr}.vision-questions{grid-template-columns:1fr}.vision-image-wrap{height:220px}.vision-emoji{font-size:110px}}
\n\n/* Mission 19 — NLP sentiment */
.sentiment-lab{display:grid;gap:16px;padding:0 24px 28px}.sentiment-main{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(300px,.75fr);gap:16px}.sentiment-card{border:1px solid var(--line);background:#08141e;border-radius:12px;padding:14px}.sentiment-card textarea{width:100%;margin:8px 0 10px;resize:vertical;min-height:110px;background:#07111a;color:var(--txt);border:1px solid var(--line2);border-radius:8px;padding:10px}.sentiment-presets{display:flex;gap:8px;margin:10px 0}.sentiment-presets button.active{border-color:var(--accent);background:#103348}.sentiment-results{display:grid;gap:12px;align-content:start}.sentiment-bar{display:grid;grid-template-columns:90px 1fr 62px;gap:9px;align-items:center;margin:10px 0}.sentiment-bar>div{height:16px;border:1px solid #29445f;border-radius:999px;overflow:hidden;background:#07111a}.sentiment-bar i{display:block;height:100%;background:linear-gradient(90deg,#2fd2c3,#5b8cff);transition:.3s}.sentiment-bar b{text-align:right;font-family:ui-monospace,Consolas,monospace}.sentiment-questions{grid-template-columns:repeat(2,minmax(260px,1fr))}@media(max-width:900px){.sentiment-lab{padding-left:12px;padding-right:12px}.sentiment-main{grid-template-columns:1fr}.sentiment-questions{grid-template-columns:1fr}}


/* Mission 20 — tokenization and next-token prediction */
.token-lab{display:grid;gap:16px;padding:0 24px 28px}.token-main{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);gap:16px}.token-card{border:1px solid var(--line);background:#08141e;border-radius:12px;padding:14px;display:grid;gap:10px;align-content:start}.token-card textarea,.token-card input{width:100%;background:#07111a;color:var(--txt);border:1px solid var(--line2);border-radius:8px;padding:10px}.token-presets{display:flex;gap:8px}.token-presets button.active{border-color:var(--accent);background:#103348}.token-output{display:grid;gap:9px;padding:12px;border:1px solid #29445f;border-radius:10px;background:#0d1e29}.token-output small,.token-card small{color:var(--muted)}#tokChips,.token-ids{display:flex;gap:7px;flex-wrap:wrap}.token-chip{display:inline-flex;padding:6px 9px;border-radius:8px;background:#123249;border:1px solid #2b5874;color:#dff;font-family:ui-monospace,Consolas,monospace}.token-ids code{padding:5px 7px;border-radius:7px;background:#07111a;border:1px solid var(--line);color:#9fdcf7}.token-bar{display:grid;grid-template-columns:110px 1fr 56px;gap:9px;align-items:center;margin:9px 0}.token-bar>div{height:16px;border:1px solid #29445f;border-radius:999px;overflow:hidden;background:#07111a}.token-bar i{display:block;height:100%;background:linear-gradient(90deg,#2fd2c3,#5b8cff);transition:.3s}.token-bar b{text-align:right;font-family:ui-monospace,Consolas,monospace}.token-questions{grid-template-columns:repeat(2,minmax(260px,1fr))}@media(max-width:900px){.token-lab{padding-left:12px;padding-right:12px}.token-main{grid-template-columns:1fr}.token-questions{grid-template-columns:1fr}}
