:root{--lagoon: #0f4c4c;--lagoon-deep: #0a3636;--lagoon-soft: #dcecea;--lagoon-wash: #f2f7f6;--marigold: #f2b33d;--marigold-hover: #e5a72c;--marigold-deep: #c98a12;--chalk: #eef1ef;--paper: #ffffff;--sunken: #f5f7f6;--skeleton: #e3e8e6;--ink: #1c2321;--ink-2: #4b5653;--ink-3: #626d6a;--line: #d9dfdc;--line-strong: #8a9591;--on-brand: #ffffff;--on-brand-2: rgba(255, 255, 255, .82);--on-brand-3: rgba(255, 255, 255, .66);--brand-hover: rgba(255, 255, 255, .08);--brand-active: rgba(255, 255, 255, .14);--brand-line: rgba(255, 255, 255, .2);--brand-inset: rgba(0, 0, 0, .18);--danger: #b3261e;--danger-hover: #8f1d17;--danger-soft: #fbe9e7;--success: #1f7a4c;--success-soft: #e3f3ea;--warn: #9a6400;--warn-soft: #fff3d6;--violet: #5b2d91;--violet-soft: #ede4f7;--blue: #2f4f8f;--blue-soft: #e3e9f7;--neutral-soft: #e9ecea;--success-on-dark: #5fd39a;--danger-on-dark: #ff8a80;--scrim: rgba(28, 35, 33, .5);--font-sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--text-caption: 12px;--text-label: 13px;--text-sm: 14px;--text-body: 15px;--text-lead: 16px;--text-h3: 18px;--text-h2: 22px;--text-h1: 28px;--text-stat: 32px;--text-display: clamp(36px, 4.4vw, 56px);--weight-regular: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--leading-tight: 1.2;--leading-snug: 1.35;--leading-body: 1.5;--tracking-tight: -.015em;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-14: 56px;--border-width: 1px;--border: var(--border-width) solid var(--line);--border-control: var(--border-width) solid var(--line-strong);--radius-sm: 6px;--radius-md: 10px;--radius-lg: 16px;--radius-pill: 999px;--shadow-xs: 0 1px 2px rgba(16, 38, 36, .06);--shadow-sm: 0 1px 2px rgba(16, 38, 36, .05), 0 4px 12px -6px rgba(16, 38, 36, .1);--shadow-btn: 0 1px 2px rgba(10, 54, 54, .3), inset 0 1px 0 rgba(255, 255, 255, .1);--shadow-md: 0 8px 20px -8px rgba(16, 38, 36, .28);--shadow-lg: 0 24px 56px -18px rgba(16, 38, 36, .4);--focus-ring: 0 0 0 3px rgba(242, 179, 61, .6);--field-ring: 0 0 0 3px rgba(15, 76, 76, .16);--field-ring-error: 0 0 0 3px rgba(179, 38, 30, .16);--control-h: 40px;--control-h-sm: 36px;--icon-btn: 36px;--disabled-opacity: .5;--container: 1120px;--container-wide: 1320px;--container-form: 560px;--container-narrow: 420px;--sidebar-w: 248px;--header-h: 64px;--tabbar-h: 64px;--gutter: var(--space-8);--section-gap: var(--space-6);--grid-gap: var(--space-5);--ease-out: cubic-bezier(.2, .8, .2, 1);--duration-fast: .12s;--duration: .2s}@media (min-width: 901px) and (max-width: 1099px){:root{--sidebar-w: 88px}}@media (max-width: 900px){:root{--gutter: var(--space-4);--text-h1: 24px;--text-stat: 28px}}@media (pointer: coarse){:root{--icon-btn: 40px;--control-h-sm: 40px}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-sans);font-size:var(--text-body);line-height:var(--leading-body);color:var(--ink);background:var(--chalk);-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);font-weight:var(--weight-semibold);text-wrap:balance}h1{font-size:var(--text-h1);font-weight:var(--weight-bold)}h2{font-size:var(--text-h2)}h3{font-size:var(--text-h3)}p{margin:0}a{color:var(--lagoon);text-decoration:none;text-underline-offset:3px}a:hover{color:var(--lagoon-deep);text-decoration:underline}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}::placeholder{color:var(--ink-3);opacity:1}:focus-visible{outline:none;box-shadow:var(--focus-ring)}.muted{color:var(--ink-2)}.caption{font-size:var(--text-caption);color:var(--ink-3)}.small{font-size:var(--text-label)}.num{font-variant-numeric:tabular-nums}.nowrap{white-space:nowrap}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip-link{position:absolute;left:var(--space-4);top:calc(-1 * var(--space-14));z-index:100;padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);background:var(--paper);color:var(--ink);box-shadow:var(--shadow-md)}.skip-link:focus{top:var(--space-4);text-decoration:none}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-delay:0s!important;transition-duration:.001ms!important}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);height:var(--control-h);padding:0 var(--space-4);border:var(--border-width) solid transparent;border-radius:var(--radius-md);font-size:var(--text-sm);font-weight:var(--weight-semibold);line-height:1;white-space:nowrap;transition:background-color var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out),transform 60ms}.btn svg{width:18px;height:18px;flex:none}.btn:active:not(:disabled){transform:translateY(1px)}a.btn:hover{text-decoration:none}.btn-primary{background:var(--lagoon);color:var(--on-brand);box-shadow:var(--shadow-btn)}.btn-primary:hover:not(:disabled){background:var(--lagoon-deep);color:var(--on-brand)}.btn-accent{background:var(--marigold);color:var(--ink)}.btn-accent:hover:not(:disabled){background:var(--marigold-hover);color:var(--ink)}.btn-ghost{background:var(--paper);border-color:var(--line-strong);color:var(--ink);box-shadow:var(--shadow-xs)}.btn-ghost:hover:not(:disabled){background:var(--sunken);border-color:var(--ink-3);color:var(--ink)}.btn-danger{background:var(--danger);color:var(--on-brand);box-shadow:var(--shadow-btn)}.btn-danger:hover:not(:disabled){background:var(--danger-hover);color:var(--on-brand)}.btn-text{height:var(--control-h-sm);padding:0 var(--space-2);background:none;border:0;color:var(--lagoon);font-size:var(--text-sm);font-weight:var(--weight-medium);text-underline-offset:3px}.btn-text:hover:not(:disabled){color:var(--lagoon-deep);text-decoration:underline}.btn-sm{height:var(--control-h-sm);padding:0 var(--space-3);font-size:var(--text-label)}.btn-sm svg{width:16px;height:16px}.btn-block{width:100%}.btn-icon{display:inline-grid;place-items:center;flex:none;width:var(--icon-btn);height:var(--icon-btn);padding:0;border:var(--border-width) solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--ink-2);transition:background-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out)}.btn-icon svg{width:20px;height:20px}.btn-icon:hover:not(:disabled){background:var(--sunken);color:var(--ink)}.btn-icon.is-danger:hover:not(:disabled){background:var(--danger-soft);color:var(--danger)}.btn:disabled,.btn-icon:disabled,.btn-text:disabled,.segmented button:disabled,.input:disabled,.select:disabled,.textarea:disabled{opacity:var(--disabled-opacity);cursor:not-allowed}.input:disabled,.select:disabled,.textarea:disabled{background-color:var(--sunken)}.btn[aria-busy=true]{opacity:1;cursor:progress}.spinner{width:16px;height:16px;flex:none;border-radius:var(--radius-pill);border:2px solid currentColor;border-right-color:transparent;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.form{display:flex;flex-direction:column;gap:var(--space-4)}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-4)}.form-grid .span-2{grid-column:1 / -1}@media (max-width: 560px){.form-grid{grid-template-columns:minmax(0,1fr)}}.form-note{font-size:var(--text-caption);color:var(--ink-3)}.form-note .req{color:var(--danger)}.form-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);padding-top:var(--space-1)}.field{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}.field-label{font-size:var(--text-label);font-weight:var(--weight-medium);color:var(--ink);line-height:var(--leading-snug)}.field-label .req{color:var(--danger);margin-left:2px}.field-label .opt{color:var(--ink-3);font-weight:var(--weight-regular);margin-left:var(--space-1)}.field .hint,.field .error{margin-top:calc(-1 * var(--space-1));font-size:var(--text-caption);line-height:var(--leading-body)}.field .hint{color:var(--ink-3)}.field .error{display:flex;align-items:flex-start;gap:var(--space-1);color:var(--danger);font-weight:var(--weight-medium)}.field .error svg{flex:none;width:14px;height:14px;margin-top:2px}.input,.select,.textarea{width:100%;height:var(--control-h);padding:0 var(--space-3);border:var(--border-control);border-radius:var(--radius-md);background-color:var(--paper);box-shadow:var(--shadow-xs);font-size:var(--text-body);transition:border-color var(--duration-fast) var(--ease-out),box-shadow var(--duration-fast) var(--ease-out)}.textarea{height:auto;min-height:96px;padding:var(--space-2) var(--space-3);overflow:hidden;resize:none;line-height:var(--leading-body)}.input:hover:not(:disabled),.select:hover:not(:disabled),.textarea:hover:not(:disabled){border-color:var(--ink-3)}.input:focus,.select:focus,.textarea:focus,.input:focus-visible,.select:focus-visible,.textarea:focus-visible{border-color:var(--lagoon);box-shadow:var(--field-ring)}.input[aria-invalid=true],.select[aria-invalid=true],.textarea[aria-invalid=true]{border-color:var(--danger)}.input[aria-invalid=true]:focus,.select[aria-invalid=true]:focus,.textarea[aria-invalid=true]:focus{box-shadow:var(--field-ring-error)}.input[type=date]{-moz-appearance:none;appearance:none;-webkit-appearance:none;display:flex;align-items:center;min-width:0}.input[type=search]::-webkit-search-cancel-button{-webkit-appearance:none;-moz-appearance:none;appearance:none}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;padding-right:var(--space-10);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%234b5653' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--space-3) center}.select-sm{width:auto;min-width:128px;height:var(--control-h-sm);font-size:var(--text-sm)}.select.is-active{border-color:var(--lagoon);background-color:var(--lagoon-soft);color:var(--lagoon-deep);font-weight:var(--weight-medium)}.password-wrap{position:relative}.password-wrap .input{padding-right:var(--space-12)}.password-wrap .btn-icon{position:absolute;right:var(--space-1);top:50%;transform:translateY(-50%)}.password-wrap .btn-icon svg{width:18px;height:18px}.phone-wrap{position:relative}.phone-wrap .phone-prefix{position:absolute;left:var(--space-3);top:50%;transform:translateY(-50%);font-size:var(--text-body);color:var(--ink-2);pointer-events:none}.phone-wrap .input{padding-left:var(--space-12)}.segmented{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-1);padding:var(--space-1);background:var(--sunken);border:var(--border);border-radius:var(--radius-md)}.segmented button{height:calc(var(--control-h) - 2 * var(--space-1) - 2 * var(--border-width));border:0;border-radius:var(--radius-sm);background:transparent;color:var(--ink-2);font-size:var(--text-sm);font-weight:var(--weight-medium);transition:background-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out)}.segmented button:hover:not(:disabled){color:var(--ink)}.segmented button[aria-pressed=true]{background:var(--paper);color:var(--lagoon);font-weight:var(--weight-semibold);box-shadow:var(--shadow-sm)}.strength{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-1)}.strength i{height:4px;border-radius:var(--radius-pill);background:var(--line)}.strength i.on-1{background:var(--danger)}.strength i.on-2{background:var(--marigold-deep)}.strength i.on-3,.strength i.on-4{background:var(--success)}.alert{display:flex;align-items:flex-start;gap:var(--space-2);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);font-size:var(--text-sm);line-height:var(--leading-body)}.alert svg{flex:none;width:18px;height:18px;margin-top:1.5px}.alert-error{background:var(--danger-soft);color:var(--danger)}.alert-success{background:var(--success-soft);color:var(--success)}.alert-info{background:var(--lagoon-soft);color:var(--lagoon-deep)}.badge{display:inline-flex;align-items:center;height:24px;padding:0 var(--space-2);border-radius:var(--radius-pill);font-size:var(--text-caption);font-weight:var(--weight-medium);line-height:1;white-space:nowrap;text-transform:capitalize}.badge-admin{background:var(--violet-soft);color:var(--violet)}.badge-teacher{background:var(--lagoon-soft);color:var(--lagoon-deep)}.badge-student{background:var(--warn-soft);color:var(--warn)}.badge-active{background:var(--success-soft);color:var(--success)}.badge-inactive{background:var(--neutral-soft);color:var(--ink-2)}.badge-graduated{background:var(--blue-soft);color:var(--blue)}.avatar{display:grid;place-items:center;flex:none;width:var(--icon-btn);height:var(--icon-btn);border-radius:var(--radius-pill);background:var(--marigold);color:var(--ink);font-size:var(--text-label);font-weight:var(--weight-bold)}.avatar[data-tone="0"]{background:var(--warn-soft);color:var(--warn)}.avatar[data-tone="1"]{background:var(--lagoon-soft);color:var(--lagoon-deep)}.avatar[data-tone="2"]{background:var(--violet-soft);color:var(--violet)}.avatar[data-tone="3"]{background:var(--blue-soft);color:var(--blue)}.att{display:inline-flex;align-items:center;gap:var(--space-2)}.att .track{display:inline-block;width:64px;height:6px;background:var(--chalk);border-radius:var(--radius-pill);overflow:hidden}.att .fill{display:block;height:100%;background:var(--success);border-radius:inherit}.att.low .fill{background:var(--danger)}.att.mid .fill{background:var(--marigold-deep)}.wordmark{display:flex;align-items:center;gap:var(--space-3);color:inherit;font-size:var(--text-h3);font-weight:var(--weight-bold);letter-spacing:var(--tracking-tight)}.wordmark svg{width:28px;height:28px;flex:none}a.wordmark:hover{color:inherit;text-decoration:none}.auth{min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr)}.auth-brand{position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;gap:var(--space-8);padding:var(--space-12);background:var(--lagoon);color:var(--on-brand)}.auth-brand:after{content:"";position:absolute;inset:auto -120px -180px auto;width:clamp(300px,34vw,440px);aspect-ratio:1;border-radius:var(--radius-pill);border:clamp(40px,4.4vw,56px) solid var(--marigold);opacity:.9}.auth-brand>*{position:relative;z-index:1}.auth-copy{margin-block:auto}.auth-brand h1{max-width:12ch;font-size:var(--text-display);font-weight:var(--weight-semibold);line-height:1.08;letter-spacing:-.02em}.auth-brand .lede{max-width:42ch;margin-top:var(--space-5);color:var(--on-brand-2);font-size:var(--text-lead)}.auth-roles{display:grid;gap:var(--space-3);max-width:var(--container-narrow);margin-top:var(--space-8)}.auth-roles div{display:grid;grid-template-columns:84px minmax(0,1fr);gap:var(--space-4);padding-top:var(--space-3);border-top:var(--border-width) solid var(--brand-line);font-size:var(--text-sm);color:var(--on-brand-2)}.auth-roles strong{color:var(--marigold);font-weight:var(--weight-semibold)}.auth-panel{display:grid;justify-items:center;align-items:center;padding:var(--space-12) var(--space-6);background:var(--paper)}.auth-card{width:100%;max-width:var(--container-narrow);display:flex;flex-direction:column;gap:var(--space-6)}.auth-card-head{display:flex;flex-direction:column;gap:var(--space-2)}.auth-card h2{font-size:var(--text-h1);font-weight:var(--weight-bold)}.auth-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-3)}.demo-box{display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-3) var(--space-4);border:var(--border);border-radius:var(--radius-md);background:var(--sunken);font-size:var(--text-label);color:var(--ink-2)}.demo-actions{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-2);margin-left:calc(-1 * var(--space-2))}@media (min-width: 901px){.auth{height:100vh;height:100dvh;grid-template-rows:minmax(0,1fr)}.auth-panel{align-items:start;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none}.auth-panel::-webkit-scrollbar{display:none}.auth-card{margin-block:auto}.auth-card.wide{max-width:var(--container-form)}}@media (min-width: 901px) and (max-height: 760px){.auth-brand{gap:var(--space-6);padding:var(--space-8) var(--space-12)}.auth-brand h1{font-size:clamp(36px,3.4vw,44px)}.auth-brand .lede{margin-top:var(--space-4)}.auth-roles{margin-top:var(--space-6)}.auth-panel{padding-block:var(--space-8)}}@media (min-width: 901px) and (max-height: 600px){.auth-roles{display:none}}@media (max-width: 900px){.auth{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr}.auth-brand{gap:var(--space-5);padding:calc(var(--space-6) + env(safe-area-inset-top)) max(var(--space-6),env(safe-area-inset-right)) var(--space-8) max(var(--space-6),env(safe-area-inset-left))}.auth-brand:after{width:260px;border-width:36px;inset:auto -100px -140px auto}.auth-brand h1{max-width:none;font-size:32px}.auth-roles{display:none}.auth-brand .lede{margin-top:var(--space-3);font-size:var(--text-sm)}.auth-brand>*{width:100%;max-width:var(--container-narrow);margin-inline:auto}.auth-panel{align-items:start;padding:var(--space-8) max(var(--space-6),env(safe-area-inset-right)) calc(var(--space-6) + env(safe-area-inset-bottom)) max(var(--space-6),env(safe-area-inset-left))}}@media (max-width: 560px){.auth-brand:after{width:170px;border-width:26px;inset:auto -80px -100px auto}}.shell{min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:var(--sidebar-w) minmax(0,1fr)}.sidebar{position:sticky;top:0;height:100vh;height:100dvh;overflow-y:auto;display:flex;flex-direction:column;gap:var(--space-6);padding:0 var(--space-4) var(--space-6);background:var(--lagoon);color:var(--on-brand)}.sidebar .wordmark{flex:none;height:var(--header-h);padding:0 var(--space-3)}.sidebar nav{display:flex;flex-direction:column;gap:var(--space-1)}.navlink{position:relative;display:flex;align-items:center;gap:var(--space-3);min-height:var(--control-h);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);color:var(--on-brand-2);font-weight:var(--weight-medium);transition:background-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out)}.navlink svg{width:20px;height:20px;flex:none}.navlink:hover{background:var(--brand-hover);color:var(--on-brand);text-decoration:none}.navlink.active{background:var(--brand-active);color:var(--on-brand);font-weight:var(--weight-semibold)}.navlink.active:before{content:"";position:absolute;left:calc(-1 * var(--space-4));top:var(--space-2);bottom:var(--space-2);width:4px;border-radius:0 var(--radius-pill) var(--radius-pill) 0;background:var(--marigold)}.sidebar .grow{flex:1}.userbox{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);background:var(--brand-inset)}.userbox .who{flex:1;min-width:0}.userbox .who b{display:block;overflow:hidden;font-size:var(--text-sm);font-weight:var(--weight-semibold);text-overflow:ellipsis;white-space:nowrap}.userbox .who span{display:block;font-size:var(--text-caption);color:var(--on-brand-3);text-transform:capitalize}.sidebar .btn-icon,.topbar .btn-icon{color:var(--on-brand-2)}.sidebar .btn-icon:hover:not(:disabled),.topbar .btn-icon:hover:not(:disabled){background:var(--brand-active);color:var(--on-brand)}.main{min-width:0;display:flex;flex-direction:column;gap:var(--space-10);padding:var(--space-8) var(--gutter)}.main:focus{outline:none;box-shadow:none}.page{width:100%;max-width:var(--container);margin:0 auto;flex:1 0 auto;display:flex;flex-direction:column;gap:var(--section-gap)}.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--space-4)}.page-head .sub{max-width:65ch;margin-top:var(--space-2);color:var(--ink-2)}@media (min-width: 1600px){.page{max-width:var(--container-wide)}}.topbar,.tabbar{display:none}@media (min-width: 901px) and (max-width: 1099px){.sidebar{padding:0 var(--space-2) var(--space-5);gap:var(--space-5)}.sidebar .wordmark{justify-content:center;padding:0}.sidebar .wordmark span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.navlink{flex-direction:column;justify-content:center;gap:var(--space-1);padding:var(--space-2) 0;font-size:var(--text-caption);text-align:center}.navlink.active:before{left:calc(-1 * var(--space-2))}.userbox{flex-direction:column;gap:var(--space-2);padding:var(--space-2) 0}.userbox .who{display:none}}@media (max-width: 900px){.shell{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr}.sidebar{display:none}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);height:calc(var(--header-h) + env(safe-area-inset-top));padding:env(safe-area-inset-top) max(var(--gutter),env(safe-area-inset-right)) 0 max(var(--gutter),env(safe-area-inset-left));background:var(--lagoon);color:var(--on-brand)}.topbar .right{display:flex;align-items:center;gap:var(--space-2)}.topbar .right .btn-icon:last-child{margin-right:calc((20px - var(--icon-btn)) / 2)}.main{padding:var(--space-5) max(var(--gutter),env(safe-area-inset-right)) calc(var(--tabbar-h) + var(--space-6) + env(safe-area-inset-bottom)) max(var(--gutter),env(safe-area-inset-left));gap:var(--space-8)}.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:20;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding:var(--space-1) max(var(--space-2),env(safe-area-inset-right)) calc(var(--space-1) + env(safe-area-inset-bottom)) max(var(--space-2),env(safe-area-inset-left));background:var(--paper);border-top:var(--border)}.tabbar a{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;border-radius:var(--radius-sm);color:var(--ink-3);font-size:var(--text-caption);font-weight:var(--weight-medium);transition:color var(--duration-fast) var(--ease-out)}.tabbar a svg{width:22px;height:22px}.tabbar a:hover{color:var(--ink);text-decoration:none}.tabbar a.active{color:var(--lagoon);font-weight:var(--weight-semibold)}.tabbar a.active:before{content:"";position:absolute;top:calc(-1 * var(--space-1));left:50%;width:32px;height:3px;transform:translate(-50%);border-radius:0 0 var(--radius-pill) var(--radius-pill);background:var(--lagoon)}}@media (max-width: 900px) and (max-height: 500px){:root{--tabbar-h: 52px}.topbar{position:static}.tabbar a{flex-direction:row;gap:var(--space-2);font-size:var(--text-label)}.tabbar a svg{width:20px;height:20px}}.plain{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column}.plain-header{display:flex;align-items:center;height:calc(var(--header-h) + env(safe-area-inset-top));padding:env(safe-area-inset-top) max(var(--gutter),env(safe-area-inset-right)) 0 max(var(--gutter),env(safe-area-inset-left));background:var(--lagoon);color:var(--on-brand)}.plain-main{flex:1;display:flex;flex-direction:column;gap:var(--space-10);width:100%;max-width:var(--container);margin:0 auto;padding:var(--space-8) var(--gutter)}.panel{overflow:hidden;background:var(--paper);border:var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.panel-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-2) var(--space-3);min-height:calc(var(--control-h-sm) + 2 * var(--space-4));padding:var(--space-4) var(--space-5);border-bottom:var(--border)}.panel-head a{display:inline-flex;align-items:center;min-height:var(--control-h-sm);font-size:var(--text-sm);font-weight:var(--weight-medium)}.panel-head .caption{font-size:var(--text-label)}.panel-body{padding:var(--space-5)}@media (max-width: 560px){.panel-head{min-height:calc(var(--control-h-sm) + 2 * var(--space-3));padding:var(--space-3) var(--space-4)}.panel-body{padding:var(--space-4)}}.two-col{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:var(--grid-gap);align-items:stretch}.settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--grid-gap);align-items:start}@media (max-width: 1000px){.two-col{grid-template-columns:minmax(0,1fr)}}@media (max-width: 900px){.settings-grid{grid-template-columns:minmax(0,1fr)}}.stat-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));overflow:hidden;background:var(--paper);border:var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm)}.stat{display:grid;grid-row:span 3;grid-template-rows:subgrid;row-gap:0;padding:var(--space-5) var(--space-6);border-right:var(--border)}.stat:last-child{border-right:0}.stat .label{font-size:var(--text-label);font-weight:var(--weight-medium);color:var(--ink-2)}.stat .value{margin-top:var(--space-2);font-size:var(--text-stat);font-weight:var(--weight-bold);line-height:var(--leading-tight);letter-spacing:-.02em;font-variant-numeric:tabular-nums}.stat .value small{margin-left:2px;font-size:var(--text-lead);font-weight:var(--weight-medium);color:var(--ink-3)}.stat .delta{margin-top:var(--space-1);font-size:var(--text-caption);color:var(--ink-3)}.stat.attention .value{color:var(--danger)}.stat .skeleton.label-skel{width:50%;height:14px}.stat .skeleton.value-skel{width:35%;height:32px;margin-top:var(--space-2)}@media (max-width: 900px){.stat-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.stat{padding:var(--space-4) var(--space-5);border-bottom:var(--border)}.stat:nth-child(2n){border-right:0}.stat:nth-last-child(-n+2){border-bottom:0}}.bars{display:flex;flex-direction:column;gap:var(--space-3)}.bar-row{display:grid;grid-template-columns:72px minmax(0,1fr) 40px;align-items:center;gap:var(--space-3);font-size:var(--text-sm)}.bar-row .track{height:10px;overflow:hidden;background:var(--chalk);border-radius:var(--radius-pill)}.bar-row .fill{width:100%;height:100%;background:var(--lagoon);border-radius:inherit;transform-origin:left center;transition:transform .4s var(--ease-out);animation:bar-fill .7s var(--ease-out) both}@keyframes bar-fill{0%{transform:scaleX(0)}}.bar-row .n{text-align:right;color:var(--ink-2);font-variant-numeric:tabular-nums}.list{display:flex;flex-direction:column}.list-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-3) 0;border-top:var(--border);font-size:var(--text-sm)}.list-row:first-child{padding-top:0;border-top:0}.list-row:last-child{padding-bottom:0}.list-row>div{min-width:0}.list-row .name{font-weight:var(--weight-medium)}.list-row .meta{font-size:var(--text-caption);color:var(--ink-3)}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3)}.toolbar .search{position:relative;flex:1 1 240px;max-width:360px}.toolbar .search .input{padding-left:var(--space-10)}.toolbar .search svg{position:absolute;left:var(--space-3);top:50%;width:18px;height:18px;transform:translateY(-50%);color:var(--ink-3);pointer-events:none}.toolbar .select{width:auto;min-width:150px}@media (max-width: 560px){.toolbar .search{flex-basis:100%;max-width:none}.toolbar .select{flex:1 1 130px;min-width:0}}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:var(--text-sm)}th{padding:var(--space-3) var(--space-4);border-bottom:var(--border);background:var(--sunken);color:var(--ink-2);font-size:var(--text-label);font-weight:var(--weight-medium);text-align:left;white-space:nowrap}td{padding:var(--space-3) var(--space-4);border-bottom:var(--border);vertical-align:middle}tbody tr:last-child td{border-bottom:0}th:first-child,td:first-child{padding-left:var(--space-5)}th:last-child,td:last-child{padding-right:var(--space-5)}tbody tr{transition:background-color var(--duration-fast) var(--ease-out)}tbody tr:hover{background:var(--lagoon-wash)}th.align-end,td.align-end{text-align:right}td .primary{font-weight:var(--weight-medium)}td .secondary{font-size:var(--text-caption);color:var(--ink-3)}td.secondary{color:var(--ink-2)}.user-cell{display:flex;align-items:center;gap:var(--space-3);min-width:0}.user-cell>div{min-width:0}.td-actions{text-align:right;white-space:nowrap}.td-actions>*{vertical-align:middle}.td-actions>*+*{margin-left:var(--space-2)}.td-actions .btn-icon{--icon-btn: 32px}.td-actions .btn-icon svg{width:18px;height:18px}@media (max-width: 1199px){th,td{padding-left:var(--space-3);padding-right:var(--space-3)}.col-extra{display:none}}.list-body{transition:opacity var(--duration) var(--ease-out)}.list-body.is-loading{opacity:.55;pointer-events:none}.pagination{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3) var(--space-5);padding:var(--space-3) var(--space-5);border-top:var(--border);font-size:var(--text-sm);color:var(--ink-2)}.pagination-summary{margin-right:auto}.pagination-summary b{color:var(--ink);font-weight:var(--weight-semibold);font-variant-numeric:tabular-nums}.pagination-size{display:inline-flex;align-items:center;gap:var(--space-2);white-space:nowrap}.pagination-size .select-sm{min-width:76px}.pagination-pages{display:flex;align-items:center;gap:var(--space-1)}.page-btn{min-width:var(--icon-btn);height:var(--icon-btn);padding:0 var(--space-2);border:var(--border-width) solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--ink-2);font-size:var(--text-sm);font-weight:var(--weight-medium);font-variant-numeric:tabular-nums;transition:background-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out)}.page-btn:hover:not(.is-current){background:var(--sunken);color:var(--ink)}.page-btn.is-current{background:var(--lagoon);color:var(--on-brand);font-weight:var(--weight-semibold);cursor:default}.pagination-gap{min-width:24px;text-align:center;color:var(--ink-3)}.pagination-page{display:none;padding:0 var(--space-2);white-space:nowrap;font-variant-numeric:tabular-nums}@media (max-width: 767px){.pagination{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-areas:"summary size" "pages pages";padding:var(--space-3) var(--space-4)}.pagination-summary{grid-area:summary;margin:0}.pagination-size{grid-area:size}.pagination-size-extra{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.pagination-pages{grid-area:pages;justify-content:space-between}.pagination-pages .btn-icon{border-color:var(--line-strong)}.page-btn,.pagination-gap{display:none}.pagination-page{display:inline}}.table-scroll{overflow-x:auto}.show-sm{display:none}@media (max-width: 767px){.hide-sm{display:none}.show-sm{display:block}}.cards{display:none}@media (max-width: 767px){.table-wrap{display:none}.cards{display:flex;flex-direction:column}.card-row{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-4);border-top:var(--border)}.card-row:first-child{border-top:0}.card-row .top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3)}.card-row .top>div{min-width:0}.card-row .primary{font-weight:var(--weight-medium)}.card-row .secondary{font-size:var(--text-caption);color:var(--ink-3);overflow-wrap:anywhere}.card-row .facts{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2) var(--space-4);font-size:var(--text-sm);color:var(--ink-2)}.card-row .facts b{color:var(--ink);font-weight:var(--weight-medium)}.card-row .actions{display:flex;gap:var(--space-2)}.card-row .actions .btn{flex:1}}.empty{display:flex;flex-direction:column;align-items:center;gap:var(--space-3);padding:var(--space-12) var(--space-6);text-align:center}.empty.compact{padding:var(--space-6) var(--space-2)}.empty .glyph{display:grid;place-items:center;width:56px;height:56px;margin-bottom:var(--space-1);border-radius:var(--radius-lg);background:var(--lagoon-soft);color:var(--lagoon)}.empty .glyph svg{width:26px;height:26px}.empty.compact .glyph{width:44px;height:44px;border-radius:var(--radius-md)}.empty.compact .glyph svg{width:22px;height:22px}.empty h3{font-size:var(--text-h3)}.empty p{max-width:44ch;color:var(--ink-2)}.empty-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-3);margin-top:var(--space-2)}.skeleton{position:relative;overflow:hidden;border-radius:var(--radius-sm);background:var(--skeleton)}.skeleton:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.65),transparent);animation:shimmer 1.3s infinite}@keyframes shimmer{to{transform:translate(100%)}}.skel-rows{display:flex;flex-direction:column;gap:var(--space-3);padding:var(--space-5)}.panel-body>.skel-rows{padding:0}.skel-rows .skeleton{height:18px}.page-loader{display:grid;place-items:center;align-content:center;gap:var(--space-3);min-height:60vh;color:var(--ink-3)}.page-loader .spinner{width:28px;height:28px;border-width:3px;color:var(--lagoon)}.profile-hero{display:flex;align-items:center;gap:var(--space-5);padding:var(--space-6);background:var(--lagoon-wash)}.profile-hero .avatar{width:64px;height:64px;font-size:var(--text-h2)}.profile-hero .who{flex:1;min-width:0}.profile-hero .name{font-size:var(--text-h2);font-weight:var(--weight-bold);line-height:var(--leading-tight)}.profile-hero .meta{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-3);margin-top:var(--space-2);font-size:var(--text-sm);color:var(--ink-2)}.ring{width:120px;height:120px;flex:none}.ring text{font-family:var(--font-sans);font-size:26px;font-weight:var(--weight-bold);fill:var(--ink)}.ring .arc{animation:ring-fill .8s var(--ease-out) both}@keyframes ring-fill{0%{stroke-dashoffset:314.16px}}.detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.detail{padding:var(--space-4) var(--space-5);border-top:var(--border);border-right:var(--border)}.detail:nth-child(3n),.detail:last-child{border-right:0}.detail.wide{grid-column:1 / -1;border-right:0}.detail .k{font-size:var(--text-caption);color:var(--ink-3)}.detail .v{margin-top:var(--space-1);font-weight:var(--weight-medium);overflow-wrap:anywhere}@media (min-width: 481px) and (max-width: 767px){.detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.detail:nth-child(3n){border-right:var(--border)}.detail:nth-child(2n){border-right:0}.detail:last-child:nth-child(odd),.detail:nth-child(odd):has(+.detail.wide){grid-column:1 / -1;border-right:0}}@media (max-width: 480px){.profile-hero{gap:var(--space-4);padding:var(--space-5) var(--space-4)}.profile-hero .avatar{display:none}.profile-hero .name{font-size:20px}.ring{width:88px;height:88px}.detail-grid{grid-template-columns:minmax(0,1fr)}.detail{display:grid;grid-template-columns:minmax(96px,36%) minmax(0,1fr);align-items:baseline;gap:var(--space-3);padding:var(--space-3) var(--space-4);border-right:0}.detail .v{margin-top:0}}.kv{display:grid;grid-template-columns:140px minmax(0,1fr);align-items:baseline;gap:var(--space-3) var(--space-4);margin:0;font-size:var(--text-sm)}.kv dt{color:var(--ink-3)}.kv dd{margin:0;overflow-wrap:anywhere}@media (max-width: 480px){.kv{grid-template-columns:104px minmax(0,1fr);gap:var(--space-3)}}.divider{height:0;margin:0;border:0;border-top:var(--border)}.not-found{flex:1;display:grid;place-items:center;padding:var(--space-10) 0}.not-found-card{display:flex;flex-direction:column;align-items:center;gap:var(--space-4);max-width:480px;text-align:center}.not-found .code{font-size:var(--text-display);font-weight:var(--weight-bold);line-height:1;letter-spacing:-.03em;color:var(--lagoon)}.not-found p{color:var(--ink-2)}.not-found .empty-actions{margin-top:var(--space-2)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;display:grid;place-items:center;padding:var(--space-4);background:var(--scrim);animation:fade var(--duration) var(--ease-out)}.modal{width:100%;max-width:var(--container-form);max-height:calc(100vh - 2 * var(--space-4));max-height:calc(100dvh - 2 * var(--space-4));display:flex;flex-direction:column;overflow:hidden;background:var(--paper);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);animation:rise var(--duration) var(--ease-out)}.modal.small{max-width:var(--container-narrow)}.modal-head{flex:none;display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-5) var(--space-6) 0}.modal-head .btn-icon{margin-right:calc((20px - var(--icon-btn)) / 2)}.modal-body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-4) var(--space-6) var(--space-6);scrollbar-width:none;background:linear-gradient(var(--paper),var(--paper)) center top / 100% 10px no-repeat local,linear-gradient(var(--paper),var(--paper)) center bottom / 100% 10px no-repeat local,linear-gradient(#1026241f,#10262400) center top / 100% 10px no-repeat scroll,linear-gradient(#10262400,#1026241f) center bottom / 100% 10px no-repeat scroll;background-color:var(--paper)}.modal-body::-webkit-scrollbar{display:none}.modal-body>p{color:var(--ink-2)}.modal-foot{flex:none;display:flex;justify-content:flex-end;gap:var(--space-3);padding:var(--space-4) var(--space-6);border-top:var(--border)}.change-list{display:grid;gap:var(--space-2);margin:0;padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--sunken);font-size:var(--text-sm)}.change-list div{display:grid;grid-template-columns:minmax(0,14ch) minmax(0,1fr);gap:var(--space-3)}.change-list dt{color:var(--ink-3)}.change-list dd{margin:0;overflow-wrap:anywhere}.change-list del{color:var(--ink-3)}.change-list ins{text-decoration:none;font-weight:var(--weight-medium)}@keyframes fade{0%{opacity:0}}@keyframes rise{0%{opacity:0;transform:translateY(8px)}}@keyframes slideup{0%{opacity:0;transform:translateY(40px)}}@media (max-width: 560px){.modal-backdrop{align-items:end;padding:0}.modal,.modal.small{max-width:none;max-height:92vh;max-height:92dvh;border-radius:var(--radius-lg) var(--radius-lg) 0 0;animation:slideup var(--duration) var(--ease-out)}.modal-head{padding:var(--space-5) var(--space-4) 0}.modal-body{padding:var(--space-4)}.modal-foot{padding:var(--space-3) var(--space-4) calc(var(--space-3) + env(safe-area-inset-bottom))}.modal-foot .btn{flex:1}.change-list div{grid-template-columns:minmax(0,1fr);gap:0}}.toasts{position:fixed;right:var(--space-4);bottom:var(--space-4);z-index:60;display:flex;flex-direction:column;gap:var(--space-2);width:min(380px,calc(100vw - 2 * var(--space-4)));pointer-events:none}.toast{display:flex;align-items:flex-start;gap:var(--space-3);pointer-events:auto;padding:var(--space-3) var(--space-2) var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--ink);color:var(--on-brand);font-size:var(--text-sm);line-height:var(--leading-body);box-shadow:var(--shadow-md);animation:rise var(--duration) var(--ease-out)}.toast-icon{flex:none;width:20px;height:20px;margin-top:.5px}.toast.success .toast-icon{color:var(--success-on-dark)}.toast.error .toast-icon{color:var(--danger-on-dark)}.toast-msg{flex:1;min-width:0}.toast .btn-icon{width:28px;height:28px;margin:-3px 0;color:var(--on-brand-3)}.toast .btn-icon svg{width:16px;height:16px}.toast .btn-icon:hover:not(:disabled){background:var(--brand-hover);color:var(--on-brand)}@media (max-width: 900px){.toasts{left:var(--space-4);right:var(--space-4);width:auto;bottom:calc(var(--tabbar-h) + var(--space-3) + env(safe-area-inset-bottom))}}@media (pointer: coarse){.input,.select,.textarea,.phone-wrap .phone-prefix{font-size:16px}.td-actions .btn-icon{--icon-btn: 40px}}
