:root{--font:"Nunito", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--bg:#f7f5f1;--surface:#fff;--surface-2:#f2efe9;--border:#e4dfd6;--ink:#1f2430;--ink-2:#555c6b;--ink-3:#666c78;--primary:#0f766e;--primary-ink:#fff;--primary-soft:#e0f2ef;--primary-hover:#0b5f58;--danger:#b42318;--danger-soft:#fdecea;--obs-ns:#9a4a07;--obs-ns-bg:#fdf0d9;--obs-in:#1e4fb8;--obs-in-bg:#e2ebfc;--obs-vw:#17703a;--obs-vw-bg:#dcf3e3;--obs-none:#6b7280;--obs-none-bg:#eef0f2;--sync-pending:#9a4a07;--sync-pending-bg:#fdf0d9;--sync-ok:#17703a;--sync-ok-bg:#dcf3e3;--offline:#4b5563;--offline-bg:#e5e7eb;--radius-sm:8px;--radius:12px;--radius-lg:18px;--shadow:0 1px 2px #1f24300f, 0 2px 8px #1f24300d;--shadow-lg:0 10px 40px #1f24302e}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;font-size:15px;line-height:1.45}h1,h2,h3,h4{margin:0;line-height:1.2}h1{font-size:1.5rem;font-weight:800}h2{font-size:1.15rem;font-weight:800}h3{font-size:1rem;font-weight:700}p{margin:0}a{color:var(--primary)}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:3px solid color-mix(in srgb, var(--primary) 55%, transparent);outline-offset:2px}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.muted{color:var(--ink-2)}.subtle{color:var(--ink-3);font-size:.85rem}.stack{gap:var(--gap,12px);flex-direction:column;display:flex}.row{align-items:center;gap:var(--gap,8px);display:flex}.row.wrap{flex-wrap:wrap}.spacer{flex:1}.section-title{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);font-size:.78rem;font-weight:800}.btn{border-radius:var(--radius);cursor:pointer;white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:8px;min-height:44px;padding:0 18px;font-weight:700;text-decoration:none;transition:background .15s,border-color .15s,color .15s;display:inline-flex}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--primary);color:var(--primary-ink)}.btn-primary:hover:not(:disabled){background:var(--primary-hover)}.btn-secondary{background:var(--surface);color:var(--ink);border-color:var(--border)}.btn-secondary:hover:not(:disabled){background:var(--surface-2)}.btn-ghost{color:var(--primary);background:0 0;padding:0 10px}.btn-ghost:hover:not(:disabled){background:var(--primary-soft)}.btn-danger{background:var(--surface);color:var(--danger);border-color:color-mix(in srgb, var(--danger) 35%, white)}.btn-danger:hover:not(:disabled){background:var(--danger-soft)}.btn-sm{border-radius:var(--radius-sm);min-height:34px;padding:0 12px;font-size:.88rem}.btn-block{width:100%}.spinner{border:2px solid;border-right-color:#0000;border-radius:50%;width:16px;height:16px;animation:.7s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:16px}.card-header{align-items:center;gap:8px;margin-bottom:12px;display:flex}.card-link{text-align:left;cursor:pointer;width:100%;color:inherit;text-decoration:none;transition:border-color .15s,box-shadow .15s;display:block}.card-link:hover{border-color:color-mix(in srgb, var(--primary) 45%, var(--border))}.field{flex-direction:column;gap:6px;display:flex}.field-label{font-size:.9rem;font-weight:700}.field-label .optional{color:var(--ink-3);font-weight:600}.field-hint{color:var(--ink-3);font-size:.82rem}.field-error{color:var(--danger);font-size:.84rem;font-weight:600}.input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);width:100%;min-height:44px;padding:10px 12px}.input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);outline:none}.input[aria-invalid=true]{border-color:var(--danger)}textarea.input{resize:vertical;min-height:84px}.input-wrap{position:relative}.input-wrap .input{padding-right:64px}.input-wrap .reveal{position:absolute;top:50%;right:6px;transform:translateY(-50%)}.check{border-radius:var(--radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:10px;min-height:40px;padding:6px 10px;display:flex}.check:hover{background:var(--surface-2)}.check input{width:20px;height:20px;accent-color:var(--primary);flex:none;margin:0}.radio-group{border:0;flex-direction:column;gap:2px;margin:0;padding:0;display:flex}.radio-group.inline{flex-flow:wrap;gap:8px}.radio-group legend{margin-bottom:6px;padding:0;font-size:.9rem;font-weight:700}.radio-group.inline .check{border:1px solid var(--border)}.radio-group.inline .check:has(input:checked){border-color:var(--primary);background:var(--primary-soft)}.badge{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px;font-size:.8rem;font-weight:800;display:inline-flex}.badge .dot{background:currentColor;border-radius:50%;width:8px;height:8px}.obs-NEEDS_SUPPORT{color:var(--obs-ns);background:var(--obs-ns-bg)}.obs-INDEPENDENT{color:var(--obs-in);background:var(--obs-in-bg)}.obs-VERY_WELL{color:var(--obs-vw);background:var(--obs-vw-bg)}.obs-NONE{color:var(--obs-none);background:var(--obs-none-bg);font-weight:700}.sync-PENDING_SYNC{color:var(--sync-pending);background:var(--sync-pending-bg)}.sync-SYNCED,.conn-online{color:var(--sync-ok);background:var(--sync-ok-bg)}.conn-offline{color:var(--offline);background:var(--offline-bg)}.sync-NEEDS_ATTENTION{color:var(--danger);background:var(--danger-soft)}.choice-list{gap:8px;margin:0;padding:0;list-style:none}.choice{text-align:left;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);width:100%;color:var(--ink);font:inherit;cursor:pointer;padding:12px 14px}.choice:hover,.choice:focus-visible{border-color:var(--primary);background:var(--primary-soft)}.connection{border:1px solid var(--border);border-radius:var(--radius-sm);flex-direction:column;gap:6px;margin-top:12px;padding:10px 12px;font-size:.9rem;display:flex}.connection .badge{width:fit-content}.needs-attention{color:var(--danger);font-weight:800}.offline-banner{max-width:960px;padding:12px 24px 0}.chip{background:var(--surface-2);color:var(--ink-2);border-radius:999px;align-items:center;padding:3px 10px;font-size:.8rem;font-weight:700;display:inline-flex}.avatar{width:var(--size,40px);height:var(--size,40px);background:var(--primary-soft);color:var(--primary);font-weight:800;font-size:calc(var(--size,40px) * .38);border-radius:50%;flex:none;place-items:center;display:inline-grid}.empty{text-align:center;color:var(--ink-2);flex-direction:column;align-items:center;gap:6px;padding:28px 16px;display:flex}.empty .empty-icon{font-size:1.8rem}.empty strong{color:var(--ink)}.skeleton{border-radius:var(--radius-sm);background:linear-gradient(90deg, var(--surface-2) 25%, #faf9f6 50%, var(--surface-2) 75%);background-size:200% 100%;animation:1.2s infinite shimmer}@keyframes shimmer{to{background-position:-200% 0}}.alert{border-radius:var(--radius);align-items:flex-start;gap:10px;padding:12px 14px;font-size:.92rem;font-weight:600;display:flex}.alert-error{background:var(--danger-soft);color:var(--danger)}.alert-success{background:var(--sync-ok-bg);color:var(--sync-ok)}.alert-info{background:var(--primary-soft);color:var(--primary-hover)}.alert-warn{background:var(--sync-pending-bg);color:var(--sync-pending)}.dialog-backdrop{z-index:50;background:#14182073;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.dialog{background:var(--surface);border-radius:var(--radius-lg);width:min(420px,100%);box-shadow:var(--shadow-lg);flex-direction:column;gap:14px;padding:20px;display:flex}.dialog-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.stack>.badge{align-self:flex-start}.input[readonly]{background:var(--surface-2);color:var(--ink-2);cursor:default}.auth-screen{background:radial-gradient(circle at 15% 0%, #e0f2ef 0, transparent 45%), radial-gradient(circle at 100% 100%, #fdf0d9 0, transparent 40%), var(--bg);flex-direction:column;flex:1;align-items:center;gap:20px;padding:40px 16px 32px;display:flex;overflow-y:auto}.auth-brand{align-items:center;gap:10px;font-size:1.3rem;display:flex}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);width:100%;max-width:400px;box-shadow:var(--shadow);padding:24px}.auth-link{text-align:center;font-weight:700;text-decoration:none}.auth-link:hover{text-decoration:underline}.brand-mark{background:var(--primary);width:32px;height:32px;color:var(--primary-ink);border-radius:10px;place-items:center;font-weight:900;display:inline-grid}.app-layout{grid-template-columns:240px 1fr;min-height:100%;display:grid}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;gap:4px;padding:16px 12px;display:flex}.sidebar-brand{align-items:center;gap:10px;padding:4px 8px 16px;font-size:1.1rem;display:flex}.sidebar nav{flex-direction:column;gap:2px;display:flex}.nav-link{border-radius:var(--radius-sm);min-height:40px;color:var(--ink);align-items:center;padding:0 12px;font-weight:700;text-decoration:none;display:flex}.nav-link:hover{background:var(--surface-2)}.nav-link[aria-current=page]{background:var(--primary-soft);color:var(--primary-hover)}.sidebar-footer{border-top:1px solid var(--border);flex-direction:column;gap:4px;margin-top:auto;padding-top:12px;display:flex}.sidebar-user{padding:4px 12px 8px}.content{flex-direction:column;min-width:0;display:flex}.page{flex-direction:column;gap:16px;width:100%;max-width:960px;padding:24px;display:flex}.page-title{align-items:center;gap:8px;display:flex}.form-narrow{max-width:480px}.footer-actions{justify-content:flex-end}.profile-head{align-items:center;gap:16px;display:flex}.detail-list{gap:12px;margin:0;display:grid}.detail-list div{grid-template-columns:160px 1fr;gap:12px;display:grid}.detail-list dt{color:var(--ink-3);font-weight:700}.detail-list dd{margin:0}.splash{min-height:100%;color:var(--ink-2);place-items:center;display:grid}.page-header{flex-direction:column;gap:8px;display:flex}.page-header-row{flex-wrap:wrap;align-items:flex-start;gap:12px;display:flex}.page-header-text{--gap:2px;flex:1;min-width:0}.back-link{width:fit-content;font-size:.9rem;font-weight:700;text-decoration:none}.back-link:hover{text-decoration:underline}.status-active{color:var(--sync-ok);background:var(--sync-ok-bg)}.status-inactive{color:var(--offline);background:var(--offline-bg)}.table-card{padding:0;overflow-x:auto}.data-table{border-collapse:collapse;width:100%}.data-table caption{text-align:left}.data-table th,.data-table td{text-align:left;border-bottom:1px solid var(--border);vertical-align:middle;padding:12px 16px}.data-table thead th{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);background:var(--surface-2);font-size:.75rem}.data-table tbody tr:last-child td{border-bottom:0}.data-table tbody tr:hover{background:#fbfaf8}.data-table .num{text-align:right;font-variant-numeric:tabular-nums}.person-link{color:var(--ink);font-weight:800;text-decoration:none}.person-link:hover{color:var(--primary);text-decoration:underline}.pagination{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.form-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}.plain-rows{margin:0;padding:0;list-style:none}.plain-rows>li{flex-wrap:wrap;align-items:center;gap:10px;padding:8px 0;display:flex}.plain-rows>li+li{border-top:1px solid var(--border)}.row-main{flex-direction:column;flex:1;min-width:0;display:flex}.inline-form{border-radius:var(--radius);background:var(--surface-2);flex-direction:column;gap:12px;width:100%;margin:6px 0;padding:12px;display:flex}.mf-area{flex-direction:column;gap:8px;padding:12px 16px;display:flex}.mf-area-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.mf-toggle{cursor:pointer;text-align:left;font:inherit;color:inherit;background:0 0;border:0;flex:1;align-items:center;gap:8px;padding:6px 0;display:flex}.mf-skills{margin:0;padding:0 0 0 32px;list-style:none}.mf-skills>li+li{border-top:1px solid var(--border)}.mf-skill-row{align-items:center;gap:8px;padding:6px 0;display:flex}.picker{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.picker-group+.picker-group{border-top:1px solid var(--border)}.picker-group-head{cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit;background:0 0;border:0;align-items:center;gap:10px;padding:12px 16px;font-weight:700;display:flex}.picker-group-head:hover{background:var(--surface-2)}.picker-group-name{flex:1}.picker-count{color:var(--primary);background:var(--primary-soft);border-radius:999px;padding:2px 8px;font-size:.8rem;font-weight:800}.picker-options{border:0;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:0 8px;margin:0;padding:0 8px 8px 40px;display:grid}.dialog-wide{width:min(640px,100%);max-height:90vh;overflow-y:auto}.filters{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.filters .field{min-width:200px}.search-field{flex:1;min-width:240px}.nav-group{flex-direction:column;gap:2px;margin-top:8px;display:flex}.nav-group-label{text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3);padding:4px 12px;font-size:.75rem;font-weight:800}.pick-list{border:1px solid var(--border);border-radius:var(--radius);max-height:260px;margin:0;padding:0;list-style:none;overflow-y:auto}.pick-list li+li{border-top:1px solid var(--border)}.pick-list .check{border-radius:0}.card-head{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.card-head h2{flex:1}.picker-empty{padding:12px 16px;display:block}.warning-list{margin:4px 0 0;padding-left:20px}.tabs{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:4px;display:flex}.tab{border-radius:var(--radius-sm) var(--radius-sm) 0 0;color:var(--ink-2);padding:8px 14px;font-weight:700;text-decoration:none}.tab:hover{background:var(--surface-2)}.tab[aria-current=page]{color:var(--primary-hover);box-shadow:inset 0 -3px 0 var(--primary)}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;display:grid}.stat{color:var(--ink);flex-direction:column;gap:2px;text-decoration:none;display:flex}.stat-value{font-size:1.6rem;font-weight:800}.stat-label{color:var(--ink-2);font-weight:700}.dash-grid{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;display:grid}.count{color:var(--ink-2);font-variant-numeric:tabular-nums;font-weight:800}.outcome-conflict{color:var(--danger);font-weight:700}.filter-more summary{cursor:pointer;font-weight:700}.filter-more[open]{flex-direction:column;gap:8px;display:flex}.entries{margin:4px 0 0;padding-left:20px}.ptm-students{margin:0;padding:0;list-style:none}.ptm-students>li{padding:12px 0}.ptm-students>li+li{border-top:1px solid var(--border)}.report-caption{text-align:left;padding:12px 16px 4px;font-weight:800}@media (width<=720px){.app-layout{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid var(--border)}.form-grid{grid-template-columns:1fr}}.topbar{display:none}.app-layout.collapsible .table-card{background:linear-gradient(to right, var(--surface) 30%, transparent) left / 24px 100% no-repeat local, linear-gradient(to left, var(--surface) 30%, transparent) right / 24px 100% no-repeat local, radial-gradient(farthest-side at 0 50%, #14182024, transparent) left / 10px 100% no-repeat scroll, radial-gradient(farthest-side at 100% 50%, #14182024, transparent) right / 10px 100% no-repeat scroll, var(--surface)}.app-layout.collapsible .data-table thead th{white-space:nowrap}.app-layout.collapsible .dialog{max-height:calc(100dvh - 32px);overflow-y:auto}@media (width<=1023px){.app-layout.collapsible{grid-template-rows:auto 1fr;grid-template-columns:1fr}.app-layout.collapsible .topbar{z-index:20;background:var(--surface);border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:8px 16px;display:flex;position:sticky;top:0}.app-layout.collapsible .topbar-brand{align-items:center;gap:10px;font-size:1.05rem;display:flex}.app-layout.collapsible .sidebar{z-index:40;border-right:1px solid var(--border);width:min(300px,85vw);box-shadow:var(--shadow-lg);visibility:hidden;border-bottom:0;transition:transform .18s,visibility 0s linear .18s;position:fixed;inset:0 auto 0 0;overflow-y:auto;transform:translate(-100%)}.app-layout.collapsible[data-menu=open] .sidebar{visibility:visible;transition:transform .18s,visibility;transform:none}.app-layout.collapsible .sidebar-close{align-self:flex-end}.app-layout.collapsible .sidebar-backdrop{z-index:30;background:#14182073;position:fixed;inset:0}.app-layout.collapsible .page{padding:16px}}@media (width<=599px){.app-layout.collapsible .detail-list div{grid-template-columns:1fr;gap:2px}}@media (pointer:coarse){.app-layout.collapsible .btn-sm,.app-layout.collapsible .nav-link{min-height:44px}}@media (prefers-reduced-motion:reduce){.app-layout.collapsible .sidebar{transition:none}}
