:root{color:#26324a;font-synthesis:none;text-rendering:optimizelegibility;--ink:#26324a;--muted:#6e7890;--line:#e3e8f1;--paper:#fff;--blue:#5b6fe8;--blue-dark:#485bd0;--blue-soft:#eef0ff;--green:#3f9b77;--green-soft:#e7f6ef;--coral:#e77d72;--coral-soft:#ffefec;--yellow-soft:#fff3ce;--purple-soft:#eee9ff;--sky-soft:#e6f4ff;--danger:#b94a57;--danger-soft:#fff0f2;--shadow:0 12px 34px #394a7014;background:#f6f8fc;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}html,body{background:#f6f8fc;min-width:320px;min-height:100%;margin:0}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}button:focus-visible,a:focus-visible{outline-offset:3px;outline:3px solid #5b6fe847}button:disabled,.disabled{cursor:not-allowed;opacity:.5}.app-shell{background:#f6f8fc;min-height:100vh}.topbar{border-bottom:1px solid var(--line);background:var(--paper);justify-content:space-between;align-items:center;gap:24px;min-height:68px;padding:0 clamp(18px,4vw,56px);display:flex}.brand{min-width:0;color:var(--ink);letter-spacing:-.02em;align-items:center;gap:11px;font-size:1rem;font-weight:750;display:flex}.brand>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.brand-mark{background:var(--blue);border-radius:10px;flex:none;align-items:flex-end;gap:2px;width:34px;height:34px;padding:7px 6px;display:flex}.brand-mark span{background:#fff;border-radius:3px;width:3px;height:9px}.brand-mark span:nth-child(2){height:14px}.brand-mark span:nth-child(3){height:19px}.brand-mark span:nth-child(4){height:12px}.brand-mark span:nth-child(5){height:17px}.privacy-note{color:var(--muted);font-size:.84rem}.topbar-actions{align-items:center;gap:8px;display:flex}.text-button{color:#59657d;cursor:pointer;background:0 0;border:0;padding:7px 0;font-size:.84rem;font-weight:650;text-decoration:none}.text-button:hover{color:var(--blue)}.nav-button{color:#46516a;cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:12px;align-items:center;gap:8px;min-height:44px;padding:0 14px;font-size:.88rem;font-weight:650;text-decoration:none;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.nav-button:hover{color:var(--blue);background:var(--blue-soft)}.nav-button:not(:disabled):active{background:#e2e6ff}.nav-button.icon-only{justify-content:center;width:44px;padding:0}.nav-button svg{flex:none}.nav-button .spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.switcher{position:relative}.switcher-caret{color:#8b94a8;margin:0 -4px 0 -2px}.menu{z-index:30;border:1px solid var(--line);background:var(--paper);border-radius:16px;width:min(340px,100vw - 24px);padding:8px;animation:.14s ease-out menu-in;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 18px 48px #1d28442e}@keyframes menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.menu-label{color:var(--muted);letter-spacing:.08em;text-transform:uppercase;margin:4px 12px;font-size:.72rem;font-weight:800}.menu-divider{border:0;border-top:1px solid var(--line);margin:8px 4px}.menu-item{width:100%;min-height:48px;color:var(--ink);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:10px;align-items:center;gap:12px;padding:8px 12px;font-size:.92rem;font-weight:600;text-decoration:none;display:flex}.menu-item:hover{background:#f3f5f9}.menu-item[aria-checked=true]{color:#2f7a5c}.menu-item.disabled{pointer-events:none}.menu-check,.menu-icon{color:#8b94a8;flex:none;justify-content:center;width:22px;display:inline-flex}.menu-check{color:var(--green);visibility:hidden}.menu-item[aria-checked=true] .menu-check{visibility:visible}.menu-text{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.menu-text small{color:var(--muted);white-space:normal;margin-top:2px;font-size:.76rem;font-weight:500;line-height:1.35;display:block}.setup-view{width:min(900px,100% - 32px);margin:0 auto;padding:clamp(24px,4vh,48px) 0 40px}.setup-intro{text-align:center;max-width:620px;margin:0 auto 22px}.setup-intro h1,.page-heading h1{color:var(--ink);letter-spacing:-.03em;margin-bottom:6px;font-size:clamp(1.5rem,3.5vw,2rem);line-height:1.1}.setup-intro p{color:var(--muted);margin-bottom:0;font-size:.95rem;line-height:1.5}.eyebrow{color:var(--blue);letter-spacing:.1em;text-transform:uppercase;margin-bottom:7px;font-size:.74rem;font-weight:800}.empty-state h2{color:var(--ink);letter-spacing:-.03em;margin-bottom:10px;font-size:1.28rem}.button{cursor:pointer;border:1px solid #0000;border-radius:11px;justify-content:center;align-items:center;min-height:48px;padding:12px 18px;font-size:.88rem;font-weight:750;text-decoration:none;transition:background .15s,border-color .15s,transform .15s;display:inline-flex}.button.primary{border-color:var(--blue);color:#fff;background:var(--blue)}.button.primary:not(:disabled):hover{border-color:var(--blue-dark);background:var(--blue-dark)}.button.secondary{color:#46516a;background:#f8f9fc;border-color:#d9deea}.button.secondary:not(:disabled):hover{background:#f0f2f7;border-color:#c8cfdd}.button:not(:disabled):not(.disabled):active{transform:translateY(1px)}.privacy-line{color:#778197;text-align:center;margin:18px auto 0;font-size:.84rem;line-height:1.5}.banner{border:1px solid;border-radius:11px;align-items:center;gap:10px;width:100%;margin:0 0 18px;padding:12px 14px;font-size:.88rem;line-height:1.45;display:flex}.banner>span{color:#fff;border-radius:50%;flex:none;place-items:center;width:22px;height:22px;font-size:.72rem;font-weight:800;display:grid}.error-banner{color:var(--danger);background:var(--danger-soft);border-color:#f0cbd0}.error-banner>span{background:var(--danger)}.success-banner{color:#30775b;background:var(--green-soft);border-color:#bde3d3}.success-banner>span{background:var(--green)}.setup-banner{max-width:900px}.gradebook-view{width:min(1180px,100% - 32px);margin:0 auto;padding:22px 0 56px}.page-heading{justify-content:space-between;align-items:center;gap:24px;margin-bottom:18px;display:flex}.heading-text{min-width:0}.heading-title{align-items:center;gap:12px;min-width:0;display:flex}.page-heading h1{text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:0 0 3px;overflow:hidden}.rename-link{border:1px solid var(--line);color:#59657d;background:var(--paper);white-space:nowrap;cursor:pointer;border-radius:10px;flex:none;align-items:center;gap:6px;min-height:40px;padding:0 12px;font-size:.8rem;font-weight:650;text-decoration:none;display:inline-flex}.rename-link:hover{color:var(--blue);background:var(--blue-soft);border-color:#c9d1e2}.rename-form{align-items:center;gap:8px;min-width:0;margin-bottom:3px;display:flex}.rename-input{border:2px solid var(--blue);width:min(480px,100%);min-width:0;min-height:48px;color:var(--ink);background:var(--paper);font:inherit;letter-spacing:-.02em;border-radius:12px;flex:auto;padding:0 14px;font-size:clamp(1.2rem,2.6vw,1.5rem);font-weight:700}.rename-input:focus{outline-offset:2px;outline:3px solid #5b6fe847}.rename-save{flex:none;min-width:88px}.rename-cancel{flex:none;width:48px;padding:0}.subtext{color:var(--muted);margin-bottom:0;font-size:.94rem}.class-total{border:1px solid var(--line);background:var(--paper);white-space:nowrap;border-radius:14px;flex:none;align-items:baseline;gap:4px;padding:10px 16px;display:flex;box-shadow:0 7px 20px #394a700f}.class-total strong{color:var(--ink);letter-spacing:-.05em;font-size:1.5rem}.class-total span{color:#929aad;font-size:.95rem;font-weight:650}.class-total small{color:var(--muted);margin-left:6px;font-size:.78rem;font-weight:600}.student-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:13px;display:grid}.student-card{border:1px solid var(--line);min-width:0;min-height:116px;color:var(--ink);background:var(--paper);text-align:left;cursor:pointer;border-radius:18px;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:16px;padding:18px 20px;transition:border-color .15s,box-shadow .15s,transform .15s;display:grid;box-shadow:0 4px 14px #394a7009}.student-card:active{transform:scale(.985)}.student-card:hover{border-color:#c9d1e2;transform:translateY(-1px);box-shadow:0 10px 24px #394a7014}.initials{color:#45516a;background:var(--sky-soft);border-radius:16px;place-items:center;width:60px;height:60px;font-size:.98rem;font-weight:800;display:grid}.initials.color-2{background:var(--yellow-soft)}.initials.color-3{background:var(--purple-soft)}.initials.color-4{background:var(--green-soft)}.initials.color-5{background:var(--coral-soft)}.student-details{min-width:0}.student-name{color:var(--ink);text-overflow:ellipsis;white-space:nowrap;margin-bottom:9px;font-size:1.08rem;font-weight:700;display:block;overflow:hidden}.bubbles{gap:5px;display:flex}.bubbles>span{filter:grayscale();opacity:.5;background:#eef1f5;border-radius:9px;place-items:center;width:30px;height:30px;font-size:.95rem;display:grid}.bubbles>span.on{background:var(--green-soft);filter:none;opacity:1}.score{color:#7e879b;letter-spacing:-.02em;font-size:1.35rem;font-weight:800}.score.perfect{color:var(--green)}.score small{font-size:.8rem;font-weight:700}.chevron{color:#adb5c5;font-size:1.5rem}.empty-state{background:var(--paper);text-align:center;border:1px dashed #cbd2df;border-radius:18px;padding:58px 24px}.empty-icon{background:var(--yellow-soft);border-radius:17px;place-items:center;width:54px;height:54px;margin:0 auto 17px;font-size:1.35rem;display:grid}.empty-state p{color:var(--muted);margin-bottom:22px}.empty-actions{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.empty-actions .button{gap:6px;min-height:52px;padding:12px 22px}.grade-modal,.roster-modal{width:min(960px,100% - 24px);max-height:calc(100vh - 24px);color:var(--ink);background:var(--paper);border:0;border-radius:20px;padding:0;overflow:auto;box-shadow:0 30px 80px #1d28443d}.grade-modal::backdrop,.roster-modal::backdrop{background:#222b407a}.grade-modal form,.roster-modal form{padding:28px}.roster-modal{width:min(600px,100% - 24px)}.roster-heading{grid-template-columns:1fr}.roster-label{color:var(--muted);margin:20px 0 8px;font-size:.88rem;line-height:1.45;display:block}.roster-textarea{border:2px solid var(--line);width:100%;min-height:220px;color:var(--ink);background:var(--paper);font:inherit;resize:vertical;border-radius:14px;padding:14px 16px;font-size:1.05rem;line-height:1.6}.roster-textarea:focus{border-color:var(--blue);outline-offset:2px;outline:3px solid #5b6fe847}.roster-count{color:#30775b;min-height:1.4em;margin:8px 0 0;font-size:.88rem;font-weight:700}.privacy-callout{color:#46516a;background:#f3f5f9;border-radius:12px;align-items:flex-start;gap:10px;margin:16px 0 0;padding:12px 14px;font-size:.86rem;line-height:1.5;display:flex}.privacy-callout svg{color:var(--green);flex:none;margin-top:3px}.modal-close{color:#758096;cursor:pointer;background:#f1f3f7;border:0;border-radius:12px;place-items:center;width:44px;height:44px;display:grid;position:absolute;top:16px;right:16px}.modal-close:hover{color:var(--ink);background:#e6e9f0}.modal-heading{grid-template-columns:auto 1fr auto;align-items:center;gap:13px;padding-right:52px;display:grid}.modal-heading h2{letter-spacing:-.03em;margin-bottom:0;font-size:1.4rem}.modal-initials{color:#4557c6;background:var(--blue-soft);border-radius:14px;width:52px;height:52px;font-size:.86rem}.modal-score{text-align:right}.modal-score strong{color:var(--ink);letter-spacing:-.05em;font-size:2rem}.modal-score span{color:#9098aa;font-size:.8rem;font-weight:700}.dimensions{border:0;min-width:0;margin:24px 0 0;padding:0}.dimensions legend{color:var(--muted);margin-bottom:10px;font-size:.84rem;font-weight:750}.dimension-tiles{grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;display:grid}.dimension-tile{border:2px solid var(--line);min-width:0;min-height:176px;color:var(--ink);background:var(--paper);text-align:center;cursor:pointer;border-radius:16px;flex-direction:column;justify-content:flex-start;align-items:center;gap:12px;padding:22px 12px 18px;transition:border-color .15s,background .15s,transform .15s;display:flex;position:relative}.dimension-tile:hover{border-color:#cbd3e3}.dimension-tile:active{transform:scale(.97)}.dimension-tile.checked{border-color:var(--green);background:#f1faf6}.tile-check{color:#fff;background:var(--paper);border:2px solid #d5dbe6;border-radius:50%;place-items:center;width:24px;height:24px;transition:background .15s,border-color .15s;display:grid;position:absolute;top:10px;right:10px}.tile-check svg{opacity:0;transition:opacity .15s}.checked .tile-check{border-color:var(--green);background:var(--green)}.checked .tile-check svg{opacity:1}.dimension-emoji{background:#f2f4f8;border-radius:16px;flex:none;place-items:center;width:60px;height:60px;font-size:1.75rem;display:grid}.checked .dimension-emoji{background:var(--green-soft)}.dimension-copy{min-width:0}.dimension-copy strong{margin-bottom:4px;font-size:.98rem;font-weight:750;display:block}.dimension-copy small{color:var(--muted);font-size:.78rem;line-height:1.4;display:block}.modal-error{color:var(--danger);margin:14px 0 0;font-size:.84rem}.modal-actions{grid-template-columns:1fr 1.6fr;gap:12px;margin-top:24px;display:grid}.modal-actions .button{min-height:54px;font-size:.95rem}@media (width<=900px){.student-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=860px){.brand>span:last-child{display:none}}@media (width<=680px){.topbar{min-height:62px;padding:0 12px}.privacy-note{display:none}.topbar-actions{gap:4px}.nav-button{justify-content:center;width:44px;padding:0}.nav-button>span{display:none}.setup-view{width:min(500px,100% - 24px);padding-top:20px}.gradebook-view{width:min(600px,100% - 24px);padding-top:18px}.page-heading{flex-direction:column;align-items:flex-start;gap:12px}.rename-link{min-height:36px;padding:0 10px}.rename-link>span{display:none}.rename-form{flex-wrap:wrap;width:100%}.rename-input{flex-basis:100%;width:100%}.student-grid{grid-template-columns:1fr}.student-card{gap:12px;min-height:96px;padding:14px 16px}.initials{border-radius:14px;width:50px;height:50px;font-size:.84rem}.student-name{margin-bottom:7px;font-size:.98rem}.bubbles>span{width:26px;height:26px;font-size:.84rem}.dimension-tiles{grid-template-columns:1fr;gap:8px}.dimension-tile{text-align:left;flex-direction:row;min-height:64px;padding:8px 14px 8px 10px}.dimension-copy{flex:auto}.dimension-copy strong{margin-bottom:1px;font-size:.92rem}.dimension-emoji{border-radius:12px;width:44px;height:44px;font-size:1.2rem}.tile-check{flex:none;position:static}}@media (width<=440px){.brand>span:last-child{display:none}.grade-modal,.roster-modal{border-radius:16px;width:calc(100% - 12px);max-height:calc(100vh - 12px)}.grade-modal form,.roster-modal form{padding:18px}.modal-heading{grid-template-columns:auto 1fr}.modal-score{text-align:left;grid-column:1/-1}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important}.nav-button .spin,.menu{animation:none}}.steps{gap:8px;max-width:760px;margin:0 auto;padding:0;list-style:none;display:grid}.step{border:1px solid var(--line);background:var(--paper);box-shadow:var(--shadow);border-radius:14px;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;column-gap:16px;padding:12px 16px;transition:opacity .2s,border-color .2s;display:grid}.step.current{border-color:var(--blue);box-shadow:0 0 0 4px var(--blue-soft), var(--shadow)}.step.done{box-shadow:none;background:#fbfefc;border-color:#cce9dc}.step.locked{opacity:.45;box-shadow:none}.step-mark{color:#4557c6;background:var(--blue-soft);border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;font-size:.95rem;font-weight:800;display:inline-flex}.step.done .step-mark{color:#fff;background:var(--green)}.step.locked .step-mark{color:#7e879b;background:#eef1f6}.step-text{flex-direction:column;gap:3px;min-width:0;display:flex}.step-text strong{letter-spacing:-.01em;font-size:1rem;font-weight:750}.step-text span{color:var(--muted);overflow-wrap:anywhere;font-size:.88rem;line-height:1.5}.step-text em{color:var(--ink);font-style:normal;font-weight:650}.step.done .step-text strong{color:#30775b}.step-action{white-space:nowrap;text-align:center;min-width:172px}.step.done .step-action,.step.locked .step-action{color:#7e879b;background:#f3f5f9;border-color:#d9deea}.link-button{color:var(--blue);font-size:inherit;cursor:pointer;text-underline-offset:2px;background:0 0;border:0;margin-left:6px;padding:0;font-weight:650;text-decoration:underline}.link-button:hover{color:var(--blue-dark)}@media (width<=640px){.step{grid-template-columns:32px minmax(0,1fr);row-gap:12px;padding:14px}.step-mark{width:30px;height:30px;font-size:.85rem}.step-action{grid-column:2;justify-self:start;min-width:0}}.opening-view{justify-content:center;align-items:center;min-height:40vh;display:flex}.opening-note{color:var(--muted);font-size:1rem;font-weight:600}.student-card.just-saved{border-color:var(--green)}.student-card.just-saved .score{animation:1.4s ease-out saved-pulse}@keyframes saved-pulse{0%{color:var(--green);transform:scale(1.35)}40%{color:var(--green);transform:scale(1)}to{transform:scale(1)}}.toast{left:50%;bottom:calc(20px + env(safe-area-inset-bottom,0px));z-index:20;color:#fff;background:#2b3448;border-radius:14px;align-items:center;gap:12px;width:min(560px,100% - 32px);padding:14px 14px 14px 16px;animation:.22s ease-out toast-in;display:flex;position:fixed;transform:translate(-50%);box-shadow:0 16px 40px #222b4052}.toast-icon{background:var(--coral);border-radius:50%;flex:none;justify-content:center;align-items:center;width:24px;height:24px;font-size:.8rem;font-weight:800;display:inline-flex}.toast-text{flex:auto;font-size:.93rem;line-height:1.45}.toast-dismiss{color:#c3c9d8;cursor:pointer;background:0 0;border:0;border-radius:10px;flex:none;width:40px;height:40px;margin:-8px -4px -8px 0;font-size:1.5rem;line-height:1}.toast-dismiss:hover{color:#fff;background:#ffffff1a}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.toast,.student-card.just-saved .score{animation:none}}
