:root{--bg:#f7f7f5;--surface:#fff;--text:#1c1d1f;--muted:#5d6068;--border:#dcdde0;--accent:#1f5fbf;--accent-text:#fff;--good:#1e7a46;--good-bg:#e5f4ea;--warn:#8a5a00;--warn-bg:#fdf1d8;--bad:#a3262a;--bad-bg:#fbe7e7;--info-bg:#e8effa;--radius:10px;--focus:0 0 0 3px #1f5fbf59}@media (prefers-color-scheme:dark){:root{--bg:#141517;--surface:#1d1f22;--text:#ececef;--muted:#a6a9b1;--border:#34373c;--accent:#7aa7f0;--accent-text:#0c1a33;--good:#7fd3a1;--good-bg:#173524;--warn:#f2c56b;--warn-bg:#3a2e14;--bad:#f19a9c;--bad-bg:#3b1d1e;--info-bg:#1b2a44}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font:16px/1.55 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}a{color:var(--accent)}h1{margin:0 0 .75rem;font-size:1.6rem}h2{margin:1.5rem 0 .5rem;font-size:1.2rem}h3{margin:1rem 0 .4rem;font-size:1.05rem}p{margin:.4rem 0}.shell{max-width:1040px;margin:0 auto;padding:16px}.topbar{background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:12px;padding:12px 16px;display:flex}.topbar .brand{color:var(--text);font-weight:700;text-decoration:none}.topbar nav{flex-wrap:wrap;align-items:center;gap:14px;display:flex}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);margin:12px 0;padding:16px}.grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;display:grid}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.muted{color:var(--muted)}.small{font-size:.875rem}button,.button{font:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:8px;min-height:40px;padding:8px 14px;text-decoration:none;display:inline-block}button.primary,.button.primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}button.danger{border-color:var(--bad);color:var(--bad)}button:disabled{opacity:.55;cursor:not-allowed}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{box-shadow:var(--focus);outline:none}input,select,textarea{font:inherit;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;max-width:100%;min-height:40px;padding:8px 10px}label{margin:8px 0 4px;font-weight:600;display:block}.badge{background:var(--info-bg);white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:.8rem;display:inline-block}.badge.secure,.badge.passed,.badge.inferred_pass{background:var(--good-bg);color:var(--good)}.badge.developing,.badge.pending,.badge.mixed{background:var(--warn-bg);color:var(--warn)}.badge.gap,.badge.failed,.badge.inferred_fail{background:var(--bad-bg);color:var(--bad)}.badge.completed,.badge.strength{background:var(--good-bg);color:var(--good)}.badge.needs_tutor,.badge.focus{background:var(--warn-bg);color:var(--warn)}.navigator{flex-wrap:wrap;gap:6px;display:flex}.navigator button{min-width:44px;position:relative}.navigator button.answered{background:var(--good-bg)}.navigator button.current{border-color:var(--accent);box-shadow:var(--focus)}.navigator button.flagged:after{content:"⚑";color:var(--warn);font-size:.8rem;position:absolute;top:-6px;right:-4px}.timer{font-variant-numeric:tabular-nums;font-size:1.4rem;font-weight:700}.timer.low{color:var(--bad)}.alert{border-radius:8px;margin:10px 0;padding:10px 12px}.alert.error{background:var(--bad-bg);color:var(--bad)}.alert.warn{background:var(--warn-bg);color:var(--warn)}.alert.info{background:var(--info-bg)}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:8px}.table-wrap{overflow-x:auto}.question{font-size:1.25rem;line-height:1.8}.choices{gap:8px;margin-top:12px;display:grid}.choice{border:1px solid var(--border);cursor:pointer;border-radius:8px;align-items:center;gap:10px;padding:10px 12px;display:flex}.choice.selected{border-color:var(--accent);box-shadow:var(--focus)}.countdown{text-align:center;margin:24px 0;font-size:4rem;font-weight:700}.mixed{vertical-align:middle;align-items:center;gap:2px;display:inline-flex}.frac{text-align:center;flex-direction:column;margin:0 2px;font-size:.85em;line-height:1.1;display:inline-flex}.frac .num{border-bottom:1.5px solid;padding:0 3px}.frac .den{padding:0 3px}.meter{background:var(--border);border-radius:999px;height:8px;overflow:hidden}.meter>span{background:var(--accent);height:100%;display:block}@media (max-width:600px){.question{font-size:1.1rem}.countdown{font-size:3rem}}.chat{flex-direction:column;gap:8px;max-height:360px;margin:8px 0;display:flex;overflow-y:auto}.chat .bubble{white-space:pre-wrap;border-radius:10px;max-width:85%;padding:8px 10px}.chat .me{background:var(--info-bg);align-self:flex-end}.chat .them{background:var(--bg);border:1px solid var(--border);align-self:flex-start}.chat .held{border:1px dashed var(--warn)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.rich p{margin:0 0 .5rem}.rich p:last-child{margin-bottom:0}.rich ul,.rich ol{margin:.3rem 0 .6rem;padding-left:1.5rem}.rich .figure{margin:8px 0}table.rich-table{width:auto;margin:6px 0 10px;font-size:.9em;line-height:1.5}table.rich-table th,table.rich-table td{border:1px solid var(--border);padding:4px 12px}table.rich-table th{background:var(--info-bg)}img.media{vertical-align:middle;background:#fff;border-radius:6px;height:auto;padding:4px;display:inline-block}.stem-media{flex-wrap:wrap;gap:10px;margin:6px 0 4px;display:flex}.option-content{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:inline-flex}.choice .option-content img.media{border:1px solid var(--border)}.choices .option-content,.match-item .option-content,.order-body{font-size:1.1rem}.plain-fieldset{border:none;min-width:0;margin:12px 0 0;padding:0}.plain-fieldset legend{padding:0}.matching-wrap{margin-top:12px}.matching{grid-template-columns:minmax(0,1fr) clamp(36px,12vw,96px) minmax(0,1fr);align-items:start;max-width:760px;display:grid;position:relative}.match-col{flex-direction:column;gap:10px;min-width:0;display:flex}.match-item{text-align:left;z-index:1;align-items:center;gap:8px;width:100%;min-height:48px;padding:8px 10px;display:flex;position:relative}.match-item .match-id{color:var(--muted);font-size:.85rem}.match-item.paired{background:var(--info-bg);border-color:var(--accent)}.match-item.pending{border-color:var(--accent);box-shadow:var(--focus);background:var(--surface)}.match-item img.media{max-width:100%}.match-lines{pointer-events:none;z-index:2;width:100%;height:100%;position:absolute;top:0;left:0;overflow:visible}.match-lines .stroke{stroke:var(--accent);stroke-width:3px;stroke-linecap:round;pointer-events:none}.match-lines .hit{stroke:#0000;stroke-width:18px;pointer-events:stroke;cursor:pointer}.match-lines circle{fill:var(--accent);pointer-events:none}.match-lines g:hover .stroke{stroke:var(--bad);stroke-dasharray:6 4}.match-selects{gap:6px;margin-top:8px;display:grid}.ordering{gap:8px;margin:8px 0 0;padding:0;list-style:none;display:grid}.order-item{border:1px solid var(--border);background:var(--surface);border-radius:8px;align-items:center;gap:10px;padding:8px 10px;display:flex}.order-pos{color:var(--muted);text-align:center;min-width:1.4em;font-weight:700}.order-body{flex:1;min-width:0}.order-buttons{gap:6px;display:flex}.order-buttons button{min-width:44px;padding:6px 10px}.static-options{gap:6px;margin:6px 0;padding:0;list-style:none;display:grid}.static-options li{align-items:center;gap:8px;display:flex}.static-columns{grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:0 24px;display:grid}.answer-compare{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px 24px;margin:8px 0;display:grid}.answer-option{align-items:center;gap:6px;display:inline-flex}.answer-list{flex-wrap:wrap;gap:4px 14px;display:inline-flex}.answer-pairs{gap:4px;display:grid}.answer-pair{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.answer-order{margin:2px 0;padding-left:1.4rem}.solution .rich p{margin:0}button.linkish{min-height:0;color:var(--accent);background:0 0;border:none;padding:0;text-decoration:underline}button.linkish:disabled{color:var(--muted);text-decoration:none}.book-head{z-index:2;position:sticky;top:0}.book-head .meter{margin:8px 0}.book-contents{flex-wrap:wrap;gap:4px 18px;margin:0;padding:0;list-style:none;display:flex}.book-contents li.here{font-weight:700}.book-contents li.done button.linkish{color:var(--good)}.book-page{font-size:1.08rem;line-height:1.65}.book-page h2{margin:4px 0 10px}.book-text{margin:10px 0}.book-figure{text-align:center;margin:14px 0}.book-figure img.media{max-width:100%;height:auto}.book-figure figcaption{margin-top:4px}.book-box{border:1px solid var(--border);border-radius:10px;margin:14px 0;padding:10px 14px}.book-box>strong:first-child{margin-bottom:4px;display:block}.book-box.key-idea{background:var(--info-bg);border-color:var(--accent)}.book-box.tip{background:var(--good-bg);border-color:var(--good)}.book-box.mistake{background:var(--warn-bg);border-color:var(--warn)}.book-box.example{background:var(--bg)}.book-box.activity{background:var(--bg);border-style:dashed}.book-box.think{background:var(--bg)}.book-box ol{margin:6px 0;padding-left:1.4rem}.activity-steps{list-style:none;padding-left:0!important}.activity-steps label{align-items:flex-start;gap:8px;margin:4px 0;font-weight:400;display:flex}.activity-steps input{min-height:0;margin-top:6px}.book-box.animation,.book-box.comic{background:var(--surface)}.anim-stage{justify-items:center;margin:8px 0 4px;display:grid}.anim-frame{opacity:0;grid-area:1/1;max-width:100%;transition:opacity .4s}.anim-frame.on{opacity:1}.anim-stage.still .anim-frame{transition:none}.anim-frame img.media{max-width:100%;height:auto}.anim-caption{text-align:center;min-height:2.6em;font-size:1rem}.anim-controls{flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;display:flex}.anim-dots{gap:4px;margin-left:6px;display:inline-flex}.anim-dot{border:1px solid var(--accent);background:0 0;border-radius:50%;width:12px;height:12px;min-height:0;padding:0}.anim-dot.on{background:var(--accent)}.comic-strip{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin:8px 0 0;padding:0;list-style:none;display:grid}.comic-panel{border:2px solid var(--text,#1f2937);background:var(--bg);border-radius:8px;flex-direction:column;gap:6px;padding:8px;display:flex}.comic-panel img.media{align-self:center;max-width:100%;height:auto}.comic-narration{color:#1f2937;background:#fef3c7;border:1px solid #d97706;border-radius:4px;padding:4px 8px;font-size:.95rem}.comic-bubble{border:1px solid var(--border);border-radius:14px;align-self:flex-start;max-width:92%;margin:0;padding:6px 10px;font-size:.98rem;line-height:1.45}.comic-bubble.right{align-self:flex-end}.comic-bubble.tone-0{color:#1e3a8a;background:#dbeafe}.comic-bubble.tone-1{color:#831843;background:#fce7f3}.comic-bubble.tone-2{color:#14532d;background:#dcfce7}.comic-bubble.tone-3{color:#4c1d95;background:#ede9fe}.think-answer{border-left:3px solid var(--accent);background:var(--surface);margin-top:6px;padding:8px 10px}.section-banner{border-bottom:1px solid var(--border);margin-bottom:8px;padding-bottom:6px}.book-nav{justify-content:space-between;margin-top:16px}.book-section-preview{border-top:1px solid var(--border);margin:8px 0;padding-top:8px}.book-section-preview .book-page{border-top:1px dashed var(--border);margin-top:10px;font-size:1rem}.stat-tiles{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:12px 0;display:grid}.stat-tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px}.stat-value{font-variant-numeric:tabular-nums;font-size:1.25rem;font-weight:700}.activity-section{border-top:1px solid var(--border);margin-top:12px;padding-top:4px}.activity-section h3{margin:8px 0 2px}.activity-table{border-collapse:collapse;width:100%;font-size:.9rem}.activity-table th,.activity-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:top;padding:6px 8px}.activity-table th{white-space:nowrap;font-weight:600}.meter.ratio{max-width:120px;height:5px;margin-top:4px}.library-filters .row>div{min-width:0}.library-filters label{font-size:.875rem}.module-card{color:inherit;flex-direction:column;gap:6px;margin:0;text-decoration:none;transition:border-color .15s,box-shadow .15s;display:flex}.module-card:hover{border-color:var(--accent);box-shadow:var(--focus)}.module-card-title{font-size:1.05rem}.stars{color:#d99a00;letter-spacing:1px}.stars-off{color:var(--border)}.library-question .question{font-size:1.1rem}.library-code{margin-left:auto;font-family:ui-monospace,monospace;font-size:.8rem}.library-answer{background:var(--info-bg);border-radius:8px;margin-top:10px;padding:10px 12px}.rating-panel{border-top:1px solid var(--border);margin-top:12px;padding-top:10px}.star-picker{align-items:center;gap:2px;display:inline-flex}.star-picker button{min-height:0;color:var(--border);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:1.6rem;line-height:1}.star-picker button.on{color:#d99a00}.star-picker button:hover{color:#f0b429}.rating-list{gap:4px;margin:4px 0;padding:0;list-style:none;display:grid}.module-code{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.programme{margin-top:8px}.programme>h2{margin-bottom:0}.view-toggle{margin-left:auto;display:inline-flex}.view-toggle button{border-radius:0}.view-toggle button:first-child{border-radius:8px 0 0 8px}.view-toggle button:last-child{border-left:none;border-radius:0 8px 8px 0}.view-toggle button[aria-pressed=true]{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}.module-table{margin:0}.module-table th{white-space:nowrap;font-size:.85rem}:root{--pm-done:#1e7a46;--pm-done-text:#fff;--pm-done-soft:#d9efe1;--pm-train:#1f5fbf;--pm-plan:#6b5bd6;--pm-current:#b76e00;--pm-current-bg:#fdf1d8;--pm-suff:#e7f3eb;--pm-suff-line:#7fb896;--pm-none:#eceef1}@media (prefers-color-scheme:dark){:root{--pm-done:#3fa66b;--pm-done-text:#06140b;--pm-done-soft:#1b3a28;--pm-train:#7aa7f0;--pm-plan:#a99df2;--pm-current:#f2c56b;--pm-current-bg:#3a2e14;--pm-suff:#16281d;--pm-suff-line:#4f8d68;--pm-none:#25282d}}.pm-page{width:min(1360px,100vw - 32px);position:relative;left:50%;transform:translate(-50%)}.pm-summary-head{flex-wrap:wrap;align-items:center;gap:16px 28px;display:flex}.pm-big{font-variant-numeric:tabular-nums;font-size:2.2rem;font-weight:700;line-height:1}.pm-summary-bar{flex:320px;gap:6px;display:grid}.pm-summary-bar .pm-bar{height:14px}.pm-legend{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:6px 18px;margin:14px 0 8px;padding:0;font-size:.9rem;list-style:none;display:grid}.pm-legend li{align-items:flex-start;gap:8px;display:flex}.pm-swatch{border:1.5px solid var(--border);background:var(--surface);border-radius:4px;flex:none;width:28px;height:18px;margin-top:2px}.pm-bar{background:var(--pm-none);border-radius:999px;min-width:40px;height:8px;display:flex;overflow:hidden}.pm-seg{min-width:3px;height:100%;display:block}.pm-seg.completed,.pm-dot.completed{background:var(--pm-done)}.pm-seg.trained,.pm-dot.trained{background:linear-gradient(90deg, var(--pm-done) 50%, var(--pm-done-soft) 50%)}.pm-seg.in_training,.pm-dot.in_training{background:var(--pm-train)}.pm-seg.planned,.pm-dot.planned{background:var(--pm-plan)}.pm-seg.current,.pm-dot.current{background:var(--pm-current)}.pm-seg.sufficient,.pm-dot.sufficient{background:var(--pm-suff-line)}.pm-seg.not_assessed,.pm-dot.not_assessed{background:var(--pm-none)}.pm-wrap{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);margin-top:10px;overflow-x:auto}.pm-table{border-collapse:separate;border-spacing:0;table-layout:fixed;width:100%;min-width:1040px}.pm-table th,.pm-table td{border-bottom:1px solid var(--border);vertical-align:top;padding:6px}.pm-labelcol{width:200px}.pm-table thead th{z-index:1;background:var(--surface);text-align:center;font-weight:600;position:sticky;top:0}.pm-table thead th.pm-corner{text-align:left;vertical-align:bottom}.pm-table .sec{border-left:2px solid var(--border)}.pm-colhead{display:table-cell}.pm-colhead>*{margin:3px auto;display:block}.pm-colhead.school{box-shadow:inset 0 -3px 0 var(--accent)}.pm-level{font-size:1rem}.pm-colnums{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.78rem;font-weight:400}.pm-state{background:var(--pm-none);color:var(--muted);border-radius:999px;padding:1px 8px;font-size:.72rem;display:inline-block!important}.pm-state.completed{background:var(--pm-done);color:var(--pm-done-text)}.pm-state.ongoing{background:var(--info-bg);color:var(--pm-train)}.pm-state.planned{background:var(--info-bg);color:var(--pm-plan)}.pm-table tbody th{text-align:left;font-weight:400}.pm-strand th,.pm-strand td{background:var(--bg)}.pm-strand th .pm-toggle{font-size:1rem;font-weight:700}.pm-toggle{text-align:left;background:0 0;border:none;align-items:flex-start;gap:6px;min-height:32px;padding:2px 0;font-weight:600;display:flex}.pm-caret{width:1em;color:var(--muted)}.pm-meta{margin:0 0 4px 1.4em}.pm-rowsum{gap:3px;margin-left:1.4em;display:grid}.pm-mini{justify-items:center;gap:2px;padding-top:18px;display:grid}.pm-mini .pm-bar{width:100%}.pm-stack{gap:5px;display:grid}.pm-card{border:1.5px solid var(--border);background:var(--surface);border-radius:8px;gap:2px;min-height:64px;padding:6px 7px;font-size:.78rem;line-height:1.25;display:grid;position:relative;overflow:hidden}.pm-name{overflow-wrap:break-word;-webkit-hyphens:auto;hyphens:auto;font-weight:600}.pm-detail{color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:.72rem;display:-webkit-box;overflow:hidden}.pm-status{margin-top:2px;font-size:.7rem;font-weight:600}.pm-flag{color:var(--pm-current);text-transform:uppercase;letter-spacing:.03em;font-size:.66rem;font-weight:700}.pm-meter{background:var(--pm-none);border-radius:999px;height:4px;display:block;overflow:hidden}.pm-meter>span{background:var(--pm-train);height:100%;display:block}.pm-card.completed,.pm-swatch.completed{background:var(--pm-done);border-color:var(--pm-done);color:var(--pm-done-text)}.pm-card.completed .pm-detail{color:inherit;opacity:.85}.pm-card.trained,.pm-swatch.trained{background:linear-gradient(90deg, var(--pm-done-soft) 50%, var(--surface) 50%);border-color:var(--pm-done)}.pm-card.trained .pm-status{color:var(--pm-done)}.pm-card.in_training,.pm-swatch.in_training{border-color:var(--pm-train)}.pm-card.in_training .pm-status{color:var(--pm-train)}.pm-card.planned,.pm-swatch.planned{border:1.5px dashed var(--pm-plan)}.pm-card.planned .pm-status{color:var(--pm-plan)}.pm-card.current,.pm-swatch.current{background:var(--pm-current-bg);border:2px solid var(--pm-current)}.pm-card.current .pm-status{color:var(--pm-current)}.pm-card.sufficient,.pm-swatch.sufficient{background:repeating-linear-gradient(135deg, var(--pm-suff) 0 6px, var(--surface) 6px 9px);border:1.5px dashed var(--pm-suff-line)}.pm-card.sufficient .pm-status{color:var(--good)}.pm-card.not_assessed{color:var(--muted);background:var(--bg)}.pm-swatch.not_assessed{background:var(--bg)}.pm-card.at-current{box-shadow:inset 0 0 0 1px var(--pm-current)}.pm-dots{flex-wrap:wrap;justify-content:center;gap:4px;padding-top:18px;display:flex}.pm-dot{border:1px solid var(--border);border-radius:4px;width:16px;height:16px}.pm-table tbody th,.pm-table thead th.pm-corner{z-index:2;background:var(--surface);position:sticky;left:0}.pm-table tr.pm-strand th{background:var(--bg)}@media (max-width:600px){.pm-table{min-width:1000px}.pm-labelcol{width:132px}.pm-rowsum,.pm-meta{margin-left:0}.pm-toggle{font-size:.9rem}}.pm-card{font:inherit;text-align:left;cursor:pointer;width:100%;min-height:64px;color:var(--text);align-content:start;font-size:.78rem}.pm-card.not_assessed{color:var(--muted)}.pm-card.completed{color:var(--pm-done-text)}.pm-card:hover{box-shadow:0 1px 4px #0000002e}.pm-tags{flex-wrap:wrap;align-items:center;gap:3px;display:flex}.pm-step{background:var(--text);min-width:20px;height:20px;color:var(--surface);font-variant-numeric:tabular-nums;border-radius:999px;place-items:center;padding:0 5px;font-size:.7rem;font-weight:700;display:inline-grid}.pm-goal{color:#3a2a00;background:#f5c542;border-radius:999px;padding:1px 6px;font-size:.66rem;font-weight:700}.pm-dl{background:hsl(var(--h) 60% 42%);color:#fff;border-radius:999px;padding:1px 6px;font-size:.66rem;font-weight:700}.pm-dl.post{background:#e8590c}.pm-card.is-goal{outline-offset:1px;outline:2px solid #d9a400}.pm-card.f-sel{outline:3px solid var(--text);outline-offset:2px;box-shadow:0 4px 14px #00000040}.pm-card.f-pre{outline:3px solid hsl(var(--h) 60% 45%);outline-offset:1px}.pm-card.f-post{outline-offset:1px;outline:3px solid #e8590c}.pm-card.f-dim{opacity:.35}.pm-card.f-dim:hover{opacity:.8}.pm-wrap.picking .pm-card{cursor:copy}.pm-summary>summary{cursor:pointer;list-style:none}.pm-summary>summary::-webkit-details-marker{display:none}.pm-more{color:var(--accent);text-decoration:underline}.pm-summary[open] .pm-more{display:none}.pm-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-top:12px;display:flex}.pm-hint{color:var(--muted);margin:0}.pm-toolbar.focusing{z-index:4;background:var(--bg);padding:6px 0;position:sticky;top:0}.pm-focusbar{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);flex-wrap:wrap;flex:100%;align-items:center;gap:8px 14px;padding:8px 10px;display:flex}.pm-depth{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.pm-depth button{min-width:38px;padding:4px 8px}.pm-depth button.on{background:var(--text);color:var(--surface);border-color:var(--text)}.pm-dlegend{flex-wrap:wrap;align-items:center;gap:4px;display:inline-flex}.pm-dsw{background:hsl(var(--h) 60% 42%);color:#fff;border-radius:999px;padding:1px 8px;font-weight:600}.pm-dsw.post{background:#e8590c}.gp-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px 16px;display:flex}.gp-title{margin:0 0 4px;font-size:1.15rem}.gp.editing{border-color:#d9a400;box-shadow:inset 4px 0 #d9a400}.gp-chips{flex-wrap:wrap;gap:6px;margin:8px 0 0;display:flex}.gp-goalchip{color:#3a2a00;background:#fdf1c8;border:1px solid #d9a400;border-radius:999px;align-items:center;gap:4px;min-height:0;padding:3px 10px;font-size:.85rem;font-weight:600;display:inline-flex}.gp-goalchip button{min-height:0;color:inherit;background:0 0;border:none;padding:0 2px;font-size:1rem;line-height:1}.gp-form{grid-template-columns:minmax(0,1fr) auto;gap:12px 20px;margin-top:12px;display:grid}.gp-strategies{border:none;gap:6px;min-width:0;margin:0;padding:0;display:grid}.gp-strategies legend{margin-bottom:4px;padding:0;font-weight:600}.gp-strategy{border:1px solid var(--border);border-radius:8px;align-items:flex-start;gap:8px;margin:0;padding:6px 8px;font-weight:400;display:flex}.gp-strategy.on{border-color:var(--accent);background:var(--info-bg)}.gp-strategy input{margin-top:4px}.gp-date{align-content:start;gap:4px;font-weight:600;display:grid}.gp-date button{justify-self:start;font-weight:400}.gp-stats{flex-wrap:wrap;gap:8px 28px;margin:12px 0 4px;display:flex}.gp-stats>div{display:grid}.gp-num{font-variant-numeric:tabular-nums;font-size:1.4rem;font-weight:700}.gp-behind{color:var(--bad)}.gp-note{background:var(--warn-bg);color:var(--warn);border-radius:8px;padding:6px 10px}.gp-plan{border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:4px 16px;margin-top:10px;padding:6px 10px;display:flex}.gp-plan.ok{background:var(--good-bg);color:var(--good)}.gp-plan.squeezed{background:var(--warn-bg);color:var(--warn)}.gp-plan.impossible{background:var(--bad-bg);color:var(--bad)}.gp-issues{margin:6px 0 0}.gp-pathhead{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 16px;margin-top:10px;display:flex}.gp-pathhead h3{margin:0}.gp-toggle{align-items:center;gap:6px;margin:0;font-weight:400;display:inline-flex}.gp-path{grid-template-columns:repeat(auto-fill,minmax(min(100%,210px),1fr));gap:6px;max-height:320px;margin:8px 0 0;padding:0;list-style:none;display:grid;overflow-y:auto}.gp-step{text-align:left;border-left:4px solid var(--pm-none);align-items:center;gap:8px;width:100%;min-height:0;padding:5px 8px;font-size:.8rem;display:flex}.gp-step.completed,.gp-step.sufficient{border-left-color:var(--pm-done)}.gp-step.trained{border-left-color:var(--pm-done-soft)}.gp-step.in_training{border-left-color:var(--pm-train)}.gp-step.planned{border-left-color:var(--pm-plan)}.gp-step.current{border-left-color:var(--pm-current)}.gp-step.done{opacity:.6}.gp-step.done .gp-steptext>span:first-child{text-decoration:line-through}.gp-step.goal{color:#3a2a00;background:#fdf1c8}.gp-stepno{background:var(--text);min-width:22px;height:22px;color:var(--surface);font-variant-numeric:tabular-nums;border-radius:999px;flex:none;place-items:center;font-size:.72rem;font-weight:700;display:grid}.gp-steptext{min-width:0;display:grid}.gp-steptext>span:first-child{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.gp-stepmeta{color:var(--muted);font-size:.72rem}.gp-step.goal .gp-stepmeta{color:#6b5500}@media (max-width:600px){.gp-form{grid-template-columns:minmax(0,1fr)}.pm-toolbar.focusing{position:static}}.pl{--pl-left:440px}.pl-head{gap:10px;display:grid}.pl-goals{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.pl-form{flex-wrap:wrap;align-items:flex-end;gap:10px 16px;display:flex}.pl-form label{gap:4px;margin:0;font-weight:600;display:grid}.pl-mode{border:none;gap:2px;margin:0;padding:0;display:grid}.pl-mode legend{margin-bottom:2px;padding:0;font-weight:600}.pl-mode label{align-items:center;gap:6px;font-weight:400;display:flex}.pl-actions{flex-wrap:wrap;gap:6px;margin-left:auto;display:flex}.pl-summary{flex-wrap:wrap;align-items:center;gap:10px 28px;margin:12px 0;display:flex}.pl-summary>div{display:grid}.pl-num{font-variant-numeric:tabular-nums;font-size:1.15rem;font-weight:700}.pl-status{border-radius:8px;padding:6px 12px}.pl-status.ok{background:var(--good-bg);color:var(--good)}.pl-status.squeezed{background:var(--warn-bg);color:var(--warn)}.pl-status.impossible{background:var(--bad-bg);color:var(--bad)}.pl-issuehead{color:var(--warn);margin:0 0 6px;font-size:.95rem}.pl-issuehead.error{color:var(--bad)}.pl-issues{gap:6px;margin:0 0 12px;padding:0;list-style:none;display:grid}.pl-issues li{border-left:4px solid var(--border);background:var(--surface);border-radius:8px;padding:8px 10px}.pl-issues li.error{border-left-color:var(--bad);background:var(--bad-bg)}.pl-issues li.warning{border-left-color:var(--warn);background:var(--warn-bg)}.pl-issues li.info{border-left-color:var(--accent);background:var(--info-bg)}.pl-issues button.linkish{color:var(--text);text-align:left;font-size:.9rem;text-decoration:none}.pl-issues button.linkish:not(:disabled):hover{text-decoration:underline}.pl-issues button.linkish:disabled{color:var(--text);cursor:default;opacity:1}.pl-sev{margin-right:6px;font-weight:700}.pl-toolbar{flex-wrap:wrap;align-items:center;gap:8px 16px;margin-bottom:8px;display:flex}.pl-wrap{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);touch-action:pan-y;overflow-x:auto}.pl-grid{min-width:100%;position:relative}.pl-row{border-bottom:1px solid var(--border);min-height:46px;display:flex}.pl-left{width:var(--pl-left);z-index:3;background:var(--surface);border-right:1px solid var(--border);flex:none;align-content:center;gap:3px;padding:4px 8px;display:grid;position:sticky;left:0}.pl-time{flex:none;position:relative}.pl-scale .pl-time{height:44px}.pl-scale,.pl-scale .pl-left{background:var(--bg)}.pl-lefthead{align-content:end;font-weight:600}.pl-band{height:22px;position:relative}.pl-month{border-left:1px solid var(--border);white-space:nowrap;height:22px;padding:3px 6px;font-size:.75rem;font-weight:600;position:absolute;top:0;overflow:hidden}.pl-tick{height:22px;color:var(--muted);text-align:center;border-left:1px solid var(--border);padding-top:3px;font-size:.68rem;position:absolute;top:0;overflow:hidden}.pl-tick.wkend{background:var(--bg)}.pl-loadrow .pl-time{height:46px}.pl-load{display:block;position:absolute;top:4px;bottom:2px}.pl-load .cap,.pl-load .used{border-radius:2px 2px 0 0;display:block;position:absolute;bottom:0;left:0;right:0}.pl-load .cap{background:var(--pm-none)}.pl-load .used{background:var(--accent);opacity:.75}.pl-load .used.over{background:var(--bad)}.pl-name{align-items:center;gap:6px;min-width:0;display:flex}.pl-title{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-size:.85rem;font-weight:600;overflow:hidden}.pl-rowbtns{flex:none;gap:2px;display:inline-flex}.pl-rowbtns button{min-height:26px;padding:0 6px;font-size:.8rem}.pl-rowbtns button.on{background:var(--warn-bg);border-color:var(--warn)}.pl-meta{flex-wrap:wrap;align-items:center;gap:4px 6px;display:flex}.pl-meta input[type=date]{width:118px;min-height:26px;padding:2px 4px;font-size:.75rem}.pl-squeezed{color:var(--warn);font-weight:700}.pl-st{background:var(--pm-none);color:var(--muted);border-radius:999px;padding:1px 6px;font-size:.68rem;font-weight:600}.pl-st.completed{background:var(--pm-done);color:var(--pm-done-text)}.pl-st.trained{background:var(--pm-done-soft);color:var(--pm-done)}.pl-st.in_training{background:var(--info-bg);color:var(--pm-train)}.pl-st.planned{background:var(--info-bg);color:var(--pm-plan)}.pl-st.current{background:var(--pm-current-bg);color:var(--pm-current)}.pl-st.sufficient{background:var(--pm-suff);color:var(--good)}.pl-row.hot .pl-left{box-shadow:inset 4px 0 0 var(--accent)}.pl-row.hot .pl-bar{outline:3px solid var(--accent);outline-offset:1px}.pl-row.bad .pl-left{box-shadow:inset 4px 0 0 var(--bad)}.pl-row.bad .pl-bar{outline:2px solid var(--bad);outline-offset:1px}.pl-row.done{opacity:.6}.pl-bar{background:var(--pm-plan);color:#fff;z-index:1;-webkit-user-select:none;user-select:none;border-radius:6px;align-items:center;height:28px;font-size:.72rem;font-weight:600;display:flex;position:absolute;top:9px;overflow:hidden;box-shadow:0 1px 2px #0003}.pl-bar.not_assessed,.pl-bar.current{background:#5b6b8c}.pl-bar.in_training{background:var(--pm-train)}.pl-bar.trained{background:linear-gradient(90deg, var(--pm-done) 50%, #7fb896 50%)}.pl-bar.completed,.pl-bar.sufficient{background:var(--pm-done)}.pl-bar.squeezed{background-image:repeating-linear-gradient(135deg,#ffc83cbf 0 6px,#0000 6px 12px)}.pl-bar.movable{cursor:grab}.pl-bar.movable:active{cursor:grabbing}.pl-bar.pinned:after{content:"📌";font-size:.7rem;position:absolute;right:8px}.pl-barlabel{white-space:nowrap;text-overflow:ellipsis;pointer-events:none;padding:0 12px;overflow:hidden}.pl-handle{cursor:ew-resize;z-index:2;width:8px;position:absolute;top:0;bottom:0}.pl-handle.l{left:0}.pl-handle.r{right:0}.pl-handle:hover{background:#ffffff59}.pl-lines{pointer-events:none;z-index:0;position:absolute;top:0;bottom:0}.pl-off{background:var(--text);opacity:.06;position:absolute;top:44px;bottom:0}.pl-today,.pl-target{border-left:2px solid var(--good);z-index:2;width:0;position:absolute;top:0;bottom:0}.pl-target{border-left:2px dashed var(--bad)}.st>summary{cursor:pointer}.st-cols{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px 28px;display:grid}.st-week{border-collapse:collapse;width:100%}.st-week th{text-align:left;vertical-align:top;width:90px;padding:4px 8px 4px 0;font-weight:600}.st-week td{vertical-align:top;padding:3px 4px}.st-windows{flex-wrap:wrap;align-items:center;gap:4px 10px;display:flex}.st-window{align-items:center;gap:4px;display:inline-flex}.st-window input[type=time]{min-height:30px;padding:2px 4px}.st-window button,.st-row button{min-height:28px;padding:0 8px}.st-rules{grid-template-columns:repeat(auto-fill,minmax(min(100%,220px),1fr));gap:8px 14px;display:grid}.st-rules label,.st-inline{gap:4px;margin:0;font-weight:600;display:grid}.st-rules input,.st-inline input{max-width:120px}.st-row{flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0;display:flex}.st-row input[type=number]{width:80px}.st-row input[type=text]{flex:140px}@media (max-width:700px){.pl{--pl-left:200px}.pl-meta input[type=date]{width:100%}.st-cols{grid-template-columns:minmax(0,1fr)}.pl-actions{margin-left:0}}.pm-layout.with-panel{grid-template-columns:minmax(0,1fr) minmax(300px,360px);align-items:start;gap:12px;display:grid}.pm-layout.with-panel>.cp{grid-area:1/2;max-height:calc(100vh - 16px);margin:12px 0 0;position:sticky;top:8px;overflow-y:auto}.pm-layout.with-panel>.pm-main{grid-area:1/1;min-width:0}.cp{align-content:start;gap:10px;padding:14px;display:grid}.cp-head{justify-content:space-between;align-items:flex-start;gap:8px;display:flex}.cp-title{margin:0;font-size:1.15rem}.cp-close{flex:none;min-width:32px;min-height:32px;padding:0;font-size:1.3rem;line-height:1}.cp-section{border-top:1px solid var(--border);padding-top:10px}.cp-section h3{align-items:baseline;gap:8px;margin:0 0 2px;font-size:1rem;display:flex}.cp-count{background:var(--info-bg);color:var(--accent);font-variant-numeric:tabular-nums;border-radius:999px;padding:0 8px;font-size:.85rem;font-weight:700}.cp-note{margin:0 0 6px}.cp-list{gap:4px;margin:6px 0;padding:0;font-size:.88rem;list-style:none;display:grid}.cp-row{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.cp-num{font-variant-numeric:tabular-nums;color:var(--muted)}.cp-badge{margin-left:6px;font-size:.7rem}.cp-open{margin:2px 0 4px;font-size:.88rem;display:inline-block}.cp-links{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.cp-links>.small{min-width:64px}.cp-chip{border-radius:999px;min-height:0;padding:2px 8px;font-size:.78rem}.cp-status{white-space:nowrap;font-size:.75rem;font-weight:600}.cp-status.in_training{color:var(--pm-train)}.cp-status.planned{color:var(--pm-plan)}.cp-status.completed,.cp-status.trained,.cp-status.sufficient{color:var(--good)}.cp-student{border-top:none;padding-top:0}.cp-statusline{align-items:flex-start;gap:8px;font-size:.9rem;display:flex}.cp-facts{margin:6px 0;padding-left:1.2em}.cp-actions{gap:6px}.cp-actions .button{font-size:.85rem}@media (max-width:900px){.pm-layout.with-panel{grid-template-columns:minmax(0,1fr)}.pm-layout.with-panel>.cp{grid-area:1/1;max-height:none;position:static}.pm-layout.with-panel>.pm-main{grid-row:2}}.sy-options{flex-wrap:wrap;align-items:end;gap:8px 14px;display:flex}.sy-card{background:var(--surface)}.sy-card.has-students{border-color:var(--pm-train)}.sy-stats{color:var(--muted);gap:1px;margin-top:3px;font-size:.7rem;display:grid}.sy-stats b{color:var(--text);font-variant-numeric:tabular-nums}.sy-stats .short b{color:var(--warn)}.sy-stats .on b{color:var(--pm-train)}.sy-colnums{color:var(--muted);gap:1px;font-size:.75rem;font-weight:400;display:grid}.sy-cell{text-align:center;color:var(--muted);font-size:.75rem;padding-top:14px!important}.sy-key{flex-wrap:wrap;gap:6px 18px;margin:6px 0 0;padding:0;font-size:.85rem;list-style:none;display:flex}.sy-table td,.sy-table th{vertical-align:top}.sy-table .num{text-align:right;font-variant-numeric:tabular-nums}.review-tabs{flex-wrap:wrap;margin:8px 0 4px}.bank-row.open td{background:var(--info-bg)}.bank-row button.linkish{text-align:left;font-weight:600}.bank-detail>td{background:var(--bg);padding:4px 0 12px}.topic-questions{padding:0 8px}.topic-questions .library-question{margin:8px 0}.bank-legend{grid-template-columns:max-content 1fr;gap:4px 12px;margin:8px 0 0;display:grid}.bank-legend dt{font-weight:600}.bank-legend dd{margin:0}.progress-track{background:var(--border);border-radius:4px;height:8px;overflow:hidden}.progress-fill{background:var(--good);height:100%;transition:width .3s}.cd-grid{border-collapse:collapse;width:100%;font-size:.85rem}.cd-grid th,.cd-grid td{border:1px solid var(--border);vertical-align:top;padding:4px}.cd-grid th{background:var(--bg);text-align:left;font-weight:600}.cd-grid td.cd-row{min-width:130px}.cd-card{text-align:left;background:var(--bg);width:100%;color:var(--text);border:1px solid #0000;border-radius:6px;margin:2px 0;padding:2px 6px;font-size:.75rem;line-height:1.3;display:block}.cd-card.pass_tested,.cd-card.pass_probe,.cd-card.pass_external{background:var(--good-bg);color:var(--good)}.cd-card.pass_secondary{background:var(--good-bg);color:var(--good);border-style:dashed;border-color:var(--good)}.cd-card.current{background:var(--warn-bg);color:var(--warn);font-weight:600}.cd-card.fail{background:var(--bad-bg);color:var(--bad);font-weight:600}.cd-card.blocked{background:var(--bad-bg);color:var(--bad);border-style:dashed;border-color:var(--bad)}.cd-card.beyond,.cd-card.not_assessed{color:var(--muted);border-color:var(--border);background:0 0}.cd-card.hole{outline:2px solid var(--bad)}.cd-legend{flex-wrap:wrap;gap:6px;margin:8px 0;display:flex}.cd-legend .cd-card{width:auto;display:inline-block}.cd-detail{z-index:20;width:min(380px,100vw - 32px);margin:0;position:fixed;bottom:16px;right:16px;box-shadow:0 6px 24px #0000002e}.concept-tags{align-items:baseline;gap:6px;margin-top:4px}.badge.tag-type{background:var(--info-bg);color:var(--accent)}.badge.tag-form{border:1px solid var(--border);color:var(--muted);background:0 0}.tag-also{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.tag-editor fieldset{border:none;margin:8px 0 0;padding:0}.tag-editor legend{margin-bottom:4px;padding:0;font-weight:600}.tag-editor label.check,label.check{font-weight:400;display:block}.tag-list{margin:4px 0;padding-left:18px}.cp-coverage{margin:1px 0 4px}.chapter-coverage .quiz-tags{gap:6px;margin:4px 0;padding-left:20px;display:grid}.answer-table tr.clickable{cursor:pointer}.answer-table tr.clickable:hover,.answer-table tr.open{background:var(--info-bg)}.answer-table tr.clickable:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.answer-table .answer-cell{overflow-wrap:anywhere;max-width:220px}.answer-review-row>td{background:var(--surface);padding:12px}.answer-review{max-width:760px}.review-actions{border-top:1px solid var(--border);margin-top:12px;padding-top:10px}.question-editor label{margin-top:8px;display:block}.question-editor input:not([type=checkbox]),.question-editor select{width:100%}.question-editor fieldset{border:1px solid var(--border);border-radius:8px;margin:10px 0 0;padding:6px 10px 10px}.question-editor .editor-option{flex-wrap:nowrap;margin-top:6px}.question-editor .editor-option input,.question-editor .editor-option textarea{flex:1;min-width:0}.question-editor label.row{display:flex}.answer-history{margin:10px 0}.answer-history tr.this-try{background:var(--info-bg)}.ml-bar{justify-content:space-between;margin:8px 0}.seg{border:1px solid var(--border);border-radius:8px;display:inline-flex;overflow:hidden}.seg button{border:0;border-radius:0;margin:0}.seg button.on{background:var(--accent);color:var(--accent-text)}.chip{border-radius:999px;padding:2px 10px;font-size:.8rem}.chip.on{background:var(--info-bg);color:var(--accent);border-color:var(--accent)}.chip.tag{border:1px solid var(--border);color:var(--muted);padding:0 8px;font-size:.72rem;display:inline-block}.lanes{align-items:start;gap:8px;display:grid}.lane-head{padding:0 4px;font-weight:600}.lane-title{padding-top:6px}.lane-cell{background:var(--bg);border-radius:8px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));align-items:start;gap:8px;min-height:2.5rem;padding:6px;display:grid}.ml-card{background:var(--surface);border:1px solid var(--border);border-left:4px solid var(--border);border-radius:8px;flex-direction:column;gap:4px;padding:8px 10px;display:flex}.ml-card.next{border-left-color:var(--pm-plan)}.ml-card.in_progress{border-left-color:var(--pm-train)}.ml-card.done{border-left-color:var(--pm-done)}.ml-card .button{align-self:flex-start}.ml-name{font-weight:600}.ml-tags{flex-wrap:wrap;gap:4px;display:flex}@media (max-width:720px){.lanes{grid-template-columns:1fr!important}.lanes>.lane-head,.lanes>div:first-child{display:none}}.cal{flex-direction:column;gap:6px;display:flex}.cal-row{grid-template-columns:minmax(9rem,14rem) 1fr;align-items:center;gap:8px;display:grid}.cal-track{background:var(--bg);border-radius:6px;height:26px;position:relative}.cal-axis .cal-track{background:0 0;height:18px}.cal-month{white-space:nowrap;border-left:1px solid var(--border);padding-left:4px;position:absolute;top:0}.cal-bar{background:var(--pm-plan);border-radius:4px;height:16px;position:absolute;top:5px}.cal-bar.done{background:var(--pm-done)}.cal-bar.in_progress{background:var(--pm-train)}.cal-today{background:var(--bad);width:2px;position:absolute;top:0;bottom:0}.cal-key i{vertical-align:middle;width:14px;height:10px;display:inline-block;position:static}.cal-today-key{background:var(--bad);width:3px!important}.tabs{margin:4px 0 12px}
