:root{--bg:#f6f7fb;--surface:#fff;--border:#e4e7ee;--text:#1a1f2b;--text-muted:#5b6472;--brand:#1f3a8a;--brand-soft:#eef2ff;--panel-border:var(--line,#d1d5db);--radius:16px;--radius-sm:10px;--radius-pill:999px;--shadow:0 1px 2px #1018280a, 0 8px 24px #1018280f;--shadow-hover:0 2px 4px #1018280f, 0 16px 40px #1018281f}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.55}a{color:inherit;text-decoration:none}.page{flex-direction:column;min-height:100vh;display:flex}.container{width:100%;max-width:1040px;margin:0 auto;padding:0 24px}.hero{background:radial-gradient(1200px 400px at 50% -10%, var(--brand-soft), transparent 70%), var(--bg);text-align:center;padding:88px 0 56px}.brand-mark{border:1px solid var(--border);background:var(--surface);border-radius:var(--radius-pill);box-shadow:var(--shadow);color:var(--text-muted);align-items:center;gap:10px;margin-bottom:28px;padding:6px 14px 6px 8px;font-size:14px;font-weight:600;display:inline-flex}.brand-mark .dot{color:#fff;background:linear-gradient(135deg,#2563eb,#7c3aed);border-radius:8px;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;font-weight:800;display:inline-flex}.brand-mark.compact{margin-bottom:0}.brand-mark img{border-radius:8px}.app-shell-topbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.app-shell-topbar.hero-topbar{margin-bottom:8px}.app-shell-meta{align-items:center;gap:10px;font-size:14px;display:inline-flex}.app-shell-meta.muted{color:var(--text-muted)}.app-shell-actions{flex-wrap:wrap;align-items:center;gap:10px;display:inline-flex}.app-shell-link{color:var(--brand);align-items:center;font-weight:700;display:inline-flex}.app-shell-button{appearance:none;font:inherit;cursor:pointer;border-radius:8px;justify-content:center;align-items:center;padding:6px 12px;font-size:14px;font-weight:700;text-decoration:none;display:inline-flex}.app-shell-button-primary{border:1px solid var(--brand);background:var(--brand);color:#fff}.app-shell-button-secondary{border:1px solid var(--panel-border);color:var(--text);background:0 0}.app-shell-menu{position:relative}.app-shell-menu-trigger{cursor:pointer;background:0 0;border:none;padding:4px 0;font-size:14px;font-weight:700}.app-shell-menu-panel{background:var(--surface);border:1px solid var(--panel-border);border-radius:var(--radius-sm);z-index:50;min-width:220px;padding:8px 0;font-size:13px;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 4px 16px #0000001f}.app-shell-menu-copy{color:var(--text-muted);padding:6px 14px;line-height:1.4}.app-shell-menu-copy strong{color:var(--text)}.app-shell-menu-separator{border:none;border-top:1px solid var(--border);margin:4px 0}.app-shell-menu-item{text-align:left;cursor:pointer;width:100%;font:inherit;color:var(--text);background:0 0;border:none;padding:8px 14px;font-size:13px;display:block}.app-shell-menu-item:hover{background:#f8fafc}.app-shell-menu-lang{justify-content:space-between;align-items:center;gap:8px;display:flex}.lang-switch{gap:2px;display:inline-flex}.lang-switch button{appearance:none;font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:6px;padding:2px 6px;font-size:12px;font-weight:700}.lang-switch button:hover{color:var(--text)}.lang-switch button.is-current{border-color:var(--panel-border);color:var(--text)}.hero h1{letter-spacing:-.02em;margin:0 0 16px;font-size:clamp(2.2rem,5vw,3.4rem);font-weight:800;line-height:1.08}.hero h1 .accent{background:linear-gradient(135deg,#2563eb,#7c3aed);color:#0000;-webkit-background-clip:text;background-clip:text}.hero p{color:var(--text-muted);max-width:560px;margin:0 auto;font-size:clamp(1rem,2.2vw,1.2rem)}.tools{padding:24px 0 64px}.grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:20px;display:grid}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;height:100%;padding:18px 18px 16px;transition:transform .18s,box-shadow .18s,border-color .18s;display:flex;position:relative}.card-compact .tagline{margin-bottom:10px}.card-hidden-admin{opacity:.92;border-style:dashed;border-color:#c4b5fd}.card-open{background:linear-gradient(#eff8ff 0%,#fff 42%);border-color:#bfdbfe}.card-login{background:linear-gradient(#f5f3ff 0%,#fff 42%);border-color:#ddd6fe}a.card:hover{box-shadow:var(--shadow-hover);border-color:#d3d8e4;transform:translateY(-3px)}a.card.card-open:hover{border-color:#93c5fd}a.card.card-login:hover{border-color:#c4b5fd}.card.soon{opacity:.85}.tools-section-title{letter-spacing:.04em;text-transform:uppercase;margin:8px 0 14px;font-size:.92rem;font-weight:700}.tools-section-open{color:#0369a1}.tools-section-login{color:#6d28d9;margin-top:28px}.card-help{color:#0f172a;cursor:pointer;z-index:2;background:#ffffffeb;border:1px solid #0f172a1f;border-radius:999px;width:34px;height:34px;font-size:11px;font-weight:700;position:absolute;top:14px;right:14px}.card-help:hover{color:#fff;background:#0f172a}.card-info{color:#64748b;cursor:pointer;z-index:2;background:#fffffff2;border:1px solid #0f172a24;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-size:13px;line-height:1;display:inline-flex}.card-info:hover,.card-info[aria-expanded=true]{color:#fff;background:#0f172a;border-color:#0f172a}.card-desc-popover{z-index:4;border:1px solid var(--border);box-shadow:var(--shadow-hover);color:var(--text-muted);background:#fff;border-radius:10px;padding:10px 12px;font-size:.88rem;line-height:1.45;position:absolute;top:72px;left:18px;right:18px}.card-admin-hide{z-index:3;color:#6d28d9;cursor:pointer;background:#fffffff2;border:1px solid #6d28d940;border-radius:999px;justify-content:center;align-items:center;width:32px;height:32px;font-size:14px;line-height:1;display:inline-flex;position:absolute;bottom:14px;right:14px}.card-admin-hide:hover{color:#fff;background:#6d28d9;border-color:#6d28d9}.card-admin-hide.is-hidden{background:#f5f3ff}.card-hidden-badge{color:#6d28d9;letter-spacing:.02em;text-transform:uppercase;vertical-align:middle;background:#f5f3ff;border-radius:999px;margin-left:8px;padding:2px 8px;font-size:.68rem;font-weight:700;display:inline-block}.hero-title-row{flex-wrap:wrap;align-items:flex-end;gap:14px 20px;margin-top:8px;display:flex}.hero-title-row h1{margin:0}.help-hub-btn{cursor:pointer;color:#0f172a;background:#ffffffd9;border:1px solid #0f172a1f;border-radius:999px;padding:8px 14px;font-size:13px;font-weight:650}.help-hub-btn:hover{color:#fff;background:#0f172a}.lang-select select{border:1px solid var(--border);background:#fff;border-radius:10px;padding:8px 10px;font-size:13px;font-weight:600}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.help-modal-backdrop{z-index:80;background:#0f172a8c;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.help-modal{background:#fff;border-radius:18px;flex-direction:column;gap:14px;width:min(720px,100%);padding:18px;display:flex;box-shadow:0 20px 50px #0f172a47}.help-modal-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.help-modal-head h2{margin:0;font-size:1.15rem}.help-modal-close{cursor:pointer;color:#64748b;background:0 0;border:none;font-size:18px}.help-modal-frame{background:#0f172a;border-radius:14px;width:100%;padding-top:56.25%;position:relative;overflow:hidden}.help-modal-frame iframe{border:0;width:100%;height:100%;position:absolute;inset:0}.help-modal-placeholder{text-align:center;color:var(--text-muted);background:#f8fafc;border:1px dashed #cbd5e1;border-radius:14px;padding:22px}.help-slideshow{background:linear-gradient(160deg,#eff8ff,#f5f3ff 55%,#fff);border:1px solid #e2e8f0;border-radius:14px;min-height:220px;padding:22px 20px 16px}.help-slideshow-progress{letter-spacing:.06em;text-transform:uppercase;color:#64748b;margin:0 0 10px;font-size:12px;font-weight:700}.help-slideshow h3{color:#0f172a;margin:0 0 10px;font-size:1.35rem}.help-slideshow>p{color:#334155;min-height:4.5em;margin:0;font-size:1.02rem;line-height:1.5}.help-slideshow-dots{justify-content:center;gap:6px;margin:18px 0 12px;display:flex}.help-slideshow-dots button{cursor:pointer;background:#cbd5e1;border:none;border-radius:999px;width:8px;height:8px;padding:0}.help-slideshow-dots button.active{background:#0284c7;width:18px}.help-slideshow-nav{justify-content:space-between;gap:10px;display:flex}.help-slideshow-mock{justify-content:center;gap:8px;margin-bottom:12px;display:flex}.help-slideshow-mock span{color:#0f172a;background:linear-gradient(135deg,#bae6fd,#ddd6fe);border-radius:8px;justify-content:center;align-items:center;width:42px;height:28px;font-size:12px;font-weight:700;display:inline-flex}.card-icon{background:var(--brand-soft);border-radius:14px;justify-content:center;align-items:center;width:52px;height:52px;margin-bottom:18px;font-size:26px;display:inline-flex;overflow:hidden}.card-icon img{object-fit:contain;border-radius:10px;width:40px;height:40px;display:block}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;display:flex}.card-title-row{align-items:center;gap:8px;min-width:0;display:flex}.card-title-row h2{min-width:0}.card h2{margin:0;font-size:1.2rem;font-weight:700}.card .tagline{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:4px 0 10px;font-size:.78rem;font-weight:600}.card-compact .card-cta{margin-top:auto}.card p{color:var(--text-muted);flex:1;margin:0 0 20px;font-size:.95rem}.card-cta{align-items:center;gap:6px;font-size:.92rem;font-weight:600;display:inline-flex}.card-cta .arrow{transition:transform .18s}a.card:hover .card-cta .arrow{transform:translate(3px)}.badge-soon{color:var(--text-muted);border:1px solid var(--border);background:#f1f3f8;border-radius:999px;padding:3px 9px;font-size:.72rem;font-weight:600}.footer{border-top:1px solid var(--border);background:var(--surface);margin-top:auto;padding:28px 0}.footer-inner{color:var(--text-muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;font-size:.9rem;display:flex}.footer-inner strong{color:var(--text);font-weight:600}.roster-hero{background:radial-gradient(900px 320px at 40% -20%, var(--brand-soft), transparent 70%), var(--bg);padding:48px 0 28px}.roster-back{color:var(--text-muted);margin-bottom:18px;font-size:.9rem;font-weight:600;display:inline-block}.roster-back:hover{color:var(--brand)}.roster-header-copy{opacity:.75}.roster-hero h1{letter-spacing:-.02em;margin:0 0 8px;font-size:clamp(1.8rem,4vw,2.4rem)}.roster-hero p{color:var(--text-muted);margin:0}.roster-main{padding:8px 0 64px}.roster-empty{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);text-align:center;box-shadow:var(--shadow);padding:36px 28px}.roster-empty h2{margin:0 0 8px}.roster-empty p{color:var(--text-muted);margin:0 0 20px}.roster-cta{background:var(--brand);color:#fff;border-radius:10px;padding:10px 16px;font-weight:700;display:inline-flex}.roster-grid{gap:16px;display:grid}.roster-class{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px}.roster-class-head{justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:12px;display:flex}.roster-class-head h2{margin:0;font-size:1.15rem}.roster-class-head span{color:var(--text-muted);font-size:.9rem}.roster-muted{color:var(--text-muted);margin:0}.roster-students{margin:0;padding:0;list-style:none}.roster-students li{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;padding:8px 0;display:flex}.roster-student-main{flex-wrap:wrap;align-items:center;gap:8px 12px;min-width:0;display:flex}.roster-student-actions{flex-wrap:wrap;gap:6px;margin-left:auto;display:flex}.roster-btn-sm{padding:4px 8px;font-size:.78rem}.roster-name{font-weight:500}.roster-code{background:var(--brand-soft);color:var(--brand);border-radius:6px;padding:3px 8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.85rem}.roster-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.roster-actions{flex-wrap:wrap;gap:8px;margin:0 0 12px;display:flex}.roster-btn{appearance:none;border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;border-radius:8px;padding:6px 12px;font-size:.85rem;font-weight:600}.roster-btn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}.roster-btn:disabled{opacity:.55;cursor:not-allowed}.roster-btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}.roster-btn-primary:hover:not(:disabled){color:#fff;filter:brightness(1.05)}.roster-btn-danger{color:#9b1c1c}.roster-btn-danger:hover:not(:disabled){color:#9b1c1c;border-color:#9b1c1c}.roster-flash{border-radius:10px;margin:0 0 14px;padding:10px 12px;font-size:.9rem}.roster-flash-error{color:#9b1c1c;background:#fef2f2;border:1px solid #fecaca}.roster-flash-ok{color:#065f46;background:#ecfdf5;border:1px solid #a7f3d0}.roster-empty .roster-cta{cursor:pointer;font:inherit;border:none}.roster-empty .roster-cta:disabled{opacity:.55;cursor:not-allowed}.roster-class.is-viewer{opacity:.98;border-style:dashed}.roster-access-badge{vertical-align:middle;color:#3730a3;background:#eef2ff;border-radius:6px;margin-left:8px;padding:2px 8px;font-size:.72rem;font-weight:600;display:inline-block}.roster-viewer-hint{color:#64748b;margin:0 0 12px;font-size:.88rem}.roster-share-list{flex-direction:column;gap:6px;margin:0 0 12px;padding:0;list-style:none;display:flex}.roster-share-list li{background:#f8fafc;border-radius:8px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;padding:8px 10px;font-size:.85rem;display:flex}.roster-share-overlay{z-index:80;background:#0f172a73;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.roster-share-dialog{background:#fff;border-radius:14px;width:min(440px,100%);max-height:min(90vh,640px);padding:20px;overflow:auto;box-shadow:0 20px 50px #0f172a40}.roster-share-dialog h2{margin:0 0 8px;font-size:1.15rem}.roster-share-label{flex-direction:column;gap:6px;margin:14px 0;font-size:.9rem;font-weight:600;display:flex}.roster-share-input{font:inherit;border:1px solid #cbd5e1;border-radius:8px;padding:10px 12px;font-weight:400}.roster-share-modes{gap:8px;margin-bottom:12px;display:flex}.roster-share-modes button{font:inherit;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:8px;flex:1;padding:8px 10px}.roster-share-modes button.is-active{color:#3730a3;background:#eef2ff;border-color:#4f46e5;font-weight:600}.roster-share-students{border:1px solid #e2e8f0;border-radius:8px;max-height:220px;margin:0 0 14px;padding:0;list-style:none;overflow:auto}.roster-share-students li{border-bottom:1px solid #f1f5f9;padding:8px 10px}.roster-share-students li:last-child{border-bottom:none}.roster-share-students label{cursor:pointer;align-items:center;gap:8px;font-size:.9rem;display:flex}.roster-share-actions{justify-content:flex-end;gap:8px;display:flex}.school-panel{margin-bottom:16px}.school-title{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 10px;font-size:1.15rem;display:flex}.school-badge{color:#fff;text-align:center;vertical-align:middle;background:#dc2626;border-radius:999px;min-width:1.4em;margin-left:6px;padding:2px 8px;font-size:.75rem;font-weight:700;display:inline-block}.school-badge-link{font-weight:600;text-decoration:none}.school-role{color:#6d28d9;background:#f5f3ff;border-radius:6px;margin-left:8px;padding:1px 7px;font-size:.72rem;font-weight:600;display:inline-block}.school-form{flex-direction:column;gap:4px;display:flex}.school-form .roster-share-label{margin:8px 0}.school-inline{flex-wrap:wrap;gap:8px;margin:10px 0;display:flex}.school-status{color:#92400e;background:#fffbeb;border-radius:10px;margin:0 0 8px;padding:10px 12px}.school-directory{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px;margin:8px 0 0;padding:0;list-style:none;display:grid}.school-directory li{background:#f8fafc;border-radius:8px;padding:6px 10px;font-size:.9rem}.school-list{margin:0;padding:0;list-style:none}.school-list>li{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:8px 12px;padding:10px 0;display:flex}.school-list>li.has-warning{background:#fffbeb;border-radius:8px;padding-left:8px;padding-right:8px}.school-list>li.school-list-col>.roster-class{flex-basis:100%;margin-top:8px}.school-person{flex-direction:column;gap:2px;min-width:0;font-size:.92rem;display:flex}.school-email{word-break:break-all;font-size:1rem;font-weight:600}.school-warning{color:#92400e;background:#fef3c7;border:1px solid #fcd34d;border-radius:6px;align-self:flex-start;padding:2px 8px;font-size:.82rem;font-weight:600}.school-dup{color:#b91c1c}.school-list>li.school-row{padding:4px 0;display:block}.school-list>li.school-row.has-warning{padding-left:6px;padding-right:6px}.school-row-head{align-items:center;gap:8px;display:flex}.school-row-toggle{appearance:none;min-width:0;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:8px;flex-wrap:wrap;flex:1;align-items:center;gap:4px 8px;padding:6px 4px;font-size:.95rem;display:flex}.school-row-toggle:hover strong{color:var(--brand)}.school-row-toggle:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}.school-row-detail{flex-direction:column;gap:4px;padding:0 4px 8px 28px;font-size:.88rem;display:flex}.school-row-detail .school-class-names{margin:0}.school-row-detail .school-class-hint{margin:0 0 4px}.school-row-detail>.roster-btn{align-self:flex-start;margin-top:4px}.school-class-members,.school-request-list{margin:0;padding:0;list-style:none}.school-class-members{background:#f8fafc;border-radius:8px;padding:4px 10px}.school-class-members li,.school-request-list li{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;padding:4px 0;display:flex}.school-request-list li{border-bottom:1px solid #eef2f7;padding:8px 0}.school-request-list li:last-child{border-bottom:none}.school-row .school-role{margin-left:0}.school-mini-badge{color:#475569;white-space:nowrap;background:#f1f5f9;border-radius:6px;padding:1px 7px;font-size:.72rem;font-weight:700;display:inline-block}.school-mini-badge.is-warn{color:#92400e;background:#fef3c7}.school-mini-badge.is-danger{color:#b91c1c;background:#fee2e2}.hub-card-title .info-tip,.school-subtitle .info-tip{color:var(--text-muted);margin-left:4px}.hub-card-title .info-tip-pop,.school-subtitle .info-tip-pop{letter-spacing:normal;text-transform:none;font-size:.875rem;font-weight:400;line-height:1.45}.roster-text-link{color:var(--brand);font-size:.9rem;font-weight:600}.roster-stats{margin:0 0 0 auto}.student-stamm-input{max-width:120px}.hub-tool-card{text-align:center;padding:24px 20px}.hub-tool-open{background:var(--tool-accent,var(--brand));color:#fff;border-radius:12px;align-items:center;gap:8px;padding:14px 22px;font-size:1.05rem;font-weight:700;text-decoration:none;display:inline-flex}.hub-tool-open:hover{filter:brightness(1.08)}.hub-tool-open.is-busy{opacity:.7;pointer-events:none}.hub-tool-meta{margin:14px 0 0}.school-actions{flex-wrap:wrap;gap:6px;display:flex}.school-secret{color:#1e1b4b;background:#eef2ff;border:2px solid #4f46e5;border-radius:10px;flex-wrap:wrap;align-items:center;gap:8px 12px;margin:10px 0;padding:12px 14px;display:flex}.school-secret-code{letter-spacing:.12em;background:#fff;border-radius:8px;padding:2px 10px;font-size:1.5rem;font-weight:800}.school-audit{margin-top:16px;font-size:.88rem}.school-audit summary{cursor:pointer;font-weight:600}.school-audit ul{margin:8px 0 0;padding-left:18px}.school-master{border-style:dashed;border-color:#c4b5fd}@keyframes spin{to{transform:rotate(360deg)}}.spinner{border:2px solid var(--line,#d1d5db);border-top-color:var(--brand,#6d28d9);border-radius:50%;width:16px;height:16px;animation:.6s linear infinite spin;display:inline-block}.tool-chrome{margin-bottom:12px}.tool-chrome-inner{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.tool-chrome-left,.tool-chrome-right{flex-wrap:wrap;align-items:center;gap:10px;display:inline-flex}.tool-chrome-back{color:var(--text-muted);font-size:.9rem;font-weight:600}.tool-chrome-back:hover{color:var(--brand)}.tool-chrome-pill{border:1px solid var(--border);background:var(--surface);border-radius:999px;align-items:center;gap:8px;padding:4px 10px 4px 4px;font-size:14px;font-weight:700;display:inline-flex}.tool-chrome-pill img{border-radius:8px}.tool-chrome-title{letter-spacing:-.02em;margin:0;font-size:1.25rem;font-weight:800}.hub-view-switcher{border:1px solid var(--border);background:var(--surface);border-radius:10px;flex-wrap:wrap;align-items:center;gap:4px;padding:3px;display:inline-flex}.hub-view-switcher-label{color:var(--text-muted);padding:0 6px;font-size:12px;font-weight:600}.hub-view-switcher-btn{appearance:none;font:inherit;color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-radius:8px;padding:5px 10px;font-size:13px;font-weight:700}.hub-view-switcher-btn:hover{color:var(--text);background:#f1f5f9}.hub-view-switcher-btn.is-active{background:var(--brand-soft,#eef2ff);color:var(--brand,#1f3a8a)}.hub-view-trigger{appearance:none;border:1px solid var(--border);background:var(--surface);font:inherit;color:var(--text);cursor:pointer;white-space:nowrap;border-radius:8px;padding:4px 10px;font-size:13px;font-weight:700}.hub-view-trigger:hover{background:#f1f5f9}.hub-view-trigger-label{color:var(--text-muted);font-weight:600}.roster-back,.tool-chrome-back{text-decoration:none}@media (max-width:640px){.hub-view-switcher-label,.hub-view-trigger-label{display:none}.hub-view-switcher-btn{padding:5px 8px;font-size:12px}.tool-chrome-title{order:3;width:100%}}.persona-band{z-index:60;color:#1a1f2b;text-align:center;background:#f59e0b;flex-wrap:wrap;justify-content:center;align-items:center;gap:8px 14px;padding:8px 16px;font-size:14px;font-weight:600;display:flex;position:sticky;top:0}.persona-band-error{color:#991b1b;background:#fee2e2}.persona-band-btn{appearance:none;color:inherit;border-radius:var(--radius-pill);font:inherit;cursor:pointer;background:#fff;border:1px solid #00000040;padding:3px 12px;font-size:13px;font-weight:700}.app-shell-menu-item.is-current{color:var(--brand);font-weight:700}.app-shell-menu-item.is-current:before{content:"✓ "}a.app-shell-menu-item{text-decoration:none}.title-page{background:radial-gradient(1000px 420px at 50% 0%, var(--brand-soft), transparent 70%), var(--bg)}.title-topbar{justify-content:flex-end;padding-top:16px;padding-bottom:16px;display:flex}.title-main{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;padding:24px 24px 64px;display:flex}.title-wordmark{letter-spacing:-.04em;background:linear-gradient(135deg,#2563eb,#7c3aed);color:#0000;-webkit-background-clip:text;background-clip:text;margin:0;font-size:clamp(3rem,11vw,5.5rem);font-weight:800;line-height:1}.title-tagline{color:var(--text-muted);max-width:36ch;margin:14px 0 36px;font-size:1.05rem}.title-actions{flex-direction:column;gap:12px;width:100%;max-width:320px;display:flex}.title-btn{border-radius:var(--radius-sm);border:1px solid var(--panel-border);background:var(--surface);color:var(--text);box-shadow:var(--shadow);justify-content:center;align-items:center;gap:6px;padding:14px 20px;font-size:1.05rem;font-weight:700;transition:box-shadow .15s,transform .15s;display:flex}.title-btn:hover{box-shadow:var(--shadow-hover);transform:translateY(-1px)}.title-btn-primary{border-color:var(--brand);background:var(--brand);color:#fff}.title-student-link{color:var(--text-muted);margin:24px 0 0;font-size:.92rem}.title-student-link a{color:var(--brand);font-weight:600}.title-footer{text-align:center;color:var(--text-muted);padding:16px 24px 24px;font-size:.85rem}.hub-header{padding:16px 0 8px}.hub-header-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.hub-header-left{align-items:center;gap:10px;display:inline-flex}.hub-back{color:var(--text-muted);font-size:.92rem;font-weight:600}.hub-back:hover{color:var(--brand)}.hub-title{letter-spacing:-.02em;margin:18px 0 4px;font-size:clamp(1.6rem,4vw,2.1rem);font-weight:800}.hub-intro{color:var(--text-muted);max-width:60ch;margin:0}.hub-intro-muted{color:var(--text-muted)}.hub-main{padding-top:16px;padding-bottom:56px}.hub-banner{margin-bottom:16px}.hub-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);margin-bottom:16px;padding:18px 20px;scroll-margin-top:56px}.hub-card-title{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 12px;font-size:1.15rem;display:flex}.hub-card-master{border-style:dashed;border-color:#c4b5fd}.hub-subnav{flex-wrap:wrap;gap:6px;margin-bottom:16px;display:flex}.hub-subnav a{border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--surface);align-items:center;padding:6px 12px;font-size:.9rem;font-weight:600;display:inline-flex}.hub-subnav a:hover{border-color:var(--brand);color:var(--brand)}.hub-link-btn{appearance:none;font:inherit;color:var(--brand);cursor:pointer;background:0 0;border:none;padding:0;font-size:.92rem;font-weight:600}.hub-link-btn:hover{text-decoration:underline}.school-list>li.school-list-col>.hub-card{box-shadow:none;flex-basis:100%;margin-top:8px}.tools-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:4px;display:flex}.tools-edit-hint{margin:8px 0 0}.hub-title-info{vertical-align:middle;color:var(--text-muted);font-size:12px}.tools-apps-link{text-align:center;margin:28px 0 8px;font-size:.9rem}.tools-apps-link a{color:var(--text-muted);font-weight:600}.hub-banner-more{color:inherit;font:inherit;text-underline-offset:3px;cursor:pointer;background:0 0;border:0;padding:0;font-weight:600;text-decoration:underline}.hub-banner-detail{margin-top:4px;font-size:.9em;display:block}.tools-group-title{letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);margin:28px 0 12px;font-size:.85rem;font-weight:700}.tile-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;display:grid}.tile{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow);align-items:flex-start;gap:14px;padding:16px 44px 16px 16px;transition:box-shadow .15s,transform .15s,border-color .15s;display:flex;position:relative}a.tile:hover{box-shadow:var(--shadow-hover);border-color:#c7d2fe;transform:translateY(-1px)}.tile-inactive{opacity:.6}.tile-hidden{opacity:.55;border-style:dashed}.tile-icon{border-radius:14px;flex:none;justify-content:center;align-items:center;width:52px;height:52px;display:inline-flex}.tile-icon img{border-radius:10px}.tile-text{flex-direction:column;gap:2px;min-width:0;display:flex}.tile-name{font-size:1.02rem;font-weight:800}.tile-tagline{color:var(--text-muted);font-size:.9rem;line-height:1.4}.tile-note{color:#92400e;margin-top:4px;font-size:.8rem;font-weight:600}.tile-info{border:1px solid var(--border);background:var(--surface);width:24px;height:24px;color:var(--text-muted);font:inherit;cursor:pointer;border-radius:50%;font-size:12px;font-style:italic;font-weight:700;position:absolute;top:12px;right:12px}.tile-info:hover{color:var(--brand);border-color:var(--brand)}.tile-popover{z-index:20;border:1px solid var(--panel-border);border-radius:var(--radius-sm);background:var(--surface);cursor:default;flex-direction:column;gap:8px;padding:12px 14px;font-size:.88rem;line-height:1.45;display:flex;position:absolute;top:42px;left:8px;right:8px;box-shadow:0 4px 16px #0000001f}.tile-popover-help{appearance:none;font:inherit;color:var(--brand);cursor:pointer;background:0 0;border:none;align-self:flex-start;padding:0;font-weight:700}.tile-edit-toggle{appearance:none;border:1px solid var(--panel-border);background:var(--surface);border-radius:var(--radius-pill);font:inherit;cursor:pointer;padding:2px 10px;font-size:12px;font-weight:700;position:absolute;bottom:10px;right:12px}.tile:has(.tile-edit-toggle){padding-bottom:40px}.school-choice-options{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin-bottom:14px;display:grid}.school-choice-btn{appearance:none;border:1px solid var(--panel-border);border-radius:var(--radius-sm);background:var(--surface);font:inherit;text-align:left;cursor:pointer;flex-direction:column;align-items:flex-start;gap:2px;padding:14px 16px;display:flex}.school-choice-btn:hover{border-color:var(--brand)}.school-choice-btn.is-active{border:2px solid var(--brand);background:var(--brand-soft)}.roster-school-tag{color:#047857;vertical-align:middle;background:#ecfdf5;border-radius:6px;margin-left:8px;padding:1px 8px;font-size:.72rem;font-weight:700;display:inline-block}.roster-kind-tag{color:#c2410c;vertical-align:middle;background:#fff7ed;border-radius:6px;margin-left:8px;padding:1px 8px;font-size:.72rem;font-weight:700;display:inline-block}.roster-pending-tag,.roster-stamm-tag{vertical-align:middle;border-radius:6px;margin-left:8px;padding:1px 8px;font-size:.72rem;font-weight:700;display:inline-block}.roster-pending-tag{color:#a16207;background:#fefce8}.roster-stamm-tag{color:#3730a3;background:#eef2ff}.roster-flash-warn{color:#92400e;background:#fffbeb;border:1px solid #fde68a}.roster-bulk-open select{border-color:#f59e0b}.roster-dialog-wide{width:min(560px,100%)}.roster-check{cursor:pointer;align-items:flex-start;gap:8px;margin:4px 0 14px;font-size:.9rem;display:flex}.roster-check input{margin-top:3px}.roster-search{box-sizing:border-box;width:100%;margin:4px 0 10px}.roster-picker{max-height:320px}.roster-picker li{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 10px;font-size:.9rem;display:flex}.roster-select-sm{max-width:100%;padding:6px 8px;font-size:.85rem}.roster-dup-box{background:#fffbeb;border:1px solid #fde68a;border-radius:10px;margin-bottom:12px;padding:12px 14px}.roster-dup-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;display:flex}.roster-dup-row p{margin:0}.roster-creator{font-size:.78rem}.school-tabs a.is-active{border-color:var(--brand);background:var(--brand);color:#fff}.school-class-names{background:#f8fafc;border-radius:8px;flex-basis:100%;margin:4px 0 0;padding:8px 10px;font-size:.88rem}.school-dup-group{background:#fffdf5;border:1px solid #fde68a;border-radius:10px;margin-bottom:12px;padding:4px 12px}.school-dup-pick{cursor:pointer}.school-register .roster-code{margin-left:8px}.login-step{max-width:640px;padding-top:48px;padding-bottom:56px}.login-step h1{letter-spacing:-.02em;margin:0 0 8px;font-size:1.8rem}.login-eyebrow{letter-spacing:.1em;color:var(--text-muted);margin:0 0 6px;font-size:.78rem;font-weight:700}@media (max-width:640px){.title-topbar{padding-top:10px}.hub-card{padding:14px}.tile-grid{grid-template-columns:1fr}.hub-subnav a{padding:5px 10px;font-size:.85rem}}.school-choice-btn span{color:var(--text-muted);font-size:.88rem;line-height:1.4}.login-main{max-width:440px;padding:3rem 1rem 2.5rem}.login-kicker{letter-spacing:.08em;color:var(--text-muted);margin:0;font-size:12px;font-weight:700}.login-title{margin:6px 0 18px}.login-acc{flex-direction:column;gap:10px;display:flex}.login-acc-item{border:1px solid var(--panel-border);border-radius:var(--radius-sm);background:var(--surface);box-shadow:var(--shadow);overflow:hidden}.login-acc-item.is-open{border-color:var(--brand)}.login-acc-item.is-subtle{box-shadow:none;background:0 0;border-style:dashed}.login-acc-head{width:100%;color:var(--text);text-align:left;cursor:pointer;font:inherit;background:0 0;border:none;justify-content:space-between;align-items:center;gap:12px;padding:14px 16px;display:flex}.login-acc-head:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}.login-acc-title{font-size:1.02rem;font-weight:700;display:block}.login-acc-item.is-subtle .login-acc-head{padding:10px 16px}.login-acc-item.is-subtle .login-acc-title{color:var(--text-muted);font-size:.9rem;font-weight:600}.login-acc-hint{color:var(--text-muted);margin-top:2px;font-size:.82rem;display:block}.login-acc-chevron{color:var(--text-muted);transition:transform .15s}.login-acc-item.is-open .login-acc-chevron{transform:rotate(180deg)}.login-acc-panel{flex-direction:column;gap:10px;padding:0 16px 16px;display:flex}.login-form{flex-direction:column;gap:8px;display:flex}.login-input{border-radius:var(--radius-sm);border:1px solid var(--panel-border);background:var(--surface);color:var(--text);padding:11px 13px;font-size:16px}.login-primary{border-radius:var(--radius-sm);background:var(--brand);color:#fff;cursor:pointer;border:none;padding:12px 16px;font-size:15px;font-weight:700}.login-primary:disabled{opacity:.6;cursor:default}.login-link{color:var(--brand);cursor:pointer;background:0 0;border:none;align-self:flex-start;padding:0;font-size:.86rem;font-weight:600;text-decoration:underline}.login-link.login-link-small{color:var(--text-muted);font-size:.8rem}.login-row{flex-wrap:wrap;gap:8px 14px;display:flex}.login-muted{color:var(--text-muted);margin:0;font-size:.86rem}.login-error,.login-info{border-radius:var(--radius-sm);margin:0;padding:9px 11px;font-size:14px}.login-error{color:#991b1b;background:#fef2f2}.login-info{color:#047857;background:#ecfdf5}.login-error-box,.login-continue{flex-direction:column;gap:10px;margin-bottom:16px;display:flex}.login-demo{margin-top:14px}.login-back{color:var(--text-muted);font-size:14px;font-weight:600;text-decoration:none;display:inline-block}.login-group-title{letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);margin:14px 0 2px;font-size:.8rem;font-weight:700}.login-mode-toggle{border:1px solid var(--border);border-radius:8px;align-self:flex-start;gap:2px;padding:2px;display:inline-flex}.login-mode-toggle button{appearance:none;font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px 12px;font-size:.86rem;font-weight:600}.login-mode-toggle button.is-active{background:var(--brand-soft,#eef2ff);color:var(--brand)}.roster-class-compact{padding:0;overflow:visible}.roster-class-row{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;border-radius:var(--radius);background:0 0;border:0;flex-wrap:wrap;align-items:center;gap:6px 10px;padding:14px 18px;display:flex}.roster-class-row:hover .roster-class-name{color:var(--brand)}.roster-class-row:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}.roster-chevron{width:1em;color:var(--text-muted)}.roster-class-name{font-size:1.1rem;font-weight:700}.roster-class-row .roster-school-tag,.roster-class-row .roster-kind-tag,.roster-class-row .roster-access-badge{margin-left:0}.roster-private-tag{color:#475569;background:#f1f5f9;border-radius:6px;padding:1px 8px;font-size:.72rem;font-weight:700;display:inline-block}.roster-class-count{color:var(--text-muted);margin-left:auto;font-size:.85rem}.roster-code-sm{padding:1px 6px;font-size:.75rem}.roster-class-body{border-top:1px solid var(--border);padding:0 18px 14px}.roster-class-body>.roster-actions{align-items:center;margin-top:12px}.roster-class-body>.roster-viewer-hint{margin-top:12px}.roster-menu{position:relative}.roster-menu-trigger{letter-spacing:.05em;min-width:40px;font-weight:800}.roster-menu-list{z-index:30;background:var(--surface);border:1px solid var(--border);border-radius:10px;min-width:210px;margin:0;padding:6px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 10px 30px #0f172a26}.roster-menu-list button{appearance:none;width:100%;font:inherit;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;border-radius:6px;padding:8px 10px;font-size:.9rem;display:block}.roster-menu-list button:hover,.roster-menu-list button:focus-visible{background:var(--brand-soft);color:var(--brand)}.roster-menu-list button.is-danger{color:#9b1c1c}.roster-menu-list.is-right{left:auto;right:0}.roster-menu-list.is-up{top:auto;bottom:calc(100% + 4px)}.roster-menu-list button:disabled{opacity:.5;cursor:default}.info-tip{vertical-align:middle;display:inline-flex;position:relative}.info-tip-btn{width:20px;height:20px;color:inherit;font:inherit;cursor:pointer;opacity:.8;background:0 0;border:1px solid;border-radius:50%;font-size:11px;font-style:italic;font-weight:700;line-height:1}.info-tip-btn:hover,.info-tip-btn:focus-visible{opacity:1}.info-tip-pop{z-index:40;border:1px solid var(--panel-border,var(--border));border-radius:var(--radius-sm,8px);background:var(--surface,#fff);width:max-content;max-width:min(320px,80vw);color:var(--text,#111);text-align:left;padding:10px 12px;font-size:.85rem;font-weight:400;line-height:1.45;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%);box-shadow:0 4px 16px #0000001f}.roster-icon-btn{appearance:none;border:1px solid var(--border);background:var(--surface);width:34px;height:34px;color:var(--text-muted);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;margin-left:auto;display:inline-flex}.roster-icon-btn:hover:not(:disabled){border-color:var(--brand);color:var(--brand)}.roster-icon-btn:disabled{opacity:.55;cursor:not-allowed}.roster-grid-after{margin-top:12px}.roster-classless .roster-class-name{color:var(--text-muted)}.roster-classless-hint{align-items:center;gap:6px;margin:0 0 8px;display:flex}.roster-deleted{margin-top:24px;font-size:.9rem}.roster-deleted-toggle{font-size:.85rem}.roster-deleted-hint{margin:6px 0}.roster-deleted-list{margin:0;padding:0;list-style:none}.roster-deleted-list li{border-bottom:1px solid var(--border,#00000014);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;padding:6px 0;display:flex}.roster-subhead{color:var(--text-muted);margin:14px 0 4px;font-size:.85rem;font-weight:700}.roster-students li.is-deactivated .roster-name{color:var(--text-muted);text-decoration:line-through;text-decoration-thickness:1px}.roster-btn-danger-solid{color:#fff;background:#b91c1c;border-color:#b91c1c}.roster-btn-danger-solid:hover:not(:disabled){color:#fff;background:#991b1b;border-color:#991b1b}.student-edit-section{border-top:1px solid var(--border);padding:12px 0}.student-edit-section h3{margin:0 0 8px;font-size:.95rem}.student-edit-section .roster-muted{margin:6px 0;font-size:.88rem}.student-edit-row{flex-wrap:wrap;align-items:center;gap:8px;margin:0;display:flex}.student-edit-row .roster-share-input{flex:200px;margin:0}.student-class-list{margin:0 0 8px;padding:0;list-style:none}.student-class-list li{justify-content:space-between;align-items:center;gap:8px;padding:5px 0;display:flex}.student-edit-danger h3{color:#9b1c1c}.student-deactivated-box{color:#78350f;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;margin:0 0 12px;padding:10px 12px;font-size:.9rem}.student-deactivated-box p{margin:0 0 8px}.student-confirm-text{margin:0 0 8px;line-height:1.5}.student-restricted-band{background:#fde68a;font-weight:500}.student-restricted-note{color:#78350f;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;margin:0 0 12px;padding:12px;line-height:1.5}.school-subtitle{margin:16px 0 6px;font-size:1rem}.costs-tile{color:#6d28d9;background:#f5f3ff;border:1px solid #c4b5fd;border-radius:999px;padding:6px 12px;font-size:.9rem;font-weight:600;text-decoration:none;display:inline-block}.costs-tile:hover{background:#ede9fe}.costs-total,.costs-card{background:#fff;border:1px solid #e5e7eb;border-radius:12px;margin-bottom:16px;padding:16px 18px}.costs-card h2{margin:0 0 10px;font-size:1.1rem}.costs-card h3{margin:12px 0 6px;font-size:.95rem}.costs-total-label{color:#6b7280;font-size:.9rem}.costs-total-value{margin:2px 0 4px;font-size:1.8rem;font-weight:700}.costs-table{border-collapse:collapse;width:100%;margin:8px 0;font-size:.9rem}.costs-table th,.costs-table td{text-align:left;border-bottom:1px solid #f1f5f9;padding:4px 6px}.costs-table th{color:#6b7280;font-weight:600}.costs-num{white-space:nowrap;text-align:right!important}.costs-src{color:#6b7280;white-space:nowrap;font-size:.8rem}.costs-src-live{color:#047857}.costs-src-fehlt{color:#b45309}.costs-hint{background:#fffbeb;border:1px solid #fcd34d;border-radius:8px;padding:10px 12px;font-size:.9rem}.costs-error{color:#b91c1c}.costs-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;display:grid}.costs-bars{align-items:flex-end;gap:3px;height:90px;margin:12px 0 4px;display:flex}.costs-bars>div{flex-direction:column;flex:1;justify-content:flex-end;align-items:center;height:100%;display:flex}.costs-bars span{background:#8b5cf6;border-radius:3px 3px 0 0;width:100%;display:block}.costs-bars small{color:#9ca3af;font-size:.65rem}.costs-form{flex-direction:column;gap:10px;max-width:520px;display:flex}.costs-form label{flex-direction:column;gap:4px;font-size:.9rem;display:flex}.costs-form input{border:1px solid #d1d5db;border-radius:6px;padding:6px 8px}.costs-form-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}
