:root{--ink:#0f172a;--ink2:#334155;--mute:#64748b;--faint:#94a3b8;--line:#eceff5;--soft:#f6f7fb;--accent:#4f46e5;--bg:#f6f7fb}*{box-sizing:border-box;margin:0}body{font-family:Satoshi,system-ui,sans-serif;color:var(--ink);background:var(--bg);font-size:14px;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer;text-align:left}button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:10px}.app{display:grid;grid-template-columns:272px 1fr 420px;height:100vh;min-height:720px}.muted{color:var(--mute)}.small{font-size:14px}.h14{font-weight:700;font-size:14px}.h16{font-weight:700;font-size:16px}.h18{font-size:18px;font-weight:700}.h22{font-size:22px;font-weight:700}.h26{font-size:26px;font-weight:700;line-height:1.2;margin-top:4px}.body{color:var(--ink2);line-height:1.5;margin-top:6px}.classes{background:#fff;border-right:1px solid var(--line);padding:24px 16px 16px;display:flex;flex-direction:column;gap:18px}.brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;padding:0 8px}.logo{background:#1e3a8a;color:#fff;border-radius:10px;padding:7px 8px;font-size:14px}.class-card{background:#f5f7ff;border-radius:16px;padding:12px;display:flex;flex-direction:column;gap:2px}.class-head{display:flex;gap:10px;align-items:center;margin-bottom:8px}.class-head small,.me small{color:var(--mute);font-size:14px}.avatar{background:var(--accent);color:#fff;font-weight:700;border-radius:10px;padding:8px}.avatar.sm{background:#dbe4ff;color:var(--accent);border-radius:18px;padding:7px 11px}.nav{padding:8px 10px;border-radius:10px;color:var(--ink2);font-weight:500}.nav.on{background:#fff;font-weight:700;color:var(--ink);box-shadow:0 1px 3px #0f172a0f}.me{margin-top:auto;display:flex;gap:10px;align-items:center;padding:8px}.centre{padding:24px;min-width:0}.chart-card{background:#fff;border-radius:24px;padding:24px 28px;height:100%;display:flex;flex-direction:column;gap:16px}.chart{width:100%;flex:1;min-height:0}.col{cursor:pointer}.band{fill:transparent}.band.on{fill:#eef2ff}.col:hover .band:not(.on){fill:#f6f7fb}.lab{fill:var(--faint);font-size:14px;font-weight:500}.lab.on{fill:var(--accent);font-weight:700}.skyline{filter:drop-shadow(0 0 4px rgba(34,197,94,.45));pointer-events:none}.side{background:#fff;border-left:1px solid var(--line);padding:28px 24px;overflow-y:auto;display:flex;flex-direction:column;gap:20px}.parents{background:var(--soft);border-radius:16px;overflow:hidden}.prow-wrap{border-bottom:1px solid var(--line)}.prow-wrap:last-child{border-bottom:0}.prow-wrap.fade{opacity:.35}.prow{display:flex;align-items:center;gap:4px;padding-right:8px}.prow.open{background:#eef2ff}.prow-main{flex:1;display:flex;align-items:center;gap:10px;padding:11px 0;min-width:0}.prow-main:hover .pname{color:var(--accent)}.prow-text{display:flex;flex-direction:column;min-width:0;flex:1}.lvl{color:var(--faint)}.pname{font-weight:500;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cnt{color:var(--mute);font-weight:500;white-space:nowrap}.chev{color:var(--faint);padding:6px;border-radius:8px}.chev:hover{background:#e7ebf3;color:var(--ink2)}.switcher{padding:8px 10px 12px 26px;background:#f3f5fb;display:flex;flex-direction:column;gap:6px}.search{font:inherit;border:1px solid #e2e6ef;border-radius:10px;padding:8px 10px;background:#fff}.switch-list{max-height:260px;overflow:auto;display:flex;flex-direction:column;gap:2px}.switch-item{display:flex;gap:10px;align-items:center;padding:7px 10px;border-radius:10px}.switch-item:hover{background:#fff}.switch-item.on{background:#e0e7ff;color:#3730a3;font-weight:700}.switch-item .num{color:var(--faint);width:28px;text-align:right}.switch-item .nm{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.level{display:flex;flex-direction:column;gap:18px;transition:opacity .2s;animation:in .25s ease-out}.level.faded{opacity:.35}@keyframes in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.ring-label{font-size:14px;font-weight:700;fill:var(--ink)}.summary{display:flex;gap:16px;align-items:center}.summary .grow{flex:1}.card-soft{background:#f8f9fc;border-radius:20px;padding:18px}.legend{display:grid;grid-template-columns:1fr 1fr;gap:4px 14px;margin-top:8px;color:var(--mute)}.legend i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}.legend b{color:var(--ink)}.group{color:var(--mute);font-weight:700;margin-top:4px}.group em{font-style:normal;color:var(--faint);font-weight:500;margin-left:6px}.group.dark{color:var(--ink);font-size:16px}.group.row{display:flex;justify-content:space-between;align-items:center}.drow{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border-radius:14px;margin:-10px -12px}.drow:hover{background:var(--soft)}.drow-top{display:flex;gap:10px;align-items:center;color:var(--faint)}.drow-top .nm{flex:1;color:var(--ink);font-size:16px;font-weight:500}.bar{display:flex;height:5px;border-radius:3px;background:#eef1f6;overflow:hidden}.mastered{display:flex;gap:12px;align-items:center;background:#f2fbf5;border-radius:16px;padding:14px 16px;color:#14532d}.mastered small{color:#3f7a52;font-size:14px}.mastered span:nth-child(2){flex:1}.tick{background:#22c55e;color:#fff;border-radius:12px;width:24px;height:24px;display:grid;place-items:center;font-size:12px}.trow{display:flex;gap:12px;align-items:center;padding:14px 16px;border-radius:18px;background:#f8f9fc;color:var(--faint)}.trow:hover{background:#eef2ff}.trow.disabled{opacity:.6;cursor:default}.trow.disabled:hover{background:#f8f9fc}.tnum{width:36px;color:var(--faint);font-weight:500}.tmain{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.tmain .nm{color:var(--ink);font-weight:700;font-size:15px}.placeholder{background:#f8f9fc;border-radius:16px;padding:16px;color:var(--mute);line-height:1.5}.tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px}.tile{display:flex;flex-direction:column;gap:8px;padding:16px;border-radius:18px;background:#f8f9fc;border:1.5px solid transparent}.tile:hover{border-color:#c7d2fe;background:#fff}.tile-top{display:flex;justify-content:space-between;align-items:center}.tile-top i{width:12px;height:12px;border-radius:3px}.tile-st{color:var(--ink2);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;line-height:1.45}.pill{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:12px;font-weight:500;width:fit-content}.pill i{width:7px;height:7px;border-radius:50%}.code-row{display:flex;gap:8px;align-items:center}.seg{display:flex;gap:4px;background:#f3f5f9;border-radius:12px;padding:4px}.seg button{flex:1;text-align:center;padding:8px;border-radius:9px;color:var(--mute);font-weight:500}.seg button.on{background:#fff;color:var(--ink);font-weight:700;box-shadow:0 1px 3px #0f172a14}.strip{display:flex;gap:4px;margin-top:8px}.strip span{flex:1;height:7px;border-radius:3px}.link{color:var(--accent);font-weight:700}.answers{display:flex;flex-direction:column;gap:8px}.answer{display:flex;gap:12px;align-items:flex-start;background:#f8f9fc;border-radius:16px;padding:12px 14px}.res{width:24px;height:24px;border-radius:12px;display:grid;place-items:center;font-size:12px;flex:none}.res.ok{background:#dcfce7;color:#16a34a}.res.no{background:#fee2e2;color:#dc2626}.amain{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.amain .nm{font-weight:500}b.ok{color:#15803d}b.no{color:#b91c1c}.resources{border:1px solid #e6e9f2;border-radius:16px;padding:12px 16px}.resources summary{font-weight:700;cursor:pointer}.resources em{font-style:normal;color:var(--mute);font-weight:400;margin-left:6px}.res-row{display:flex;justify-content:space-between;padding:8px 0;border-top:1px solid #f1f3f7;margin-top:8px}.explainer{border-radius:16px;padding:16px}.empty{border:1px dashed #d8dde8;border-radius:16px;padding:28px 16px;text-align:center;display:flex;flex-direction:column;gap:6px}.meta{display:flex;flex-direction:column;gap:4px}:root{--ink:#1f2937;--ink2:#374151;--mute:#6b7280;--faint:#9ca3af;--line:#eef0f3;--bg:#f7f8fa}body{font-size:15px;line-height:1.5}.chart-card{border:1px solid var(--line);box-shadow:none}.band.on{fill:#f3f5fb}.lab.on{fill:#3651d4}.skyline{filter:none}.side{gap:24px;padding:32px 28px}.parents{background:none;border:1px solid var(--line);border-radius:14px}.prow.open{background:#f7f8fb}.prow-main{padding:12px 0}.pname{font-weight:500;color:var(--ink)}.lvl{font-size:13px;letter-spacing:.01em}.switcher{background:#fafbfc}.switch-item.on{background:#eef1fd;color:#2c3fae}.card-soft{background:none;padding:0}.h26{font-size:24px;line-height:1.25}.group{font-weight:600}.group.dark{font-size:15px}.drow{margin:0;padding:12px 0;border-radius:0;border-bottom:1px solid var(--line)}.drow:hover{background:none}.drow-top .nm{font-size:15px}.bar{height:4px;background:#f1f3f6}.mastered{background:none;border:1px solid var(--line);padding:14px 16px;color:var(--ink)}.mastered small{color:var(--mute)}.tick{background:#e8f6ef;color:#2f8a5f}.trow{background:none;border-radius:0;border-bottom:1px solid var(--line);padding:14px 0}.trow:hover{background:none}.trow:hover .nm{color:#3651d4}.tmain .nm{font-weight:600;font-size:15px}.tile{background:#fff;border:1px solid var(--line);border-radius:14px}.tile:hover{border-color:#cdd5f3;background:#fff}.answers{gap:0}.answer{background:none;border-radius:0;border-bottom:1px solid var(--line);padding:14px 0}.res{width:22px;height:22px}.res.ok{background:#e8f6ef;color:#2f8a5f}.res.no{background:#fdeeee;color:#c24141}b.ok{color:#2f8a5f;font-weight:600}b.no{color:#c24141;font-weight:600}.strip span{height:5px}.seg{background:#f4f5f8}.resources{border-color:var(--line)}.explainer{border-radius:14px}.empty{border-color:#e3e6ec}.pill{padding:2px 10px;font-size:14px}.mastered small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:270px}.drow{border-bottom:0;padding:10px 0}.dlist{display:flex;flex-direction:column;margin-top:-12px}.dlist .drow{padding:7px 0;gap:5px}.dlist .drow{padding:5px 0;gap:4px}.side{padding-top:26px;gap:20px}.stag{display:inline-flex;align-items:center;gap:6px;padding:1px 9px;border-radius:10px;font-size:13px;font-weight:500;white-space:nowrap}.stag i{width:6px;height:6px;border-radius:50%}.drow-top .cnt{min-width:44px;text-align:right}.drow-top .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.tmain .nm{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tmain .nm{white-space:normal}.tmeta{display:flex;gap:10px;align-items:center;margin-top:4px}.trow{align-items:flex-start}.trow .tnum{padding-top:1px}.sdot{width:8px;height:8px;border-radius:50%;flex:none;display:inline-block;background:transparent}.drow{flex-direction:row;align-items:center;gap:12px;padding:9px 0;border-bottom:0}.drow .nm{flex:1;font-size:15px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dlist .drow{padding:8px 4px;gap:12px}.dlist{margin-top:-8px}.drow .cnt{color:var(--faint);font-weight:500;font-variant-numeric:tabular-nums}.drow:hover .nm{color:#3651d4}.dhead{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.dlegend{display:flex;gap:12px;color:var(--mute);font-size:13px}.dlegend span{display:flex;align-items:center;gap:5px}.trow{align-items:center;gap:12px;padding:12px 4px}.trow .tnum{width:auto;min-width:30px}.tmain .nm{font-weight:500}.stats{display:flex;gap:22px;margin-top:10px}.stats span{display:flex;flex-direction:column;gap:2px}.stats b{font-size:20px;font-weight:700;line-height:1.1}.stats small{display:flex;align-items:center;gap:6px;color:var(--mute);font-size:13px}.thead{display:flex;align-items:center;gap:12px;padding:0 4px 10px 24px;border-bottom:1px solid var(--line);margin-top:8px}.thead .tl{flex:1;font-weight:700;font-size:15px;color:var(--ink)}.counts{display:flex;flex:none}.counts .c{width:44px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink2);font-weight:500}.counts .c.zero{color:#cfd3da}.counts.head .c{display:flex;justify-content:flex-end;align-items:center;padding-right:2px}.dlist{margin-top:0}.dlist .drow{padding:10px 4px;gap:12px;border-bottom:1px solid #f4f5f7}.drow .tnum{color:var(--faint);min-width:30px}.drow.disabled{opacity:.55;cursor:default}.side{gap:22px}.stats{margin-top:0}.thead{margin-top:2px}.drow.wrap .nm{white-space:normal;line-height:1.35}.drow.wrap{align-items:flex-start}.drow.wrap .sdot{margin-top:7px}.pblock{display:flex;flex-direction:column;gap:14px}.pbar{display:flex;gap:3px;height:10px}.pbar span{border-radius:4px;min-width:6px}.plegend{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.plegend>div{display:flex;flex-direction:column;gap:4px}.pl-label{display:flex;align-items:center;gap:7px;color:var(--mute);font-size:14px}.pl-val{display:flex;align-items:baseline;gap:8px}.pl-val b{font-size:22px;font-weight:700;color:var(--ink);line-height:1.1}.pl-val em{font-style:normal;color:var(--faint);font-size:14px}.lhead{display:flex;align-items:center;justify-content:space-between;margin-top:6px}.lhead .tl{font-weight:700;font-size:15px}.toggle{display:flex;background:#f3f4f7;border-radius:9px;padding:3px}.toggle button{padding:4px 10px;border-radius:7px;color:var(--mute);font-size:13px;font-weight:500}.toggle button.on{background:#fff;color:var(--ink);box-shadow:0 1px 2px #0f172a14}.lhead+.thead{margin-top:-10px}.brow{display:flex;align-items:center;gap:14px;padding:10px 4px;border-bottom:1px solid #f4f5f7}.brow .nm{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:15px;color:var(--ink)}.brow:hover .nm{color:#3651d4}.brow.disabled{opacity:.55;cursor:default}.mbar{display:flex;width:96px;height:6px;border-radius:3px;background:#f1f3f6;overflow:hidden;flex:none;gap:2px}.mbar span{height:100%;border-radius:3px}.mcount{width:48px;text-align:right;color:var(--faint);font-variant-numeric:tabular-nums;flex:none}.mcount b{color:var(--ink2);font-weight:600}.brow .tnum{color:var(--faint);min-width:30px}.brow{padding:8px 4px}.brow .nm,.drow .nm,.pname,.amain .nm,.switch-item .nm,.tmain .nm{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.35}.brow,.drow{align-items:flex-start}.brow .mbar{margin-top:7px}.brow .mcount,.brow .tnum,.drow .cnt{padding-top:0}.drow .sdot{margin-top:7px}.sec-count{font-style:normal;color:var(--faint);font-weight:500;margin-left:6px}.res.doc{background:#f1f3f8;color:#5b6472}.side{padding-bottom:40px}.side>*{flex-shrink:0}.level>*{flex-shrink:0}.crumbs{display:flex;flex-wrap:wrap;align-items:center;gap:4px;color:var(--mute);font-size:14px;line-height:1.5}.crumb{display:inline-flex;align-items:center;gap:4px}.crumb .sep{color:#c7ccd4}.crumb button{color:var(--mute);padding:2px 4px;border-radius:6px}.crumb button:hover{color:#3651d4;background:#f3f5fb}.pline{display:flex;flex-wrap:wrap;gap:16px;color:var(--mute);font-size:14px}.pline span{display:flex;align-items:center;gap:6px}.pline b{color:var(--ink);font-weight:600}.pblock{gap:12px}.pbar{height:8px}.mbar{height:4px;width:80px;opacity:.9}.lhead{margin-top:4px}.utabs{display:flex;gap:22px;border-bottom:1px solid var(--line)}.utabs button{padding:0 0 10px;color:var(--mute);font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px}.utabs button.on{color:var(--ink);font-weight:600;border-color:#3651d4}.score p{color:var(--mute)}.score b{color:var(--ink)}.meta-row{display:flex;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line)}.link{align-self:flex-start}.empty{border:0;background:#fafbfc;text-align:left;padding:18px}.crumbs{gap:6px}.crumb{position:relative}.chip{display:inline-flex;align-items:center;background:#f3f5f9;border:1px solid #e7eaf0;border-radius:10px;overflow:hidden}.chip.cur{background:#e8eefc;border-color:#c9d6fa}.chip.cur .chip-name{color:#1d4ed8;font-weight:600}.chip.open{border-color:#93c5fd}.chip-name{padding:5px 8px 5px 10px;color:var(--ink);font-weight:500;font-size:14px;max-width:210px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chip-caret{padding:5px 6px;color:var(--mute);border-left:1px solid #e3e7ee}.chip-caret:hover{background:#e9edf4;color:var(--ink)}.crumb button{border-radius:0}.crumb .chip-name:hover{color:#1d4ed8;background:none}.menu{position:absolute;top:calc(100% + 6px);left:0;z-index:20;width:340px;background:#fff;border:1px solid #e7eaf0;border-radius:14px;box-shadow:0 12px 32px #0f172a24;padding:8px}.menu-h{font-size:13px;color:var(--faint);padding:4px 8px 6px;font-weight:600}.menu-list{max-height:360px;overflow:auto;display:flex;flex-direction:column;gap:1px}.menu-item{display:flex;align-items:center;gap:10px;padding:8px;border-radius:9px}.menu-item:hover{background:#f5f7fb}.menu-item.on{background:#e8eefc}.menu-item.on .mi-nm{color:#1d4ed8;font-weight:600}.menu-item:disabled{opacity:.45;cursor:default}.mi-num{color:var(--faint);min-width:42px;font-size:14px}.mi-nm{flex:1;color:var(--ink);line-height:1.35}.mi-cnt{color:var(--mute);font-variant-numeric:tabular-nums}.brow .stag{margin-left:auto;flex:none}.crumbs{display:flex;flex-direction:column;gap:6px;align-items:stretch}.crumb{display:flex;align-items:center;gap:10px}.crumb-l{width:84px;flex:none;color:var(--faint);font-size:13px}.chip{flex:1;min-width:0;justify-content:space-between;background:#fff;border-color:#e5e8ee}.chip-name{flex:1;max-width:none;text-align:left}.chip.cur{background:#eef3fe;border-color:#c9d6fa}.menu{left:94px;width:calc(100% - 94px)}.crumbline{display:flex;align-items:flex-start;gap:10px}.crumbs-plain{flex:1;display:flex;flex-wrap:wrap;align-items:center;gap:2px 4px;font-size:14px;line-height:1.5}.crumbs-plain .pc{display:inline-flex;align-items:center;gap:4px}.crumbs-plain .sep{color:#c7ccd4}.crumbs-plain button{color:var(--mute);padding:1px 3px;border-radius:6px}.crumbs-plain button:hover{color:#1d4ed8;background:#f1f5fe}.crumbs-plain button.cur{color:var(--ink);font-weight:600}.change{display:inline-flex;align-items:center;gap:6px;flex:none;padding:6px 12px;border:1px solid #dfe5f2;border-radius:10px;color:#1d4ed8;font-weight:600;font-size:14px;background:#fff}.change:hover{background:#f1f5fe}.picker-wrap{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a2e;display:flex;justify-content:flex-end;align-items:flex-start;padding:20px 20px 0 0;z-index:50;animation:fade .15s ease-out}@keyframes fade{0%{opacity:0}to{opacity:1}}.picker{width:min(860px,calc(100vw - 300px));background:#fff;border-radius:18px;box-shadow:0 24px 60px #0f172a38;display:flex;flex-direction:column;max-height:calc(100vh - 40px);animation:pop .18s ease-out}@keyframes pop{0%{transform:translateY(-6px);opacity:0}to{transform:none;opacity:1}}.picker-head{display:flex;align-items:center;gap:14px;padding:16px 18px;border-bottom:1px solid var(--line)}.picker-head .search{flex:1}.x{color:var(--mute);padding:6px 8px;border-radius:8px}.x:hover{background:#f3f4f6}.cols{display:grid;grid-template-columns:1.2fr 1fr 1fr;min-height:0;flex:1}.col-list{border-right:1px solid var(--line);padding:10px;overflow:auto;max-height:560px;display:flex;flex-direction:column;gap:2px}.col-list:last-child{border-right:0}.col-h{font-size:13px;font-weight:600;color:var(--faint);padding:4px 8px 8px}.col-empty{color:var(--faint);padding:8px;font-size:14px}.pi{display:flex;align-items:flex-start;gap:9px;padding:8px;border-radius:9px;text-align:left}.pi .sdot{margin-top:6px}.pi.on{background:#e8eefc}.pi.on .pi-nm{color:#1d4ed8;font-weight:600}.pi:disabled{opacity:.45;cursor:default}.pi-n{color:var(--faint);min-width:30px;font-size:14px}.pi-nm{flex:1;line-height:1.35}.pi-c{color:var(--mute);font-variant-numeric:tabular-nums}.picker-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;border-top:1px solid var(--line)}.btn{background:#1d4ed8;color:#fff;font-weight:600;padding:9px 16px;border-radius:10px}.btn:hover{background:#1a43bd}.crumbs-plain{flex-wrap:nowrap;min-width:0;overflow:hidden}.crumbs-plain .pc{min-width:0}.crumbs-plain button{max-width:104px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.crumbs-plain .pc:first-child button,.crumbs-plain button.cur{max-width:none}.change.icon{padding:7px 9px}.crumbline{align-items:center}.crumbs-plain button{max-width:170px}.crumbs-plain .pc{flex-shrink:1}.locbar{display:flex;align-items:center;gap:8px;border:1px solid #e3e7ef;border-radius:12px;padding:5px 5px 5px 10px;background:#fff}.loc-path{flex:1;min-width:0;display:flex;align-items:center;gap:2px;overflow:hidden;white-space:nowrap;font-size:14px}.loc-pc{display:inline-flex;align-items:center;gap:2px;min-width:0}.loc-path .sep{color:#c7ccd4;padding:0 2px}.loc-seg{color:var(--mute);padding:3px 4px;border-radius:6px;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.loc-seg:hover{color:#1d4ed8;background:#f1f5fe}.loc-seg.cur{color:var(--ink);font-weight:600}.loc-open{display:inline-flex;align-items:center;gap:6px;flex:none;background:#1d4ed8;color:#fff;border-radius:9px;padding:6px 10px;font-weight:600;font-size:14px}.loc-open:hover{background:#1a43bd}.loc-open kbd{font:inherit;font-size:12px;opacity:.75;background:#ffffff2e;border-radius:5px;padding:0 5px}.sfilter{display:flex;flex-wrap:wrap;gap:6px}.sfilter button{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid #e5e8ee;border-radius:999px;font-size:13px;color:var(--ink2);background:#fff}.sfilter button em{font-style:normal;color:var(--faint);font-variant-numeric:tabular-nums}.sfilter button.on{background:#1d4ed8;border-color:#1d4ed8;color:#fff}.sfilter button.on em{color:#fffc}.sfilter button:disabled{opacity:.4;cursor:default}.sfilter .sdot{width:7px;height:7px}.picker-head{gap:10px}.search-box{flex:1;display:flex;align-items:center;gap:10px;border:1px solid #dfe5f2;border-radius:12px;padding:10px 12px;color:var(--faint)}.search-box:focus-within{border-color:#93c5fd;box-shadow:0 0 0 3px #eaf4ff}.search-box input{flex:1;border:0;outline:0;font:inherit;font-size:15px;color:var(--ink)}.x{font-size:13px;border:1px solid #e5e8ee}.picker-filter{padding:12px 18px 4px}.results{padding:8px 10px;overflow:auto;max-height:560px}.rgroup{margin-bottom:8px}.pi{display:flex;align-items:stretch;border-radius:9px;padding:0}.pi:hover{background:#f5f7fb}.pi-main{flex:1;display:flex;align-items:flex-start;gap:9px;padding:8px;text-align:left;min-width:0}.pi-txt{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}.pi-path{color:var(--faint);font-size:13px}.pi-go{opacity:0;color:#1d4ed8;font-weight:600;font-size:13px;padding:0 10px;white-space:nowrap}.pi:hover .pi-go,.pi.on .pi-go{opacity:1}.pi.dis{opacity:.45}.picker-foot{font-size:13px}.picker-foot kbd{font:inherit;font-size:12px;border:1px solid #e3e7ef;border-bottom-width:2px;border-radius:5px;padding:0 5px;margin:0 2px;background:#fafbfc}.pi{position:relative}.pi-go{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:#fff;border:1px solid #dbe3f5;border-radius:8px;padding:3px 8px;box-shadow:0 2px 6px #0f172a0f}.cols{grid-template-columns:1.35fr 1fr 1fr}.sidebar-tight,.side .sfilter{gap:4px;flex-wrap:nowrap}.side .sfilter button{padding:4px 8px;gap:5px;font-size:13px;white-space:nowrap}.side .sfilter .sdot{display:none}.side .sfilter button{padding:4px 9px}.mtop,.mtabs{display:none}@media (max-width:767px){body{font-size:15px;background:#fff}.app{display:flex;flex-direction:column;height:auto;min-height:100vh;padding-bottom:64px}.classes{display:none}.mtop{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line);background:#fff;position:sticky;top:0;z-index:30}.mtop-t{flex:1;display:flex;flex-direction:column;line-height:1.2}.mtop-t small{color:var(--mute);font-size:13px}.centre{padding:12px 16px 0}.chart-card{padding:14px 12px 8px;border-radius:18px;height:auto;gap:6px}.chart-head .muted{font-size:13px}.chart{height:200px;flex:none}.side{border-left:0;padding:16px 16px 24px;overflow:visible;gap:18px}.locbar{position:sticky;top:61px;z-index:20;box-shadow:0 6px 14px -10px #0f172a40}.loc-open kbd{display:none}.loc-seg{max-width:96px}.h26{font-size:22px}.side .sfilter{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:0 16px}.side .sfilter::-webkit-scrollbar{display:none}.brow,.drow{padding:12px 2px}.mbar{width:64px}.utabs{overflow-x:auto}.mtabs{display:flex;position:fixed;left:0;right:0;bottom:0;background:#fff;border-top:1px solid var(--line);z-index:30;padding:8px 8px calc(8px + env(safe-area-inset-bottom))}.mtabs a{flex:1;text-align:center;font-size:12px;color:var(--mute);padding:6px 0;border-radius:10px}.mtabs a.on{color:#1d4ed8;font-weight:700;background:#eef3fe}.sheet-wrap{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a52;z-index:60;display:flex;align-items:flex-end;animation:fade .15s}.sheet{width:100%;height:88vh;background:#fff;border-radius:20px 20px 0 0;display:flex;flex-direction:column;gap:12px;padding:8px 16px 0;animation:up .22s ease-out}@keyframes up{0%{transform:translateY(30px);opacity:.6}to{transform:none;opacity:1}}.grab{width:40px;height:5px;border-radius:3px;background:#d9dde5;align-self:center}.sheet-head{display:flex;align-items:center;gap:8px}.sh-back{width:36px;height:36px;border-radius:10px;font-size:24px;line-height:1;color:var(--ink2);display:grid;place-items:center}.sh-back:not(.ghost):active{background:#f3f4f6}.sh-title{flex:1;text-align:center;font-weight:700;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sh-close{color:#1d4ed8;font-weight:600;padding:8px}.sheet .search-box input{font-size:16px}.chips-scroll{overflow-x:auto;margin:0 -16px;padding:0 16px;scrollbar-width:none}.chips-scroll::-webkit-scrollbar{display:none}.chips-scroll .sfilter{flex-wrap:nowrap}.chips-scroll .sfilter button{white-space:nowrap;padding:7px 12px}.sh-openlevel{align-self:flex-start;color:#1d4ed8;font-weight:600;font-size:14px;padding:2px 0}.sheet-list{flex:1;overflow:auto;margin:0 -16px;padding:0 8px 24px}.srow{width:100%;display:flex;align-items:center;gap:12px;padding:14px 8px;border-bottom:1px solid #f2f3f6;text-align:left;min-height:52px}.srow.on{background:#eef3fe;border-radius:12px}.srow.on .pi-nm{color:#1d4ed8;font-weight:600}.srow.dis{opacity:.45}.srow .pi-nm{font-size:15px}.ty{font-style:normal;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);margin-right:6px}.chev-r{color:#b6bcc7;font-size:20px;line-height:1}}@media (max-width:767px){.sheet .search-box{flex:none}.chart{height:auto;width:100%}.chart .lab{font-size:11px}}.vbar{display:flex;gap:4px;background:#f3f4f7;border-radius:10px;padding:3px;font-size:12px}.vbar button{flex:1;padding:5px 4px;border-radius:7px;color:var(--mute);text-align:center;white-space:nowrap}.vbar button.on{background:#fff;color:var(--ink);font-weight:600;box-shadow:0 1px 2px #0f172a14}.swA{display:flex;flex-direction:column;border:1px solid #e3e7ef;border-radius:14px;overflow:hidden}.swA-row{display:flex;align-items:center;gap:10px;padding:11px 12px;border-bottom:1px solid #eef0f4;color:var(--faint);min-height:48px}.swA-row:last-of-type{border-bottom:0}.swA-row:active{background:#f5f7fb}.swA-l{width:86px;flex:none;font-size:13px;color:var(--faint)}.swA-v{flex:1;min-width:0;display:flex;align-items:center;gap:8px}.swA-n{color:var(--faint);font-size:14px}.swA-t{color:var(--ink);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.swA-clear{align-self:flex-start;color:#1d4ed8;font-size:13px;font-weight:600;padding:8px 12px}.swC .swA-clear{padding:6px 0}.swB{display:flex;flex-direction:column;gap:10px}.swB-all{font-size:13px;color:#1d4ed8;font-weight:600}.swB-all.on{color:var(--ink)}.swB-l{font-size:13px;color:var(--faint);margin-bottom:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.swB-l span{color:var(--ink);font-weight:600}.swB-scroll{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:2px 16px}.swB-scroll::-webkit-scrollbar{display:none}.swB-chip{flex:none;min-width:40px;height:36px;padding:0 10px;border-radius:10px;font-size:14px;font-weight:600;border:1.5px solid transparent;font-variant-numeric:tabular-nums}.swB-chip.lv-mastered{background:#e8eefc;color:#1d4ed8}.swB-chip.lv-progress{background:#eaf4ff;color:#1e5fae;border-color:#93c5fd}.swB-chip.lv-not{background:#f5f5f4;color:#78716c}.swB-chip.on{background:#1d4ed8;color:#fff;border-color:#1d4ed8;box-shadow:0 4px 10px #1d4ed840}.swB-chip:disabled{opacity:.4}.swC{display:flex;flex-direction:column;gap:8px}.swC-row{display:flex;align-items:stretch;border:1px solid #e3e7ef;border-radius:14px;overflow:hidden}.swC-arr{width:44px;flex:none;font-size:22px;color:var(--ink2)}.swC-arr:disabled{color:#d4d7dd}.swC-arr:not(:disabled):active{background:#f3f5f9}.swC-mid{flex:1;min-width:0;padding:8px 6px;text-align:center;border-left:1px solid #eef0f4;border-right:1px solid #eef0f4;display:flex;flex-direction:column;align-items:center;gap:2px}.swC-l{font-size:12px;color:var(--faint)}.swC-t{display:flex;align-items:center;gap:6px;max-width:100%;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tick-s{color:#1d4ed8;font-weight:700}@media (min-width:768px){.sheet-wrap{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a33;z-index:60;display:flex;justify-content:flex-end;align-items:flex-start;padding:20px}.sheet.small{width:400px;max-height:80vh;background:#fff;border-radius:16px;box-shadow:0 24px 60px #0f172a33;display:flex;flex-direction:column;gap:10px;padding:12px 14px}.sheet.small .grab{display:none}.sheet.small .sheet-head{display:flex;align-items:center}.sheet.small .sh-title{flex:1;font-weight:700}.sheet.small .sh-close{color:#1d4ed8;font-weight:600}.sheet.small .sheet-list{overflow:auto}.sheet.small .srow{display:flex;align-items:center;gap:10px;padding:10px 8px;width:100%;text-align:left;border-radius:9px}.sheet.small .srow.on{background:#eef3fe}.sheet.small .srow:hover{background:#f5f7fb}.sheet.small .srow.dis{opacity:.45}}@media (max-width:767px){.sheet.small{height:auto;max-height:80vh}.sheet .pi-n{color:var(--faint);min-width:34px}}.pmap{display:flex;flex-direction:column;gap:16px;height:100%;min-height:0}.pmap-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap}.pmap-crumb{display:flex;align-items:center;gap:8px;font-size:18px}.pmap-crumb b{font-weight:700}.pmap-crumb button{color:#1d4ed8;font-weight:600;font-size:18px}.pmap-crumb span{color:#c7ccd4}.pmap-sub{color:var(--mute);font-size:14px;margin-top:2px}.pmap-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:13px;color:var(--mute);padding-top:4px}.pmap-legend span{display:flex;align-items:center;gap:6px}.pmap-legend i{width:10px;height:10px;border-radius:3px}.pmap-legend i.sky{height:3px;width:14px;border-radius:2px;background:#22c55e}.pmap-plot{position:relative;flex:1;min-height:0;display:flex;align-items:flex-end}.pmap-svg{width:100%;height:100%;max-height:100%;overflow:visible}.gl{stroke:#eef0f4;stroke-width:1}.gt{fill:#b6bcc7;font-size:11px}.base{stroke:#e3e6ec}.pcol{cursor:pointer}.pcol.nodata{cursor:default}.pband{fill:transparent;transition:fill .15s}.pband.hov{fill:#f6f8fc}.pband.on{fill:#eef3fe}.pcell{transition:opacity .15s}.pcell.tap:hover{opacity:.75}.pring{fill:none;stroke:#f59e0b;stroke-width:2.5}.plab{fill:#9ca3af;font-size:13px;font-weight:500}.plab.on{fill:#1d4ed8;font-weight:700}.psky{fill:none;stroke:#22c55e;stroke-width:2.5;stroke-linejoin:round;pointer-events:none}.ptip{position:absolute;top:0;width:220px;background:#fff;border:1px solid #e7eaf0;border-radius:12px;box-shadow:0 10px 28px #0f172a24;padding:10px 12px;pointer-events:none;z-index:5}.ptip-k{font-size:12px;color:var(--faint)}.ptip-t{font-weight:600;color:var(--ink);line-height:1.3;margin:2px 0 6px}.ptip-row{display:flex;flex-direction:column;gap:2px;font-size:13px;color:var(--mute)}.ptip-row span,.ptip-s{display:flex;align-items:center;gap:6px}.ptip-row b{color:var(--ink)}.ptip i{width:8px;height:8px;border-radius:2px;display:inline-block}.ptip-s{font-size:12px;color:#1d4ed8;margin-top:6px}@media (max-width:767px){.pmap{gap:10px}.pmap-crumb,.pmap-crumb button{font-size:16px}.pmap-legend{gap:10px;font-size:12px}.pmap-svg{height:auto}.plab{font-size:11px}.ptip{width:200px}}.pmap-plot{align-items:stretch;overflow:visible}.pmap-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.chart-card{min-height:0}@media (max-width:767px){.pmap-plot{flex:none;height:250px}}.pmap-crumb{flex-wrap:wrap}.pmap-crumb button{white-space:nowrap}.ctx{border:1px solid #e3e7ef;border-radius:16px;background:#fff;overflow:hidden}.ctx-top{display:flex;align-items:center;gap:10px;padding:10px 10px 10px 12px}.ctx-fw{flex:1;min-width:0;display:flex;align-items:center;gap:10px;border-radius:10px;padding:2px}.ctx-fw:hover b{color:#1d4ed8}.ctx-fw-ic{width:32px;height:32px;border-radius:9px;background:#eef3fe;color:#1d4ed8;display:grid;place-items:center;font-weight:700;flex:none}.ctx-fw-t{display:flex;flex-direction:column;min-width:0;line-height:1.25}.ctx-fw-t b{font-size:14px;font-weight:600;color:var(--ink)}.ctx-fw-t small{font-size:12px;color:var(--faint)}.ctx-path{list-style:none;margin:0;padding:6px 12px 10px 27px;border-top:1px solid #f0f2f5;background:#fafbfc;position:relative}.ctx-path:before{content:"";position:absolute;left:27px;top:16px;bottom:26px;width:2px;background:#dbe3f5;border-radius:1px}.ctx-path li:before{content:"";position:absolute;left:-4px;top:15px;width:10px;height:10px;border-radius:50%;background:#fff;border:2px solid #93c5fd}.ctx-l{font-size:12px;color:var(--faint);font-weight:500}.ctx-n{font-size:14px;color:var(--ink);font-weight:500;line-height:1.35}.stabs{display:flex;gap:4px;background:#f1f3f7;border-radius:12px;padding:4px}.stabs button{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px 6px;border-radius:9px;color:var(--mute);font-weight:500;font-size:14px;white-space:nowrap}.stabs button em{font-style:normal;font-size:12px;font-weight:600;background:#e2e6ee;color:var(--mute);border-radius:8px;padding:0 6px;line-height:18px}.stabs button:hover{color:var(--ink)}.stabs button.on{background:#fff;color:#1d4ed8;font-weight:700;box-shadow:0 1px 3px #0f172a1a,0 0 0 1px #e3e9f8}.stabs button.on em{background:#1d4ed8;color:#fff}.meta{display:flex;flex-direction:column;gap:22px}.demo-note{font-size:12px;color:#92400e;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;padding:6px 10px}.meta section{display:flex;flex-direction:column}.meta-h{font-weight:700;font-size:15px}.meta-h em{font-style:normal;color:var(--faint);font-weight:500;margin-left:6px}.meta-sub{font-size:13px;color:var(--faint);margin:2px 0 6px}.mrow{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}.mrow .sdot{margin-top:7px}.mcode{color:var(--faint);font-size:13px;min-width:62px;padding-top:2px}.mtxt{flex:1;line-height:1.4;font-size:14px}.mst{font-size:12px;color:var(--mute);white-space:nowrap;padding-top:2px}.alt{padding:10px 12px;border-radius:10px;background:#fafbfc;border:1px solid var(--line);margin-bottom:8px;display:flex;flex-direction:column;gap:4px;font-size:14px;line-height:1.4}.alt p{display:flex;gap:8px}.alt span{flex:none;font-weight:700}.alt-w{color:#9f2a2a}.alt-w span{color:#dc2626}.alt-r{color:var(--ink2)}.alt-r span{color:#16a34a}@media (max-width:767px){.ctx{position:sticky;top:61px;z-index:20}.locbar{position:static}.stabs button{font-size:13px;gap:4px}}.stabs button{min-width:0;gap:5px;padding:9px 4px;font-size:13.5px}.stabs button span{overflow:hidden;text-overflow:ellipsis}.ctx-path:before{top:20px;bottom:24px}.ctx-path li:before{top:12px}@media (max-width:767px){.ctx{position:static}}.stabs button svg{display:none}.stabs button{gap:6px;font-size:14px}.ctx{overflow:visible}.ctx-path{padding:6px 10px 10px 27px}.ctx-path li{position:relative}.ctx-row{display:flex;align-items:center;gap:8px;width:100%;padding:7px 8px 7px 18px;border-radius:10px;text-align:left}.ctx-row:hover,.ctx-path li.open>.ctx-row{background:#eef3fe}.ctx-path li.open>.ctx-row .ctx-n{color:#1d4ed8}.ctx-txt{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.ctx-sw{display:flex;align-items:center;gap:2px;color:var(--faint);font-size:12px;flex:none;border:1px solid #e3e7ef;background:#fff;border-radius:8px;padding:2px 4px 2px 8px}.ctx-row:hover .ctx-sw{color:#1d4ed8;border-color:#c9d6fa}.ctx-path li:last-child .ctx-n{font-weight:600}.ldd{position:absolute;left:8px;right:-2px;top:calc(100% + 4px);z-index:40;background:#fff;border:1px solid #e3e7ef;border-radius:14px;box-shadow:0 16px 40px #0f172a29;padding:10px;display:flex;flex-direction:column;gap:8px;animation:pop .14s ease-out}.search-box.sm{padding:7px 10px}.search-box.sm input{font-size:14px}.ldd .sfilter{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.ldd .sfilter button{padding:3px 8px;font-size:12px;white-space:nowrap}.ldd .sfilter .sdot{display:none}.ldd-list{max-height:300px;overflow:auto;display:flex;flex-direction:column;gap:1px;margin:0 -4px}.ldd-i{display:flex;align-items:flex-start;gap:9px;padding:8px;border-radius:9px;text-align:left}.ldd-i:hover{background:#f5f7fb}.ldd-i.on{background:#eef3fe}.ldd-i.on .ldd-t{color:#1d4ed8;font-weight:600}.ldd-i .sdot{margin-top:6px}.ldd-i:disabled{opacity:.4;cursor:default}.ldd-n{color:var(--faint);font-size:13px;min-width:30px;padding-top:1px}.ldd-t{flex:1;line-height:1.35;font-size:14px}.ldd-c{color:var(--mute);font-size:13px;font-variant-numeric:tabular-nums;padding-top:1px}.ldd-ck{width:14px;color:#1d4ed8;font-weight:700}.ctx-row{flex-direction:row}.ctx-row:hover .ctx-n{color:#1d4ed8}.ldd-i{flex-direction:row;width:100%}.ldd .sfilter{flex-wrap:nowrap}.ldd .sfilter button{flex-direction:row}.ldd-list{gap:0}.ldd-i{border-bottom:1px solid #f3f4f7;border-radius:8px}.ctx-path li:before{top:14px}.chips-scroll{flex:none;padding-bottom:2px}.chips-scroll .sfilter button{flex:none}.h1{display:flex;flex-direction:column;gap:10px;padding:12px;border-top:1px solid #f0f2f5}.h1-f{position:relative;display:flex;flex-direction:column;gap:4px}.h1-l{font-size:12px;font-weight:600;color:var(--faint)}.h1-sel{display:flex;align-items:center;gap:8px;width:100%;border:1px solid #dfe4ec;border-radius:10px;padding:9px 10px;background:#fff;color:var(--faint);text-align:left}.h1-sel:hover{border-color:#b9c8ef}.h1-sel.open{border-color:#93c5fd;box-shadow:0 0 0 3px #eaf4ff}.h1-n{color:var(--faint);font-size:13px;flex:none}.h1-t{flex:1;min-width:0;color:var(--ink);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.h1-sel.ph .h1-t{color:var(--faint);font-weight:400}.h1 .ldd{left:0;right:0}.h2{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:10px 12px 12px;border-top:1px solid #f0f2f5}.h2-c{position:relative;display:inline-flex;align-items:center;gap:6px}.h2-sep{color:#c7ccd4}.h2-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 6px 6px 10px;border:1px solid #dfe4ec;border-radius:999px;background:#fff;font-size:14px;font-weight:500;color:var(--ink)}.h2-chip:hover{border-color:#b9c8ef}.h2-chip.open{border-color:#93c5fd;background:#eef3fe;color:#1d4ed8}.h2-chip.last{background:#1d4ed8;border-color:#1d4ed8;color:#fff}.h2-chip.last .sdot{box-shadow:0 0 0 2px #fff}.h2-chip.ph{color:var(--faint);border-style:dashed}.h2 .ldd{left:0;right:auto;width:340px}.h3{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid #f0f2f5}.h3-cell{position:relative;border-right:1px solid #f0f2f5}.h3-cell:last-child{border-right:0}.h3-b{width:100%;display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:10px 12px 12px;text-align:left;min-height:84px}.h3-b:hover:not(:disabled){background:#f6f8fc}.h3-b.open{background:#eef3fe}.h3-b:disabled{cursor:default;opacity:.5}.h3-l{display:flex;align-items:center;gap:2px;font-size:12px;font-weight:600;color:var(--faint)}.h3-v{display:flex;align-items:center;gap:6px;font-weight:700;font-size:15px;color:var(--ink)}.h3-t{font-size:12.5px;color:var(--mute);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.h3-cell:nth-child(2) .ldd{left:-100%}.h3-cell:nth-child(3) .ldd{left:-200%}.h3 .ldd{right:auto;width:340px}@media (max-width:767px){.h3 .ldd{display:none}}@media (min-width:768px){html,body,#root{height:100%}.app{height:100vh;min-height:0;overflow:hidden}.side{height:100vh;overflow:hidden;display:flex;flex-direction:column}.side>.ctx,.side>.vbar,.side>.swA,.side>.swB,.side>.swC,.side>.locbar{flex:none}.level{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.level>.dlist,.level>.answers,.level>.meta{flex:1 1 auto;min-height:0;overflow:auto;flex-shrink:1;margin-right:-10px;padding-right:10px}.level>.dlist::-webkit-scrollbar,.level>.answers::-webkit-scrollbar,.level>.meta::-webkit-scrollbar{width:6px}.level>.dlist::-webkit-scrollbar-thumb,.level>.answers::-webkit-scrollbar-thumb,.level>.meta::-webkit-scrollbar-thumb{background:#e1e5ec;border-radius:3px}.centre{min-height:0;height:100vh}.chart-card{height:100%}}@media (min-width:768px) and (max-width:1366px){.app{grid-template-columns:232px 1fr 392px}.classes{padding:20px 12px 12px}}@media (min-width:768px) and (max-height:820px){.side{padding:20px 22px 16px;gap:14px}.level{gap:12px}.centre{padding:16px}.chart-card{padding:18px 20px;gap:10px}.h26{font-size:22px;margin-top:2px}.body{margin-top:3px;font-size:14px}.ctx-top{padding:8px 8px 8px 10px}.ctx-fw-ic{width:28px;height:28px}.h3-b{min-height:0;padding:8px 10px 10px}.stabs button{padding:7px 4px}.answer{padding:10px 0}.brow{padding:7px 4px}.pblock{gap:8px}}@media (min-width:768px){.level>.dlist,.level>.answers,.level>.meta{-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to bottom,#000 calc(100% - 28px),transparent);padding-bottom:24px}.side .sfilter{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.side .sfilter::-webkit-scrollbar{display:none}.side .sfilter button{flex:none;padding:4px 8px}.ldd .sfilter{gap:4px}}.hbar{display:flex;align-items:center;gap:2px;border:1px solid #e3e7ef;border-radius:12px;padding:4px;background:#fff;flex:none;position:relative}.hb-fw{display:flex;align-items:center;gap:6px;padding:5px 8px;border-radius:8px;font-weight:700;color:#1d4ed8;font-size:14px}.hb-fw span{color:var(--ink2);font-weight:600}.hb-fw:hover{background:#f1f5fe}.hb-fw.on span{color:#1d4ed8}.hb-c{position:static;display:inline-flex;align-items:center;gap:2px;min-width:0}.hb-sep{color:#c7ccd4;font-size:13px}.hb-b{display:inline-flex;align-items:center;gap:5px;padding:5px 4px 5px 8px;border-radius:8px;font-weight:600;font-size:14px;color:var(--ink);white-space:nowrap}.hb-b:hover{background:#f3f5f9}.hb-b.open{background:#eef3fe;color:#1d4ed8}.hb-b.ph{color:var(--faint);font-weight:500}.hb-c:last-of-type .hb-b:not(.ph){background:#eef3fe;color:#1d4ed8}.hb-search{margin-left:auto;width:34px;height:34px;border-radius:8px;display:grid;place-items:center;color:#fff;background:#1d4ed8;flex:none}.hb-search:hover{background:#1a43bd}.hbar .ldd{left:-1px;right:-1px;top:calc(100% + 6px)}.lvh{display:flex;flex-direction:column;gap:4px;padding:2px 2px 8px;border-bottom:1px solid #f0f2f5;flex:none}.lvh-steps{display:flex;gap:4px;margin-bottom:4px}.lvh-steps span{flex:1;font-size:11px;font-weight:600;letter-spacing:.02em;color:#b6bcc7;padding-top:6px;border-top:3px solid #eceff4;border-radius:2px}.lvh-steps span.done{color:var(--mute);border-color:#bfd0f7}.lvh-steps span.on{color:#1d4ed8;border-color:#1d4ed8}.lvh-t{font-weight:700;font-size:15px;color:var(--ink)}.lvh-t em{font-style:normal;color:var(--faint);font-weight:500;margin-left:4px}.lvh-p{font-size:13px;color:var(--mute);line-height:1.35}.lvh-p b{color:var(--ink2);font-weight:600}.ldd{max-height:min(520px,calc(100vh - 120px))}.ldd-list{flex:1;min-height:0}.hb-fw,.hb-b{flex-direction:column;align-items:flex-start;gap:0;padding:4px 6px 5px 8px}.hb-eb{font-size:10px;line-height:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:#9aa2af}.hb-v{display:inline-flex;align-items:center;gap:5px;font-size:14px;line-height:20px;font-weight:600;color:var(--ink)}.hb-fw .hb-v{color:#1d4ed8}.hb-b.open .hb-eb,.hb-c:last-of-type .hb-b:not(.ph) .hb-eb{color:#6b8ff0}.hb-b.open .hb-v,.hb-c:last-of-type .hb-b:not(.ph) .hb-v{color:#1d4ed8}.hb-b.ph .hb-v{color:var(--faint);font-weight:500}.hb-sep{align-self:flex-end;padding-bottom:6px}.hb-search{height:38px;width:38px}.hbar{gap:0;padding:4px 4px 4px 2px}.hb-fw,.hb-b{padding:4px 5px 5px 6px}.hb-eb{letter-spacing:.03em}.hb-sep{font-size:12px;padding:0 1px 6px}.hb-v{gap:4px}.hb-v svg{width:14px;height:14px}.hb-search{width:34px;height:34px}.hb-seg{display:inline-flex;align-items:stretch;border-radius:8px}.hb-go{display:flex;flex-direction:column;align-items:flex-start;padding:4px 2px 5px 6px;border-radius:8px 0 0 8px}.hb-dd{display:grid;place-items:center;padding:0 4px;border-radius:0 8px 8px 0;color:var(--faint)}.hb-seg:hover .hb-go,.hb-seg:hover .hb-dd{background:#f3f5f9}.hb-dd:hover{color:#1d4ed8;background:#e6edfc!important}.hb-seg.cur .hb-go,.hb-seg.cur .hb-dd{background:#eef3fe}.hb-seg.cur .hb-eb{color:#6b8ff0}.hb-seg.cur .hb-v{color:#1d4ed8}.hb-seg.open .hb-dd{background:#dfe8fd;color:#1d4ed8}.hb-seg.ph .hb-v{color:var(--faint);font-weight:500}.hb-dd svg{width:14px;height:14px}.hb-back{width:28px;height:38px;border-radius:8px;font-size:22px;line-height:1;color:var(--ink2);display:grid;place-items:center;flex:none;margin-right:2px}.hb-back:hover{background:#f3f5f9;color:#1d4ed8}.hb-dd{margin-left:2px;width:22px;border:1px solid #e3e7ef;border-radius:7px;background:#fff;align-self:center;height:24px;padding:0}.hb-seg:hover .hb-dd{background:#fff}.hb-seg.cur .hb-dd{background:#fff;border-color:#c9d6fa;color:#1d4ed8}.hb-seg{padding-right:4px}.hb-seg.cur{background:#eef3fe}.hb-seg.cur .hb-go{background:transparent}.hb-go{padding:4px 4px 5px 6px}.hb-back{border:1px solid #e3e7ef;width:30px;height:34px;margin:0 4px 0 2px}.backlink{display:flex;align-items:center;gap:8px;align-self:flex-start;max-width:100%;padding:6px 12px 6px 8px;border-radius:999px;background:#eef3fe;color:#1d4ed8;font-size:13.5px;flex:none}.backlink:hover{background:#dfe8fd}.bl-ar{width:22px;height:22px;border-radius:50%;background:#1d4ed8;color:#fff;display:grid;place-items:center;font-size:13px;flex:none}.bl-t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.bl-t b{font-weight:700}.bl-n{color:#4b6fd1}.hb-back{background:#1d4ed8;color:#fff;border-color:#1d4ed8}.hb-back:hover{background:#1a43bd;color:#fff}.hb-sel{display:inline-flex;align-items:center;gap:6px;padding:3px 4px 3px 8px;border:1px solid #d5dce8;border-radius:10px;background:#fff;box-shadow:0 1px 2px #0f172a0d}.hb-sel:hover{border-color:#93b0f0;background:#f8faff}.hb-sel.cur{border-color:#9db7f5;background:#eef3fe}.hb-sel.cur .hb-eb{color:#6b8ff0}.hb-sel.cur .hb-v{color:#1d4ed8}.hb-sel.open{border-color:#1d4ed8;box-shadow:0 0 0 3px #e3ebfd}.hb-sel.ph{border-style:dashed}.hb-sel.ph .hb-v{color:var(--faint);font-weight:500}.hb-txt{display:flex;flex-direction:column;align-items:flex-start}.hb-car{width:20px;height:20px;border-radius:6px;background:#eef1f6;color:#475569;display:grid;place-items:center}.hb-car svg{width:14px;height:14px}.hb-sel:hover .hb-car,.hb-sel.cur .hb-car{background:#dbe5fb;color:#1d4ed8}.hb-sel.open .hb-car{background:#1d4ed8;color:#fff}.hbar{gap:2px}.hb-sep{padding:0 1px}.ldd-go{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:10px;background:#f1f5fe;border:1px solid #dbe5fb;text-align:left;width:100%;flex:none}.ldd-go:hover{background:#e6edfc}.ldd-go-ic{width:26px;height:26px;border-radius:8px;background:#1d4ed8;color:#fff;display:grid;place-items:center;font-weight:700;flex:none}.ldd-go b{display:block;color:#1d4ed8;font-size:14px}.ldd-go small{display:block;color:var(--mute);font-size:12.5px;line-height:1.3}.sheet .ldd-go{margin:0}.hb-sel{padding:3px 3px 3px 6px;gap:4px}.hb-sep{display:none}.hbar{gap:4px}.hb-eb{letter-spacing:.02em}.hbar{border:0;padding:0;background:transparent;gap:6px}.hb-sel{border:0;box-shadow:none;background:#f3f5f9;padding:5px 4px 5px 10px;border-radius:10px}.hb-sel:hover{background:#eceff5}.hb-sel.cur{background:#eaf0fd}.hb-sel.open{background:#e3ebfd;box-shadow:none}.hb-sel.ph{border:0;background:#f7f8fa}.hb-car{background:transparent;width:18px}.hb-sel:hover .hb-car,.hb-sel.cur .hb-car{background:transparent}.hb-sel.open .hb-car{background:transparent;color:#1d4ed8}.hb-back{border:0;background:#f3f5f9;color:var(--ink2);height:40px;width:32px;margin:0}.hb-back:hover{background:#e6ebf5;color:#1d4ed8}.hb-search{height:40px;width:40px;background:#f3f5f9;color:var(--ink2)}.hb-search:hover{background:#e6ebf5;color:#1d4ed8}.meta{gap:26px}.msec{display:flex;flex-direction:column;gap:10px}.msec-h{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.msec-h .meta-sub{margin:2px 0 0}.msec-c{font-size:13px;color:var(--mute);white-space:nowrap;padding-top:2px}.msec-c b{color:var(--ink);font-weight:700}.msec-bar{display:flex;gap:3px}.msec-bar span{flex:1;height:4px;border-radius:2px}.msec-bar .lv-mastered{background:#1d4ed8}.msec-bar .lv-progress{background:#93c5fd}.msec-bar .lv-not{background:#e7e5e4}.mlist{display:flex;flex-direction:column;gap:4px}.mitem{display:flex;align-items:flex-start;gap:12px;padding:10px 10px 10px 8px;border-radius:12px;background:#f8f9fb}.mitem.link{cursor:pointer}.mitem.link:hover{background:#eef3fe}.mitem.link:hover .mname{color:#1d4ed8}.mico{width:16px;height:16px;border-radius:50%;flex:none;margin-top:12px;box-sizing:border-box}.mico.lv-mastered{background:#1d4ed8}.mico.lv-progress{border:2px solid #93c5fd;background:linear-gradient(90deg,#93c5fd 50%,transparent 50%)}.mico.lv-not{border:2px solid #d6d3d1}.mbody{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.mcode2{font-size:11.5px;font-weight:600;letter-spacing:.03em;color:#9aa2af}.mname{font-size:14.5px;line-height:1.4;color:var(--ink)}.mstat{font-size:12px;font-weight:600;white-space:nowrap;margin-top:12px;padding:1px 8px;border-radius:999px}.mstat.lv-mastered{color:#1d4ed8;background:#e8eefc}.mstat.lv-progress{color:#1e5fae;background:#eaf4ff}.mstat.lv-not{color:#78716c;background:#f1f0ef}.mgo{color:#b6bcc7;font-size:18px;margin-top:9px}.alt{background:#f8f9fb;border:0;border-radius:12px;padding:12px}.mname{font-weight:400}.drawer-top{display:none}@media (max-width:767px){.app{height:100dvh;min-height:0;overflow:hidden;padding-bottom:0;display:flex;flex-direction:column}.mtop{position:static;padding:10px 12px;gap:8px;border-bottom:0}.mtop-back{width:32px;height:32px;font-size:26px;line-height:1;color:var(--ink2)}.mtop-t{line-height:1.15}.mtop-t small{font-size:12px;color:var(--mute)}.mtop-t b{font-size:19px}.centre{flex:1;min-height:0;padding:0 0 8px;background:#f4f7fc}.chart-card{height:100%;border-radius:0;background:#f4f7fc;padding:14px 12px 6px;display:flex;flex-direction:column}.pmap{height:100%}.pmap-head{position:relative;padding-right:36px}.pmap-open{position:absolute;right:0;top:4px;width:32px;height:32px;border-radius:10px;background:#fff;color:var(--ink2);font-size:22px;line-height:1;display:grid;place-items:center;box-shadow:0 1px 3px #0f172a14}.pmap-plot{flex:1;height:auto;min-height:0}.pmap-svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.mtabs{position:static;display:flex;padding:8px 6px calc(10px + env(safe-area-inset-bottom));border-top:0;border-radius:20px 20px 0 0;box-shadow:0 -4px 16px #0f172a0f}.mtabs a{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:12px;background:none!important}.mtabs a.on{color:#1d4ed8}.mtabs a:first-child{border-right:1px solid var(--line)}.side{position:fixed;left:8px;right:8px;bottom:8px;top:56px;z-index:50;background:#fff;border-radius:24px;box-shadow:0 20px 60px #0f172a47;padding:0 16px 20px;overflow-y:auto;overflow-x:hidden;transform:translateY(calc(100% + 20px));transition:transform .28s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column;gap:14px;border:0}.side.drawer-open{transform:none}.drawer-scrim{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a47;z-index:45;animation:fade .2s}.drawer-top{display:flex;justify-content:center;position:sticky;top:0;z-index:5;background:#fff;padding:8px 0 4px;margin:0 -16px;border-radius:24px 24px 0 0}.drawer-top .grab{width:40px;height:5px;border-radius:3px;background:#d9dde5;margin-top:2px}.drawer-x{position:absolute;right:12px;top:6px;width:32px;height:32px;border-radius:50%;background:#f3f5f9;color:var(--mute);font-size:14px}.side .hbar{margin-top:2px}.level{gap:14px}}.ldd.inline{position:relative;left:auto;right:auto;top:auto;box-shadow:none;border:0;padding:4px 0 0;max-height:none;animation:none;flex:1;min-height:0;background:transparent}.ldd.inline .ldd-list{max-height:none;overflow:visible}.ldd-close{position:absolute;right:0;top:0;color:#1d4ed8;font-weight:600;font-size:14px;padding:6px 2px}.ldd.inline~.level{display:none}.ldd.inline .ldd-i{padding:12px 8px;min-height:48px}.ldd.inline .search-box{flex:none}.ldd.inline .lvh-steps{margin-right:52px}.ldd-close{top:-2px}@media (max-width:767px){.centre{padding-bottom:172px}.side.sheet-m{position:fixed;left:8px;right:8px;top:auto;bottom:calc(84px + env(safe-area-inset-bottom));transition:transform .3s cubic-bezier(.2,.8,.2,1);box-shadow:0 -6px 30px #0f172a29,0 2px 8px #0f172a0f;border-radius:22px;z-index:40}.side.sheet-m.dragging{transition:none}.side.sheet-m.peek{overflow:hidden}.side.sheet-m .drawer-top{cursor:grab;touch-action:none;padding:10px 0 8px}.drawer-x{font-size:16px}.mtabs{position:relative;z-index:42;background:#fff}.drawer-scrim{z-index:35}}@media (max-width:767px){.centre{padding-bottom:100px}.side.sheet-m .drawer-top{flex-direction:column;align-items:stretch;gap:8px;padding:8px 16px 10px;margin:0 -16px}.side.sheet-m .drawer-top .grab{align-self:center}.peek{display:flex;flex-direction:column;gap:6px}.peek-row{display:flex;align-items:center;gap:8px}.peek-n{flex:1;min-width:0;font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.peek-up{color:var(--faint);font-size:14px}.peek-bar{display:flex;gap:2px;height:5px}.peek-bar span{border-radius:3px}.peek-st{display:flex;gap:12px;font-size:12px;color:var(--mute);white-space:nowrap}.peek-st span{display:flex;align-items:center;gap:4px}.peek-st i{width:6px;height:6px;border-radius:50%}.peek-st b{color:var(--ink);font-weight:600}.side.sheet-m.peek{padding-bottom:0}}@media (max-width:767px){.peek-row .pill{font-size:12px;padding:1px 8px}}@media (max-width:767px){.side.sheet-m{bottom:calc(76px + env(safe-area-inset-bottom));transition:transform .3s cubic-bezier(.2,.8,.2,1),left .2s,right .2s,border-radius .2s}.side.sheet-m.is-open,.side.sheet-m.dragging{left:0;right:0;border-radius:20px 20px 0 0;box-shadow:0 -4px 20px #0f172a1a}.mtabs{border-radius:0;box-shadow:0 -1px 0 var(--line)}}@keyframes slideIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes fadeUp{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes nudge{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@media (max-width:767px){.side.sheet-m{transition:transform .5s cubic-bezier(.3,1.3,.5,1),left .3s ease,right .3s ease,border-radius .3s ease,box-shadow .3s}.side.sheet-m.dragging{transition:none}.peek-row,.peek-st{animation:slideIn .35s cubic-bezier(.2,.8,.2,1) both}.peek-st{animation-delay:.05s}.peek-bar span{transition:flex-grow .6s cubic-bezier(.2,.8,.2,1),background .3s}.side.sheet-m.peek .peek-up{animation:nudge 1.8s ease-in-out 1s 2}.side.sheet-m.is-open .hbar,.side.sheet-m.is-open .level{animation:fadeUp .4s cubic-bezier(.2,.8,.2,1) both}.side.sheet-m.is-open .level{animation-delay:.06s}.side.sheet-m .grab{transition:width .2s,background .2s}.side.sheet-m.dragging .grab{width:56px;background:#b8c0cc}}.pband{transition:fill .25s ease}.pcell{transition:opacity .2s,transform .2s;transform-box:fill-box;transform-origin:center}.pcell.tap:hover{transform:scale(1.08)}.pring{animation:ringIn .3s cubic-bezier(.3,1.4,.5,1) both;transform-box:fill-box;transform-origin:center}@keyframes ringIn{0%{opacity:0;transform:scale(1.4)}to{opacity:1;transform:none}}.level{animation:fadeUp .3s cubic-bezier(.2,.8,.2,1) both}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}@media (max-width:767px){.side.sheet-m,.side.sheet-m.peek{left:0;right:0;border-radius:20px 20px 0 0;box-shadow:0 -4px 20px #0f172a1a}.centre{padding-bottom:84px}}.proto{position:fixed;left:16px;bottom:16px;z-index:80;display:flex;flex-direction:column;align-items:flex-start;gap:8px}.proto-btn{display:flex;align-items:center;gap:6px;background:#0f172a;color:#fff;border-radius:999px;padding:8px 14px;font-size:13px;font-weight:600;box-shadow:0 8px 24px #0f172a40}.proto-panel{width:300px;background:#fff;border-radius:16px;box-shadow:0 20px 50px #0f172a38;padding:14px;display:flex;flex-direction:column;gap:6px;animation:fadeUp .2s ease-out}.proto-h{font-weight:700;font-size:14px;margin-bottom:2px}.proto-l{font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);margin-top:6px}.proto-row{display:flex;flex-wrap:wrap;gap:6px}.proto-row a{font-size:13px;padding:5px 10px;border-radius:8px;background:#f3f5f9;color:var(--ink2);text-decoration:none}.proto-row a.on{background:#1d4ed8;color:#fff}.proto-note{font-size:12px;color:var(--mute);margin-top:6px}.sheet-scrim{display:none}@media (max-width:767px){.sheet-scrim{display:block;position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:39;pointer-events:none;transition:opacity .35s ease}.sheet-scrim.on{pointer-events:auto}.mtop{position:relative;z-index:38}}.chev-ic{display:block;flex:none;transition:transform .2s ease}.chev-ic.up{transform:rotate(180deg)}.hb-car{width:20px;height:20px;display:grid;place-items:center;color:#64748b}.hb-car .chev-ic{width:16px;height:16px}.hb-sel.cur .hb-car,.hb-sel.open .hb-car{color:#1d4ed8}.drawer-x{display:grid;place-items:center;color:#475569}.peek-up{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:#f1f3f7;color:#475569}.ctx-sw .chev-ic,.h1-sel .chev-ic,.h2-chip .chev-ic{width:16px;height:16px}.proto{bottom:76px}
