:root{--bg: #f4f5fa;--panel: #ffffff;--ink: #171a26;--muted: #6b7185;--line: #e4e6ef;--accent: #4f46e5;--accent-ink: #ffffff;--accent-soft: #eef0ff;--danger: #dc2626;--danger-soft: #fee2e2;--warn: #d97706;--warn-soft: #fef3c7;--ok: #059669;--ok-soft: #d1fae5;--lunch: rgba(220, 38, 38, .16);--lunch-line: rgba(220, 38, 38, .55);--specials: rgba(217, 119, 6, .16);--specials-line: rgba(217, 119, 6, .6);--radius: 12px;--shadow: 0 1px 2px rgba(23, 26, 38, .05), 0 6px 18px rgba(23, 26, 38, .06);--font: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:var(--font);font-size:14px;line-height:1.45;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased}button,input,select{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--accent);text-decoration:none}h1,h2,h3{margin:0;font-weight:650;letter-spacing:-.01em}h1{font-size:22px}h2{font-size:16px}h3{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}.topbar{display:flex;align-items:center;gap:16px;padding:12px 24px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:10px;font-weight:700;color:var(--ink)}.brand .dot{width:12px;height:12px;border-radius:50%;background:linear-gradient(135deg,#4f46e5,#a855f7)}.crumb{color:var(--muted)}.crumb b{color:var(--ink);font-weight:600}.spacer{flex:1}.page{max-width:1400px;margin:0 auto;padding:24px}.page-head{display:flex;align-items:center;gap:16px;margin-bottom:18px}.page-head .sub{color:var(--muted)}.btn{display:inline-flex;align-items:center;gap:8px;padding:8px 14px;border-radius:9px;border:1px solid var(--line);background:var(--panel);font-weight:550;transition:background .12s,border-color .12s,transform .05s}.btn:hover{background:#fafbff;border-color:#cfd3e4}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:default;transform:none}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn.primary:hover{background:#4338ca}.btn.danger{color:var(--danger)}.btn.ghost{border-color:transparent;background:transparent}.btn.ghost:hover{background:var(--accent-soft)}.btn.sm{padding:5px 10px;font-size:13px;border-radius:7px}.btn .spin{width:14px;height:14px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.field{display:flex;flex-direction:column;gap:5px}.field label{font-size:12px;color:var(--muted);font-weight:550}.input,.field input,.field select{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;min-width:0;transition:border-color .12s,box-shadow .12s}.field input:focus,.input:focus,.grid input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #4f46e526}.field input.bad,.grid input.bad{border-color:var(--danger);background:#fff7f7}.hint{font-size:12px;color:var(--muted)}.err{font-size:12px;color:var(--danger)}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:20px}.tab{padding:10px 14px;border:none;background:none;color:var(--muted);font-weight:550;border-bottom:2px solid transparent;margin-bottom:-1px}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tab .pill{margin-left:6px}.pill{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:12px;font-weight:600;background:var(--accent-soft);color:var(--accent)}.pill.danger{background:var(--danger-soft);color:var(--danger)}.pill.warn{background:var(--warn-soft);color:var(--warn)}.pill.ok{background:var(--ok-soft);color:var(--ok)}.pill.muted{background:#eef0f5;color:var(--muted)}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card .card-head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line)}.card .card-body{padding:18px}.toast{position:fixed;bottom:20px;left:50%;transform:translate(-50%);background:var(--ink);color:#fff;padding:10px 16px;border-radius:10px;box-shadow:var(--shadow);z-index:50;font-weight:500}.toast.error{background:var(--danger)}.school-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.school-card{display:block;padding:18px;color:inherit;transition:transform .1s,box-shadow .1s}.school-card:hover{transform:translateY(-2px);box-shadow:0 10px 24px #171a261a}.school-card h2{margin-bottom:8px}.school-card .meta{display:flex;gap:8px;flex-wrap:wrap;color:var(--muted);font-size:13px}.new-school{display:flex;gap:8px;align-items:center}.new-school input{flex:1}.empty{padding:48px;text-align:center;color:var(--muted)}.intake{display:grid;grid-template-columns:300px 1fr;gap:20px;align-items:start}.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.settings-grid .wide{grid-column:1 / -1}details.advanced summary{cursor:pointer;color:var(--muted);font-weight:550;padding:6px 0}.grid{width:100%;border-collapse:separate;border-spacing:0}.grid th{text-align:left;font-size:12px;color:var(--muted);font-weight:600;padding:8px;border-bottom:1px solid var(--line);white-space:nowrap}.grid td{padding:4px;border-bottom:1px solid #f0f1f6;vertical-align:top}.grid input{width:100%;padding:7px 8px;border:1px solid transparent;border-radius:7px;background:transparent}.grid input:hover{border-color:var(--line);background:#fff}.grid input.bad{border-color:var(--danger)}.grid .num{width:40px;color:var(--muted);text-align:right;padding-right:8px;padding-top:12px;font-variant-numeric:tabular-nums}.grid .cell-err{font-size:11px;color:var(--danger);padding:0 8px 4px}.grid .check{text-align:center;padding-top:10px}.grid .del{text-align:center}.grid .del button{opacity:0}.grid tr:hover .del button{opacity:1}.grid tfoot td{border-bottom:none;padding:10px 8px}.paste-hint{display:flex;gap:10px;align-items:center;padding:10px 14px;background:var(--accent-soft);border-radius:10px;color:#3730a3;font-size:13px;margin-bottom:12px}.paste-zone{position:absolute;opacity:0;width:1px;height:1px}.settings-errors{margin-top:10px}.board-toolbar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}.stat{display:flex;flex-direction:column;padding:8px 14px;background:var(--panel);border:1px solid var(--line);border-radius:10px;min-width:96px}.stat b{font-size:18px;letter-spacing:-.02em}.stat span{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.board{display:grid;grid-template-columns:1fr 300px;gap:18px;align-items:start}.days{display:flex;flex-direction:column;gap:16px;min-width:0}.day{overflow:hidden}.day .card-head h2{flex:1}.day .card-head .meta{display:flex;gap:8px;align-items:center;color:var(--muted);font-size:13px}.timeline-scroll{overflow-x:auto}.timeline{position:relative;min-width:100%}.ruler{position:relative;height:26px;border-bottom:1px solid var(--line)}.ruler .tick{position:absolute;top:0;height:100%;border-left:1px solid var(--line);font-size:11px;color:var(--muted);padding-left:4px;line-height:26px}.ruler .tick.half{border-left-color:#f0f1f6;color:transparent}.lanes{position:relative}.lane{position:relative;height:70px;border-bottom:1px solid #f0f1f6}.lane.empty-lane{height:52px;display:flex;align-items:center;justify-content:center;color:var(--muted);font-size:13px;border-bottom:none}.lane.dropping{background:var(--accent-soft)}.band{position:absolute;top:6px;bottom:6px;border-radius:6px}.band.lunch{background:var(--lunch);border:1px dashed var(--lunch-line)}.band.specials{background:var(--specials);border:1px dashed var(--specials-line)}.band .band-label{position:absolute;top:2px;left:6px;font-size:10px;color:var(--danger);font-weight:600;white-space:nowrap}.band.specials .band-label{color:var(--warn)}.break-band{position:absolute;top:0;bottom:0;background:repeating-linear-gradient(135deg,#eef0f5 0,#eef0f5 6px,#f7f8fb 6px,#f7f8fb 12px);border-left:1px solid var(--line);border-right:1px solid var(--line);z-index:0}.break-band span{position:absolute;top:4px;left:6px;font-size:11px;color:var(--muted)}.now-line{position:absolute;top:0;bottom:0;border-left:1px solid var(--accent);opacity:.4}.group{position:absolute;top:8px;height:46px;border-radius:10px;background:var(--g-bg, #e0e7ff);border:1px solid var(--g-line, #c7d2fe);display:flex;align-items:flex-start;gap:8px;padding:6px 8px 0 10px;cursor:grab;-webkit-user-select:none;user-select:none;box-shadow:0 1px 2px #0000000d;z-index:2;transition:box-shadow .1s}.group:hover{box-shadow:0 4px 12px #171a261f}.group.dragging{opacity:.85;cursor:grabbing;box-shadow:0 10px 24px #171a2633;z-index:5}.group.error{border-color:var(--danger);box-shadow:0 0 0 2px var(--danger-soft)}.group.warning{border-color:var(--warn)}.group.selected{box-shadow:0 0 0 2px var(--accent)}.group .label{font-weight:700;font-size:15px;width:22px;text-align:center;color:#312e81;padding-top:1px}.group .times{font-size:11px;color:#4b5563;white-space:nowrap;line-height:1.2}.group .chips{display:flex;flex-direction:column;align-items:flex-start;gap:3px;overflow:hidden;flex:1;min-width:0}.group .chips .chip{max-width:100%}.group .size{font-size:12px;font-weight:700;color:#312e81;white-space:nowrap}.group .size.over{color:var(--danger)}.group .lineup-tab{position:absolute;left:-1px;top:-1px;bottom:-1px;width:var(--lead-w);background:#ffffff8c;border-right:1px dashed rgba(0,0,0,.15);border-radius:10px 0 0 10px;pointer-events:none}.chip{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:999px;background:#ffffffd9;border:1px solid rgba(0,0,0,.08);font-size:12px;white-space:nowrap;cursor:grab;min-width:0;flex:0 1 auto}.chip b{font-weight:600;overflow:hidden;text-overflow:ellipsis;min-width:0}.chip .n{color:var(--muted)}.chip .sn{color:var(--accent)}.chip.over-target{box-shadow:0 0 0 2px var(--accent)}.tray h3{margin-bottom:10px}.tray-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px dashed var(--line);border-radius:10px;margin-bottom:8px;background:#fff;cursor:grab}.tray-item .chip{flex:none;max-width:55%}.tray-item .why{font-size:12px;color:var(--muted);min-width:0}.tray-item.dropping{border-color:var(--accent);background:var(--accent-soft)}.tray .ok{color:var(--ok);font-weight:550}.fit{margin-top:12px}.fit-hint{color:var(--accent);font-weight:550}.fit-hint.none{color:var(--muted);font-weight:400}.fit-table{width:100%;border-collapse:collapse;font-size:12px;margin-top:10px}.fit-table th{text-align:left;color:var(--muted);font-weight:600;padding:4px 6px;border-bottom:1px solid var(--line)}.fit-table td{padding:5px 6px;border-bottom:1px solid #f0f1f6;vertical-align:top}.fit-table tr.full td{background:var(--ok-soft)}.export-group{display:flex;gap:6px}.btn.disabled{opacity:.5;cursor:not-allowed}.btn .spin.dark{border-color:#00000026;border-top-color:var(--ink)}.issues{margin-top:16px}.issue{display:flex;gap:10px;padding:8px 12px;border-radius:8px;cursor:pointer;align-items:flex-start}.issue:hover{background:#fafbff}.issue .sev{width:8px;height:8px;border-radius:50%;margin-top:6px;flex:none}.issue.error .sev{background:var(--danger)}.issue.warning .sev{background:var(--warn)}.issue .code{font-family:var(--mono);font-size:11px;color:var(--muted)}.drag-ghost{position:fixed;pointer-events:none;z-index:100;transform:translate(-50%,-50%)}.legend{display:flex;gap:14px;font-size:12px;color:var(--muted);align-items:center}.legend i{display:inline-block;width:14px;height:10px;border-radius:3px;vertical-align:middle;margin-right:5px}.legend i.lunch{background:var(--lunch);border:1px dashed var(--lunch-line)}.legend i.specials{background:var(--specials);border:1px dashed var(--specials-line)}.legend i.lead{background:#00000014}kbd{font-family:var(--mono);font-size:11px;padding:1px 5px;border:1px solid var(--line);border-bottom-width:2px;border-radius:4px;background:#fff}.login{min-height:100%;display:flex;align-items:center;justify-content:center;padding:40px 16px}.login-card{width:100%;max-width:380px;padding:28px;display:flex;flex-direction:column;gap:14px}.login-card h1{font-size:24px}.login-card .btn{justify-content:center}.login-card .hint.small{font-size:11px;margin:0}.login-card .err{padding:8px 10px;background:var(--danger-soft);border-radius:8px;font-size:13px}
