:root{--brand: #4f46e5;--brand-dark: #4338ca;--accent: #ff9933;--bg: #f5f6fb;--surface: #ffffff;--border: #e6e8f0;--text: #131722;--muted: #6b7280;--green: #059669;--green-bg: #e7f7f0;--amber: #b45309;--amber-chip: #f59e0b;--amber-bg: #fdf3e3;--rose: #e11d48;--rose-bg: #fdeaef;--slate: #64748b;--slate-bg: #eef1f6;--radius: 16px;--dock-h: 62px;--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--font: "Manrope", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--display: "Sora", var(--font)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #0b1020;--surface: #151b2e;--border: #242c46;--text: #e8ecf6;--muted: #8b97b2;--green-bg: rgba(74, 222, 128, .13);--amber-bg: rgba(251, 191, 36, .13);--rose-bg: rgba(251, 113, 133, .13);--slate-bg: rgba(148, 163, 184, .13);--green: #4ade80;--amber: #fbbf24;--amber-chip: #f59e0b;--rose: #fb7185;--slate: #94a3b8}}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;overscroll-behavior-y:none;-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}.shell{min-height:100%;display:flex;flex-direction:column}.topbar{position:sticky;top:0;z-index:20;padding:calc(var(--safe-top) + 14px) 16px 14px;background:linear-gradient(135deg,var(--brand),var(--brand-dark));color:#fff;display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap}.topbar-main{flex:1;min-width:0}.topbar h1{margin:0;font-family:var(--display);font-size:19px;font-weight:700;letter-spacing:-.3px}.topbar p{margin:2px 0 0;font-size:12.5px;opacity:.85}.topbar-actions{display:flex;align-items:center;gap:8px}.avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#fff3;font-weight:700;font-size:14px}.icon-btn{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:#ffffff24}.icon-btn svg{width:18px;height:18px}.content{flex:1;padding:14px 14px calc(var(--dock-h) + var(--safe-bottom) + 18px);display:flex;flex-direction:column;gap:14px}.dock{position:fixed;left:0;right:0;bottom:0;z-index:30;height:calc(var(--dock-h) + var(--safe-bottom));padding-bottom:var(--safe-bottom);display:grid;grid-auto-flow:column;grid-auto-columns:1fr;background:var(--surface);border-top:1px solid var(--border)}.dock-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--muted);font-size:10.5px;font-weight:600;min-height:44px;transition:color .15s ease}.dock-item.is-active{color:var(--brand)}.dock-item.is-pending{opacity:.55}.dock-item:active .dock-icon{transform:scale(.9)}.dock-icon{position:relative;display:grid;place-items:center;transition:transform .12s ease}.dock-icon svg{width:22px;height:22px}.dock-item.is-active .dock-icon:after{content:"";position:absolute;top:-7px;right:-11px;bottom:-7px;left:-11px;border-radius:11px;background:color-mix(in srgb,var(--brand) 13%,transparent);z-index:-1}.dock-badge{position:absolute;top:-5px;right:-9px;min-width:16px;height:16px;padding:0 4px;border-radius:99px;background:var(--rose);color:#fff;font-size:9.5px;font-weight:700;display:grid;place-items:center}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 15px;border-bottom:1px solid var(--border)}.card-head h2{margin:0;font-family:var(--display);font-size:14.5px;font-weight:700}.card-body{padding:4px 15px 10px}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.stat{border-radius:var(--radius);padding:13px 14px;border:1px solid transparent}.stat-value{font-family:var(--display);font-size:22px;font-weight:800;letter-spacing:-.5px}.stat-label{font-size:12px;font-weight:600;margin-top:1px}.stat-sub{font-size:11px;color:var(--muted);margin-top:2px}.stat-indigo{background:color-mix(in srgb,var(--brand) 10%,var(--surface))}.stat-indigo .stat-value{color:var(--brand)}.stat-green{background:var(--green-bg)}.stat-green .stat-value{color:var(--green)}.stat-amber{background:var(--amber-bg)}.stat-amber .stat-value{color:var(--amber)}.stat-rose{background:var(--rose-bg)}.stat-rose .stat-value{color:var(--rose)}.row{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid var(--border)}.row:last-child{border-bottom:none}.row-link:active{opacity:.6}.row-main{flex:1;min-width:0}.row-title{font-size:14px;font-weight:650}.row-sub{font-size:12px;color:var(--muted);margin-top:1px}.row-right{flex-shrink:0;font-size:13px;font-weight:700}.row-chevron{color:var(--muted);display:grid;place-items:center}.row-chevron svg{width:16px;height:16px}.pill{display:inline-flex;align-items:center;padding:2px 9px;border-radius:99px;font-size:11px;font-weight:700}.pill-green{color:var(--green);background:var(--green-bg)}.pill-amber{color:var(--amber);background:var(--amber-bg)}.pill-rose{color:var(--rose);background:var(--rose-bg)}.pill-slate{color:var(--slate);background:var(--slate-bg)}.empty{color:var(--muted);font-size:13px;padding:14px 0;text-align:center}.chips{display:flex;gap:8px;overflow-x:auto;padding:2px 0;width:100%}.chip{flex:0 0 auto;padding:6px 13px;border-radius:99px;font-size:12.5px;font-weight:650;white-space:nowrap;background:#ffffff29;color:#fff}.chip.is-active{background:#fff;color:var(--brand)}.portal-error{margin:40px auto;max-width:30rem;padding:20px;border-radius:var(--radius);background:var(--rose-bg);color:var(--rose);font-size:14px}@media(prefers-reduced-motion:reduce){*{transition-duration:.01ms!important}}.sect{margin-bottom:2px}.sect-eyebrow{margin:0;font-size:11px;font-weight:800;letter-spacing:.18em;text-transform:uppercase}.sect-title{margin:4px 0 0;font-family:var(--display);font-size:23px;font-weight:800;letter-spacing:-.6px;line-height:1.15}.sect-sub{margin:4px 0 0;font-size:12.5px;font-weight:500;color:var(--muted)}.tone-indigo{color:var(--brand)}.tone-green{color:var(--green)}.tone-amber{color:var(--amber)}.tone-rose{color:var(--rose)}.tone-violet{color:#7c3aed}.stat{border-radius:22px;padding:14px}.stat-chip{display:grid;place-items:center;width:36px;height:36px;border-radius:13px;color:#fff;margin-bottom:12px}.stat-chip svg{width:19px;height:19px}.stat-value{font-size:24px;font-weight:800;letter-spacing:-.7px;line-height:1.1}.stat-label{font-size:10.5px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;margin-top:3px}.stat-indigo .stat-chip{background:var(--brand)}.stat-green .stat-chip{background:var(--green)}.stat-amber .stat-chip{background:var(--amber-chip)}.stat-rose .stat-chip{background:var(--rose)}.stat-violet{background:color-mix(in srgb,#7c3aed 10%,var(--surface))}.stat-violet .stat-chip{background:#7c3aed}.stat-violet .stat-value,.stat-violet .stat-label{color:#7c3aed}.stat-indigo .stat-label{color:var(--brand)}.stat-green .stat-label{color:var(--green)}.stat-amber .stat-label{color:var(--amber)}.stat-rose .stat-label{color:var(--rose)}.menu-list{display:flex;flex-direction:column;gap:11px}.menu-tile{display:flex;align-items:center;gap:14px;padding:15px;border-radius:26px;border:1px solid transparent;transition:transform .12s ease}.menu-tile:active{transform:scale(.985)}.menu-chip{display:grid;place-items:center;width:46px;height:46px;flex:0 0 46px;border-radius:17px;color:#fff}.menu-chip svg{width:23px;height:23px}.menu-text{flex:1;min-width:0;display:flex;flex-direction:column}.menu-label{font-size:15px;font-weight:800;letter-spacing:-.2px}.menu-desc{font-size:12px;font-weight:500;color:var(--muted);margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu-arrow{display:grid;place-items:center}.menu-arrow svg{width:18px;height:18px}.menu-indigo{background:color-mix(in srgb,var(--brand) 10%,var(--surface))}.menu-indigo .menu-chip{background:var(--brand)}.menu-indigo .menu-arrow{color:var(--brand)}.menu-green{background:var(--green-bg)}.menu-green .menu-chip{background:var(--green)}.menu-green .menu-arrow{color:var(--green)}.menu-amber{background:var(--amber-bg)}.menu-amber .menu-chip{background:var(--amber-chip)}.menu-amber .menu-arrow{color:var(--amber)}.menu-rose{background:var(--rose-bg)}.menu-rose .menu-chip{background:var(--rose)}.menu-rose .menu-arrow{color:var(--rose)}.menu-violet{background:color-mix(in srgb,#7c3aed 10%,var(--surface))}.menu-violet .menu-chip{background:#7c3aed}.menu-violet .menu-arrow{color:#7c3aed}.link{font-size:12.5px;font-weight:700;color:var(--brand)}.card{border-radius:22px}.card-head h2{font-size:15px;font-weight:800;letter-spacing:-.2px}.row-title{font-weight:700}.stat-value.is-empty{color:var(--muted);font-weight:600;opacity:.65}.flash-stack{display:flex;flex-direction:column;gap:8px;margin-bottom:14px}.flash{border-radius:14px;padding:11px 14px;font-size:13px;font-weight:600;line-height:1.4}.flash-error{background:var(--rose-bg);color:var(--rose)}.flash-success{background:var(--green-bg);color:var(--green)}.flash-info{background:var(--slate-bg);color:var(--slate)}.school-selector{max-width:100%;border:0;background:transparent;color:var(--text);font:inherit;font-size:11px}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field-label{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.field-error{font-size:12px;font-weight:600;color:var(--rose)}.field-pair{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-width:0}.input{width:100%;box-sizing:border-box;border:1.5px solid var(--border);background:var(--surface);color:var(--text);border-radius:14px;padding:12px 14px;font:inherit;font-size:15px;font-weight:600;-webkit-text-size-adjust:100%;transition:border-color .15s ease,box-shadow .15s ease}.input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px color-mix(in srgb,var(--brand) 18%,transparent)}.input::placeholder{color:var(--muted);font-weight:500}textarea.input{resize:vertical;min-height:96px;line-height:1.45}select.input{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:36px;background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);background-position:right 18px center,right 13px center;background-size:5px 5px,5px 5px;background-repeat:no-repeat}.input-file{padding:10px 12px;font-size:13px;font-weight:600}.input-file::file-selector-button{border:0;border-radius:10px;padding:7px 12px;margin-right:10px;font:inherit;font-weight:700;background:var(--slate-bg);color:var(--text)}.form{display:flex;flex-direction:column;gap:15px;padding:15px}.form-actions{display:flex;gap:10px;margin-top:4px}.form-actions .btn{flex:1;padding-inline:12px}.btn{display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:14px;padding:13px 18px;font:inherit;font-size:15px;font-weight:800;letter-spacing:-.2px;background:var(--brand);color:#fff;cursor:pointer;white-space:nowrap;transition:transform .12s ease,background .15s ease}.btn:active{transform:scale(.985)}.btn-block{width:100%}.btn-ghost{background:var(--slate-bg);color:var(--text)}.ptm-item+.ptm-item{border-top:1px solid var(--border)}.ptm-link{display:inline-block;margin:-2px 14px 10px}.ptm-actions{margin:0;padding:0 14px 12px}.ptm-actions .btn{padding:10px 9px;font-size:12px}.auth{min-height:100dvh;display:grid;place-items:center;padding:calc(24px + var(--safe-top)) 18px calc(24px + var(--safe-bottom));background:var(--bg)}.auth-card{width:100%;max-width:420px;background:var(--surface);border:1px solid var(--border);border-radius:28px;padding:26px 22px;box-shadow:0 18px 44px -28px #0f172a73}.auth-mark{display:grid;place-items:center;width:52px;height:52px;border-radius:18px;margin-bottom:16px;background:linear-gradient(140deg,var(--brand),var(--accent));color:#fff}.auth-mark svg{width:26px;height:26px}.auth-form{display:flex;flex-direction:column;gap:15px;margin-top:20px}.auth-note{margin:16px 0 0;font-size:12px;font-weight:500;line-height:1.5;color:var(--muted)}.boot{min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;padding:24px;background:var(--bg)}.spinner{width:30px;height:30px;border-radius:50%;border:3px solid color-mix(in srgb,var(--brand) 22%,transparent);border-top-color:var(--brand);animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spinner{animation-duration:2s}}.seg{display:grid;grid-auto-flow:column;gap:6px}.seg-item{border:1.5px solid var(--border);background:var(--surface);color:var(--muted);border-radius:14px;padding:10px 6px;font:inherit;font-size:12px;font-weight:800;cursor:pointer;white-space:nowrap;transition:background .12s ease,color .12s ease,border-color .12s ease}.seg-sm .seg-item{padding:7px 4px;font-size:10.5px;border-radius:11px}.seg-item.is-active{background:var(--brand);border-color:var(--brand);color:#fff}.count-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.count-tile{border:1px solid var(--border);background:var(--surface);border-radius:14px;padding:9px 4px;text-align:center}.count-value{font-size:17px;font-weight:800;letter-spacing:-.4px}.count-label{font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);overflow:hidden;text-overflow:ellipsis}.back-link{display:inline-flex;align-items:center;gap:8px;height:42px;padding:0 15px;border-radius:16px;border:1px solid var(--border);background:var(--surface);font-size:12.5px;font-weight:800;margin-bottom:14px}.search-bar{display:flex;align-items:center;gap:9px;background:var(--slate-bg);border-radius:14px;padding:0 13px;margin-bottom:12px}.search-bar input{flex:1;height:42px;border:0;background:transparent;color:var(--text);font:inherit;font-size:14px;font-weight:600;outline:none}.roster{max-height:56dvh;overflow-y:auto}.roster-row{padding:13px 15px;border-bottom:1px solid var(--border)}.roster-row:last-child{border-bottom:0}.roster-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.roster-name{font-weight:800;letter-spacing:-.2px}.roster-sub{font-size:11.5px;font-weight:600;color:var(--muted);margin-top:1px}.roster-row .seg{margin-top:10px}.roster-row .input{margin-top:8px;font-size:13px;padding:9px 12px}.homework-description{margin:12px 0;white-space:pre-wrap;color:var(--muted);line-height:1.5}.scanner{position:relative;border-radius:22px;overflow:hidden;background:#0b1020;aspect-ratio:4 / 3;margin-bottom:14px}.scanner-video{width:100%;height:100%;object-fit:cover;display:block}.scanner-frame{position:absolute;top:18%;right:14%;bottom:18%;left:14%;border:3px solid rgba(255,255,255,.9);border-radius:18px;box-shadow:0 0 0 100vmax #00000047}.scanner-hint,.scanner-error{position:absolute;left:14px;right:14px;bottom:14px;text-align:center;font-size:13px;font-weight:700;color:#fff}.scanner-hint{text-shadow:0 1px 3px rgba(0,0,0,.6)}.scanner-error{text-align:left}:root{--brand-deep: #1e1b4b;--canvas: #f8fafc;--outer-canvas: #0f172a}body{background:var(--outer-canvas)}.shell{width:100%;max-width:28rem;min-height:100dvh;margin:0 auto;overflow:hidden;background:var(--canvas);box-shadow:0 24px 70px #0f172a3d}.topbar{padding:calc(var(--safe-top) + 12px) 16px 13px;align-items:center;background:var(--surface);color:var(--text);border-bottom:1px solid #f1f5f9;box-shadow:0 2px 12px #0f172a0a}.brand-mark{display:grid;place-items:center;width:44px;height:44px;flex:0 0 44px;border-radius:16px;background:var(--brand-deep);color:#fbbf24;box-shadow:0 7px 16px #1e1b4b33}.brand-mark svg{width:23px;height:23px}.topbar h1{font-size:16px;font-weight:800;color:var(--text)}.topbar p{margin-top:3px;color:var(--muted);font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;opacity:1}.topbar-actions{gap:7px}.icon-btn{width:40px;height:40px;border:1px solid var(--border);border-radius:14px;background:var(--slate-bg);color:var(--muted)}.icon-btn:active{transform:scale(.95)}.icon-btn svg{width:17px;height:17px}.avatar{width:40px;height:40px;border-radius:14px;background:var(--brand-deep);color:#fff;font-size:13px;font-weight:800}.topbar-extra{flex:0 0 100%;min-width:0}.content{min-height:0;padding:20px 16px calc(78px + var(--safe-bottom));gap:20px;background:var(--canvas)}.dock{left:50%;right:auto;width:min(100%,28rem);height:calc(70px + var(--safe-bottom));padding:8px 8px var(--safe-bottom);transform:translate(-50%);gap:4px;border:1px solid #f1f5f9;border-bottom:0;border-radius:24px 24px 0 0;box-shadow:0 -8px 30px #0f172a14}.dock-item{min-height:54px;border-radius:16px;gap:3px;font-size:10px;font-weight:800;transition:color .15s ease,background .15s ease,transform .12s ease}.dock-item.is-active{background:var(--brand-deep);color:#fff;box-shadow:0 8px 16px #1e1b4b33}.dock-item.is-active .dock-icon:after{display:none}.dock-icon svg{width:20px;height:20px}.chips{padding:4px 0 1px;gap:7px}.chip{padding:7px 13px;border:1px solid #e2e8f0;background:#f8fafc;color:#475569;font-size:11.5px;font-weight:800}.chip.is-active{border-color:var(--brand-deep);background:var(--brand-deep);color:#fff}.card{border-color:#f1f5f9;border-radius:28px;box-shadow:0 8px 30px #0f172a09}.card-head{padding:15px 17px}.card-head h2{font-size:14px}.card-body{padding:5px 17px 12px}.stat-grid{gap:12px}.stat{border-radius:24px;padding:15px;box-shadow:0 4px 14px #0f172a06}.stat-value{font-size:23px}.menu-tile{border-radius:28px;padding:16px}.back-link{border-color:#f1f5f9;border-radius:16px;box-shadow:0 4px 12px #0f172a08}.btn{background:var(--brand-deep);box-shadow:0 8px 18px #1e1b4b29}.btn-ghost{background:#f1f5f9;color:#334155;box-shadow:none}.auth{--surface: #fff;--text: #131722;--muted: #64748b;--border: #e6e8f0;--green: #059669;--rose: #e11d48;--rose-bg: #fdeaef;color:var(--text);color-scheme:light;padding:calc(28px + var(--safe-top)) 20px calc(28px + var(--safe-bottom));background:linear-gradient(135deg,#0f172a,#1e1b4b 55%,#020617)}.auth-card{max-width:420px;border:0;border-radius:34px;padding:28px 23px;box-shadow:0 24px 60px #00000057}.auth-brand{display:flex;align-items:center;gap:12px;margin-bottom:27px}.auth-brand .auth-mark{margin:0;background:linear-gradient(140deg,#fb923c,#fbbf24);color:var(--brand-deep)}.auth-brand-name{margin:0;color:#0f172a;font-size:19px;font-weight:900;letter-spacing:-.4px}.auth-brand-sub{margin:2px 0 0;color:#059669;font-size:9px;font-weight:900;letter-spacing:.16em;text-transform:uppercase}.auth .sect-title{color:#0f172a}.auth .sect-sub{color:#64748b}.auth-form{gap:16px}.auth .input{background:#f8fafc;color:#000;-webkit-text-fill-color:#000;caret-color:#000;border-radius:16px}.password-input{position:relative;display:block}.password-input .input{padding-right:48px}.password-toggle{position:absolute;top:50%;right:7px;display:grid;place-items:center;width:36px;height:36px;transform:translateY(-50%);border:0;border-radius:12px;background:transparent;color:#94a3b8}.password-toggle svg{width:18px;height:18px}.auth .btn{min-height:50px;border-radius:16px}.auth-note{text-align:center}.boot{background:linear-gradient(135deg,#0f172a,#1e1b4b 55%,#020617)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--canvas: var(--bg)}:root:not([data-theme=light]) .topbar,:root:not([data-theme=light]) .dock,:root:not([data-theme=light]) .card,:root:not([data-theme=light]) .back-link{border-color:var(--border)}:root:not([data-theme=light]) .chip,:root:not([data-theme=light]) .btn-ghost{background:var(--slate-bg);color:var(--text);border-color:var(--border)}:root:not([data-theme=light]) .chip.is-active{background:var(--brand-deep);color:#fff}}@media(min-width:448px){.shell{min-height:100dvh}}
