:root{--bg: #0f1424;--bg-panel: #171d33;--bg-panel-2: #1f2742;--border: #2c3658;--text: #e6e9f5;--text-dim: #9aa3c7;--accent: #5b8cff;--accent-2: #8b5bff;--idle: #3a4365;--frontier: #c9a227;--current: #ff7a45;--visited: #34c759;--finalized: #2f7d4f;--edge-idle: #4a5478;--edge-active: #ff7a45;--edge-relaxed: #ffd23f;--edge-tree: #5b8cff;--correct: #34c759;--wrong: #ff4d5e}*{box-sizing:border-box}html,body,#root{margin:0;height:100%}body{background:var(--bg);color:var(--text);font-family:Segoe UI,system-ui,-apple-system,sans-serif;font-size:14px}.app{display:flex;flex-direction:column;min-height:100vh;padding:8px;gap:8px}.appbar{display:flex;align-items:center;gap:16px;background:linear-gradient(135deg,var(--bg-panel),#1b2240);border:1px solid var(--border);border-radius:10px;padding:8px 14px}.appbar h1{font-size:16px;margin:0;letter-spacing:.3px;white-space:nowrap}.section-tabs{display:inline-flex;border:1px solid var(--border);border-radius:9px;overflow:hidden}.section-tabs button{border:none;border-radius:0;background:var(--bg-panel-2);font-size:14px;font-weight:600;padding:8px 16px}.section-tabs button.active{background:var(--accent);color:#fff}.topbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;padding:7px 12px}.topbar h1{font-size:15px;margin:0 6px 0 0;letter-spacing:.3px;white-space:nowrap}.topbar .spacer{flex:1}.field{display:flex;flex-direction:column;gap:3px}.field label{font-size:11px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.4px}select,button{font-family:inherit;font-size:13px;color:var(--text);background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px;padding:6px 10px;cursor:pointer}select:hover,button:hover{border-color:var(--accent)}input[type=text],input:not([type]){font-family:inherit;font-size:13px;color:var(--text);background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px;padding:6px 10px}input::placeholder{color:#9aa3c7;opacity:1}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button:disabled{opacity:.4;cursor:not-allowed}.mode-toggle{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden}.mode-toggle button{border:none;border-radius:0;background:var(--bg-panel-2)}.mode-toggle button.active{background:var(--accent);color:#fff}.main{display:grid;grid-template-columns:1.5fr 1fr;gap:8px;min-height:0;align-items:stretch}.lower{display:grid;grid-template-columns:1.4fr 1fr;gap:8px}.panel{background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;padding:10px;min-height:0}.panel h2{margin:0 0 6px;font-size:12px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px}.graph-canvas{width:100%;height:100%;min-height:200px;max-height:40vh;margin:0 auto;display:block}.graph-wrap{display:flex;flex-direction:column}.node-circle{transition:fill .25s,stroke .25s;cursor:default}.node-circle.clickable{cursor:pointer}.node-circle.clickable:hover{stroke:#fff!important;stroke-width:3!important}.turn-badge{position:absolute;top:8px;right:8px;left:8px;z-index:5;padding:8px 12px;border-radius:8px;font-size:13px;font-weight:700;text-align:center;background:#5b8cff2e;border:1px solid var(--accent);color:var(--text);animation:pop-in .2s ease}.turn-badge.correct{background:#34c75933;border-color:var(--visited);color:var(--correct)}.turn-badge.wrong{background:#ff4d5e33;border-color:var(--wrong);color:var(--wrong)}.click-halo{fill:none;stroke:var(--accent);stroke-width:2.5;vector-effect:non-scaling-stroke;pointer-events:none;transform-box:fill-box;transform-origin:center;animation:halo-pulse 1.1s ease-in-out infinite}@keyframes halo-pulse{0%,to{opacity:.25;transform:scale(.92)}50%{opacity:.95;transform:scale(1.12)}}.node-label{fill:#0b0f1d;font-weight:700;font-size:3.4px;text-anchor:middle;dominant-baseline:central;pointer-events:none}.node-dist{fill:var(--text);font-size:2.6px;text-anchor:middle}.edge-line{transition:stroke .25s,stroke-width .25s}.edge-weight{fill:var(--text);font-size:3px;text-anchor:middle;paint-order:stroke;stroke:var(--bg);stroke-width:.9px}.ds-list{display:flex;gap:6px;flex-wrap:wrap;align-items:flex-end;min-height:52px}.ds-list.vertical{flex-direction:column-reverse;align-items:flex-start}.ds-cell{min-width:40px;padding:8px 10px;text-align:center;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px;font-weight:600}.ds-cell.head{border-color:var(--current);box-shadow:0 0 0 2px #ff7a454d}.ds-hint{font-size:11px;color:var(--text-dim);margin-top:8px}.ds-empty{color:var(--text-dim);font-style:italic;font-size:12px}.queue-view{display:flex;align-items:stretch;gap:8px}.queue-end-label{display:flex;flex-direction:column;justify-content:center;font-size:10px;line-height:1.3;color:var(--text-dim);text-align:center;white-space:nowrap}.queue-end-label.out{color:var(--current)}.queue-end-label.in{color:var(--visited)}.queue-track{flex:1;display:flex;gap:6px;align-items:center;min-height:56px;padding:8px;background:linear-gradient(180deg,var(--bg-panel-2),var(--bg));border:1px dashed var(--border);border-radius:10px;overflow-x:auto}.queue-item{position:relative;min-width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-weight:700;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px;animation:pop-in .25s ease}.queue-item.head{border-color:var(--current);box-shadow:0 0 0 2px #ff7a4559}.queue-item .qtag{position:absolute;top:-16px;font-size:9px;color:var(--text-dim);font-weight:600}.stack-view{display:flex;flex-direction:column;align-items:center;gap:4px}.stack-pointer{align-self:flex-start;margin-left:8px;font-size:10px;font-weight:700;color:var(--current);height:14px}.stack-pile{display:flex;flex-direction:column;gap:4px;width:70%;min-width:130px;min-height:44px;padding:8px 8px 0;justify-content:flex-end;align-items:center}.stack-slab{width:100%;padding:9px 0;text-align:center;font-weight:700;background:linear-gradient(180deg,var(--bg-panel-2),#161d36);border:1px solid var(--border);border-radius:6px;box-shadow:0 2px #00000059,inset 0 1px #ffffff0d;animation:stack-drop .25s ease}.stack-slab.top{border-color:var(--current);box-shadow:0 0 0 2px #ff7a4559,0 2px #00000059}.stack-base{width:78%;min-width:145px;text-align:center;font-size:10px;color:var(--text-dim);padding:4px 0;border-top:3px solid var(--border);border-radius:0 0 4px 4px}@keyframes pop-in{0%{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}@keyframes stack-drop{0%{transform:translateY(-10px);opacity:0}to{transform:translateY(0);opacity:1}}table.dist-table{border-collapse:collapse;width:100%;font-size:13px}table.dist-table th,table.dist-table td{border:1px solid var(--border);padding:5px 8px;text-align:center}table.dist-table th{color:var(--text-dim);font-weight:600;background:var(--bg-panel-2)}table.dist-table td.final{color:var(--visited);font-weight:700}.kruskal-edges{display:flex;flex-direction:column;gap:4px;max-height:26vh;overflow-y:auto}.kruskal-edge{display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;padding:5px 10px;border:1px solid var(--border);border-radius:7px;background:var(--bg-panel-2);font-size:13px}.kruskal-edge .ke-edge{font-weight:700}.kruskal-edge .ke-w{font-family:Consolas,monospace;color:var(--text-dim)}.kruskal-edge .ke-state{font-size:11px;min-width:56px;text-align:right}.kruskal-edge.current{border-color:var(--current);box-shadow:0 0 0 2px #ff7a454d}.kruskal-edge.taken{border-color:var(--edge-tree);color:var(--text)}.kruskal-edge.taken .ke-state{color:var(--edge-tree)}.kruskal-edge.rejected{opacity:.5}.kruskal-edge.rejected .ke-state{color:var(--wrong)}.heap-array{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:10px}.heap-array .ds-cell{min-width:34px;padding:6px;font-size:12px}.heap-array .ds-cell small{display:block;color:var(--text-dim);font-weight:400;font-size:10px}.code-tabs{display:flex;gap:6px;margin-bottom:8px}.code-tabs button.active{background:var(--accent);color:#fff;border-color:var(--accent)}pre.code{margin:0;font-family:Consolas,Fira Code,monospace;font-size:12px;line-height:1.42;overflow:auto;max-height:26vh}.code-line{display:block;padding:0 8px;white-space:pre;border-left:3px solid transparent}.code-line .ln{display:inline-block;width:22px;color:#56608a;-webkit-user-select:none;user-select:none;text-align:right;margin-right:10px}.code-line.active{background:#5b8cff2e;border-left-color:var(--accent)}.tok-keyword{color:#ff7ab6;font-weight:600}.tok-string{color:#7ee787}.tok-comment{color:#6b7394;font-style:italic}.tok-number{color:#f0b860}.tok-func{color:#79c0ff}.tok-builtin{color:#d2a8ff}.tok-op{color:#b9c2e6}.complexity-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}.metric{background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px;padding:8px 10px}.metric .k{font-size:11px;color:var(--text-dim)}.metric .v{font-size:16px;font-weight:700;font-family:Consolas,monospace}.explanation{font-size:14px;line-height:1.5;min-height:40px}.step-counter{color:var(--text-dim);font-size:12px}.controlbar{display:flex;align-items:center;gap:10px;background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;padding:7px 12px;flex-wrap:wrap}.controlbar input[type=range]{width:140px}.progress{flex:1;min-width:160px}.progress input{width:100%}.game-banner{padding:8px 12px;border-radius:8px;font-weight:600;font-size:13px}.game-banner.idle{background:var(--bg-panel-2);color:var(--text-dim)}.game-banner.correct{background:#34c7592e;color:var(--correct)}.game-banner.wrong{background:#ff4d5e2e;color:var(--wrong)}.score{font-size:12px;color:var(--text-dim)}.scoreboard{display:flex;flex-direction:column;gap:4px;background:linear-gradient(135deg,var(--bg-panel-2),#241c45);border:1px solid var(--border);border-radius:10px;padding:8px 12px}.score-rank{display:flex;align-items:center;gap:8px;font-weight:700}.score-rank .rank-icon{font-size:20px}.score-stats{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:12px;color:var(--text-dim)}.score-points{font-weight:800;color:var(--accent);font-size:14px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#050812b3;display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal{background:var(--bg-panel);border:1px solid var(--border);border-radius:14px;width:min(760px,100%);max-height:86vh;display:flex;flex-direction:column;box-shadow:0 20px 60px #00000080}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border)}.modal-head h2{margin:0;font-size:18px;color:var(--text);text-transform:none;letter-spacing:0}.modal .code-tabs{padding:12px 18px 0;margin:0}.modal-close{background:transparent;border:none;font-size:18px;color:var(--text-dim)}.modal-body{padding:4px 18px 18px;overflow-y:auto}.info-content h3{font-size:13px;color:var(--accent);margin:16px 0 4px}.info-content p{margin:0 0 6px;line-height:1.55}.info-content code{background:var(--bg-panel-2);padding:1px 6px;border-radius:5px;font-family:Consolas,monospace}.info-content ol{margin:4px 0;padding-left:22px;line-height:1.6}.info-content ol li{margin-bottom:4px}.protocol-intro{background:var(--bg-panel-2);border-left:3px solid var(--accent);padding:8px 12px;border-radius:6px;font-weight:600}.protocol-steps{counter-reset:none}.protocol-conclusion{background:#34c75924;border-left:3px solid var(--visited);padding:8px 12px;border-radius:6px;font-weight:600;margin-top:8px}.tm-input{font-family:Consolas,monospace;font-size:14px;letter-spacing:2px;color:var(--text);background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px;padding:6px 10px;width:160px}.tm-main{grid-template-columns:1.3fr 1fr}.tape-view{padding:34px 4px 6px;overflow-x:auto}.tape-track{position:relative;margin:0 auto;min-width:min-content}.tape-cells{display:flex;gap:4px}.tape-cell{position:relative;width:40px;flex:0 0 40px;height:44px;display:flex;align-items:center;justify-content:center;font-family:Consolas,monospace;font-size:18px;font-weight:700;background:linear-gradient(180deg,var(--bg-panel-2),#161d36);border:1px solid var(--border);border-radius:6px;transition:border-color .2s,box-shadow .2s}.tape-cell.head{border-color:var(--current);box-shadow:0 0 0 2px #ff7a4566}.tape-cell.head.accept{border-color:var(--visited);box-shadow:0 0 0 2px #34c75973}.tape-cell.head.reject{border-color:var(--wrong);box-shadow:0 0 0 2px #ff4d5e73}.tape-head-ptr{position:absolute;top:-30px;left:20px;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;color:var(--current);line-height:1;transition:left .28s cubic-bezier(.34,1.2,.64,1);pointer-events:none}.tape-head-ptr.accept{color:var(--visited)}.tape-head-ptr.reject{color:var(--wrong)}.tape-head-arrow{font-size:14px;margin-top:1px}.tape-head-state{font-size:12px;font-weight:700;white-space:nowrap;background:var(--bg-panel-2);border:1px solid currentColor;border-radius:6px;padding:1px 6px}.tape-string{margin-top:12px;padding:8px 10px;font-family:Consolas,monospace;font-size:16px;letter-spacing:1px;text-align:center;background:var(--bg);border:1px dashed var(--border);border-radius:8px;overflow-x:auto;white-space:nowrap}.tape-string .ts-sym{color:var(--text-dim)}.tape-string .ts-head{color:var(--current);font-weight:700;background:#ff7a4526;border-radius:4px;padding:1px 2px}.tm-explanation{margin-top:12px;font-size:14px;line-height:1.5;min-height:38px;padding:8px 10px;background:var(--bg-panel-2);border-left:3px solid var(--accent);border-radius:6px}.tm-table-wrap{overflow:auto}table.tm-table{font-family:Consolas,monospace;font-size:12px}.tm-table .tm-state-cell{font-weight:700;background:var(--bg-panel-2);white-space:nowrap}.tm-table tr.row-active .tm-state-cell{color:var(--current)}.tm-table .tm-cell{white-space:nowrap}.tm-table .cell-active{background:#ff7a4538;box-shadow:inset 0 0 0 2px var(--current);color:var(--text);font-weight:700}.tm-table .tm-empty{color:#4a5478}.tm-final.acc{color:var(--visited)}.tm-final.rej{color:var(--wrong)}.tm-lower{grid-template-columns:1fr}.tm-info{display:flex;flex-direction:column;gap:12px}.tm-info-task strong{font-size:14px}.tm-status-row{display:flex;gap:8px;flex-wrap:wrap}.tm-badge{font-size:12px;font-weight:600;padding:4px 10px;border-radius:999px;background:var(--bg-panel-2);border:1px solid var(--border)}.tm-badge.status.running{color:var(--text-dim)}.tm-badge.status.accept{color:var(--correct);border-color:var(--visited)}.tm-badge.status.reject{color:var(--wrong);border-color:var(--wrong)}.tm-badge.status.halt{color:var(--frontier);border-color:var(--frontier)}.tm-formal h3{font-size:13px;color:var(--accent);margin:0 0 6px}.tm-tuple{font-family:Consolas,monospace;font-size:15px;font-weight:700;margin-bottom:8px}.tm-tuple-list{list-style:none;margin:0;padding:0;font-family:Consolas,monospace;font-size:12.5px;line-height:1.7}.tm-tuple-list .sym{display:inline-block;min-width:22px;font-weight:700;color:var(--accent-2)}.tm-tuple-list .muted{color:var(--text-dim);font-family:Segoe UI,system-ui,sans-serif;font-size:12px}.state-diagram{width:100%;height:100%;min-height:220px;max-height:42vh;display:block}.sd-state-label{fill:#0b0f1d;font-weight:700;font-size:4px;text-anchor:middle;pointer-events:none}.sd-edge-label{fill:var(--text-dim);font-family:Consolas,monospace;font-size:3px;text-anchor:middle;paint-order:stroke;stroke:var(--bg);stroke-width:.8px}.sd-edge-label.active{fill:var(--edge-active);font-weight:700}.tm-quiz{margin-top:12px;padding:10px 12px;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px}.tm-quiz h4{margin:0 0 8px;font-size:13px}.tm-quiz-row{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}.tm-quiz-field{display:flex;flex-direction:column;gap:3px;font-size:11px;color:var(--text-dim)}.multi-tapes{display:flex;flex-direction:column;gap:4px;margin-top:8px}.multi-tape-row{display:flex;align-items:center;gap:10px}.multi-tape-label{flex:0 0 110px;font-size:12px;font-weight:700;color:var(--text-dim);text-align:right}.tape-view.multi{flex:1;padding:30px 4px 6px}.goedel-numbering{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.goedel-list{list-style:none;margin:4px 0 0;padding:0;font-size:13px;line-height:1.7}table.goedel-trans{font-size:12px}table.goedel-trans td{font-family:Consolas,monospace;text-align:left}.goedel-code{color:var(--accent)}.goedel-bigcode{font-family:Consolas,monospace;font-size:13px;word-break:break-all;line-height:1.8;background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:8px 10px}.goedel-block{color:var(--text)}.goedel-sep{color:var(--wrong);font-weight:700;margin:0 1px}.goedel-factored{font-family:Consolas,monospace;font-size:15px;word-break:break-word;line-height:2}.goedel-times{color:var(--text-dim)}.goedel-result{display:inline-block;margin-top:4px;word-break:break-all;background:var(--bg);padding:6px 8px;border-radius:6px}.goedel-result.big{color:var(--accent);font-weight:700}.modal-wide{width:min(960px,100%)}.editor-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:12px}.ed-field{display:flex;flex-direction:column;gap:4px;font-size:12.5px;font-weight:600;color:var(--text)}.ed-field.wide{grid-column:1 / -1}.ed-field input,.ed-field select{font-size:14px;font-weight:400;color:var(--text);padding:8px 10px}.editor-delta-wrap{overflow-x:auto}table.editor-delta{font-size:13px}table.editor-delta th{font-size:13px;color:var(--text)}.editor-delta .ed-cell{padding:4px}.ed-cell-inputs{display:flex;gap:3px}.ed-cell-inputs select{padding:5px 4px;font-size:12.5px;font-family:Consolas,monospace;color:var(--text)}.ed-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;margin:6px 0 10px}.ed-legend span{display:inline-flex;align-items:center;gap:5px}.ed-legend .chip{display:inline-block;min-width:20px;text-align:center;font-weight:700;font-family:Consolas,monospace;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:5px;padding:1px 6px}.ed-cell-head{display:flex;gap:3px;font-size:10px;color:var(--text-dim);justify-content:center;margin-bottom:2px}.ed-cell-head span{width:48px;text-align:center}.editor-actions{display:flex;gap:10px;margin-top:14px}.tm-hidden-name{font-weight:700;color:var(--frontier);padding:6px 0}.identify-boost{color:var(--frontier);font-weight:700}.identify-noboost{color:var(--text-dim)}.identify-options{display:flex;flex-direction:column;gap:8px;margin-top:8px}.identify-option{text-align:left;padding:10px 12px;font-size:13.5px;line-height:1.4;white-space:normal}.identify-option.correct{background:#34c75933;border-color:var(--visited);color:var(--text)}.identify-option.wrong{background:#ff4d5e33;border-color:var(--wrong);color:var(--text)}.identify-reveal{margin-top:12px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.legend{display:flex;gap:12px;flex-wrap:wrap;font-size:11px;color:var(--text-dim);margin-top:8px}.legend span{display:inline-flex;align-items:center;gap:4px}.legend .dot{width:10px;height:10px;border-radius:50%;display:inline-block}.sort-viz{display:flex;flex-direction:column;gap:14px}.sort-bars{display:flex;align-items:flex-end;gap:6px;min-height:196px;padding:10px 6px 0;overflow-x:auto}.sort-bar-col{display:flex;flex-direction:column;align-items:center;gap:4px;flex:1 1 0;min-width:30px;border-radius:6px;padding-top:4px}.sort-bar-col.in-range{background:#8b5bff1f;box-shadow:inset 0 0 0 1px #8b5bff66}.sort-bar{width:100%;max-width:46px;display:flex;align-items:flex-start;justify-content:center;border-radius:6px 6px 3px 3px;background:#6f5ba6;color:#fff;font-size:12px;font-weight:700;padding-top:4px;transition:height .22s ease,background .18s ease}.sort-bar-val{text-shadow:0 1px 2px rgba(0,0,0,.5)}.sort-bar.active{background:var(--accent)}.sort-bar.compare{background:#e0a72e;color:#1a1500}.sort-bar.compare .sort-bar-val{text-shadow:none}.sort-bar.write{background:var(--wrong)}.sort-bar.sorted{background:var(--correct);color:#04210e}.sort-bar.sorted .sort-bar-val{text-shadow:none}.sort-bar-idx{font-size:10px;color:var(--text-dim)}.sort-aux{display:flex;flex-direction:column;gap:6px;border-top:1px solid var(--border);padding-top:10px}.sort-aux-row{display:flex;align-items:center;gap:10px}.sort-aux-label{flex:0 0 150px;font-size:11px;font-weight:700;color:var(--text-dim)}.sort-aux-cells{display:flex;flex-wrap:wrap;gap:4px}.sort-aux-cell{min-width:22px;text-align:center;font-family:Consolas,monospace;font-size:12px;padding:3px 7px;border-radius:5px;background:var(--bg-panel-2);border:1px solid var(--border);color:var(--text)}.sort-aux-cell.active{background:var(--accent);border-color:var(--accent);color:#fff}.sort-aux-cell.compare{background:#e0a72e;border-color:#e0a72e;color:#1a1500}.sort-aux-cell.done{background:#34c7592e;border-color:var(--correct);color:var(--correct)}.sort-badges{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.sort-badge{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;background:var(--bg-panel-2);border:1px solid var(--border);color:var(--text-dim)}.sort-badge.complexity{background:#8b5bff2e;border-color:var(--accent-2);color:#c4b0ff}.sort-badge.yes{background:#34c75929;border-color:var(--correct);color:var(--correct)}.sort-badge.no{background:#ff4d5e24;border-color:var(--wrong);color:#ff9aa5}.sort-summary{font-size:14px;line-height:1.5;margin:0 0 10px}.sort-idea{margin:0;padding-left:18px;font-size:13px;line-height:1.55;color:var(--text-dim)}.sort-idea li{margin-bottom:4px}.sort-counters{display:flex;gap:12px;margin-bottom:10px}.sort-counter{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:10px;border-radius:8px;background:var(--bg-panel-2);border:1px solid var(--border)}.sort-counter-num{font-size:22px;font-weight:800;color:var(--accent);font-variant-numeric:tabular-nums}.sort-counter-lbl{font-size:11px;color:var(--text-dim)}.sort-quiz{display:flex;flex-direction:column;gap:12px}.sort-score{display:flex;flex-wrap:wrap;gap:12px;align-items:center;font-size:13px;color:var(--text-dim);padding-bottom:8px;border-bottom:1px solid var(--border)}.sort-score .rank{font-weight:700;color:var(--text)}.sort-decision{display:flex;flex-direction:column;gap:10px}.sort-decision-q{font-size:15px;font-weight:600;line-height:1.4}.sort-decision-q.muted{color:var(--text-dim);font-weight:400}.sort-decision-opts{display:flex;flex-wrap:wrap;gap:8px}.sort-decision-opts button{font-size:14px;font-weight:600;padding:10px 16px}.sort-code{font-size:13px;line-height:1.5}.sort-h3{font-size:13px;font-weight:700;margin:14px 0 6px;color:var(--text)}.sort-concept{margin:12px 0;padding:10px 12px;border-radius:8px;background:#8b5bff1f;border:1px solid var(--accent-2)}.sort-concept-title{font-size:13px;font-weight:700;color:#c4b0ff;margin-bottom:4px}.sort-concept p{margin:0;font-size:13px;line-height:1.55}.sort-codewrap{display:flex;flex-direction:column;gap:8px}.has-tip{position:relative;cursor:help}.has-tip:after{content:attr(data-tip);position:absolute;top:calc(100% + 8px);left:0;z-index:30;width:max-content;max-width:280px;padding:8px 10px;border-radius:8px;background:#0b0f1d;border:1px solid var(--border);color:var(--text);font-size:12px;font-weight:400;line-height:1.45;letter-spacing:normal;text-transform:none;white-space:normal;box-shadow:0 8px 24px #00000073;opacity:0;transform:translateY(-4px);pointer-events:none;transition:opacity .12s ease,transform .12s ease}.has-tip:before{content:"";position:absolute;top:calc(100% + 2px);left:14px;z-index:31;border:6px solid transparent;border-bottom-color:var(--border);opacity:0;transition:opacity .12s ease;pointer-events:none}.has-tip:hover:after,.has-tip:hover:before{opacity:1;transform:translateY(0)}.heap-wrap{margin-bottom:12px;border-bottom:1px solid var(--border);padding-bottom:10px}.heap-caption{font-size:11px;color:var(--text-dim);margin-bottom:4px}.heap-tree{width:100%;height:auto;max-height:230px;display:block}.heap-edge{stroke:var(--border);stroke-width:2}.heap-node circle{fill:#6f5ba6;stroke:#ffffff26;stroke-width:1;transition:fill .18s ease}.heap-node.active circle{fill:var(--accent)}.heap-node.compare circle{fill:#e0a72e}.heap-node.write circle{fill:var(--wrong)}.heap-val{fill:#fff;font-size:14px;font-weight:700}.heap-node.compare .heap-val{fill:#1a1500}.heap-idx{fill:var(--text-dim);font-size:10px}.heap-empty{margin-bottom:12px;padding:16px;text-align:center;font-weight:600;color:var(--correct);background:#34c7591f;border-radius:8px}.tri-main{height:54vh;overflow:hidden}.tri-lower{height:24vh;overflow:hidden}.tri-panel,.tri-side{display:flex;flex-direction:column;min-height:0;overflow:hidden}.tri-lower .panel{min-height:0;overflow-y:auto}.tri-canvas{width:100%;height:auto;flex:1;min-height:0;max-height:44vh;margin:0 auto;display:block}.tri-caption{margin-top:6px;font-size:12px;color:var(--text-dim);text-align:center}.tri-edge{stroke:#6b76a0;stroke-width:2.5}.tri-diag{stroke:var(--accent);stroke-width:3;transition:stroke .2s,stroke-width .2s}.tri-diag.matched{stroke:var(--correct)}.tri-hit{stroke:transparent;stroke-width:18;cursor:pointer}.tri-hit:hover{stroke:#5b8cff2e}.tri-ghost{stroke:var(--edge-relaxed);stroke-width:3;stroke-dasharray:7 6;opacity:.85}.tri-diag.just-added{animation:triPop .55s ease}@keyframes triPop{0%{stroke:#fff;stroke-width:7}to{stroke:var(--accent);stroke-width:3}}.tri-quad-flash{fill:#ff7a4538;stroke:var(--current);stroke-width:1.5;animation:triQuadFade .6s ease forwards}@keyframes triQuadFade{0%{opacity:1}to{opacity:0}}.tri-vertex circle{fill:var(--bg-panel-2);stroke:var(--accent);stroke-width:2}.tri-vertex text{fill:var(--text);font-size:13px;font-weight:700}.tri-dual-edge{stroke:#e0a72e;stroke-width:2;stroke-dasharray:4 4;opacity:.9}.tri-dual-node{fill:#e0a72e;stroke:#1a1500;stroke-width:1}.tri-tree{width:100%;height:auto;max-height:17vh;display:block}.tri-tree-empty{padding:16px;color:var(--text-dim)}.tri-tree-edge{stroke:#e0a72e;stroke-width:2}.tri-tree-node circle{fill:#6f5ba6;stroke:#ffffff2e;stroke-width:1;transition:fill .18s ease}.tri-tree-node.root circle{fill:var(--accent)}.tri-tree-node.flash circle{fill:var(--current)}.tri-tree-node text{fill:#fff;font-size:11px;font-weight:700}.tri-info{flex:1;min-height:0;overflow-y:auto;padding-right:4px}.tri-game{overflow-y:auto}.tri-h3{margin:12px 0 5px;font-size:14px}.tri-h3:first-child{margin-top:0}.tri-text{font-size:13px;line-height:1.55;margin:0 0 6px}.tri-list{margin:0 0 6px;padding-left:18px;font-size:13px;line-height:1.5}.tri-list li{margin-bottom:4px}.tri-props{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:6px}.tri-props td{padding:3px 6px;border-bottom:1px solid var(--border)}.tri-props td.v{text-align:right;font-family:Consolas,monospace;font-weight:700;color:var(--accent)}.tri-concept{margin-top:10px;padding:9px 11px;background:linear-gradient(135deg,var(--bg-panel-2),#241c45);border:1px solid var(--border);border-radius:9px;font-size:13px;line-height:1.5}.tri-concept-title{font-weight:700;margin-bottom:3px}.tri-presets{display:inline-flex;gap:6px}.tri-presets button.on{background:var(--accent);border-color:var(--accent);color:#fff}.tri-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:8px}.tri-metric{display:flex;flex-direction:column;gap:2px;padding:8px;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:9px}.tri-metric-v{font-size:18px;font-weight:700;font-family:Consolas,monospace;color:var(--accent)}.tri-metric-l{font-size:11px;color:var(--text-dim)}.tri-game{display:flex;flex-direction:column;gap:10px}.score-pts{margin-left:auto;font-family:Consolas,monospace}.tri-task p{font-size:13px;line-height:1.5;margin:0 0 8px}.tri-goal-chip{color:var(--edge-relaxed);font-weight:700}.tri-task-nums{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.tri-task-num{display:flex;flex-direction:column;align-items:center;padding:8px;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:9px}.tri-task-num .num{font-size:20px;font-weight:700;font-family:Consolas,monospace}.tri-task-num .lbl{font-size:11px;color:var(--text-dim)}.tri-newtask{align-self:flex-start}.appbar .spacer{flex:1}.mute-btn{font-size:18px;line-height:1;padding:6px 10px;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:9px}.mute-btn:hover{border-color:var(--accent)}.tree-main{height:50vh;overflow:hidden}.tree-lower{height:22vh;overflow:hidden}.tree-panel,.tree-side{display:flex;flex-direction:column;min-height:0;overflow:hidden}.tree-side{overflow-y:auto}.tree-lower .panel{min-height:0;display:flex;flex-direction:column}.tree-code-panel .sort-codewrap{flex:1;min-height:0;display:flex;flex-direction:column}.tree-code-panel pre.code{flex:1;min-height:0;overflow:auto}.tree-lower .panel:last-child{overflow-y:auto}.tree-canvas{width:100%;height:auto;flex:1;min-height:0;max-height:46vh;margin:0 auto;display:block}.tree-caption{margin-top:6px}.tree-info{flex:1;min-height:0}.tree-edge{stroke:var(--edge-idle);stroke-width:2.4}.tree-edge.on{stroke:var(--accent);stroke-width:3.2}.tree-node .tree-disc{fill:var(--bg-panel-2);stroke:#6b76a0;stroke-width:2;transition:fill .25s,stroke .25s}.tree-node .tree-key{fill:var(--text);font-size:15px;font-weight:700;text-anchor:middle}.tree-node.clickable{cursor:pointer}.tree-node.clickable:hover .tree-disc{stroke:var(--accent);stroke-width:3}.tree-bal{fill:var(--text-dim);font-size:11px;font-weight:700;text-anchor:start}.tree-bal.bad{fill:var(--wrong)}.tree-node.role-path .tree-disc{stroke:var(--accent)}.tree-node.role-compare .tree-disc{fill:var(--accent);stroke:var(--accent)}.tree-node.role-found .tree-disc{fill:var(--correct);stroke:var(--correct)}.tree-node.role-insert .tree-disc{fill:var(--correct);stroke:#aef5c2}.tree-node.role-remove .tree-disc{fill:var(--wrong);stroke:var(--wrong)}.tree-node.role-succ .tree-disc{fill:var(--accent-2);stroke:var(--accent-2)}.tree-node.role-rotate .tree-disc{fill:var(--edge-relaxed);stroke:var(--edge-relaxed)}.tree-node.role-rotate .tree-key{fill:#1a1f30}.tree-node.role-insert .tree-key,.tree-node.role-found .tree-key{fill:#10331c}.tree-node.role-unbalanced .tree-disc{fill:var(--wrong);stroke:#ffd0d4;stroke-width:3}.tree-node.role-splay .tree-disc{fill:var(--current);stroke:#ffd2bd}.tree-empty{fill:var(--text-dim);font-size:15px;text-anchor:middle}.tree-code-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px;flex-wrap:wrap}.tree-routine{font-family:var(--mono, ui-monospace, monospace);font-size:13px;color:var(--accent);font-weight:700}.tree-step-desc{max-width:360px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-bad-word{color:var(--wrong);font-weight:700}.tree-game-canvas{background:var(--bg-panel);border-radius:10px;padding:4px;margin:8px 0}.tree-game-canvas .tree-canvas{max-height:30vh}.tree-rot-options{display:grid;grid-template-columns:1fr 1fr;gap:8px}.tree-rot-btn{padding:10px 8px;font-weight:600;border:1px solid var(--accent);background:var(--bg-panel-2);color:var(--text);border-radius:8px;cursor:pointer;transition:background .15s,transform .05s}.tree-rot-btn:hover:not(:disabled){background:var(--accent)}.tree-rot-btn:active:not(:disabled){transform:translateY(1px)}.tree-rot-btn:disabled{opacity:.5;cursor:default}.matroid-main{height:46vh;overflow:hidden}.matroid-lower{height:26vh;overflow:hidden}.matroid-panel,.matroid-side{display:flex;flex-direction:column;min-height:0;overflow:hidden}.matroid-side{overflow-y:auto}.matroid-lower .panel{min-height:0;display:flex;flex-direction:column}.matroid-lower-left .sort-codewrap{flex:1;min-height:0;display:flex;flex-direction:column}.matroid-lower-left pre.code{flex:1;min-height:0;overflow:auto}.matroid-lower .panel:last-child{overflow-y:auto}.matroid-canvas{width:100%;height:auto;flex:1;min-height:0;max-height:44vh;margin:0 auto;display:block}.m-caption{margin-top:6px}.m-el{--rc: var(--edge-idle)}.m-el.clickable{cursor:pointer}.m-el.role-selected{--rc: var(--accent)}.m-el.role-chosen{--rc: var(--correct)}.m-el.role-testing{--rc: var(--edge-relaxed)}.m-el.role-circuit{--rc: var(--wrong)}.m-el.role-augment{--rc: var(--correct)}.m-el.role-rejected{--rc: var(--edge-idle);opacity:.4}.m-edge-hit,.m-vec-hit{stroke:transparent;stroke-width:18;stroke-linecap:round}.m-edge{stroke:var(--rc);stroke-width:4;transition:stroke .2s}.m-el.clickable:hover .m-edge{stroke-width:6}.m-edge-tag{fill:var(--bg-panel-2);stroke:var(--rc);stroke-width:1.5;transition:stroke .2s}.m-edge-label{fill:var(--text);font-size:12px;font-weight:700;text-anchor:middle}.m-weight{fill:var(--edge-relaxed);font-size:12px;font-weight:700;text-anchor:middle}.m-vertex circle{fill:var(--bg-panel);stroke:#6b76a0;stroke-width:2}.m-vertex text{fill:var(--text);font-size:12px;font-weight:700;text-anchor:middle}.m-chip{fill:var(--bg-panel-2);stroke:var(--rc);stroke-width:2.5;transition:stroke .2s,fill .2s}.m-el.role-selected .m-chip,.m-el.role-chosen .m-chip,.m-el.role-testing .m-chip{fill:color-mix(in srgb,var(--rc) 25%,var(--bg-panel-2))}.m-el.clickable:hover .m-chip{stroke-width:4}.m-chip-label{fill:var(--text);font-size:15px;font-weight:700;text-anchor:middle}.m-axis{stroke:var(--edge-idle);stroke-width:1;stroke-dasharray:4 5;opacity:.6}.m-vec{stroke:var(--rc);stroke-width:3.4;transition:stroke .2s}.m-vec-head{fill:var(--rc);transition:fill .2s}.m-el.clickable:hover .m-vec{stroke-width:5}.m-el.role-augment .m-edge,.m-el.role-augment .m-vec{stroke-dasharray:7 5}.m-vec-label{fill:var(--text);font-size:13px;font-weight:700;text-anchor:middle}.m-hint-text{fill:var(--text-dim);font-size:13px;text-anchor:middle}.m-classify{display:flex;flex-direction:column;gap:10px;font-size:14px}.m-set-line{font-size:15px}.m-set{font-family:var(--mono, ui-monospace, monospace);color:var(--accent);font-weight:700}.m-muted{color:var(--text-dim)}.m-class-rows{display:flex;flex-direction:column;gap:5px}.m-class-row{display:flex;align-items:center;gap:8px}.m-class-row.yes{color:var(--correct)}.m-class-row.no{color:var(--text-dim)}.m-class-row.na{color:var(--text-dim);opacity:.7}.m-class-mark{width:18px;text-align:center}.m-rank-line{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.m-matroid-badge{padding:2px 10px;border-radius:999px;font-weight:700}.m-matroid-badge.yes{background:color-mix(in srgb,var(--correct) 22%,transparent);color:var(--correct)}.m-matroid-badge.no{background:color-mix(in srgb,var(--wrong) 22%,transparent);color:var(--wrong)}.m-exchange{display:flex;flex-direction:column;gap:6px}.m-aug-btn{align-self:flex-start;padding:7px 12px;border:1px solid var(--accent);background:var(--bg-panel-2);color:var(--text);border-radius:8px;cursor:pointer;font-weight:600}.m-aug-btn:hover:not(:disabled){background:var(--accent)}.m-aug-btn:disabled{opacity:.5;cursor:default}.m-aug-result{font-size:13px;color:var(--text-dim);margin:0}.m-hint{font-size:12.5px;color:var(--text-dim);margin:0}.matroid-lower-left{overflow:hidden}.m-concept{font-size:13px;flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding-right:4px}.m-concept>p{margin:0}.m-gloss{margin:0;display:flex;flex-direction:column;gap:5px}.m-gloss-row{display:grid;grid-template-columns:132px 1fr;gap:10px;align-items:baseline}.m-gloss-row dt{font-weight:700;color:var(--accent)}.m-gloss-row dd{margin:0;color:var(--text-dim);line-height:1.45}.m-world-note{border-top:1px solid var(--border);padding-top:8px}.m-greedy-info{display:flex;flex-direction:column;gap:10px;min-height:0}.m-greedy-list{display:flex;flex-direction:column;gap:4px;overflow-y:auto;min-height:0}.m-greedy-item{display:flex;align-items:center;gap:10px;padding:5px 9px;border-radius:7px;background:var(--bg-panel-2);border-left:3px solid transparent}.m-greedy-item.st-chosen{border-left-color:var(--correct)}.m-greedy-item.st-rejected{opacity:.5;border-left-color:var(--wrong)}.m-greedy-item.st-testing{border-left-color:var(--edge-relaxed);background:color-mix(in srgb,var(--edge-relaxed) 16%,var(--bg-panel-2))}.m-gi-mark{width:18px;text-align:center}.m-gi-label{font-weight:700;flex:1}.m-gi-weight{color:var(--edge-relaxed);font-weight:700}.m-greedy-totals{display:flex;flex-direction:column;gap:5px;font-size:14px}.m-opt-badge{padding:3px 9px;border-radius:7px;font-weight:700}.m-opt-badge.yes{background:color-mix(in srgb,var(--correct) 20%,transparent);color:var(--correct)}.m-opt-badge.no{background:color-mix(in srgb,var(--wrong) 20%,transparent);color:var(--wrong)}.m-game{display:flex;flex-direction:column;gap:10px}.m-game-task{font-size:14px}.m-game-canvas{background:var(--bg-panel);border-radius:10px;padding:4px}.m-game-canvas .matroid-canvas{max-height:26vh}.m-game-options{display:grid;grid-template-columns:repeat(auto-fit,minmax(90px,1fr));gap:8px}.m-opt-btn{padding:10px 8px;font-weight:600;border:1px solid var(--accent);background:var(--bg-panel-2);color:var(--text);border-radius:8px;cursor:pointer;transition:background .15s,transform .05s}.m-opt-btn:hover:not(:disabled){background:var(--accent)}.m-opt-btn:active:not(:disabled){transform:translateY(1px)}.m-opt-btn:disabled{opacity:.5;cursor:default}.info-content ul{margin:4px 0;padding-left:22px;line-height:1.6}.info-content ul li{margin-bottom:6px}.m-example{background:var(--bg-panel-2);border-left:3px solid var(--accent);padding:8px 12px;border-radius:6px;margin:6px 0 10px;font-family:Consolas,monospace;font-size:13px;line-height:1.7}.m-why{background:color-mix(in srgb,var(--correct) 10%,transparent);border-left:3px solid var(--correct);padding:7px 11px;border-radius:6px;margin:6px 0 10px}.m-more-btn{margin-top:10px;align-self:flex-start;padding:8px 12px;border:1px solid var(--accent);background:var(--bg-panel-2);color:var(--text);border-radius:8px;cursor:pointer;font-weight:600}.m-more-btn:hover{background:var(--accent)}.numbers-main{height:46vh;overflow:hidden}.numbers-lower{height:26vh;overflow:hidden}.numbers-panel,.numbers-side{display:flex;flex-direction:column;min-height:0;overflow:hidden}.numbers-side{overflow-y:auto}.numbers-lower .panel{min-height:0;display:flex;flex-direction:column}.numbers-lower-left{overflow:hidden}.numbers-lower-left .sort-codewrap{flex:1;min-height:0;display:flex;flex-direction:column}.numbers-lower-left pre.code{flex:1;min-height:0;overflow:auto}.numbers-lower .panel:last-child{overflow-y:auto}.num-canvas-wrap{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px}.num-mono{font-family:Consolas,monospace}.num-input{width:120px;background:var(--bg-panel-2);border:1px solid var(--border);color:var(--text);border-radius:7px;padding:6px 8px;font-size:14px}.num-rowline{display:flex;align-items:center;gap:10px}.num-rowlabel{width:42px;text-align:right;color:var(--text-dim);font-weight:700;font-family:Consolas,monospace}.num-row{display:flex;gap:6px;flex-wrap:wrap}.num-cell{--rc: var(--edge-idle);position:relative;min-width:30px;padding:6px 4px;display:flex;flex-direction:column;align-items:center;gap:2px;border:2px solid var(--rc);border-radius:7px;background:var(--bg-panel-2);transition:border-color .2s,background .2s,transform .15s}.num-drop{position:absolute;top:-30px;left:50%;transform:translate(-50%);font-family:Consolas,monospace;font-weight:800;font-size:15px;color:#fff;background:var(--current);border-radius:6px;padding:1px 6px;box-shadow:0 3px 8px #ff7a4580;animation:num-drop-in .45s cubic-bezier(.5,1.7,.6,1) both;pointer-events:none;z-index:5}.num-cell.dropping{animation:num-drop-impact .45s ease-out both}@keyframes num-drop-in{0%{top:-46px;opacity:0}60%{top:-22px;opacity:1}75%{top:-30px}to{top:-26px;opacity:1}}@keyframes num-drop-impact{0%,55%{transform:translateY(0)}68%{transform:translateY(4px) scale(1.06)}to{transform:translateY(0)}}.num-select{background:var(--bg-panel-2);border:1px solid var(--border);color:var(--text);border-radius:7px;padding:6px 8px;font-size:13px;cursor:pointer}.num-cell.bit{min-width:34px}.num-cell .num-digit{font-family:Consolas,monospace;font-size:19px;font-weight:700;color:var(--text)}.num-cell .num-place{font-size:10px;color:var(--text-dim)}.num-cell.role-active{--rc: var(--accent);background:color-mix(in srgb,var(--accent) 22%,var(--bg-panel-2));transform:translateY(-2px)}.num-cell.role-flip{--rc: var(--accent-2);background:color-mix(in srgb,var(--accent-2) 26%,var(--bg-panel-2));transform:translateY(-2px)}.num-cell.role-carry{--rc: var(--current);background:color-mix(in srgb,var(--current) 26%,var(--bg-panel-2))}.num-cell.role-set{--rc: var(--correct)}.num-cell.role-dim{opacity:.4}.num-convert-canvas{display:flex;flex-direction:column;align-items:center;gap:12px}.num-bignum{font-family:Consolas,monospace;font-size:30px;font-weight:700;color:var(--accent)}.num-arrow{color:var(--text-dim);font-size:13px}.num-step-desc{color:var(--text-dim);font-size:12.5px;text-align:center;margin:4px 0 0}.num-side{display:flex;flex-direction:column;gap:10px;font-size:13px}.num-side-head{margin:0;color:var(--text-dim);line-height:1.5}.num-divtable{border-collapse:collapse;width:100%;font-family:Consolas,monospace;font-size:13px}.num-divtable th{text-align:left;color:var(--text-dim);font-weight:600;border-bottom:1px solid var(--border);padding:3px 6px}.num-divtable td{padding:3px 6px;border-bottom:1px solid color-mix(in srgb,var(--border) 50%,transparent)}.num-divtable tr.active td{background:color-mix(in srgb,var(--accent) 20%,transparent)}.num-divtable tr.past td{color:var(--text-dim)}.num-result{margin:0;font-size:13px}.num-class-rows{display:flex;flex-direction:column;gap:6px}.num-kv{display:flex;justify-content:space-between;align-items:baseline;gap:10px;padding:5px 8px;background:var(--bg-panel-2);border-radius:6px}.num-kv span{color:var(--text-dim)}.num-counter{display:flex;flex-direction:column;align-items:center;gap:12px}.num-cols{display:flex;gap:8px}.num-col{display:flex;flex-direction:column;align-items:center;gap:4px;padding:4px;border-radius:8px;transition:background .2s}.num-col.carry{background:color-mix(in srgb,var(--current) 28%,transparent)}.num-col.bump{background:color-mix(in srgb,var(--correct) 22%,transparent)}.num-bin{display:flex;flex-direction:column-reverse;justify-content:flex-start;gap:3px;height:120px;width:30px;padding:4px;border:1px solid var(--border);border-radius:6px;background:var(--bg-panel-2)}.ball{width:18px;height:9px;border-radius:50%;background:#2a3252;transition:background .2s,transform .2s}.ball.on{background:var(--accent)}.ball.square{width:100%;height:100%;border-radius:5px;background:#232a45}.ball.square.on{background:var(--accent)}.num-fill{flex:1;display:flex;align-items:flex-end}.num-fill-bar{width:100%;background:var(--accent);border-radius:4px;transition:height .2s}.num-col-digit{font-family:Consolas,monospace;font-weight:700;font-size:17px;color:var(--text)}.num-col-weight{font-size:10px;color:var(--text-dim)}.num-counter-readout{display:flex;gap:16px;flex-wrap:wrap;font-size:14px;color:var(--text-dim)}.num-wrapflag{color:var(--current);font-weight:700}.num-count-ctrl button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.num-canvas-flex{display:flex;flex-direction:column;align-items:center;gap:10px}.num-complement-rows{display:flex;flex-direction:column;align-items:center;gap:6px}.num-ring{width:180px;height:180px}.num-ring-circle{fill:none;stroke:var(--border);stroke-width:2}.num-ring-tick{fill:#3a4366}.num-ring-arm{stroke-width:2.5}.num-ring-arm.n{stroke:var(--accent)}.num-ring-arm.c{stroke:var(--current)}.num-ring-zero{fill:var(--text-dim)}.num-ring-dot.n{fill:var(--accent)}.num-ring-dot.c{fill:var(--current)}.num-ring-mod,.num-ring-sub{text-anchor:middle;fill:var(--text-dim);font-size:11px}.num-ring-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px}.num-ring-legend .leg.n{color:var(--accent)}.num-ring-legend .leg.c{color:var(--current)}.num-ring-legend .leg.z{color:var(--text-dim)}.num-phasebar{display:flex;gap:8px}.num-phase{padding:4px 10px;border-radius:999px;background:var(--bg-panel-2);border:1px solid var(--border);font-size:12px;color:var(--text-dim)}.num-phase.active{border-color:var(--accent);color:var(--text)}.num-arith{display:flex;flex-direction:column;gap:8px;align-items:flex-start}.num-carry-row{font-size:13px;color:var(--text-dim)}.num-carry-detail{font-family:Consolas,monospace}.num-arith-line{height:2px;align-self:stretch;background:var(--border);margin:2px 0}.num-float{display:flex;flex-direction:column;align-items:center;gap:14px;width:100%}.fb-groups{display:flex;gap:14px;flex-wrap:wrap;justify-content:center}.fb-group{display:flex;flex-direction:column;align-items:center;gap:5px}.fb-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.4px}.fb-label.fb-sign{color:var(--wrong)}.fb-label.fb-exp{color:var(--accent)}.fb-label.fb-mant{color:var(--correct)}.fb-bits{display:flex;gap:2px;flex-wrap:wrap;justify-content:center;max-width:420px}.fb-bit{width:12px;height:18px;display:flex;align-items:center;justify-content:center;font-family:Consolas,monospace;font-size:10px;border-radius:2px;background:#232a45;color:var(--text-dim)}.fb-bit.on{color:#fff}.fb-bit.fb-sign.on{background:var(--wrong)}.fb-bit.fb-exp.on{background:var(--accent)}.fb-bit.fb-mant.on{background:var(--correct)}.fb-sub{font-size:11px;color:var(--text-dim);font-family:Consolas,monospace}.fb-mean{font-size:11.5px;color:var(--text);font-family:Consolas,monospace;text-align:center}.fb-formula{font-size:15px;font-family:Consolas,monospace;color:var(--text);text-align:center;background:var(--bg-panel-2);border:1px solid var(--border);border-radius:8px;padding:7px 12px}.fb-c-sign{color:var(--wrong);font-weight:700}.fb-c-exp{color:var(--accent);font-weight:700}.fb-c-mant{color:var(--correct);font-weight:700}.fb-special{color:var(--current);font-size:12px}.num-machine-canvas{display:flex;flex-direction:column;gap:12px;width:100%;align-items:stretch}.num-float-live{display:flex;flex-direction:column;align-items:center;gap:10px}.num-fmt-tag{font-size:13px;color:var(--text-dim);font-weight:600}.num-mini{border-top:1px dashed var(--border);padding-top:10px;display:flex;flex-direction:column;gap:8px}.num-mini-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}.num-mini-title{font-size:12.5px;color:var(--text-dim);font-weight:600}.num-mini-presets{display:flex;gap:5px}.num-chip-btn.active{background:var(--accent);color:#fff}.num-float.big .fb-bit{width:26px;height:34px;font-size:16px;border-radius:4px}.num-float.big .fb-label,.num-float.big .fb-mean{font-size:13px}.num-mini-hint{font-size:12px;color:var(--text-dim)}.num-machine-canvas .num-mini-presets{justify-content:center;align-items:center}.num-custom-bits{display:flex;align-items:center;gap:6px;color:var(--text-dim)}.num-bits-input{width:52px;text-align:center}.num-side-sub{margin:4px 0 0;font-size:11px;text-transform:uppercase;letter-spacing:.4px;color:var(--text-dim);border-top:1px solid var(--border);padding-top:8px}.num-ok{color:var(--correct)}.num-bad{color:var(--wrong)}.num-deriv .num-steps{margin:6px 0 0;padding-left:20px;display:flex;flex-direction:column;gap:6px;font-size:12.5px;line-height:1.4}.num-deriv .num-steps li::marker{color:var(--accent);font-weight:700}.num-exp{color:var(--accent);font-weight:700}.num-mant{color:var(--correct);font-weight:700}.num-examples{display:flex;gap:6px;flex-wrap:wrap}.num-chip-btn{padding:5px 10px;border:1px solid var(--accent);background:var(--bg-panel-2);color:var(--text);border-radius:999px;font-size:12px;cursor:pointer}.num-chip-btn:hover{background:var(--accent)}.num-traps{display:flex;flex-direction:column;gap:4px;font-size:12.5px}.num-trap code{color:var(--accent)}.num-game{display:flex;flex-direction:column;gap:12px;height:100%;overflow-y:auto}.num-game-task{display:flex;flex-direction:column;gap:4px;font-size:15px}.num-game-kind{font-size:11px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.4px}.num-game-detail{font-size:12px;color:var(--text-dim)}.num-metrics{grid-template-columns:repeat(2,1fr)}@media (max-width: 720px){.app{padding:6px}.appbar{flex-wrap:wrap;gap:8px 12px;padding:8px 10px}.appbar h1{font-size:15px;flex:1 1 auto}.appbar .spacer{display:none}.mute-btn{order:1;flex:0 0 auto}.section-tabs{order:2;flex:1 1 100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.section-tabs::-webkit-scrollbar{display:none}.section-tabs button{flex:0 0 auto;font-size:13px;padding:8px 12px;white-space:nowrap}}.hashing-main{height:41vh;overflow:hidden}.hashing-lower{height:22vh;overflow:hidden}.hashing-panel,.hashing-side{display:flex;flex-direction:column;min-height:0;overflow:hidden}.hashing-side{overflow-y:auto}.hashing-lower .panel{min-height:0;display:flex;flex-direction:column}.hashing-lower-left{overflow:hidden}.hashing-lower-left .sort-codewrap{flex:1;min-height:0;display:flex;flex-direction:column}.hashing-lower-left pre.code{flex:1;min-height:0;overflow:auto}.hashing-lower .panel:last-child{overflow-y:auto}.hash-canvas-wrap{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:6px}.hash-param-row{display:flex;align-items:center;gap:4px;color:var(--text-dim);font-family:Consolas,monospace;font-size:13px}.hash-keys-input{width:200px}.hash-func{display:flex;flex-direction:column;gap:16px;width:100%;align-items:center}.hash-fchain{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:center}.hash-fbox{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:62px;padding:8px 10px;border:2px solid var(--edge-idle);border-radius:9px;background:var(--bg-panel-2);transition:border-color .2s,transform .15s,box-shadow .2s}.hash-fbox.active{border-color:var(--current);transform:translateY(-2px);box-shadow:0 4px 12px #ff7a4559}.hash-fbox.pending{opacity:.45}.hash-fbox-label{font-size:11px;color:var(--text-dim)}.hash-fbox-val{font-size:20px;font-weight:800;color:var(--accent)}.hash-farrow{color:var(--text-dim);font-size:12px;font-family:Consolas,monospace}.hash-slotmap{width:100%}.hash-slotmap-title,.hash-perfect-formula{font-size:12px;color:var(--text-dim);margin-bottom:6px;text-align:center}.hash-slotmap-grid{display:grid;gap:4px}.hash-slotmap-col{display:flex;flex-direction:column;align-items:center;gap:4px;padding:4px 2px;border:1px solid var(--border);border-radius:7px;background:var(--bg-panel-2);min-height:54px}.hash-slotmap-col.collided{border-color:var(--wrong)}.hash-slotmap-keys{display:flex;flex-direction:column;gap:3px}.hash-collinfo{margin-top:10px;padding:7px 10px;border-radius:8px;font-size:13px;font-weight:600;text-align:center}.hash-collinfo.good{background:#34c75924;color:var(--correct)}.hash-collinfo.bad{background:#ff4d5e24;color:var(--wrong)}.hash-slot-label{font-weight:800;color:var(--text-dim);min-width:20px;text-align:center}.hash-node{display:inline-flex;align-items:center;justify-content:center;min-width:26px;padding:4px 7px;border-radius:6px;background:var(--accent);color:#fff;font-weight:700;font-size:13px}.hash-node.collided{background:var(--wrong)}.hash-node.fresh{animation:hash-pop .4s cubic-bezier(.5,1.7,.6,1) both}.hash-nil{color:var(--edge-idle);font-size:15px}.hash-ball{display:inline-flex;align-items:center;justify-content:center;min-width:28px;padding:3px 8px;border-radius:50px;background:var(--current);color:#fff;font-weight:800;box-shadow:0 3px 9px #ff7a4573;margin-right:6px}@keyframes hash-pop{0%{transform:scale(.3) translateY(-14px);opacity:0}to{transform:scale(1) translateY(0);opacity:1}}.hash-chain{display:flex;flex-direction:column;gap:10px;width:100%;align-items:center}.hash-fly{display:flex;align-items:center;gap:8px;min-height:30px}.hash-fly-h{font-size:13px;color:var(--text-dim);font-family:Consolas,monospace}.hash-buckets{display:flex;flex-direction:column;gap:5px;width:100%;max-width:460px}.hash-bucket-row{display:flex;align-items:center;gap:7px;padding:4px 8px;border:2px solid transparent;border-radius:8px;background:var(--bg-panel-2);transition:border-color .2s,background .2s}.hash-bucket-row.active{border-color:var(--current)}.hash-bucket-row.collided{border-color:var(--wrong)}.hash-bucket-arrow{color:var(--edge-idle)}.hash-bucket{display:flex;align-items:center;gap:5px;flex-wrap:wrap}.hash-probe{display:flex;flex-direction:column;gap:12px;width:100%;align-items:center}.hash-probe-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center}.hash-method-tag{padding:3px 9px;border-radius:50px;background:var(--bg-panel-2);border:1px solid var(--border);font-size:12px;color:var(--accent);font-weight:700}.hash-probe-count{font-size:12px;color:var(--text-dim)}.hash-cells{display:flex;gap:5px;flex-wrap:wrap;justify-content:center}.hash-cell{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:40px;padding:6px 4px;border:2px solid var(--edge-idle);border-radius:8px;background:var(--bg-panel-2);transition:border-color .2s,background .2s,transform .15s}.hash-cell.filled{border-color:var(--border)}.hash-cell.active{border-color:var(--current);transform:translateY(-3px)}.hash-cell.collided{border-color:var(--wrong);background:#ff4d5e29}.hash-cell.placed{border-color:var(--correct);background:#34c75929}.hash-cell-idx{font-size:10px;color:var(--text-dim)}.hash-cell-val{font-size:15px;font-weight:700;min-height:18px}.hash-cells.small .hash-cell{min-width:30px;padding:3px}.hash-analysis{display:flex;flex-direction:column;gap:14px;width:100%}.hash-bwa{width:100%;border-collapse:collapse;font-size:13px}.hash-bwa th,.hash-bwa td{border:1px solid var(--border);padding:6px 9px;text-align:center;font-family:Consolas,monospace}.hash-bwa th{background:var(--bg-panel-2);color:var(--text-dim);font-family:inherit}.hash-bwa-verf{text-align:left!important;font-family:inherit!important;font-weight:600}.hash-bwa-worst{color:var(--wrong)}.hash-alpha{display:flex;flex-direction:column;gap:12px}.hash-alpha-ctrl{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.hash-alpha-ctrl label{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--text-dim)}.hash-alpha-val{font-size:15px;font-weight:800;color:var(--accent)}.hash-analysis-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px}.hash-ametric{display:flex;flex-direction:column;gap:2px;padding:8px;border:1px solid var(--border);border-radius:9px;background:var(--bg-panel-2)}.hash-ametric.warn{border-color:var(--wrong)}.hash-ametric-v{font-size:18px;font-weight:800;color:var(--accent)}.hash-ametric-l{font-size:11px;color:var(--text)}.hash-ametric-sub{font-size:10px;color:var(--text-dim)}.hash-sim{display:flex;flex-direction:column;gap:6px}.hash-sim-title{font-size:12px;color:var(--text-dim)}.hash-sim-rows{display:flex;flex-direction:column;gap:5px}.hash-sim-row{display:flex;align-items:center;gap:10px;font-size:13px;padding:5px 9px;border:1px solid var(--border);border-radius:7px;background:var(--bg-panel-2)}.hash-sim-row b{color:var(--accent)}.hash-sim-th{margin-left:auto;color:var(--text-dim);font-size:12px}.hash-perfect{display:flex;flex-direction:column;gap:8px;width:100%}.hash-perfect-grid{display:flex;flex-direction:column;gap:5px}.hash-perfect-row{display:flex;align-items:center;gap:8px}.hash-perfect-primary{display:flex;align-items:center;gap:6px;min-width:78px;padding:5px 8px;border:2px solid var(--border);border-radius:8px;background:var(--bg-panel-2)}.hash-perfect-primary.multi{border-color:var(--accent)}.hash-perfect-nj{font-size:11px;color:var(--text-dim)}.hash-perfect-arrow{color:var(--edge-idle)}.hash-perfect-secondary{display:flex;flex-direction:column;gap:3px}.hash-perfect-sub{font-size:10px;color:var(--text-dim);font-family:Consolas,monospace}.hash-perfect-foot{margin-top:6px;font-size:13px;text-align:center;color:var(--text)}.hash-perfect-foot b{color:var(--accent)}.hash-proof-block{margin-top:10px;padding:10px;border:1px solid var(--border);border-radius:9px;background:var(--bg-panel-2)}.hash-proof-title{font-weight:700;font-size:13px;margin-bottom:6px;color:var(--accent)}.hash-proof-steps{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:6px;font-size:12.5px;line-height:1.45}.hash-concept{display:flex;flex-direction:column;gap:8px}.hash-concept-item{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--bg-panel-2)}.hash-concept-t{font-weight:700;font-size:13px;color:var(--accent)}.hash-concept-d{font-size:12.5px;line-height:1.45;color:var(--text)}.fc-main{height:52vh;overflow:hidden}.fc-lower{height:15vh;overflow:hidden}.fc-panel,.fc-side{display:flex;flex-direction:column;min-height:0;overflow:hidden}.fc-side{overflow-y:auto}.fc-lower .panel{min-height:0;display:flex;flex-direction:column;overflow-y:auto}.fc-deck-toggle{flex-wrap:wrap;max-width:560px}.fc-progress{display:flex;align-items:center;gap:8px}.fc-progress-bar{width:120px;height:8px;border-radius:5px;background:var(--bg-panel-2);border:1px solid var(--border);overflow:hidden}.fc-progress-fill{height:100%;background:var(--correct);transition:width .3s ease}.fc-progress-txt{font-size:13px;color:var(--text-dim)}.fc-card-wrap{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;padding:8px;overflow:auto}.fc-card{width:min(560px,100%);min-height:210px;cursor:pointer;border-radius:16px;border:2px solid var(--border);background:var(--bg-panel-2);position:relative;transition:transform .15s,border-color .2s,box-shadow .2s;box-shadow:0 6px 20px #00000040}.fc-card:hover{border-color:var(--accent);transform:translateY(-2px)}.fc-card.flipped{border-color:var(--correct)}.fc-face{display:flex;flex-direction:column;align-items:center;gap:12px;padding:20px 22px;text-align:center}.fc-front{justify-content:center;min-height:210px}.fc-deck-badge{align-self:center;font-size:12px;font-weight:700;color:var(--accent);padding:2px 10px;border-radius:50px;background:#5b8cff1f}.fc-question{font-size:20px;font-weight:700;line-height:1.4;color:var(--text)}.fc-hint{font-size:11px;color:var(--text-dim)}.fc-answer{font-size:16px;line-height:1.5;color:var(--text)}.fc-note{font-size:13px;line-height:1.45;color:var(--text-dim);border-left:3px solid var(--edge-relaxed);padding-left:10px;text-align:left}.fc-visual{width:100%;display:flex;justify-content:center;padding:4px 0}.fc-svg{width:220px;max-width:100%;height:auto}.fc-link{align-self:center;padding:6px 12px;border-radius:8px;border:1px solid var(--accent);background:transparent;color:var(--accent);font-size:13px;font-weight:600;cursor:pointer;transition:background .15s}.fc-link:hover{background:#5b8cff24}.fc-grade{display:flex;gap:12px}.fc-btn{padding:10px 22px;border-radius:10px;border:1px solid var(--border);background:var(--bg-panel-2);color:var(--text);font-size:15px;font-weight:700;cursor:pointer;transition:transform .12s,background .15s,border-color .15s}.fc-btn:hover{transform:translateY(-2px)}.fc-btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.fc-btn.known{border-color:var(--correct);color:var(--correct)}.fc-btn.known:hover{background:#34c75926}.fc-btn.again{border-color:var(--current);color:var(--current)}.fc-btn.again:hover{background:#ff7a4526}.fc-done{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center}.fc-done-emoji{font-size:44px}.fc-done h3{margin:0;color:var(--correct)}.fc-deck-legend{display:flex;flex-wrap:wrap;gap:8px}.fc-deck-chip{display:flex;align-items:center;gap:6px;padding:5px 10px;border-radius:50px;border:1px solid var(--border);background:var(--bg-panel-2);cursor:pointer;font-size:12px;opacity:.5;transition:opacity .15s,border-color .15s}.fc-deck-chip.on{opacity:1;border-color:var(--accent)}.fc-deck-chip-c{color:var(--text-dim);font-size:11px}.fc-reset{align-self:flex-start;margin-top:4px;padding:5px 10px;border-radius:8px;border:1px solid var(--border);background:transparent;color:var(--text-dim);font-size:12px;cursor:pointer;transition:color .15s,border-color .15s}.fc-reset:hover{color:var(--wrong);border-color:var(--wrong)}@media (max-width: 900px){.main,.lower,.tm-main,.tri-main,.tri-lower,.tree-main,.tree-lower,.matroid-main,.matroid-lower,.numbers-main,.numbers-lower,.hashing-main,.hashing-lower,.fc-main,.fc-lower{display:flex;flex-direction:column;grid-template-columns:1fr;height:auto;min-height:0;max-height:none}.panel,.numbers-panel,.numbers-side,.hashing-panel,.hashing-side,.fc-panel,.fc-side,.tri-panel,.tri-side,.tree-panel,.tree-side,.matroid-panel,.matroid-side{width:100%;height:auto;min-height:0;max-height:none}pre.code,.tree-code-panel pre.code,.matroid-lower-left pre.code,.numbers-lower-left pre.code,.hashing-lower-left pre.code{max-height:350px;overflow:auto}.numbers-lower-left,.hashing-lower-left,.matroid-lower-left,.sort-codewrap,.tree-code-panel,.tree-code-panel .sort-codewrap{max-width:100%;min-width:0;overflow:hidden}pre.code{width:100%;max-width:100%;overflow-x:auto}}@media (max-width: 640px){.app{padding:6px;height:auto;min-height:100vh;overflow:visible}.numbers-side,.hashing-side,.fc-side,.tri-side,.tree-side,.matroid-side,.numbers-lower .panel:last-child,.hashing-lower .panel:last-child,.fc-lower .panel,.tri-lower .panel,.tree-lower .panel,.matroid-lower .panel{overflow:visible;overflow-y:visible}.graph-canvas,.tri-canvas,.tree-canvas,.matroid-canvas,.state-diagram{height:280px;max-height:none;min-height:0}.topbar{padding:8px;gap:8px}.topbar h1{font-size:14px;width:100%;margin-bottom:4px}.topbar .field{flex:1 1 120px}.topbar select,.topbar button,.topbar input,.controlbar button,.mode-toggle button,.tri-presets button,.fc-grade button,.fc-btn{min-height:40px;padding:8px 12px;font-size:14px}.hash-keys-input,.num-input{width:100%;box-sizing:border-box}.hash-buckets{max-width:100%}.tm-table-wrap,.tape-view{max-width:100%;overflow-x:auto}.turn-badge,.game-banner{font-size:12px;padding:6px 10px;text-align:center}.editor-grid{grid-template-columns:1fr}.modal-backdrop{padding:10px}.topbar .field,.field{max-width:100%;min-width:0}.sort-badges{max-width:100%;overflow-x:auto;display:flex;flex-wrap:nowrap;scrollbar-width:none;-webkit-overflow-scrolling:touch}.sort-badges::-webkit-scrollbar{display:none}.sort-badges span{flex:0 0 auto;white-space:nowrap}.mode-toggle,.tri-presets{max-width:100%;overflow-x:auto;display:flex;flex-wrap:nowrap;scrollbar-width:none;-webkit-overflow-scrolling:touch}.mode-toggle::-webkit-scrollbar,.tri-presets::-webkit-scrollbar{display:none}.mode-toggle button,.tri-presets button{flex:0 0 auto;white-space:nowrap}}
