.landing{background:var(--canvas);color:var(--ink);overflow-x:hidden}.landing a{color:inherit}.landing-nav{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:28px;padding:14px 32px;background:color-mix(in srgb,var(--canvas) 88%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}.landing-nav .brand{display:flex;align-items:center;gap:11px;font-weight:800;font-size:17px;letter-spacing:-.02em;text-decoration:none}.landing-nav .brand img{width:30px;height:30px;border-radius:8px}.landing-nav .links{display:flex;gap:4px;margin-left:auto}.landing-nav .links a{font-size:13.5px;font-weight:600;color:var(--ink-2);text-decoration:none;padding:7px 12px;border-radius:var(--r-sm)}.landing-nav .links a:hover{color:var(--ink);background:var(--surface-2)}.landing-nav .cta-row{display:flex;align-items:center;gap:10px}.landing-nav .login-link{font-size:13.5px;font-weight:600;color:var(--ink-2);text-decoration:none;padding:7px 10px}.landing-nav .login-link:hover{color:var(--ink)}.landing-hero{display:grid;grid-template-columns:1.05fr .95fr;gap:48px;align-items:center;max-width:1180px;margin:0 auto;padding:72px 32px 56px}.landing-eyebrow{display:inline-flex;align-items:center;gap:8px;font-size:11.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);background:var(--accent-soft);padding:6px 12px;border-radius:99px;margin-bottom:18px}.landing-hero h1{font-size:clamp(40px,5.4vw,62px);font-weight:800;letter-spacing:-.035em;line-height:1.04;margin-bottom:20px}.landing-hero h1 .warm{color:var(--accent)}.landing-hero .sub{font-size:clamp(16px,1.6vw,19px);color:var(--ink-2);line-height:1.55;max-width:520px;margin-bottom:30px}.landing-hero .sub b{color:var(--ink);font-weight:700}.landing-cta-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.landing-cta-row .btn{font-size:15px;padding:12px 22px;border-radius:var(--r-lg)}.landing-cta-row .btn-ghost{font-size:14px}.landing-hero .hero-note{margin-top:16px;font-size:12.5px;color:var(--ink-3)}.landing-hero-art{position:relative}.landing-hero-art img.hero-photo{width:100%;border-radius:20px;border:1px solid var(--line);box-shadow:var(--shadow-1);display:block}.hero-float{position:absolute;left:-18px;bottom:-22px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:0 12px 32px color-mix(in srgb,var(--ink) 12%,transparent);padding:14px 18px;min-width:240px}.hero-float .head{display:flex;align-items:center;justify-content:space-between;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);margin-bottom:10px}.hero-float .head .live{color:var(--success);display:inline-flex;align-items:center;gap:5px}.hero-float .head .live:before{content:"";width:7px;height:7px;border-radius:50%;background:var(--success);animation:pulse 1.6s ease infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.float-chips{display:grid;gap:6px}.float-chip{display:flex;align-items:center;gap:9px;font-size:12.5px;font-weight:600;padding:6px 10px;border-radius:8px}.float-chip .n{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-weight:700;font-size:12px;padding:1px 7px;border-radius:5px}.float-chip.q1{background:var(--q1-soft)}.float-chip.q1 .n{background:var(--q1);color:var(--q1-ink)}.float-chip.q2{background:var(--q2-soft)}.float-chip.q2 .n{background:var(--q2);color:var(--q2-ink)}.float-chip .who{flex:1}.float-chip .pos{font-family:var(--font-num);font-size:11px;color:var(--ink-3)}.landing-proof{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--surface)}.landing-proof .inner{max-width:1180px;margin:0 auto;padding:26px 32px;display:grid;grid-template-columns:repeat(4,1fr);gap:24px;text-align:center}.proof-item .v{font-family:var(--font-num);font-size:30px;font-weight:700;letter-spacing:-.02em;color:var(--accent)}.proof-item .l{font-size:12.5px;font-weight:600;color:var(--ink-2);margin-top:2px}.landing-section{max-width:1180px;margin:0 auto;padding:88px 32px}.landing-kicker{font-size:11.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--accent);margin-bottom:10px}.landing-section h2{font-size:clamp(28px,3.4vw,40px);font-weight:800;letter-spacing:-.03em;line-height:1.12;margin-bottom:14px}.landing-section .lead{font-size:16.5px;color:var(--ink-2);line-height:1.6;max-width:640px;margin-bottom:40px}.landing-section .lead b{color:var(--ink);font-weight:700}.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.step{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:26px 24px}.step .num{width:34px;height:34px;border-radius:10px;background:var(--accent);color:var(--on-ink);font-family:var(--font-num);font-weight:700;font-size:14px;display:grid;place-items:center;margin-bottom:16px}.step h3{font-size:17px;font-weight:800;letter-spacing:-.01em;margin-bottom:8px}.step p{font-size:13.5px;color:var(--ink-2);line-height:1.55}.step p b{color:var(--ink);font-weight:700}.product-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.product-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}.product-card img{width:100%;display:block;border-bottom:1px solid var(--line)}.product-card .cap{padding:16px 18px}.product-card .cap h3{font-size:14.5px;font-weight:800;margin-bottom:4px}.product-card .cap p{font-size:12.5px;color:var(--ink-2);line-height:1.5}.features{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.feature{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:24px}.feature .ic{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;margin-bottom:14px}.feature .ic svg{width:19px;height:19px}.feature .ic.q1{background:var(--q1-soft);color:var(--q1-deep)}.feature .ic.q2{background:var(--q2-soft);color:var(--q2-deep)}.feature .ic.g{background:var(--accent-soft);color:var(--accent)}.feature h3{font-size:15px;font-weight:800;margin-bottom:6px}.feature p{font-size:13px;color:var(--ink-2);line-height:1.55}.feature p b{color:var(--ink);font-weight:700}.pricing{display:grid;grid-template-columns:repeat(2,minmax(300px,440px));gap:18px;align-items:stretch;justify-content:center}.plan{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:24px 22px;display:flex;flex-direction:column}.plan.hot{border:2px solid var(--accent);box-shadow:0 10px 28px color-mix(in srgb,var(--accent) 14%,transparent)}.plan .tag{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--accent);margin-bottom:6px}.plan .tag.big{color:var(--q2-deep)}.plan h3{font-size:19px;font-weight:800;letter-spacing:-.02em}.plan .price{font-family:var(--font-num);font-size:30px;font-weight:700;letter-spacing:-.02em;margin:12px 0 2px}.plan .price .per{font-family:var(--font-ui);font-size:13px;font-weight:600;color:var(--ink-3)}.plan .fit{font-size:12px;color:var(--ink-2);margin-bottom:16px}.plan ul{list-style:none;flex:1;margin-bottom:20px}.plan li{display:flex;gap:8px;align-items:flex-start;font-size:12.5px;color:var(--ink-2);padding:4.5px 0;line-height:1.45}.plan li svg{width:14px;height:14px;color:var(--success);flex-shrink:0;margin-top:2px}.plan li .soon{color:var(--ink-3);font-style:italic}.plan .btn{justify-content:center}.plan .plan-demo{display:block;text-align:center;margin-top:10px;font-size:12.5px;font-weight:600;color:var(--accent);text-decoration:none}.plan .plan-demo:hover{text-decoration:underline}.pricing-note{text-align:center;margin-top:22px;font-size:13px;color:var(--ink-2)}.pricing-note a{color:var(--accent);font-weight:600;text-decoration:none}.pricing-note a:hover{text-decoration:underline}.district-form{display:flex;flex-direction:column;gap:9px;margin-top:auto}.district-form input,.district-form textarea{width:100%;padding:9px 11px;border:1px solid var(--line);border-radius:9px;background:var(--bg, #fff);color:var(--ink);font-family:var(--font-ui);font-size:13px;resize:vertical}.district-form input:focus,.district-form textarea:focus{outline:2px solid color-mix(in srgb,var(--accent) 35%,transparent);outline-offset:1px;border-color:var(--accent)}.district-form input::placeholder,.district-form textarea::placeholder{color:var(--ink-3)}.district-form .btn{justify-content:center;margin-top:2px}.faq{max-width:760px;margin:0 auto}.faq details{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:10px;padding:0}.faq summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:16px;padding:16px 20px;font-size:14.5px;font-weight:700}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";font-family:var(--font-num);font-size:18px;color:var(--ink-3);transition:transform .15s ease}.faq details[open] summary:after{transform:rotate(45deg)}.faq .a{padding:0 20px 16px;font-size:13.5px;color:var(--ink-2);line-height:1.6}.landing-cta{text-align:center;padding:84px 32px 96px}.landing-cta h2{font-size:clamp(30px,4vw,46px);font-weight:800;letter-spacing:-.03em;margin-bottom:14px}.landing-cta p{font-size:16px;color:var(--ink-2);max-width:480px;margin:0 auto 28px}.landing-cta .btn{font-size:16px;padding:14px 28px;border-radius:var(--r-lg)}.landing-foot{border-top:1px solid var(--line);background:var(--surface)}.landing-foot .inner{max-width:1180px;margin:0 auto;padding:40px 32px 32px;display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:32px}.landing-foot .brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:15px;margin-bottom:10px}.landing-foot .brand img{width:26px;height:26px;border-radius:7px}.landing-foot .blurb{font-size:12.5px;color:var(--ink-2);line-height:1.55;max-width:260px}.landing-foot h4{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-bottom:12px}.landing-foot .col a{display:block;font-size:13px;color:var(--ink-2);text-decoration:none;padding:4px 0}.landing-foot .col a:hover{color:var(--accent)}.landing-foot .legal{max-width:1180px;margin:0 auto;padding:18px 32px;border-top:1px solid var(--line);font-size:11.5px;color:var(--ink-3)}@media (max-width: 1000px){.landing-hero{grid-template-columns:1fr;padding-top:48px}.landing-hero .sub{max-width:100%}.landing-hero-art{order:2}.hero-float{left:12px;bottom:-18px}.landing-proof .inner{grid-template-columns:repeat(2,1fr);gap:18px}.steps,.product-grid,.features,.pricing,.landing-foot .inner{grid-template-columns:1fr 1fr}}@media (max-width: 620px){.landing-nav{flex-wrap:wrap;gap:10px;padding:12px 18px}.landing-nav .links{display:none}.steps,.product-grid,.features,.pricing{grid-template-columns:1fr}.landing-section{padding:56px 20px}.landing-hero{padding:40px 20px}}@font-face{font-family:Plus Jakarta Sans;src:url(/assets/pjs-400-Dhut76fR.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Plus Jakarta Sans;src:url(/assets/pjs-500-Bf-nb4oT.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Plus Jakarta Sans;src:url(/assets/pjs-600-DLTa1BUW.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Plus Jakarta Sans;src:url(/assets/pjs-700-CfpNZvy6.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Plus Jakarta Sans;src:url(/assets/pjs-800-CusIZhrK.woff2) format("woff2");font-weight:800;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/plex-mono-500-C820gu2e.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/plex-mono-600-DpGnXj3s.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:IBM Plex Mono;src:url(/assets/plex-mono-700-Bm1Kh9QZ.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}:root{--canvas: #FAF8F5;--surface: #FFFFFF;--surface-2: #F4F1EB;--surface-hover: #FCFAF7;--ink: #29251F;--ink-2: #6B6357;--ink-3: #9B9284;--line: #E7E1D6;--line-strong: #D8D0C2;--accent: #2D6A4F;--accent-hover: #245540;--accent-soft: #E3EDE7;--success: #3A7D44;--warning: #B97D10;--warning-soft: #F6EDD8;--danger: #B3402E;--danger-soft: #F7E8E4;--q1: #E8A93C;--q1-deep: #8A6414;--q1-soft: #FBF3E0;--q1-ink: #3D2E07;--q2: #E07B39;--q2-deep: #8F4A1E;--q2-soft: #FAEEE2;--q2-ink: #4A2410;--grade-pk: #8C66C4;--grade-pk-soft: #EFE7F8;--grade-pk-ink: #4A2E7A;--grade-k: #2E7D8C;--grade-k-soft: #E0F0F3;--grade-k-ink: #1B4D56;--grade-1: #4A88B8;--grade-1-soft: #E4EFF7;--grade-1-ink: #21496B;--font-ui: "Plus Jakarta Sans", -apple-system, "Segoe UI", sans-serif;--font-num: "IBM Plex Mono", ui-monospace, "SF Mono", monospace;--r-sm: 6px;--r-md: 8px;--r-lg: 12px;--shadow-1: 0 1px 2px rgba(41, 37, 31, .05), 0 1px 1px rgba(41, 37, 31, .03);--on-ink: #F5F1E9;--hover-overlay: rgba(41, 37, 31, .06);--on-ink-hover: rgba(255, 255, 255, .08);--on-ink-active: rgba(255, 255, 255, .14);--backdrop: rgba(41, 37, 31, .45);--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-6: 24px;--sp-8: 32px;--sp-12: 48px;--ring: 0 0 0 3px var(--accent-soft)}:root{--gray-50: var(--canvas);--gray-100: var(--surface-2);--gray-200: var(--line);--gray-300: var(--line-strong);--gray-400: var(--ink-3);--gray-500: var(--ink-2);--gray-600: var(--ink-2);--gray-700: var(--ink);--gray-900: var(--ink);--blue-50: var(--accent-soft);--blue-100: var(--accent-soft);--blue-200: var(--accent-soft);--blue-600: var(--accent);--blue-700: var(--accent);--green-50: var(--accent-soft);--green-200: var(--accent-soft);--green-700: var(--success);--orange-50: var(--q2-soft);--orange-200: var(--q2-soft);--orange-700: var(--q2-deep);--purple-50: var(--accent-soft);--purple-200: var(--accent-soft);--purple-700: var(--accent);--yellow-100: var(--q1-soft);--yellow-600: var(--q1-deep);--primary-600: var(--accent);--radius: var(--r-md);--radius-md: var(--r-md);--radius-lg: var(--r-lg);--shadow-sm: var(--shadow-1);--shadow-lg: var(--shadow-1);--shadow-xl: var(--shadow-1);--shadow: var(--shadow-1)}.num{font-family:var(--font-num);font-variant-numeric:tabular-nums}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}*{margin:0;padding:0;box-sizing:border-box}html,body{height:100%}body{font-family:var(--font-ui);background:var(--canvas);color:var(--ink);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}button,input,select,textarea{font-family:inherit}.appnav{display:flex;align-items:center;gap:28px;padding:0 24px;height:56px;background:var(--surface);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:15px;letter-spacing:-.01em;color:var(--ink);text-decoration:none}.brand .mark{width:28px;height:28px;border-radius:7px;background:var(--accent);display:grid;place-items:center;color:#fff}.school-tag{font-size:11.5px;font-weight:600;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);padding:3px 9px;border-radius:99px}.appnav .links{display:flex;gap:2px;margin-left:8px}.appnav .links a{font-size:13px;font-weight:600;color:var(--ink-2);text-decoration:none;padding:6px 11px;border-radius:var(--r-sm)}.appnav .links a:hover{background:var(--surface-2);color:var(--ink)}.appnav .links a.on{background:var(--accent-soft);color:var(--accent)}.appnav .school-view-link{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:600;color:var(--ink-2);text-decoration:none;padding:6px 11px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--surface-2)}.appnav .school-view-link:hover{color:var(--accent);border-color:var(--accent)}.appnav .spacer{flex:1}.avatar{width:30px;height:30px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-weight:700;font-size:12px;display:grid;place-items:center}.page{padding:24px;max-width:1120px;margin:0 auto}.page-head{display:flex;align-items:flex-end;justify-content:space-between;margin-bottom:20px}.page-head h1{font-size:20px;font-weight:800;letter-spacing:-.02em}.page-head .sub{font-size:13px;color:var(--ink-2);margin-top:2px}.btn{display:inline-flex;align-items:center;gap:7px;font-family:var(--font-ui);font-size:13px;font-weight:600;padding:8px 14px;border-radius:var(--r-md);border:1px solid transparent;cursor:pointer;transition:background .12s ease}.btn svg{width:14px;height:14px}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-ghost{background:var(--surface);color:var(--ink);border-color:var(--line-strong)}.btn-ghost:hover{background:var(--surface-2)}.btn-danger{background:var(--surface);color:var(--danger);border-color:var(--line-strong)}.btn-danger:hover{background:var(--danger-soft);border-color:var(--danger)}.btn-sm{padding:5px 9px;font-size:12px;border-radius:var(--r-sm)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-secondary{background:var(--surface);color:var(--ink);border-color:var(--line-strong)}.btn-secondary:hover{background:var(--surface-2)}.container{max-width:80rem;margin:0 auto;padding:0 1rem}.page-header{display:flex;align-items:flex-end;justify-content:space-between;margin:28px 0 20px}.page-title{font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1.15}.page-subtitle{font-size:13px;color:var(--ink-2);font-weight:500}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:1.5rem}.form-group{margin-bottom:16px}.icon-btn{width:26px;height:26px;border-radius:6px;border:none;background:transparent;color:var(--ink-3);cursor:pointer;display:grid;place-items:center}.icon-btn:hover{background:var(--hover-overlay);color:var(--ink)}.icon-btn svg{width:13px;height:13px}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden;margin-bottom:20px}.stat{background:var(--surface);padding:14px 18px}.stat .v{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:26px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.stat .l{font-size:12px;font-weight:600;color:var(--ink-2);margin-top:2px}.stat .delta{font-family:var(--font-num);font-size:11.5px;font-weight:600}.delta.up{color:var(--success)}.delta.flat{color:var(--ink-3)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}.add-form{display:flex;align-items:center;gap:10px;padding:14px 16px;margin-bottom:20px}.add-form .field{position:relative}.add-form input{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:15px;font-weight:600;color:var(--ink);width:170px;padding:9px 12px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--canvas);outline:none}.add-form input:focus{border-color:var(--accent);box-shadow:var(--ring)}.add-form label{font-size:11px;font-weight:700;color:var(--ink-3);letter-spacing:.06em;text-transform:uppercase;display:block;margin-bottom:4px}.add-form .grow{flex:1}.add-form .hint{font-size:12px;color:var(--ink-3)}.form-input{font-family:var(--font-ui);font-size:13px;color:var(--ink);width:100%;padding:8px 12px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);outline:none}.form-input:focus{border-color:var(--accent);box-shadow:var(--ring)}.form-input::placeholder{color:var(--ink-3)}.form-label{font-size:11px;font-weight:700;color:var(--ink-3);letter-spacing:.06em;text-transform:uppercase;display:block;margin-bottom:4px}.boards{display:grid;grid-template-columns:1fr 1fr;gap:16px}.board{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}.board-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line)}.board-head .name{display:flex;align-items:center;gap:9px;font-weight:700;font-size:14px}.swatch{width:12px;height:12px;border-radius:4px}.swatch.q1{background:var(--q1)}.swatch.q2{background:var(--q2)}.count-pill{font-family:var(--font-num);font-size:12px;font-weight:600;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);padding:2px 9px;border-radius:99px}.slots{padding:10px 12px;display:grid;gap:6px}.slot{display:flex;align-items:center;gap:12px;padding:8px 10px;border-radius:var(--r-md);border:1px solid transparent;min-height:44px}.slot .pos{font-family:var(--font-num);font-size:12px;font-weight:600;color:var(--ink-3);width:20px;text-align:right;flex-shrink:0}.slot .tag{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:14px;font-weight:600;padding:3px 9px;border-radius:var(--r-sm);flex-shrink:0}.slot .who{font-size:13.5px;font-weight:600;flex:1}.slot .who .carpool{color:var(--ink-2);font-weight:500}.slot.empty{border-style:dashed;border-color:var(--line)}.slot.empty .who{color:var(--ink-3);font-weight:500;font-size:12.5px}.board.q1 .slot.filled{background:var(--q1-soft)}.board.q1 .slot.filled .tag{background:var(--q1);color:var(--q1-ink)}.board.q2 .slot.filled{background:var(--q2-soft)}.board.q2 .slot.filled .tag{background:var(--q2);color:var(--q2-ink)}.slot .row-actions{display:flex;gap:4px;opacity:0}.slot:hover .row-actions{opacity:1}.slot.dup .who:after{content:"duplicate";font-size:10px;font-weight:700;letter-spacing:.04em;color:var(--warning);background:var(--warning-soft);padding:2px 6px;border-radius:4px;margin-left:8px;vertical-align:1px}kbd{font-family:var(--font-num);font-size:11px;font-weight:600;color:var(--ink-2);background:var(--surface);border:1px solid var(--line-strong);border-bottom-width:2px;border-radius:5px;padding:2px 6px}.speed-wrap{max-width:640px;margin:0 auto;padding:40px 24px}.speed-head h1{font-size:22px;font-weight:800;letter-spacing:-.02em}.speed-head .sub{color:var(--ink-2);font-size:13.5px;margin-top:3px}.speed-input{width:100%;margin-top:22px;font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:30px;font-weight:600;color:var(--ink);padding:18px 20px;background:var(--surface);border:1.5px solid var(--line-strong);border-radius:var(--r-lg);outline:none}.speed-input:focus{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.speed-input::placeholder{color:var(--ink-3);font-weight:500;font-size:19px}.speed-hints{display:flex;gap:16px;margin-top:12px;font-size:12px;color:var(--ink-2);align-items:center}.recent{margin-top:28px}.recent h3{font-size:12px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-3);margin-bottom:8px}.recent-row{display:flex;align-items:center;gap:12px;padding:9px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:5px}.recent-row .tag{font-family:var(--font-num);font-weight:600;font-size:13px;background:var(--surface-2);border-radius:5px;padding:2px 8px}.recent-row .who{font-weight:600;font-size:13.5px;flex:1}.recent-row .t{font-family:var(--font-num);font-size:11.5px;color:var(--ink-3)}.speed-stats{display:flex;gap:24px;margin-top:20px;padding:12px 16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}.speed-stats .s .v{font-family:var(--font-num);font-size:18px;font-weight:600}.speed-stats .s .l{font-size:11px;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em}.display-screen{background:var(--canvas);padding:28px 32px;min-height:640px}.display-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:22px}.display-top .school{display:flex;align-items:center;gap:14px}.display-top .logo{width:44px;height:44px;border-radius:10px;background:var(--accent);display:grid;place-items:center;color:#fff;font-weight:800;font-size:16px}.display-top h1{font-size:22px;font-weight:800;letter-spacing:-.02em;line-height:1.15}.display-top .motto{font-size:13px;color:var(--ink-2);font-weight:500}.display-clock{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:20px;font-weight:600;color:var(--ink-2)}.display-boards{display:grid;grid-template-columns:1fr 1fr;gap:24px}.queue-container{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-bottom:var(--sp-6)}.queue-card{background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden}.queue-header{display:flex;align-items:center;justify-content:space-between;padding:14px 22px}.queue-card.q1 .queue-header{background:var(--q1)}.queue-card.q2 .queue-header{background:var(--q2)}.queue-header>span:first-child{font-size:17px;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.queue-card.q1 .queue-header>span:first-child,.queue-card.q1 .queue-header .badge{color:var(--q1-ink)}.queue-card.q2 .queue-header>span:first-child,.queue-card.q2 .queue-header .badge{color:var(--q2-ink)}.queue-header .badge{font-family:var(--font-num);font-size:13px;font-weight:700;background:#ffffff59;border-radius:99px;padding:3px 10px}.queue-slots{display:grid;grid-template-columns:1fr;gap:8px;padding:14px}.queue-slot{display:flex;align-items:center;gap:12px;border-radius:10px;padding:10px 12px;min-height:58px;border:1.5px dashed var(--line);background:var(--surface)}.queue-card.q1 .queue-slot.filled{background:var(--q1-soft);border:none}.queue-card.q2 .queue-slot.filled{background:var(--q2-soft);border:none}.queue-slot-number{font-family:var(--font-num);font-variant-numeric:tabular-nums;font-size:13px;font-weight:700;color:var(--ink-3);min-width:26px;text-align:center}.queue-card.q1 .queue-slot.filled .queue-slot-number{color:var(--q1-deep)}.queue-card.q2 .queue-slot.filled .queue-slot-number{color:var(--q2-deep)}.queue-slot-content{flex:1;font-size:14px;color:var(--ink-2)}.queue-slot.filled .queue-slot-content{color:var(--ink);font-weight:500}.queue-slot .btn{border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-2)}.queue-slot .btn:hover{background:var(--surface-2)}.queue-slot .btn-danger{color:var(--danger);border-color:var(--line-strong)}.queue-slot .btn-danger:hover{background:var(--danger-soft);border-color:var(--danger)}@media (max-width: 900px){.queue-container{grid-template-columns:1fr}}.db{background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden}.db-head{display:flex;align-items:center;justify-content:space-between;padding:14px 22px}.db.q1 .db-head{background:var(--q1)}.db.q2 .db-head{background:var(--q2)}.db-head .name{font-size:17px;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.db.q1 .db-head .name,.db.q1 .db-head .c{color:var(--q1-ink)}.db.q2 .db-head .name,.db.q2 .db-head .c{color:var(--q2-ink)}.db-head .c{font-family:var(--font-num);font-size:15px;font-weight:700}.db-grid{display:grid;grid-template-columns:1fr 1fr;grid-auto-flow:column;gap:8px;padding:14px}.dslot{display:flex;align-items:center;gap:14px;border-radius:10px;padding:12px 14px;min-height:84px;border:1.5px dashed var(--line)}.dslot .pos{font-family:var(--font-num);font-size:29px;font-weight:800;width:60px;height:60px;flex-shrink:0;display:flex;align-items:center;justify-content:center;border-radius:50%}.db.q1 .dslot .pos{background:var(--q1);color:var(--q1-ink)}.db.q2 .dslot .pos{background:var(--q2);color:var(--q2-ink)}.dslot.empty .pos{background:transparent;border:2px dashed var(--line-strong);color:var(--ink-3)}.dslot .who{font-size:29px;font-weight:800;letter-spacing:-.01em}.dslot .who .dnum{color:#000;font-weight:800}.dslot .who .cp{font-size:29px;color:var(--ink);font-weight:800;display:block}.dslot.empty .pos{color:var(--ink-3)}.db.q1 .dslot.filled{background:var(--q1-soft);border:none}.db.q2 .dslot.filled{background:var(--q2-soft);border:none}.grade-boards{display:flex;gap:var(--sp-6);align-items:stretch}.db-grade{flex:1;min-width:0}.db-grade .db-head-col{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);margin-bottom:var(--sp-3)}.db-grade .db-head-col .name{font-size:18px;font-weight:700;letter-spacing:-.01em}.db-grade .db-head-col .c{font-size:15px;font-weight:600;color:var(--ink-2)}.dslot-col{display:flex;flex-direction:column;gap:12px}.col-pager{display:flex;align-items:center;justify-content:center;gap:var(--sp-3);margin-top:var(--sp-3)}.col-pager .num{font-size:14px;font-weight:600;color:var(--ink-2)}.display-foot{margin-top:18px;text-align:center;font-size:12px;color:var(--ink-3)}.walker-mobile-list{display:none}@media (pointer: coarse) and ((max-width: 500px) or ((orientation: landscape) and (max-height: 480px))){.grade-boards{display:none}.walker-mobile-list{display:flex;flex-direction:column;gap:10px}.walker-mobile-list .wml-row{min-height:60px;padding:10px 12px;border:none}.walker-mobile-list .wml-row .pos{width:44px;height:44px;font-size:20px}.walker-mobile-list .wml-row .who{font-size:20px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.walker-mobile-list .wml-row .who .dnum{font-size:15px;margin-left:6px}.walker-mobile-list .wml-empty{text-align:center;color:var(--ink-3);font-size:16px;padding:var(--sp-6) 0}.display-screen{padding:16px}.display-top .school h1{font-size:18px}.display-clock{white-space:nowrap}.display-foot .kbd-hint{display:none}}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:20px}.tabs button{font-family:var(--font-ui);font-size:13px;font-weight:600;color:var(--ink-2);background:none;border:none;padding:9px 14px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px}.tabs button.on{color:var(--accent);border-bottom-color:var(--accent)}.table-tools{display:flex;align-items:center;gap:10px;margin-bottom:12px}.search{flex:1;max-width:300px;position:relative}.search input{width:100%;font-family:var(--font-ui);font-size:13px;padding:8px 12px 8px 34px;border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);outline:none;color:var(--ink)}.search input:focus{border-color:var(--accent);box-shadow:var(--ring)}.search svg{position:absolute;left:11px;top:50%;transform:translateY(-50%);width:14px;height:14px;color:var(--ink-3)}table.dt{width:100%;border-collapse:collapse;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);overflow:hidden}.dt-wrap{border-radius:var(--r-lg);overflow:hidden;border:1px solid var(--line)}.dt th{text-align:left;font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);background:var(--surface-2);padding:9px 14px;border-bottom:1px solid var(--line)}.dt td{padding:9px 14px;font-size:13px;border-bottom:1px solid var(--line);background:var(--surface)}.dt tr:last-child td{border-bottom:none}.dt tr:hover td{background:var(--surface-hover)}.dt td.num-cell{font-family:var(--font-num);font-weight:600}.dt .grade{font-size:12px;color:var(--ink-2);background:var(--surface-2);padding:2px 8px;border-radius:4px;font-weight:600}.csv-panel{display:flex;align-items:center;gap:14px;padding:14px 16px;margin-bottom:16px}.csv-panel .icon{width:34px;height:34px;border-radius:8px;background:var(--accent-soft);color:var(--accent);display:grid;place-items:center;flex-shrink:0}.csv-panel .icon svg{width:16px;height:16px}.csv-panel .t{font-weight:700;font-size:13.5px}.csv-panel .d{font-size:12px;color:var(--ink-2)}.csv-panel .grow{flex:1}.login-screen{display:grid;place-items:center;min-height:640px;padding:24px}.login-card{width:100%;max-width:400px}.login-school{text-align:center;margin-bottom:26px}.login-school .logo{width:56px;height:56px;border-radius:14px;margin:0 auto 14px;background:var(--q1);display:grid;place-items:center;font-weight:800;font-size:20px;color:var(--q1-ink)}.login-school h1{font-size:21px;font-weight:800;letter-spacing:-.02em}.login-school .sub{font-size:13px;color:var(--ink-2);margin-top:3px}.login-box{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px;box-shadow:var(--shadow-1)}.sso-btn{width:100%;display:flex;align-items:center;justify-content:center;gap:10px;font-family:var(--font-ui);font-size:13.5px;font-weight:600;color:var(--ink);background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-md);padding:11px;cursor:pointer;margin-bottom:10px}.sso-btn:hover{background:var(--surface-2)}.sso-btn svg{width:16px;height:16px}.login-help{text-align:center;font-size:12px;color:var(--ink-3);margin-top:18px}.login-help a{color:var(--accent);font-weight:600;text-decoration:none}.badge{display:inline-flex;align-items:center;font-size:11px;font-weight:700;letter-spacing:.02em;padding:3px 9px;border-radius:99px}.badge.ok{background:var(--accent-soft);color:var(--accent)}.badge.warn{background:var(--warning-soft);color:var(--warning)}.badge.off{background:var(--surface-2);color:var(--ink-2)}.badge.plan{background:var(--surface-2);color:var(--ink-2);border:1px solid var(--line);font-family:var(--font-num);font-weight:600}.badge.grade{font-family:var(--font-num);font-weight:600;background:var(--surface-2);color:var(--ink-2)}.badge.grade-pk{background:var(--grade-pk-soft);color:var(--grade-pk-ink)}.badge.grade-k{background:var(--grade-k-soft);color:var(--grade-k-ink)}.badge.grade-1{background:var(--grade-1-soft);color:var(--grade-1-ink)}.badge.grade-board{font-size:16px;padding:5px 12px}.plat-grid{display:grid;grid-template-columns:1fr 320px;gap:16px;align-items:start}.plat-main{display:flex;flex-direction:column;gap:16px}.snap-rows{display:flex;flex-direction:column}.snap-row{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}.snap-row:last-child{border-bottom:none}.snap-row .k{flex:0 0 90px;font-size:12.5px;font-weight:600;color:var(--ink-2)}.snap-row .v{flex:0 0 28px;font-size:16px;font-weight:800;font-family:var(--font-num)}.snap-row .d{font-size:11.5px;color:var(--ink-3)}.audit-scroll{max-height:170px;overflow-y:auto;margin:0 -4px;padding:0 4px}.audit-scroll::-webkit-scrollbar{width:6px}.audit-scroll::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:3px}.side-card{padding:16px}.side-card h3{font-size:13px;font-weight:700;margin-bottom:12px}.switch-row{display:flex;align-items:center;justify-content:space-between;padding:9px 0;border-bottom:1px solid var(--line)}.switch-row:last-child{border-bottom:none}.switch-row .n{font-size:13px;font-weight:600}.switch-row .d{font-size:11.5px;color:var(--ink-3)}.switch{width:36px;height:21px;border-radius:99px;background:var(--line-strong);position:relative;flex-shrink:0;border:none;cursor:pointer;transition:background .12s ease}.switch:after{content:"";position:absolute;width:17px;height:17px;border-radius:50%;background:#fff;top:2px;left:2px;box-shadow:var(--shadow-1)}.switch.on{background:var(--accent)}.switch.on:after{left:17px}.audit-row{display:flex;gap:10px;align-items:baseline;padding:7px 0;border-bottom:1px solid var(--line);font-size:12.5px}.audit-row:last-child{border-bottom:none}.audit-row .t{font-family:var(--font-num);font-size:11px;color:var(--ink-3);flex-shrink:0}.audit-row .a{font-weight:600;color:var(--ink)}.alert{display:flex;align-items:flex-start;gap:10px;padding:12px 16px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface);font-size:13px;color:var(--ink-2);margin-bottom:16px}.alert svg{width:16px;height:16px;flex-shrink:0;margin-top:1px}.alert-info{border-color:var(--line)}.alert-info svg{color:var(--accent)}.alert-warning{background:var(--warning-soft);border-color:var(--warning);color:var(--warning)}.alert-warning svg{color:var(--warning)}.alert-error{background:var(--danger-soft);border-color:var(--danger);color:var(--danger)}.alert-error svg{color:var(--danger)}.alert-success{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.alert-success svg{color:var(--accent)}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid var(--line-strong);border-top-color:var(--accent);animation:spin .7s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--backdrop);display:grid;place-items:center;padding:24px;z-index:50}.modal{width:100%;max-width:440px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);padding:22px}.modal h2{font-size:17px;font-weight:800;letter-spacing:-.02em;margin-bottom:6px}.modal .sub{font-size:13px;color:var(--ink-2);margin-bottom:16px}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--ink);color:var(--on-ink);font-size:13px;font-weight:600;padding:10px 18px;border-radius:var(--r-md);box-shadow:var(--shadow-1);z-index:60}.empty-state{text-align:center;padding:40px 24px;color:var(--ink-2);font-size:13.5px}.empty-state svg{width:24px;height:24px;color:var(--ink-3);margin:0 auto 10px;display:block}.empty-state .t{font-weight:700;color:var(--ink);margin-bottom:2px}
