:root{--bg:#f5f5f2;--surface:#fff;--surface-2:#ecebe6;--text:#1b1f27;--muted:#5b6070;--border:#d6d4cc;--accent:#23395b;--accent-text:#fff;--accent-soft:#dfe6f2;--highlight:#d9622b;--focus:#2f6fec;--danger:#b93424;--warn-bg:#fff3d6;--warn-text:#5c4300;--ok:#1f7a4d;--radius:8px;--nav-w:13rem;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;color:var(--text);background:var(--bg);font:15px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#14161b;--surface:#1c1f26;--surface-2:#262a33;--text:#e9e7e2;--muted:#9ba1ad;--border:#363b48;--accent:#b9c9ec;--accent-text:#14161b;--accent-soft:#2a3448;--highlight:#f0855a;--focus:#7aa5ff;--danger:#e0614f;--warn-bg:#3b3115;--warn-text:#f3dc9b;--ok:#5cc795;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#14161b;--surface:#1c1f26;--surface-2:#262a33;--text:#e9e7e2;--muted:#9ba1ad;--border:#363b48;--accent:#b9c9ec;--accent-text:#14161b;--accent-soft:#2a3448;--highlight:#f0855a;--focus:#7aa5ff;--danger:#e0614f;--warn-bg:#3b3115;--warn-text:#f3dc9b;--ok:#5cc795;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:root[data-motion=reduced] *,:root[data-motion=reduced] :before,:root[data-motion=reduced] :after{transition-duration:1ms!important;animation-duration:1ms!important;animation-iteration-count:1!important}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{background:var(--bg)}a{color:inherit}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}h1{margin:0 0 1rem;font-size:1.5rem;line-height:1.25}h2{margin:1.25rem 0 .5rem;font-size:1.15rem}h3{margin:1rem 0 .4rem;font-size:1rem}.muted{color:var(--muted)}.small{font-size:.85rem}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.skip-link{z-index:50;background:var(--surface);padding:.4rem .8rem;position:absolute;top:.5rem;left:-999px}.skip-link:focus{left:.5rem}button,.button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:var(--radius);align-items:center;gap:.4rem;padding:.4rem .8rem;line-height:1.3;text-decoration:none;display:inline-flex}button:hover:not(:disabled),.button:hover{border-color:var(--muted)}button:disabled{opacity:.5;cursor:not-allowed}button.primary,.button.primary{background:var(--accent);color:var(--accent-text);border-color:var(--accent)}button.danger{background:var(--danger);color:#fff;border-color:var(--danger)}button.ghost{background:0 0;border-color:#0000}button.ghost:hover:not(:disabled){background:var(--surface-2)}.icon-button{background:0 0;border-color:#0000;padding:.25rem .5rem}.icon-button:hover:not(:disabled){background:var(--surface-2)}button[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent)}input,select,textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.4rem .55rem}input:not([type=checkbox]):not([type=radio]):not([type=range]),select,textarea{width:100%}input[type=checkbox],input[type=radio]{width:1.05rem;height:1.05rem;accent-color:var(--accent)}input[aria-invalid=true]{border-color:var(--danger)}textarea{resize:vertical}label{margin-bottom:.2rem;font-weight:600;display:block}label.inline{align-items:center;gap:.4rem;margin:0;font-weight:400;display:inline-flex}fieldset{border:1px solid var(--border);border-radius:var(--radius);margin:0 0 1rem;padding:.6rem .9rem .9rem}legend{padding:0 .3rem;font-weight:600}.field{margin-bottom:.8rem}.field-hint{color:var(--muted);min-height:1.2em;margin:.2rem 0 .6rem;font-size:.85rem}.field-error{color:var(--danger);margin:.2rem 0 .6rem;font-size:.85rem}.row{flex-wrap:wrap;align-items:center;gap:.5rem;display:flex}.row.end{justify-content:flex-end}.row.between{justify-content:space-between}.grid-2{grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));gap:.5rem .9rem;display:grid}.grow{flex:1}.chip{background:var(--surface-2);border-radius:999px;margin:.1rem .15rem .1rem 0;padding:.05rem .5rem;font-size:.82rem;display:inline-block}.badge{background:var(--accent-soft);color:var(--text);border-radius:999px;padding:0 .45rem;font-size:.78rem;font-weight:600;display:inline-block}.badge.warn{background:var(--warn-bg);color:var(--warn-text)}.badge.danger{background:var(--danger);color:#fff}.badge.ok{background:var(--ok);color:#fff}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem}.empty{text-align:center;color:var(--muted);padding:2rem 1rem}.banner{background:var(--warn-bg);color:var(--warn-text);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:.8rem;margin-bottom:1rem;padding:.6rem 1rem;display:flex}.banner button{margin-left:auto}.segmented{border:1px solid var(--border);border-radius:var(--radius);display:inline-flex;overflow:hidden}.segmented button{border:0;border-radius:0}.segmented button+button{border-left:1px solid var(--border)}.app{grid-template-columns:var(--nav-w) 1fr;min-height:100vh;display:grid}.app-nav{background:var(--surface);border-right:1px solid var(--border);height:100vh;padding:1rem .6rem;position:sticky;top:0}.app-brand{align-items:center;gap:.55rem;padding:0 .5rem 1rem;font-size:1.1rem;font-weight:700;text-decoration:none;display:flex}.app-nav ul{gap:.15rem;margin:0;padding:0;list-style:none;display:grid}.app-nav li a{border-radius:var(--radius);color:var(--muted);align-items:center;gap:.65rem;padding:.5rem .6rem;text-decoration:none;display:flex}.app-nav li a:hover{background:var(--surface-2);color:var(--text)}.app-nav li a[aria-current=page]{background:var(--accent-soft);color:var(--text);font-weight:600}.app-main{outline:none;min-width:0;padding:1.5rem 2rem 4rem}.page{max-width:72rem}.page-head{flex-wrap:wrap;align-items:center;gap:.75rem;margin-bottom:1rem;display:flex}.page-head h1{margin:0 auto 0 0}@media (width<=760px){.app{grid-template-columns:1fr}.app-nav{z-index:20;height:auto;padding:0 0 env(safe-area-inset-bottom);border-right:0;border-top:1px solid var(--border);position:fixed;inset:auto 0 0}.app-brand{display:none}.app-nav ul{grid-template-columns:repeat(5,1fr);gap:0}.app-nav li a{border-radius:0;flex-direction:column;justify-content:center;gap:.1rem;padding:.45rem .2rem;font-size:.72rem}.app-main{padding:1rem 16px 5.5rem}}.dialog-backdrop{z-index:40;background:#00000073;place-items:center;padding:1rem;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);color:var(--text);border-radius:12px;width:min(30rem,100%);max-height:calc(100vh - 2rem);padding:1.25rem 1.4rem;overflow:auto;box-shadow:0 10px 40px #00000040}.dialog.wide{width:min(64rem,100%)}.dialog h2{margin-top:0}.dialog-actions{flex-wrap:wrap;justify-content:flex-end;gap:.5rem;margin-top:1rem;display:flex}.row-menu{display:inline-block;position:relative}.menu{z-index:30;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-width:13rem;padding:.25rem;display:grid;position:absolute;top:100%;right:0;box-shadow:0 6px 20px #00000026}.menu button{text-align:left;white-space:nowrap;background:0 0;border:0;justify-content:flex-start;padding:.45rem .6rem}.menu button:hover,.menu button:focus-visible{background:var(--surface-2)}.menu button.separated{border-top:1px solid var(--border);border-radius:0}.menu-icon{width:1rem;color:var(--muted)}.toast-region{z-index:60;width:max-content;max-width:calc(100vw - 32px);position:fixed;bottom:1.25rem;left:50%;transform:translate(-50%)}.toast{background:var(--text);color:var(--bg);border-radius:var(--radius);align-items:center;gap:.6rem;padding:.55rem .6rem .55rem 1rem;display:flex;box-shadow:0 6px 20px #00000040}.toast button{color:var(--bg);border-color:color-mix(in srgb, var(--bg) 40%, transparent);background:0 0}@media (width<=760px){.toast-region{bottom:5rem}}.narrow{max-width:44rem}.breadcrumb{color:var(--muted);margin:0 0 .25rem}.breadcrumb a{color:var(--muted)}.library{grid-template-columns:15rem 1fr;align-items:start;gap:1.5rem;max-width:90rem;display:grid}.library-content{min-width:0}.library-tree{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);max-height:calc(100vh - 2rem);padding:.6rem;position:sticky;top:1rem;overflow:auto}.tree-fold{display:none}.tree,.tree ul{margin:0;padding:0;list-style:none}.tree ul{margin-bottom:.3rem;padding-left:.8rem}.tree a,.tree-archive{border-radius:6px;padding:.3rem .5rem;text-decoration:none;display:block}.tree a:hover,.tree-archive:hover{background:var(--surface-2)}.tree a[aria-current=page]{background:var(--accent-soft);font-weight:600}.tree-unit{font-weight:600}.tree-add{width:100%;color:var(--muted);justify-content:flex-start;margin-top:.4rem}.tree-archive{color:var(--muted);border-top:1px solid var(--border);border-radius:0;margin-top:.4rem;padding-top:.5rem}.welcome{max-width:40rem}.unit-description{white-space:pre-wrap;color:var(--muted)}.cards{grid-template-columns:repeat(auto-fill,minmax(13rem,1fr));gap:.6rem;margin:0 0 .75rem;padding:0;list-style:none;display:grid}.list-card{gap:.1rem;text-decoration:none;display:grid}.list-card:hover{border-color:var(--accent)}.link-button{color:inherit;background:0 0;border:0;padding:0;text-decoration:underline}ul.plain{padding:0;list-style:none}ul.plain li{padding:.2rem 0}@media (width<=900px){.library{grid-template-columns:1fr;gap:.75rem}.library-tree{background:0 0;border:0;max-height:none;padding:0;position:static}.tree-full{display:none}.tree-fold{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .75rem;display:block}.tree-fold summary{cursor:pointer;font-weight:600}}.table-tools{margin-bottom:.6rem}.table-tools .search{max-width:18rem}.grow-right{margin-left:auto}.filter-chip{align-items:center;gap:.1rem;padding-right:.1rem;display:inline-flex}.filter-chip .icon-button{padding:0 .3rem}.filter-adder select,.filter-adder input{width:auto!important}.table-scroll{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow-x:auto}table.sheet{border-collapse:collapse;width:100%;font-size:.93rem}.sheet th,.sheet td{border-bottom:1px solid var(--border);text-align:left;vertical-align:middle;padding:0}.sheet th{background:var(--surface-2);white-space:nowrap;z-index:1;font-weight:600;position:sticky;top:0}.sheet.compact td,.sheet.compact th{padding:.35rem .55rem}.sheet td:not(:has(input,select)){padding:.35rem .55rem}.sheet tr:last-child td{border-bottom:0}.sheet tr.selected td{background:var(--accent-soft)}.sheet tr.skipped td{color:var(--muted);text-decoration:line-through}.sheet tr.warning td{background:var(--warn-bg);color:var(--warn-text)}.sheet td input:not([type=checkbox]),.sheet td select{background:0 0;border-color:#0000;border-radius:0;min-width:7rem;padding:.4rem .55rem}.sheet td input:not([type=checkbox]):hover,.sheet td select:hover{border-color:var(--border)}.sheet td input:not([type=checkbox]):focus,.sheet td select:focus{background:var(--surface);border-color:var(--focus);outline:none}.sheet td.type-boolean{text-align:center}.sheet td.type-scale select{min-width:4.5rem}.sheet .col-select{text-align:center;width:2.5rem;padding:0 .4rem}.sheet .col-actions{text-align:right;width:2.5rem;padding:0 .2rem}.sort-button{background:0 0;border:0;border-radius:0;justify-content:flex-start;width:100%;padding:.45rem .55rem;font-weight:600}.sort-icon{color:var(--muted);font-size:.75rem}.bulk-bar{background:var(--accent-soft);border:1px solid var(--accent);border-radius:var(--radius);margin-bottom:.6rem;padding:.45rem .7rem}.bulk-bar select,.bulk-bar .bulk-value input:not([type=checkbox]),.bulk-bar .bulk-value select{min-width:8rem;width:auto!important}.prop-list{gap:.6rem;margin:0 0 .75rem;padding:0;list-style:none;display:grid}.prop-row{border:1px solid var(--border);border-radius:var(--radius);padding:.6rem .7rem}.prop-main{grid-template-columns:2fr 1.2fr auto auto;align-items:end;gap:.6rem;display:grid}.prop-main>div:empty{display:none}.scale-range{flex-wrap:nowrap}.scale-range input{width:4.5rem!important}.prop-actions{gap:.1rem;display:flex}.prop-options{margin-top:.5rem}@media (width<=600px){.prop-main{grid-template-columns:1fr 1fr}}.steps{color:var(--muted);flex-wrap:wrap;gap:1rem;margin:0 0 1rem;padding:0;list-style:none;display:flex}.steps li[aria-current=step]{color:var(--text);border-bottom:2px solid var(--accent);font-weight:600}.import-source textarea{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.85rem}table.mapping{border-collapse:collapse;width:100%}.mapping th,.mapping td{border-bottom:1px solid var(--border);text-align:left;vertical-align:top;padding:.4rem .55rem}.mapping td.sample{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;max-width:18rem;overflow:hidden}.new-prop{flex-wrap:nowrap;margin-top:.35rem}.preview-table{max-height:45vh;overflow:auto}.issue{font-size:.82rem;display:block}.issue.error{color:var(--danger)}.page.wide{max-width:none}.grid-3{grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.5rem .9rem;display:grid}.settings-card{margin-bottom:1rem}.settings-card fieldset{margin-top:.75rem}table.criteria{border-collapse:collapse;width:100%}.criteria th,.criteria td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;padding:.3rem .4rem}.criteria input[type=range]{vertical-align:middle;width:7rem}.weight-value{text-align:center;width:1.5rem;color:var(--muted);display:inline-block}.constraint{border-bottom:1px dashed var(--border);padding:.3rem 0}.check-list{max-height:50vh;margin:.5rem 0;padding:0;list-style:none;overflow:auto}.check-list li{padding:.15rem 0}label.spaced{margin-top:.75rem}.explain{margin-bottom:1rem;padding:.7rem 1rem}.explain .field-hint{margin-bottom:0}.score{margin-right:.5rem;font-weight:600}.score .badge{padding:.1rem .55rem;font-size:.95rem}.violations{color:var(--danger);margin:.5rem 0 0;padding-left:1.2rem}.board{grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));align-items:start;gap:.75rem;display:grid}.group{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);min-height:6rem;padding:.5rem;transition:border-color .15s,background .15s}.group.over{border-color:var(--focus);background:var(--accent-soft)}.group.locked{border-style:dashed;border-color:var(--accent)}.group.pool{background:var(--surface-2)}.group-head{align-items:center;gap:.3rem;margin-bottom:.35rem;display:flex}.group-head .group-name{background:0 0;border-color:#0000;flex:1;min-width:0;padding:.2rem .35rem;font-weight:700}.group-head input.group-name:hover{border-color:var(--border)}.group-head input.group-name:focus{border-color:var(--focus);background:var(--surface);outline:none}.chips{gap:.25rem;min-height:1.5rem;margin:0;padding:0;list-style:none;display:grid}.chip-student{background:var(--bg);border:1px solid var(--border);touch-action:manipulation;border-radius:6px;justify-content:space-between;align-items:center;gap:.2rem;padding:.1rem .1rem .1rem .5rem;display:flex}.chip-student .chip-name{cursor:grab;-webkit-user-select:none;user-select:none;flex:1;padding:.2rem 0}.chip-student.locked{background:var(--accent-soft)}.chip-student.locked .chip-name{cursor:default}.chip-student.ghost{opacity:.35}.chip-student.over{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus)}.chip-student.warn{border-color:var(--danger)}.chip-student.dragging{background:var(--surface);cursor:grabbing;padding:.35rem .7rem;box-shadow:0 8px 24px #0003}.chip-lock,.chip-warn{color:var(--muted);margin-right:.35rem;font-size:.8rem}.chip-warn{color:var(--danger)}.chip-student .row-menu .icon-button{padding:.1rem .45rem}.group-explain{border-top:1px solid var(--border);margin:.5rem 0 0;padding-top:.4rem;font-size:.8rem}.group-explain div{gap:.4rem;display:flex}.group-explain dt{color:var(--muted)}.group-explain dd{margin:0}.presenter{z-index:100;color:#f5f5f2;background:#0f1218;outline:none;padding:3vh 3vw;font-size:clamp(16px,2.2vw,40px);position:fixed;inset:0;overflow:auto}:root[data-theme=light] .presenter{color:#0f1218;background:#fff}.presenter-close{color:inherit;opacity:.6;font-size:1.5rem;position:fixed;top:1rem;right:1rem}.presenter-close:hover{opacity:1;background:0 0!important}.presenter-title{margin:0 0 2.5vh;font-size:clamp(20px,4.5vh,56px)}.presenter-groups{grid-template-columns:repeat(var(--cols,3), 1fr);gap:2vh 2vw;display:grid}.presenter-group{border:2px solid #ffffff40;border-radius:14px;padding:1.5vh 1.5vw}:root[data-theme=light] .presenter-group{border-color:#0003}.presenter-group h2{color:#f0a35e;margin:0 0 1vh;font-size:1.15em}.presenter-group ul{margin:0;padding:0;font-size:.95em;line-height:1.35;list-style:none}@media (width<=600px){table.criteria thead{display:none}table.criteria,.criteria tbody,.criteria tr{display:block}.criteria tr{border-bottom:1px solid var(--border);padding:.4rem 0}.criteria th,.criteria td{border:0;padding:.15rem 0;display:block}.segmented button{padding:.35rem .6rem}}.banner.danger{background:var(--danger);color:#fff}.banner.info{background:var(--accent-soft);color:var(--text)}.time-row{flex-wrap:wrap;margin-bottom:.35rem}.schedule-settings .time-row input[type=date]{width:10rem}.schedule-settings .time-row input[type=time]{width:8.75rem}.schedule-settings fieldset label.inline{margin-right:1rem}.day-name{min-width:2.5rem}.track-row{margin-bottom:.5rem}.track-row .days{margin:.3rem 0 .2rem 1.2rem}.schedule-settings .spaced{margin-top:.6rem}.timeline-day h2{margin:1.2rem 0 .4rem;font-size:1.05rem}.timeline-scroll{max-width:100%;overflow-x:auto}.timeline{border-collapse:separate;border-spacing:.35rem;margin:0 -.35rem}.timeline th{text-align:left;color:var(--muted);white-space:nowrap;font-size:.85rem;font-weight:600}.timeline .time-col{font-variant-numeric:tabular-nums;width:3.5rem}.timeline td{vertical-align:top;width:14rem;min-width:11rem;padding:0}.session{background:var(--surface);border:1px solid var(--border);touch-action:manipulation;border-radius:6px;align-items:center;gap:.2rem;min-height:2.4rem;padding:.15rem .1rem .15rem .5rem;transition:border-color .15s,background .15s;display:flex}.session.free{background:0 0;border-style:dashed}.session.locked{background:var(--accent-soft)}.session.ghost{opacity:.35}.session.over{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus)}.session.dragging{cursor:grabbing;padding:.35rem .7rem;box-shadow:0 8px 24px #0003}.session-name{cursor:grab;-webkit-user-select:none;user-select:none;flex:1;padding:.15rem 0}.session.locked .session-name{cursor:default}.session-members{color:var(--muted);font-size:.78rem;display:block}.session .row-menu .icon-button{padding:.1rem .45rem}.group.unplaced{max-width:40rem;min-height:0;margin-top:1rem}.picker-controls{justify-items:start;gap:.7rem;margin:1rem 0;display:grid}.picker-controls select{width:auto}.picker-controls input.narrow-number{width:5rem}.pick-stage{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);text-align:center;place-items:center;min-height:12rem;padding:1.5rem;display:grid;position:relative;overflow:hidden}.pick-stage .confetti{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.pick-name{overflow-wrap:anywhere;margin:0;font-size:clamp(1.8rem,6vw,3.4rem);font-weight:700;line-height:1.15}.pick-name.muted{font-size:1.2rem;font-weight:400}.pick-name.rolling{opacity:.75}.pick-stage .presenter-groups{text-align:left;width:100%;font-size:1rem}.pick-stage:not(.big) .presenter-group{border-color:var(--border)}.pick-stage:not(.big) .presenter-group h2{color:var(--accent);font-size:1rem}.serious .reveal{animation:.45s ease-out pick-fade}.frivolous .reveal{animation:.5s cubic-bezier(.2,1.6,.4,1) pick-pop}@keyframes pick-fade{0%{opacity:0;transform:translateY(.3em)}to{opacity:1;transform:none}}@keyframes pick-pop{0%{opacity:0;transform:scale(.6)rotate(-4deg)}to{opacity:1;transform:none}}.pick-actions{margin:1rem 0}.big-button{padding:.6rem 1.4rem;font-size:1.15rem}.pick-history ol{padding-left:1.4rem}.pick-history li{margin:.2rem 0}.pick-presenter{flex-direction:column;display:flex}.pick-stage.big{background:0 0;border:0;flex:1;min-height:0}.pick-stage.big .pick-name{font-size:clamp(40px,11vw,180px)}.pick-stage.big .presenter-groups{font-size:clamp(16px,2.4vw,40px)}.pick-hint{text-align:center;opacity:.55;margin:0;font-size:clamp(12px,1.4vw,22px)}
