@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/public-sans-vietnamese-wght-normal-CtlIRbEm.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/public-sans-latin-ext-wght-normal-MQgHevqp.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/public-sans-latin-wght-normal-DdeTHZLK.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--canvas:#faf9f6;--surface:#fff;--surface-2:#f7f8fb;--surface-3:#eef1f6;--border:#e2e6ee;--border-strong:#cfd5e2;--text:#101b45;--text-2:#465173;--text-3:#7c86a2;--ivy:#172a6e;--ivy-600:#0d1a4a;--ivy-50:#e8edfb;--ivy-100:#d2dbf6;--good:#0e7d4a;--good-600:#095a35;--good-50:#e1f6ea;--good-100:#bfe8d0;--gold:#ffc21a;--brass:#9a6b00;--brass-50:#fff3d1;--navy:#172a6e;--navy-deep:#0d1a4a;--bright:#3563f2;--subject-math:#9c6a1e;--subject-math-soft:#f6edda;--subject-math-line:#e6d2a8;--subject-math-ink:#7a5214;--subject-english:#8e2a45;--subject-english-soft:#f5e8eb;--subject-english-line:#e2c1cb;--subject-english-ink:#6e1d33;--danger:#d23a34;--danger-600:#a82a25;--danger-50:#fde7e6;--warn:#9a5b00;--warn-50:#fff3d1;--shadow-xs:0 1px 2px #101b450d;--shadow-sm:0 2px 6px #101b4512, 0 1px 2px #101b450a;--shadow-lg:0 24px 64px #101b4538;--radius-sm:10px;--radius:12px;--radius-lg:18px;--font-body:"Public Sans Variable", system-ui, -apple-system, "Segoe UI", sans-serif;--font-brand:var(--font-body);--font-mono:ui-monospace, "SF Mono", Menlo, monospace;font-family:var(--font-body);color:var(--text);background:var(--canvas);-webkit-font-smoothing:antialiased;font-feature-settings:"tnum" 1;font-size:14px;line-height:1.5}*{box-sizing:border-box}body{background:var(--canvas);margin:0}h1,h2,h3{text-wrap:balance;letter-spacing:-.01em;margin:0;line-height:1.25}h1{letter-spacing:-.02em;font-size:28px;font-weight:800}h2{font-size:16px;font-weight:750}p{margin:0}a{color:var(--ivy)}:focus-visible{outline:3px solid var(--ivy-100);outline-offset:1px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.shell{background:linear-gradient(90deg, var(--navy) 0 252px, var(--canvas) 252px);grid-template-columns:252px minmax(0,1fr);min-height:100vh;display:grid}.sidebar{background:var(--navy);color:#fff;flex-direction:column;gap:22px;height:100vh;padding:22px 14px 16px;display:flex;position:sticky;top:0}.brand{flex-direction:column;gap:4px;padding:2px 8px;display:flex}.brand .harbour-logo-name{font-size:18px}.brand-sub{color:#fff9;margin-top:-10px;padding-left:52px;font-size:12px;font-weight:600}.nav{flex-direction:column;gap:18px;display:flex}.nav-group{flex-direction:column;gap:2px;display:flex}.nav-group-label{letter-spacing:.1em;text-transform:uppercase;color:#ffffff80;padding:0 12px 4px;font-size:11px;font-weight:800}.nav-link{border-radius:var(--radius);color:#ffffffc7;align-items:center;gap:10px;height:40px;padding:0 12px;font-weight:650;text-decoration:none;transition:background .12s,color .12s;display:flex}.nav-link svg{color:#fff9;flex:none}.nav-link:hover{color:#fff;background:#ffffff14}.nav-link.active{color:#fff;background:#ffffff24;font-weight:800}.nav-link.active svg{color:var(--gold)}.sidebar .nav-count{background:var(--gold);color:var(--navy-deep);border-color:#0000}.user-card{border-radius:var(--radius-lg);background:#ffffff14;align-items:center;gap:10px;margin-top:auto;padding:10px;display:flex}.user-card-open{border-radius:var(--radius);min-width:0;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;flex:1;align-items:center;gap:10px;margin:-4px;padding:4px;display:flex}.user-card-open:hover{background:#ffffff14}.user-card-text{flex-direction:column;flex:1;min-width:0;line-height:1.3;display:flex}.user-card-name{white-space:nowrap;text-overflow:ellipsis;font-weight:750;overflow:hidden}.user-card-role{color:#fff9;font-size:12px}.user-card .icon-btn{color:#ffffffbf}.user-card .icon-btn:hover{color:#fff;background:#ffffff1f}.content{min-width:0;padding-block:28px 64px;padding-inline:40px}.page{flex-direction:column;gap:20px;max-width:1180px;display:flex}.page-header{background:var(--navy);color:#fff;border-radius:24px;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;padding:24px 28px 26px;display:flex}.page-header h1{color:#fff}.page-header-text{flex-direction:column;gap:4px;display:flex}.page-description{color:var(--text-2)}.page-header .page-description{color:#ffffffbf}.crumbs{color:#ffffff8c;align-items:center;gap:6px;margin-bottom:6px;font-size:13px;font-weight:600;display:flex}.crumbs a{color:#ffffffb3;align-items:center;gap:4px;text-decoration:none;display:inline-flex}.crumbs a:hover{color:#fff}.page-header .btn-primary{background:var(--gold);color:var(--navy-deep);box-shadow:none}.page-header .btn-primary:hover:not(:disabled){background:#ffcf4d}.page-header .btn-secondary{color:#fff;box-shadow:none;background:#ffffff1f;border-color:#ffffff40}.page-header .btn-secondary:hover:not(:disabled){background:#fff3;border-color:#fff6}.page-header .badge{border-color:#0000}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.card-pad{flex-direction:column;gap:14px;padding:20px;display:flex}.card-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.card-head-title{align-items:center;gap:10px;display:flex}.card-head-title svg{color:var(--text-3)}.card-note{color:var(--text-2)}.card.danger-zone{border-color:#f0cdca}.grid-2{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);align-items:start;gap:20px;display:grid}.stack{flex-direction:column;gap:20px;display:flex}.stats{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px;display:grid}.stat{flex-direction:column;gap:6px;padding:16px 18px;display:flex}.stat-label{color:var(--text-2);align-items:center;gap:8px;font-weight:550;display:flex}.stat-label svg{color:var(--text-3)}.stat-value{letter-spacing:-.02em;font-size:28px;font-weight:700}.center-cards{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;display:grid}.center-card{color:inherit;flex-direction:column;gap:14px;padding:18px 20px;text-decoration:none;transition:box-shadow .12s,border-color .12s;display:flex}.center-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm)}.center-card-name{font-size:16px;font-weight:700}.center-card-address{color:var(--text-3)}.center-card-stats{border-top:1px solid var(--border);grid-template-columns:repeat(3,1fr);gap:8px;padding-top:12px;display:grid}.mini-stat{flex-direction:column;display:flex}.mini-stat b{font-size:18px}.mini-stat span{color:var(--text-3);font-size:12px}.badge{white-space:nowrap;border:1px solid #0000;border-radius:999px;align-items:center;gap:6px;height:22px;padding:0 8px;font-size:12px;font-weight:650;display:inline-flex}.badge:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.badge.plain:before{display:none}.badge-good{background:var(--good-50);color:var(--good-600);border-color:var(--good-100)}.badge-muted{background:var(--surface-3);color:var(--text-2);border-color:var(--border)}.badge-warn{background:var(--warn-50);color:var(--warn);border-color:#f6dc8f}.badge-danger{background:var(--danger-50);color:var(--danger);border-color:#f3cbc8}.badge-math{background:var(--subject-math-soft);color:var(--subject-math-ink);border-color:var(--subject-math-line)}.badge-english{background:var(--subject-english-soft);color:var(--subject-english-ink);border-color:var(--subject-english-line)}.badge-brass{background:var(--brass-50);color:var(--brass);border-color:#f6dc8f}.avatar{color:#fff;border-radius:50%;flex:none;place-items:center;width:32px;height:32px;font-size:12px;font-weight:700;display:grid}.avatar.lg{width:52px;height:52px;font-size:18px}.person{align-items:center;gap:10px;min-width:0;display:flex}.person-text{flex-direction:column;min-width:0;line-height:1.3;display:flex}.person-sub{color:var(--text-3);font-size:12.5px}.person-text .badge{align-self:flex-start}.pin{align-items:center;gap:4px;display:inline-flex}.pin-value{font-family:var(--font-mono);letter-spacing:.12em;min-width:5ch;font-size:14px}.pin-value.lg{font-size:22px;font-weight:600}button{font:inherit;cursor:pointer}.btn{border-radius:var(--radius);white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;height:40px;padding:0 16px;font-size:14px;font-weight:750;text-decoration:none;transition:background .12s,border-color .12s,box-shadow .12s;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--ivy);color:#fff;box-shadow:var(--shadow-sm)}.btn-primary:hover:not(:disabled){background:var(--ivy-600)}.btn-secondary{background:var(--surface);color:var(--text);border-color:var(--border);box-shadow:var(--shadow-xs)}.btn-secondary:hover:not(:disabled){background:var(--surface-2);border-color:var(--border-strong)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:var(--danger-600)}.btn-danger-outline{background:var(--surface);color:var(--danger);border-color:#f0cdca}.btn-danger-outline:hover:not(:disabled){background:var(--danger-50)}.btn-sm{height:32px;padding:0 10px;font-size:13px}.icon-btn{border-radius:var(--radius-sm);width:32px;height:32px;color:var(--text-3);background:0 0;border:1px solid #0000;place-items:center;display:inline-grid}.icon-btn:hover{background:var(--surface-3);color:var(--text)}.toolbar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:10px;padding:12px;display:flex}.search{flex:240px;max-width:360px;position:relative}.search svg{color:var(--text-3);pointer-events:none;position:absolute;top:50%;left:11px;transform:translateY(-50%)}.toolbar-spacer{flex:1}.toolbar .segmented button{height:32px}.toolbar>.hint:last-child{margin-left:auto}.toolbar .toolbar-select{flex:none;width:auto;min-width:150px}.toolbar .btn-sm{height:38px;padding:0 14px}.segmented{background:var(--surface-3);border-radius:var(--radius);gap:2px;padding:3px;display:inline-flex}.segmented button{height:30px;color:var(--text-2);background:0 0;border:0;border-radius:7px;padding:0 12px;font-size:13px;font-weight:600}.segmented button[aria-pressed=true]{background:var(--surface);color:var(--text);box-shadow:var(--shadow-sm)}.table-scroll{overflow-x:auto}.table{border-collapse:collapse;width:100%}.table th,.table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;white-space:nowrap;padding:10px 16px}.table th{height:40px;color:var(--text-3);background:var(--surface-2);font-size:12.5px;font-weight:600}.table tbody tr{transition:background .1s}.table tbody tr:hover{background:var(--surface-2)}.table tbody tr:last-child td{border-bottom:0}.table .num{text-align:right}.table .row-go{width:40px;color:var(--text-3)}.row-link{color:var(--text);font-weight:650;text-decoration:none}.row-link:hover{text-decoration:underline}.table-footer{color:var(--text-3);border-top:1px solid var(--border);padding:10px 16px;font-size:13px}.empty{text-align:center;color:var(--text-2);flex-direction:column;align-items:center;gap:8px;padding:40px 20px;display:flex}.empty svg{color:var(--text-3)}.empty-title{color:var(--text);font-weight:650}.form{flex-direction:column;gap:14px;display:flex}.form-row{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr));gap:14px;display:grid}.field{flex-direction:column;gap:6px;display:flex}.field>label{color:var(--text-2);font-size:13px;font-weight:600}input,select,textarea{font:inherit;color:var(--text);font-size:14px}.field input,.field select,.field textarea,.search input,.input{border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);width:100%;height:38px;padding:0 12px;transition:border-color .12s,box-shadow .12s}.field textarea{height:auto;min-height:90px;padding:10px 12px}.search input{padding-left:34px}.field select,select.input{appearance:none;text-overflow:ellipsis;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237c86a2' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;background-size:16px;padding-right:36px}.field input:focus,.field select:focus,.field textarea:focus,.search input:focus,.input:focus{border-color:var(--ivy);box-shadow:0 0 0 3px var(--ivy-100);outline:none}.field input:read-only,.field input:disabled,.field select:disabled{background:var(--surface-2);color:var(--text-2)}.hint{color:var(--text-3);font-size:12.5px}.form-actions{align-items:center;gap:10px;display:flex}.switch{cursor:pointer;align-items:flex-start;gap:10px;display:flex}.switch input{width:18px;height:18px;accent-color:var(--ivy);margin-top:1px}.switch-text{flex-direction:column;display:flex}.switch-text b{font-weight:600}.callout{border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--border);color:var(--text-2);align-items:flex-start;gap:10px;padding:12px 14px;display:flex}.callout svg{flex:none;margin-top:1px}.callout.warn{background:var(--warn-50);color:var(--warn);border-color:#f1dcb3}.callout.info{background:var(--ivy-50);border-color:var(--ivy-100);color:var(--ivy-600)}.error{border-radius:var(--radius);background:var(--danger-50);color:var(--danger);border:1px solid #f3cbc8;align-items:flex-start;gap:8px;padding:10px 12px;display:flex}.toasts{z-index:50;flex-direction:column;gap:10px;display:flex;position:fixed;bottom:20px;right:20px}.toast{border-radius:var(--radius);background:var(--navy);color:#fff;min-width:240px;max-width:380px;box-shadow:var(--shadow-lg);align-items:center;gap:10px;padding:12px 14px;font-weight:600;animation:.18s ease-out toast-in;display:flex}.toast svg{color:#9fd3ad;flex:none}.toast-error{background:var(--danger)}.toast-error svg{color:#fff}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}}dialog{color:var(--text);background:var(--surface);border:0;padding:0}dialog::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#14213d59}.dialog{border-radius:var(--radius-lg);width:min(440px,100vw - 32px);box-shadow:var(--shadow-lg)}.dialog-body{flex-direction:column;gap:10px;padding:22px 22px 18px;display:flex}.dialog-icon{background:var(--danger-50);width:40px;height:40px;color:var(--danger);border-radius:50%;place-items:center;display:grid}.dialog-title{font-size:17px;font-weight:700}.dialog-actions{background:var(--surface-2);border-top:1px solid var(--border);justify-content:flex-end;gap:10px;padding:14px 22px;display:flex}.drawer{width:min(460px,100vw);height:100dvh;max-height:100dvh;box-shadow:var(--shadow-lg);margin:0 0 0 auto;animation:.2s ease-out drawer-in}.drawer[open]{flex-direction:column;display:flex}@keyframes drawer-in{0%{opacity:.4;transform:translate(24px)}}.drawer-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:flex-start;gap:12px;padding:20px 22px;display:flex}.drawer-head p{color:var(--text-2);margin-top:4px}.drawer-body{flex:1;padding:20px 22px;overflow-y:auto}.drawer-foot{border-top:1px solid var(--border);background:var(--surface-2);justify-content:flex-end;gap:10px;padding:14px 22px;display:flex}.skeleton{background:linear-gradient(90deg, var(--surface-3) 0%, #f8f7f3 50%, var(--surface-3) 100%);background-size:200% 100%;border-radius:6px;animation:1.2s linear infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.device-row{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:12px 0;display:flex}.device-row:last-child{border-bottom:0}.device-icon{border-radius:var(--radius-sm);background:var(--surface-3);width:36px;height:36px;color:var(--text-2);flex:none;place-items:center;display:grid}.device-row .input{max-width:200px}.device-seen{color:var(--text-3);flex:1;font-size:13px}.setup-code-box{border-radius:var(--radius-lg);background:var(--ivy-50);border:1px solid var(--ivy-100);flex-direction:column;align-items:center;gap:6px;padding:22px;display:flex}.setup-code{font-family:var(--font-mono);letter-spacing:.08em;color:var(--ivy-600);font-size:40px;font-weight:700}.steps{color:var(--text-2);flex-direction:column;gap:6px;margin:0;padding-left:20px;display:flex}.waiting-codes{border-top:1px dashed var(--border-strong)}.calendar{--math:var(--subject-math-soft);--math-ink:var(--subject-math-ink);--english:var(--subject-english-soft);--english-ink:var(--subject-english-ink);flex-direction:column;gap:12px;display:flex}.calendar-head{justify-content:space-between;align-items:center;display:flex}.calendar-month{font-weight:650}.calendar-grid{grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;display:grid}.calendar-weekday{text-align:center;color:var(--text-3);padding-bottom:2px;font-size:11.5px;font-weight:650}.calendar-day{aspect-ratio:1/.8;border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid var(--border);flex-direction:column;justify-content:space-between;min-height:40px;padding:4px 6px;font-size:12px;display:flex}.calendar-day.blank{background:0 0;border-color:#0000}.calendar-date{color:var(--text-2);font-weight:600}.calendar-tag{white-space:nowrap;font-size:10.5px;font-weight:700;overflow:hidden}.calendar-day.math{background:var(--math);border-color:var(--subject-math-line);color:var(--math-ink)}.calendar-day.english{background:var(--english);border-color:var(--subject-english-line);color:var(--english-ink)}.calendar-day.both{background:linear-gradient(90deg, var(--math) 0 50%, var(--english) 50% 100%);border-color:var(--subject-math-line);color:var(--text)}.calendar-legend{color:var(--text-2);flex-wrap:wrap;gap:14px;font-size:12.5px;display:flex}.calendar-legend span{align-items:center;gap:6px;display:inline-flex}.swatch{border-radius:3px;width:12px;height:12px;display:inline-block}.swatch.math{background:var(--math);border:1px solid var(--subject-math-line)}.swatch.english{background:var(--english);border:1px solid var(--subject-english-line)}.swatch.both{background:linear-gradient(90deg, var(--math) 0 50%, var(--english) 50% 100%);border:1px solid var(--subject-math-line)}.subjects{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;display:grid}.subject-panel{border-radius:var(--radius);border:1px solid var(--border);background:var(--surface-2);flex-direction:column;gap:10px;padding:16px;display:flex}.subject-panel h3{letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);font-size:13px;font-weight:700}.lesson-now{font-size:16px;font-weight:700}.next-step{border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border);align-items:flex-start;gap:8px;padding:10px 12px;display:flex}.next-step svg{color:var(--ivy);flex:none;margin-top:2px}.chips{flex-wrap:wrap;gap:6px;display:flex}.kv{grid-template-columns:auto 1fr;gap:8px 16px;margin:0;display:grid}.kv dt{color:var(--text-3)}.kv dd{margin:0;font-weight:550}.points-balance{letter-spacing:-.02em;font-size:34px;font-weight:750}.nav-count{background:var(--warn-50);min-width:20px;height:20px;color:var(--warn);border:1px solid #f1dcb3;border-radius:999px;place-items:center;margin-left:auto;padding:0 6px;font-size:11.5px;font-weight:700;display:inline-grid}.field textarea{resize:vertical}.form-section{border-top:1px solid var(--border);flex-direction:column;gap:12px;padding-top:16px;display:flex}.form-section:first-child{border-top:0;padding-top:0}.form-section-title{letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);font-size:12px;font-weight:700}.contact{flex-direction:column;gap:2px;display:flex}.contact-lines{flex-direction:column;gap:1px;display:flex}.contact-lines.compact{flex-flow:wrap;gap:2px 12px}.contact-link{color:var(--text-2);align-items:center;gap:5px;font-size:13px;text-decoration:none;display:inline-flex}.contact-link:hover{color:var(--ivy);text-decoration:underline}.follow-up{border-radius:var(--radius-lg);background:var(--warn-50);border:1px solid #f1dcb3;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.follow-up-title{color:var(--warn);align-items:center;gap:8px;font-weight:700;display:flex}.follow-up-contacts{flex-wrap:wrap;gap:12px 32px;display:flex}.sign-in{background:var(--surface);grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:100vh;display:grid}.sign-in-art{background:var(--navy);color:#fff;flex-direction:column;justify-content:space-between;padding:40px;display:flex;position:relative;overflow:hidden}.sign-in-art .harbour-logo-name{font-size:24px}.sign-in-quote{letter-spacing:-.02em;max-width:440px;font-size:30px;font-weight:800;line-height:1.25;position:relative}.sign-in-panel{place-items:center;padding-block:40px;padding-inline:24px;display:grid}.sign-in-form{flex-direction:column;gap:16px;width:min(380px,100%);display:flex}.link-button{font:inherit;color:var(--navy);cursor:pointer;background:0 0;border:0;align-self:flex-start;padding:2px 0;font-size:14px;font-weight:600}.link-button:hover{text-decoration:underline}.sign-in-links{flex-wrap:wrap;justify-content:space-between;gap:12px;display:flex}.remember-me{color:var(--text);cursor:pointer;align-items:flex-start;gap:10px;font-size:14px;font-weight:600;display:flex}.remember-me input{width:18px;height:18px;accent-color:var(--navy);flex:none;margin:1px 0 0}.remember-me small{color:var(--text-3);margin-top:2px;font-size:13px;font-weight:400;display:block}.sign-in-status{margin:8px 0 4px}.code-input{letter-spacing:8px;text-align:center;font-size:26px;font-weight:700}.sign-in-form .btn{width:100%;height:42px}.fine-print{color:var(--text-3);font-size:13px}.settings-layout{grid-template-columns:210px minmax(0,1fr);align-items:start;gap:28px;display:grid}.settings-nav{flex-direction:column;gap:2px;display:flex;position:sticky;top:28px}.settings-nav a{border-radius:var(--radius-sm);color:var(--text-2);align-items:center;gap:10px;padding:7px 10px;font-weight:550;text-decoration:none;display:flex}.settings-nav a svg{color:var(--text-3);flex:none}.settings-nav a:hover{background:var(--surface-3);color:var(--text)}.unsaved-dot{background:var(--brass);border-radius:50%;flex:none;width:7px;height:7px;margin-left:auto}.setting-section{scroll-margin-top:24px;overflow:hidden}.setting-section-head{flex-direction:column;gap:6px;padding:18px 20px 16px;display:flex}.setting-row{border-top:1px solid var(--border);grid-template-columns:minmax(0,1fr) 190px;align-items:start;gap:8px 32px;padding:14px 20px;transition:background .12s;display:grid}.setting-row.unsaved,.jump-table.unsaved{background:var(--brass-50);box-shadow:inset 3px 0 0 var(--brass)}.setting-text{flex-direction:column;gap:2px;padding-top:8px;display:flex}.setting-label{font-weight:600}.setting-help{color:var(--text-2);max-width:60ch;font-size:13px}.setting-control{flex-direction:column;gap:5px;display:flex}.unit-input{border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);align-items:center;height:38px;transition:border-color .12s,box-shadow .12s;display:flex}.unit-input:focus-within{border-color:var(--ivy);box-shadow:0 0 0 3px var(--ivy-100)}.unit-input.invalid{border-color:var(--danger)}.unit-input.invalid:focus-within{box-shadow:0 0 0 3px var(--danger-50)}.unit-input input{background:0 0;border:0;outline:none;flex:1;width:0;min-width:0;height:100%;padding:0 0 0 12px;font-weight:600}.unit-input span{color:var(--text-3);padding-right:12px;font-size:13px}.setting-select{border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);width:100%;height:38px;padding:0 10px;font-weight:600}.setting-select:focus{border-color:var(--ivy);box-shadow:0 0 0 3px var(--ivy-100);outline:none}.setting-default{color:var(--text-3);font-size:12px}.field.missing>label,.missing>legend{color:var(--danger)}.field.missing input,.field.missing select,.field.missing textarea,.missing .switch,.weekday-picker.missing label{border-color:var(--danger)!important;background:var(--danger-50)!important}.field.missing input:focus,.field.missing select:focus,.field.missing textarea:focus{box-shadow:0 0 0 3px #f6c6c3}.input.input-missing,.field.missing>input{border-color:var(--danger)!important;background:var(--danger-50)!important}.field.missing>span{color:var(--danger)}.field-missing{color:var(--danger);font-size:12.5px;font-weight:650}.field-error{color:var(--danger);font-size:12px}.link-btn{color:var(--ivy);font:inherit;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;font-size:12px;font-weight:600;text-decoration:underline}.jump-table{border-top:1px solid var(--border);flex-direction:column;gap:12px;padding:16px 20px 18px;display:flex}.jump-table-head{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.jump-table-head h3{margin-bottom:2px;font-size:14px;font-weight:600}.jump-table .table{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}.jump-table .table td{vertical-align:middle}.jump-direction{color:var(--text-2);align-items:center;gap:4px;display:inline-flex}.jump-cell{width:170px}.save-bar{border-radius:var(--radius-lg);background:var(--navy);color:#fff;box-shadow:var(--shadow-lg);justify-content:space-between;align-items:center;gap:16px;padding:12px 14px 12px 18px;animation:.16s ease-out rise;display:flex;position:sticky;bottom:16px}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}.save-bar-text{flex-direction:column;gap:3px;display:flex}.save-bar-problem{color:#ffcfca;align-items:center;gap:6px;font-size:13px;display:flex}.btn-on-dark{color:#fff;background:0 0;border-color:#ffffff59}.btn-on-dark:hover:not(:disabled){background:#ffffff1a}.field.subjects-field{border:0;flex-flow:wrap;align-items:center;gap:6px 10px;margin:0;padding:0;display:flex}.subjects-field legend{width:100%;color:var(--text-2);margin-bottom:6px;padding:0;font-size:13px;font-weight:600}.subjects-field .switch{border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--surface);flex:1 1 0;align-items:center;min-width:0;height:38px;padding:0 12px;font-weight:650;transition:border-color .12s,background .12s}.subjects-field .switch:has(input:checked){border-color:var(--ivy);background:var(--ivy-50)}.field .subjects-field input[type=checkbox],.subjects-field .switch input{flex:none;width:18px;height:18px;margin:0;padding:0}.subjects-field .hint{width:100%}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.dropzone{border:2px dashed var(--border-strong);border-radius:var(--radius-lg);background:var(--surface-2);color:var(--text-2);text-align:center;cursor:pointer;flex-direction:column;align-items:center;gap:8px;padding:32px 20px;transition:border-color .12s,background .12s;display:flex}.dropzone svg{color:var(--text-3)}.dropzone:hover,.dropzone.dragging{border-color:var(--ivy);background:var(--ivy-50)}.dropzone:has(+input:focus-visible){border-color:var(--ivy);background:var(--ivy-50)}.import-result{flex-direction:column;gap:16px;display:flex}.import-file{align-items:flex-start;gap:12px;display:flex}.import-file svg{color:var(--text-3);flex:none;margin-top:2px}.import-verdict{border-radius:var(--radius);border:1px solid;align-items:flex-start;gap:12px;padding:14px 16px;display:flex}.import-verdict>div{flex:1}.import-verdict svg{flex:none;margin-top:2px}.import-verdict.good{background:var(--good-50);border-color:var(--good-100);color:var(--good-600)}.import-verdict.bad{background:var(--danger-50);color:var(--danger);border-color:#f3cbc8}.problem-list h3{align-items:center;gap:8px;margin-bottom:8px;font-size:14px;display:flex}.problem-list ul{border:1px solid var(--border);border-radius:var(--radius);max-height:420px;margin:0;padding:0;list-style:none;overflow-y:auto}.problem-list li{border-top:1px solid var(--border);grid-template-columns:minmax(150px,190px) minmax(0,1fr);gap:12px;padding:9px 12px;font-size:13.5px;display:grid}.problem-list li:first-child{border-top:0}.problem-where{color:var(--text-2);overflow-wrap:anywhere;font-weight:600}.problem-list.tone-error .problem-where{color:var(--danger)}.problem-list+.link-btn,.problem-list .link-btn{margin-top:8px}.tabs{border-bottom:1px solid var(--border);gap:4px;display:flex}.tabs a{color:var(--text-2);border-bottom:2px solid #0000;align-items:center;gap:8px;margin-bottom:-1px;padding:9px 12px;font-weight:600;text-decoration:none;display:inline-flex}.tabs a:hover{color:var(--text)}.tabs a.active{color:var(--ivy);border-bottom-color:var(--ivy)}.tabs .nav-count{margin-left:0}.segmented-count{color:var(--text-3);font-variant-numeric:tabular-nums;margin-left:4px}.lessons-callout{padding:12px 12px 0}.lessons-table .group-row th{background:var(--surface-2);color:var(--text-2);letter-spacing:.04em;text-transform:uppercase;font-size:12px;font-weight:700}.lessons-table .count{font-variant-numeric:tabular-nums;width:56px}.lessons-table .count.low{color:var(--warn);background:var(--warn-50);font-weight:700}.q-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);flex-direction:column;gap:12px;padding:18px 20px;display:flex}.q-card.flagged{box-shadow:inset 3px 0 0 var(--brass);border-color:#f1dcb3}.q-card.retired{opacity:.6}.q-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.q-code{font-family:var(--font-mono);color:var(--text-3);font-size:12.5px}.q-prompt{font-size:17px;line-height:1.6}.q-math .katex{font-size:1.08em}.q-card li,.q-card .q-answer,.q-card .q-explanation{line-height:1.9}.q-blank{border-bottom:2px solid var(--text);vertical-align:baseline;width:64px;margin:0 4px;display:inline-block}.q-picture{border:1px solid var(--border);border-radius:var(--radius);background:#fff;max-width:min(100%,520px)}.q-pictures{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;display:grid}.q-pictures figure,.q-tap{flex-direction:column;gap:4px;margin:0;display:flex}.q-pictures .q-picture{width:100%}.q-tap-picture{width:min(100%,520px);position:relative}.q-tap-picture .q-picture{width:100%;max-width:none;display:block}.q-place{border:2px dashed #101b4566;border-radius:10px;position:absolute}.q-place.right{border:3px solid var(--good);background:#0e7d4a1f}.q-place-id{color:var(--text-2);border:1px solid var(--border);background:#fff;border-radius:999px;padding:0 5px;font-size:10.5px;font-weight:700;line-height:16px;position:absolute;top:-9px;left:-9px}.q-board{color:var(--text-2);font-size:13px;font-weight:600}.q-read-aloud{color:var(--text-2);align-items:center;gap:6px;font-size:13px;display:flex}.q-choices{gap:8px;margin:0;padding:0;list-style:none;display:grid}.q-choices li{border:1px solid var(--border);border-radius:var(--radius);align-items:center;gap:12px;padding:10px 12px;font-size:15px;display:flex}.q-choices li.correct{border-color:var(--good-100);background:var(--good-50)}.q-letter{background:var(--surface-3);width:26px;height:26px;color:var(--text-2);border-radius:50%;flex:none;place-items:center;font-size:12.5px;font-weight:700;display:grid}.q-choices li.correct .q-letter{background:var(--good);color:#fff}.q-correct{color:var(--good-600);align-items:center;gap:4px;margin-left:auto;font-size:12.5px;font-weight:700;display:inline-flex}.q-answer,.q-explanation,.q-steps{flex-direction:column;gap:4px;display:flex}.q-section-label{letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);font-size:11.5px;font-weight:700}.q-steps ol{flex-direction:column;gap:6px;margin:4px 0 0;padding-left:22px;display:flex}.q-step-label{color:var(--ivy-600);margin-right:6px}.q-step-label:after{content:":"}.q-passage summary{cursor:pointer;color:var(--ivy);font-weight:600}.q-passage>span{background:var(--surface-2);border-radius:var(--radius);white-space:pre-line;margin-top:8px;padding:12px 14px;display:block}.q-actions{border-top:1px solid var(--border);flex-wrap:wrap;gap:8px;padding-top:12px;display:flex}.flagged-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.flag-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.flag-list li{border-radius:var(--radius);background:var(--warn-50);border:1px solid #f1dcb3;flex-direction:column;gap:2px;padding:10px 12px;display:flex}.flag-note{font-style:italic}.flagged-item .q-card{border-style:dashed}.drawer.wide{width:min(980px,100vw)}.fix-layout{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:20px;display:grid}.fix-preview{flex-direction:column;gap:8px;display:flex;position:sticky;top:0}.choices-field{border:0;flex-direction:column;gap:8px;margin:0;padding:0;display:flex}.choices-field legend{color:var(--text-2);margin-bottom:6px;font-size:13px;font-weight:600}.choice-row{align-items:center;gap:8px;display:flex}.choice-row input[type=radio]{accent-color:var(--ivy);width:18px;height:18px}.choices-field .btn{align-self:flex-start}.fix-problems{border-radius:var(--radius);background:var(--warn-50);color:var(--warn);border:1px solid #f1dcb3;padding:10px 12px;font-size:13px}.fix-problems ul{margin:4px 0 0;padding-left:18px}@media (width<=960px){.grid-2,.settings-layout{grid-template-columns:minmax(0,1fr)}.settings-nav{display:none}}@media (width<=600px){.setting-row{grid-template-columns:1fr}.setting-text{padding-top:0}.save-bar{flex-direction:column;align-items:stretch}.fix-layout{grid-template-columns:minmax(0,1fr)}.problem-list li{grid-template-columns:1fr;gap:2px}.jump-table-head{flex-direction:column;gap:8px}.jump-next{display:none}.jump-table .table th,.jump-table .table td{padding-inline:10px}.jump-cell{width:120px}}@media (width<=640px){.page-header{border-radius:20px;padding:20px 20px 22px}.page-header .form-actions,.form-actions,.week-nav{flex-wrap:wrap}.cal-toolbar{align-items:stretch}.cal-toolbar .input{flex:140px;width:auto!important}.cal{min-width:640px}.table.phone-cards,.table.phone-cards tbody{display:block}.table.phone-cards thead{display:none}.table.phone-cards tbody tr{border-bottom:1px solid var(--border);grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 14px;padding:14px 16px;display:grid}.table.phone-cards tbody tr:last-child{border-bottom:0}.table.phone-cards td{border:0;min-width:0;padding:0;display:block}.table.phone-cards td:first-child{grid-column:1/-1}.table.phone-cards td[data-label]:before{content:attr(data-label);letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin-bottom:2px;font-size:11px;font-weight:700;display:block}.table.phone-cards .num{text-align:left}.table.phone-cards .row-go{display:none}}.topbar,.menu-backdrop{display:none}@media (width<=820px){.shell{background:var(--canvas);grid-template-rows:auto 1fr;grid-template-columns:1fr}.topbar{z-index:30;padding:10px 12px 10px 16px;padding-top:max(10px, env(safe-area-inset-top));background:var(--navy);color:#fff;justify-content:space-between;align-items:center;gap:12px;display:flex;position:sticky;top:0}.topbar .harbour-logo-name{font-size:17px}.topbar-menu{color:#fff;width:42px;height:42px}.topbar-menu:hover{color:#fff;background:#ffffff1f}.sidebar{z-index:50;width:min(290px,84vw);height:100dvh;padding-bottom:max(16px, env(safe-area-inset-bottom));visibility:hidden;transition:transform .22s,visibility 0s linear .22s;position:fixed;inset:0 auto 0 0;overflow-y:auto;transform:translate(-100%)}.menu-open .sidebar{visibility:visible;box-shadow:var(--shadow-lg);transition:transform .22s;transform:none}.menu-backdrop{z-index:40;background:#0c143473;display:block;position:fixed;inset:0}.nav-link{height:46px}.content{padding-block:16px 48px;padding-inline:16px}.sign-in{grid-template-rows:auto 1fr;grid-template-columns:1fr}.sign-in-art{padding:22px 20px;padding-top:max(22px, env(safe-area-inset-top))}.sign-in-quote{display:none}.sign-in-panel{align-items:flex-start}}.chart{margin:12px 0 16px}.chart figcaption{margin-top:4px}.placement-line{justify-content:space-between;align-items:center;gap:12px;margin-top:10px;display:flex}.points-history{gap:6px;margin:12px 0 0;padding:0;list-style:none;display:grid}.points-history li{align-items:baseline;gap:10px;display:flex}.points-earned,.points-spent{font-variant-numeric:tabular-nums;min-width:42px;font-weight:700}.points-earned{color:var(--brass)}.points-spent{color:var(--danger)}.saved-reports{gap:8px;margin:0;padding:0;list-style:none;display:grid}.saved-reports li{flex-direction:column;gap:2px;display:flex}.saved-reports a{color:var(--ivy);font-weight:600}.page-wide{max-width:1320px}.report-builder{grid-template-columns:minmax(0,1fr) 340px;align-items:start;gap:20px;display:grid}.report-preview{flex-direction:column;gap:12px;min-width:0;display:flex}.report-fit{width:100%;max-width:8.5in}.report-side{flex-direction:column;gap:16px;display:flex}.report-side .segmented{grid-template-columns:1fr 1fr;display:grid}.report-side .segmented button{white-space:nowrap}.side-title{align-items:center;gap:8px;font-size:15px;font-weight:650;display:flex}.date-range{grid-template-columns:1fr 1fr;gap:10px;display:grid}.switch-group{flex-direction:column;gap:8px;display:flex}.switch-group-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-3);font-size:12px;font-weight:650}.switch-row{cursor:pointer;align-items:center;gap:10px;display:flex}.switch-row input{width:18px;height:18px;accent-color:var(--ivy)}.tutor-comments{gap:12px;margin:0;padding:0;list-style:none;display:grid}.tutor-comments li{border-bottom:1px solid var(--border);flex-direction:column;gap:3px;padding-bottom:12px;display:flex}.tutor-comments li:last-child{border-bottom:0;padding-bottom:0}.report-paper{--r-navy:#172a6e;--r-ink:#101b45;--r-ink2:#465173;--r-ink3:#7c86a2;--r-canvas:#faf9f6;--r-line:#e8ebf1;--r-gold:#ffc21a;--r-gold-deep:#9a6b00;--r-gold-soft:#fff3d1;--r-math:#9c6a1e;--r-math-soft:#f6edda;--r-math-line:#e6d2a8;--r-math-ink:#7a5214;--r-english:#8e2a45;--r-english-soft:#f5e8eb;--r-english-line:#e2c1cb;--r-english-ink:#6e1d33;--orange:#e8702a;--amber:#ffc21a;--green:#0e7d4a;--building:#c0561b;--developing:#9a6b00;--confident:#0e7d4a;background:var(--r-canvas);width:8.5in;height:11in;color:var(--r-ink);box-shadow:var(--shadow-lg);border-radius:4px;flex-shrink:0;font-size:11.5px;line-height:1.45;overflow:hidden}.report-page{box-sizing:border-box;flex-direction:column;gap:12px;min-height:100%;padding:0 .45in .35in;display:flex}.report-masthead{background:var(--r-navy);color:#fff;border-radius:0 0 28px 28px;flex-direction:column;gap:14px;margin:0 -.45in;padding:18px .45in 22px;display:flex}.report-masthead-top{justify-content:space-between;align-items:center;display:flex}.harbour-logo{align-items:center;gap:10px;display:inline-flex}.harbour-logo.animated svg{overflow:visible}.harbour-logo.animated .harbour-logo-beam,.harbour-logo.animated .harbour-logo-glow{transform-box:fill-box;transform-origin:50%}.harbour-logo.animated .harbour-logo-beam{animation:4.4s ease-in-out infinite harbour-sweep}.harbour-logo.animated .harbour-logo-glow{animation:2.2s ease-in-out infinite harbour-glow}.harbour-logo.animated .harbour-logo-waves{animation:3.2s ease-in-out infinite harbour-bob}@keyframes harbour-sweep{0%,to{opacity:.7;transform:rotate(-28deg)}50%{opacity:1;transform:rotate(28deg)}}@keyframes harbour-glow{0%,to{opacity:.35;transform:scale(.8)}50%{opacity:.95;transform:scale(1.3)}}@keyframes harbour-bob{0%,to{transform:translate(-3px)}50%{transform:translate(3px,1.5px)}}.harbour-logo-name{letter-spacing:-.02em;color:#fff;font-size:20px;font-weight:900}.harbour-logo-name span{color:var(--r-gold,#ffc21a)}.report-period{flex-direction:column;align-items:flex-end;display:flex}.report-period span{letter-spacing:.14em;text-transform:uppercase;color:var(--r-gold);font-size:9.5px;font-weight:800}.report-period b{color:#fff;font-size:13px;font-weight:800}.report-student{align-items:baseline;gap:12px;display:flex}.report-student h1{letter-spacing:-.02em;color:#fff;font-size:30px;font-weight:900;line-height:1.1}.report-student p{color:#ffffffbf;font-size:13px;font-weight:600}.report-paper h2{letter-spacing:.12em;text-transform:uppercase;color:var(--r-ink3);font-size:10px;font-weight:800}.report-paper h3{color:var(--r-ink);margin:2px 0 4px;font-size:11px;font-weight:800}.report-comments{border:1px solid var(--r-line);background:#fff;border-radius:16px;flex-direction:column;gap:6px;padding:12px 16px;display:flex}.report-comments h2{color:var(--r-navy)}.report-commentary{white-space:pre-wrap;font-size:12.5px;line-height:1.55}.report-signature{color:var(--r-ink2);align-self:flex-end;font-weight:700}.report-columns{grid-template-columns:1fr 1fr;align-items:start;gap:12px;display:grid}.report-columns.single{grid-template-columns:1fr}.report-column{flex-direction:column;gap:12px;display:flex}.report-subject,.report-box{border:1px solid var(--r-line);background:#fff;border-radius:16px}.report-subject{flex-direction:column;gap:8px;padding:0 14px 12px;display:flex}.report-subject-head{border-top:5px solid var(--r-math);border-bottom:1px solid var(--r-math-line);background:var(--r-math-soft);border-radius:15px 15px 0 0;justify-content:space-between;align-items:center;margin:0 -14px;padding:8px 14px 9px;display:flex}.report-subject.english .report-subject-head{border-top-color:var(--r-english);border-bottom-color:var(--r-english-line);background:var(--r-english-soft)}.report-subject-head h2{letter-spacing:-.01em;text-transform:none;color:var(--r-math-ink);font-size:17px;font-weight:900}.report-subject.english .report-subject-head h2{color:var(--r-english-ink)}.report-subject-head .report-zone{border:1px solid var(--r-line)}.report-zone{background:#fff;border-radius:999px;padding:2px 9px;font-size:11px;font-weight:800}.report-zone.building{color:var(--building)}.report-zone.developing{color:var(--developing)}.report-zone.confident{color:var(--confident)}.report-overall{flex-direction:column;gap:2px;display:flex}.report-count{color:var(--r-ink3);font-weight:500}.report-line{color:var(--r-ink)}.report-note,.report-empty{color:var(--r-ink3);font-size:10.5px}.report-lessons{gap:6px;margin:0;padding:0;list-style:none;display:grid}.report-lessons li{gap:1px;display:grid}.report-lesson-title{align-items:center;gap:6px;font-weight:700;display:flex}.report-pill{text-transform:uppercase;letter-spacing:.06em;color:var(--r-navy);background:#e8edfb;border-radius:999px;padding:1px 7px;font-size:9px;font-weight:800}.report-scale{grid-template-columns:1fr 36px;align-items:center;gap:12px;padding-left:4px;display:grid}.report-scale.large{grid-template-columns:1fr;gap:2px}.report-scale-track{background:linear-gradient(90deg, var(--orange), var(--amber) 55%, var(--green));border-radius:999px;height:8px;position:relative}.report-scale.large .report-scale-track{height:12px}.report-scale-tick{background:#fff;width:2px;margin-left:-1px;position:absolute;top:-2px;bottom:-2px}.report-scale-marker{border:3px solid var(--r-navy);background:#fff;border-radius:50%;width:14px;height:14px;margin:-7px 0 0 -7px;position:absolute;top:50%}.report-scale.large .report-scale-marker{width:18px;height:18px;margin:-9px 0 0 -9px}.report-scale-value{text-align:right;font-variant-numeric:tabular-nums;font-weight:800}.report-scale-value.building{color:var(--building)}.report-scale-value.developing{color:var(--developing)}.report-scale-value.confident{color:var(--confident)}.report-scale-labels{color:var(--r-ink3);font-size:9.5px;font-weight:700;display:flex}.report-scale-labels span{text-align:center}.report-ratings{border-collapse:collapse}.report-ratings th{text-align:left;padding:1px 10px 1px 0;font-weight:700}.report-ratings td{padding:1px 8px 1px 0}.report-average{font-variant-numeric:tabular-nums;font-weight:800}.report-change{color:var(--r-ink3);font-size:10.5px}.report-dots{gap:3px;display:inline-flex}.report-dots i{border:1.5px solid var(--r-navy);border-radius:50%;width:9px;height:9px}.report-dots i.on{background:var(--r-navy)}.report-dots i.half{position:relative;overflow:hidden}.report-dots i.half:before{content:"";background:var(--r-navy);width:50%;position:absolute;top:0;bottom:0;left:0}.report-box{flex-direction:column;gap:6px;padding:10px 14px;display:flex}.report-box .chart{margin:0}.report-paper .calendar{gap:6px}.report-paper .calendar-months{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px;display:grid}.report-paper .calendar-month-block{flex-direction:column;gap:3px;display:flex}.report-paper .calendar-month{color:var(--r-ink);font-size:10.5px}.report-paper .calendar-grid{gap:2px}.report-paper .calendar-weekday{color:var(--r-ink3);padding:0;font-size:8px}.report-paper .calendar-day{aspect-ratio:auto;background:var(--r-canvas);border-color:var(--r-line);min-height:20px;color:var(--r-ink2);border-radius:6px;padding:0 3px;font-size:8px}.report-paper .calendar-day.blank{background:0 0;border-color:#0000}.report-paper .calendar-day.math{background:var(--r-math-soft);border-color:var(--r-math-line);color:var(--r-math)}.report-paper .calendar-day.english{background:var(--r-english-soft);border-color:var(--r-english-line);color:var(--r-english)}.report-paper .calendar-day.both,.report-paper .swatch.both{background:var(--r-math-soft);border-color:var(--r-math-line);color:var(--r-ink);position:relative;overflow:hidden}.report-paper .calendar-day.both:before,.report-paper .swatch.both:before{content:"";background:var(--r-english-soft);width:50%;position:absolute;top:0;bottom:0;right:0}.report-paper .calendar-day.both>*{position:relative}.report-paper .swatch{width:11px;height:11px}.report-paper .swatch.math{background:var(--r-math-soft);border:1px solid var(--r-math-line)}.report-paper .swatch.english{background:var(--r-english-soft);border:1px solid var(--r-english-line)}.report-paper .swatch.both{border:1px solid var(--r-math-line)}.report-paper .calendar-tag{font-weight:800;display:none}.report-paper .calendar-day.outside{opacity:.35}.report-box.wide .calendar-months{grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px}.report-box.wide .calendar-grid{gap:3px}.report-box.wide .calendar-weekday{font-size:9.5px}.report-box.wide .calendar-day{min-height:30px;padding:2px 5px;font-size:10px}.report-box.wide .calendar-tag{font-size:8.5px;display:block}.report-paper .calendar-legend{color:var(--r-ink2);gap:10px;font-size:9.5px}.report-key{border-top:1px solid var(--r-line);color:var(--r-ink2);flex-direction:column;gap:3px;margin-top:auto;padding-top:8px;font-size:9.5px;display:flex}.report-key h2{color:var(--r-ink)}.key-zone{margin-left:6px;font-weight:800}.key-zone:before{content:"";vertical-align:-1px;border-radius:2px;width:9px;height:9px;margin-right:3px;display:inline-block}.key-zone.building:before{background:var(--orange)}.key-zone.developing:before{background:var(--amber)}.key-zone.confident:before{background:var(--green)}@media (width<=1260px){.report-builder{grid-template-columns:minmax(0,1fr)}.report-side{order:-1}}@media print{@page{size:letter;margin:0}html,body,.shell,.content{background:#fff!important;margin:0!important;padding:0!important;display:block!important}.sidebar,.page-header,.report-side,.toasts,.callout{display:none!important}.page,.page-wide,.report-preview{max-width:none;display:block;overflow:visible}.report-paper{box-shadow:none;border-radius:0}.report-zoom{zoom:1!important}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.grade-scale{border-radius:var(--radius-sm);background:var(--surface);border:1px solid var(--border);flex-direction:column;gap:5px;padding:10px 12px;display:flex}.grade-scale-head{flex-wrap:wrap;justify-content:space-between;gap:10px;font-size:13px;display:flex}.grade-compare{color:var(--text-2);font-size:12px;font-weight:650}.grade-compare.below{color:var(--warn)}.grade-compare.above{color:var(--good)}.grade-scale-track{background:linear-gradient(90deg, var(--ivy-100) 0 33.3%, var(--ivy-50) 33.3% 66.6%, var(--ivy-100) 66.6%);border-radius:999px;height:8px;margin:4px 0;position:relative}.grade-scale-marker{background:var(--ivy);border:3px solid var(--surface);width:16px;height:16px;box-shadow:0 0 0 1px var(--ivy);border-radius:50%;margin:-8px 0 0 -8px;position:absolute;top:50%}.grade-scale-labels{color:var(--text-3);justify-content:space-between;font-size:11px;font-weight:650;display:flex}.changes-list{gap:10px;margin:0;padding:0;list-style:none;display:grid}.changes-list li{flex-direction:column;gap:2px;display:flex}.tabs a.disabled{color:var(--text-3);cursor:not-allowed}.cal-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.week-nav{align-items:center;gap:8px;display:flex}.week-label{margin-left:4px;font-size:16px;font-weight:650}.cal-legend{flex-wrap:wrap;align-items:center;gap:4px 16px;display:flex}.cal-legend span{align-items:center;gap:6px;display:inline-flex}.cal-scroll{overflow-x:auto}.cal{border:1px solid var(--border);border-radius:var(--radius);-webkit-user-select:none;user-select:none;grid-template-rows:44px auto;grid-template-columns:56px repeat(7,minmax(0,1fr));display:grid;overflow:hidden}.cal-corner,.cal-day-head{background:var(--surface-2);border-bottom:1px solid var(--border)}.cal-day-head{border-left:1px solid var(--border);color:var(--text-3);flex-direction:column;justify-content:center;align-items:center;font-size:12px;line-height:1.2;display:flex}.cal-day-head b{color:var(--text);font-size:16px}.cal-day-head.today b{background:var(--ivy);color:#fff;border-radius:999px;padding:0 7px}.cal-times{grid-template-rows:repeat(var(--rows), var(--row));color:var(--text-3);text-align:right;background:var(--surface-2);padding-right:6px;font-size:11px;display:grid}.cal-times span{transform:translateY(-6px)}.cal-day{border-left:1px solid var(--border);height:calc(var(--rows) * var(--row));cursor:cell;touch-action:none;background-image:repeating-linear-gradient(to bottom, var(--border) 0, var(--border) 1px, transparent 1px, transparent var(--row), #f1efea var(--row), #f1efea calc(var(--row) + 1px), transparent calc(var(--row) + 1px), transparent calc(var(--row) * 2));position:relative}.cal-day:hover{background-color:#fbfaf7}.cal-day.today{background-color:#f7fbf8}.cal-selection{border:2px solid var(--ivy);color:var(--ivy);pointer-events:none;background:#2e533929;border-radius:6px;padding:2px 6px;font-size:11.5px;font-weight:700;position:absolute;left:2px;right:2px}.cal-now{background:var(--danger);pointer-events:none;height:2px;position:absolute;left:0;right:0}.cal-now:before{content:"";background:var(--danger);border-radius:50%;width:8px;height:8px;position:absolute;top:-3px;left:-4px}.scope-choice{flex-direction:column;gap:6px;font-size:14px;display:flex}.scope-choice label{align-items:center;gap:8px;display:flex}.shift-block{font:inherit;text-align:left;cursor:pointer;border:1px solid;border-left-width:4px;border-radius:6px;flex-direction:column;align-items:flex-start;gap:1px;padding:4px 6px;font-size:11.5px;line-height:1.25;display:flex;position:absolute;overflow:hidden}.shift-block:hover{filter:brightness(.97)}.shift-block b{font-size:12.5px}.shift-block.off{opacity:.8;background-image:repeating-linear-gradient(135deg,#ffffffbf 0 6px,#0000 6px 12px)}.shift-block.off b{text-decoration:line-through}.shift-tag{font-size:10.5px;font-weight:700}.shift-color-0{color:#1f3b28;background:#e6efe8;border-color:#2e5339}.shift-color-1{color:#6b4f1f;background:#f6ecda;border-color:#b08a4e}.shift-color-2{color:#23446e;background:#e3ecf7;border-color:#3f6fa8}.shift-color-3{color:#6d2533;background:#f5e3e6;border-color:#a8475a}.shift-color-4{color:#3f2f6d;background:#ece6f5;border-color:#6a55a3}.shift-color-5{color:#1c5454;background:#e1f1f1;border-color:#2f8585}.shift-color-6{color:#7a3f13;background:#f7e9df;border-color:#c06a2c}.shift-color-7{color:#333;background:#ececec;border-color:#6b6b6b}.swatch[class*=shift-color-]{border:2px solid}.weekday-picker{border:0;flex-wrap:wrap;gap:6px;margin:0;padding:0;display:flex}.weekday-picker legend{color:var(--text-2);margin-bottom:6px;font-size:13px;font-weight:600}.weekday-picker label{border:1px solid var(--border-strong);border-radius:var(--radius-sm);cursor:pointer;align-items:center;gap:4px;padding:5px 9px;font-size:13px;display:flex}.cal-day-head{gap:1px}.cal-day-note{font-size:10px;font-weight:700;line-height:1.1}.cal-day-note.ok{color:var(--good)}.cal-day-note.short{color:var(--warn)}.cal{grid-template-rows:54px auto}.cal-mark{pointer-events:none;border-radius:4px;justify-content:center;align-items:center;width:calc(15% - 4px);min-width:16px;font-size:10.5px;font-weight:800;display:flex;position:absolute;right:2px}.cal-mark.ok{background:var(--good-50);color:var(--good)}.cal-mark.short{color:#9a4a0c;background:#fde7d4}.shift-block.slot-open,.shift-block.slot-count,.shift-block.slot-short,.shift-block.slot-free,.shift-block.slot-tight,.shift-block.slot-needs{border-left-width:1px;justify-content:center;padding:2px 6px}.shift-block.slot-count{background:var(--surface-2);border-color:var(--border-strong);color:var(--text-2)}.shift-block.slot-open{color:var(--text-3);background:0 0;border-style:dashed}.shift-block.slot-short,.shift-block.slot-needs{color:#7a3a09;background:#fde7d4;border-color:#e2793a}.shift-block.slot-free{color:#1f5c33;background:#e3f3e7;border-color:#3f9a5c}.shift-block.slot-tight{color:#6b4f0e;background:#fbf0d6;border-color:#d6a43a}.shift-block[class*=slot-] b{font-size:11px}.find-bar{border-radius:var(--radius);background:#e3f3e7;border:1px solid #b9dfc4;justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;display:flex}.tutor-choice{border:0;flex-direction:column;gap:8px;margin:0;padding:0;display:flex}.tutor-choice legend{color:var(--text-2);margin-bottom:4px;font-size:13px;font-weight:600}.tutor-choice label{border:1px solid var(--border-strong);border-radius:var(--radius-sm);cursor:pointer;align-items:flex-start;gap:10px;padding:9px 11px;display:flex}.tutor-choice label:has(input:checked){border-color:var(--ivy);background:var(--ivy-50)}.tutor-choice label.warn .hint{color:var(--warn)}.tutor-choice .badge{margin-left:6px}.slot-list{gap:6px;margin:0;padding:0;list-style:none;display:grid}.slot-list button{text-align:left;width:100%;font:inherit;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;padding:10px 12px}.slot-list button:hover{border-color:var(--border-strong);background:var(--surface-2)}.warn-text{color:var(--warn);font-weight:600}.board{border:1px solid var(--border);border-radius:var(--radius);display:grid;overflow-x:auto}.board-row{display:contents}.board-head{z-index:1;background:var(--surface-2);border-bottom:1px solid var(--border);border-left:1px solid var(--border);min-height:52px;font:inherit;text-align:left;flex-direction:column;justify-content:center;gap:2px;padding:8px 10px;font-size:12px;display:flex;position:sticky;top:0}.board-corner{border-left:0}button.board-tutor{cursor:pointer;border-top:0;border-right:0;border-left:1px solid var(--border);border-bottom:3px solid;border-radius:0}.board-tutor b,.board-needs b{font-size:13.5px}.board-needs{background:#fdf3ea}.board-time{color:var(--text-3);text-align:right;border-bottom:1px solid var(--border);background:var(--surface-2);padding:6px 8px 0 0;font-size:11.5px}.board-cell{border-left:1px solid var(--border);border-bottom:1px solid var(--border);flex-wrap:wrap;align-content:flex-start;gap:4px;min-height:42px;padding:5px;display:flex}.board-cell.closed{background:repeating-linear-gradient(135deg,#0000 0 6px,#00000006 6px 12px)}.board-cell.drop{background:var(--ivy-50);outline:2px dashed var(--ivy);outline-offset:-3px}.seat{min-width:56px;min-height:30px;font:inherit;text-align:left;cursor:pointer;border-radius:6px;flex-direction:column;flex:30%;justify-content:center;padding:3px 7px;font-size:12px;line-height:1.2;display:flex}.seat-student{background:var(--surface);border:1px solid var(--border-strong);box-shadow:var(--shadow-xs);cursor:grab}.seat-student span{color:var(--text-3);font-size:11px}.seat-student.absent{opacity:.55;cursor:pointer}.seat-student.absent b{text-decoration:line-through}.seat-student.over{border-color:var(--warn);background:var(--warn-50)}.seat-tag{font-weight:700}.seat-free{border:1px dashed var(--border-strong);color:var(--text-3);background:0 0;align-items:center}.seat-free:hover{border-color:var(--ivy);color:var(--ivy);background:var(--ivy-50)}.board-off{color:var(--text-2);font-size:13px}.btn-link{font:inherit;color:var(--ivy);cursor:pointer;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.cal-day-open{font:inherit;cursor:pointer;color:inherit;background:0 0;border:0;flex-direction:column;align-items:center;padding:0;line-height:1.2;display:flex}.cal-day-open:hover b{color:var(--ivy);text-decoration:underline}.popup{width:min(440px,100vw - 32px)}.quick-book{gap:12px}.quick-student{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);justify-content:space-between;align-items:center;padding:8px 10px;display:flex}.quick-matches{border:1px solid var(--border);border-radius:var(--radius-sm);margin:4px 0 0;padding:0;list-style:none;overflow:hidden}.quick-matches button{text-align:left;width:100%;font:inherit;border:0;border-bottom:1px solid var(--border);background:var(--surface);cursor:pointer;padding:8px 10px}.quick-matches li:last-child button{border-bottom:0}.quick-matches button:hover{background:var(--ivy-50)}.hours-range{align-items:center;gap:8px;display:inline-flex}.hours-range .input{width:120px}.shift-block .slot-fill{opacity:.35;pointer-events:none;position:absolute;top:0;bottom:0;left:0}.shift-block.slot-free .slot-fill{background:#3f9a5c}.shift-block.slot-tight .slot-fill{background:#d6a43a}.shift-block.slot-short .slot-fill{background:#e2793a}.shift-block b{position:relative}.cal-closed{background:repeating-linear-gradient(135deg, var(--surface-3) 0 6px, transparent 6px 12px);pointer-events:none;position:absolute;left:0;right:0}.board-time.focus{background:var(--ivy-50);color:var(--ivy);font-weight:700}
