@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/attendance/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/attendance/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/attendance/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/attendance/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--font-display:"Fraunces Variable", "Iowan Old Style", Georgia, serif;--font-body:"Inter Variable", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--step--1:clamp(.78rem, .76rem + .1vw, .84rem);--step-0:clamp(.94rem, .92rem + .12vw, 1rem);--step-1:clamp(1.1rem, 1.05rem + .25vw, 1.22rem);--step-2:clamp(1.3rem, 1.2rem + .5vw, 1.6rem);--step-3:clamp(1.6rem, 1.4rem + 1vw, 2.2rem);--s-1:.25rem;--s-2:.5rem;--s-3:.75rem;--s-4:1rem;--s-5:1.5rem;--s-6:2rem;--s-7:3rem;--r-sm:8px;--r-md:12px;--r-lg:18px;--r-pill:999px;--content-w:52rem;--rail-w:15rem;--tap:44px;--z-nav:20;--z-top:30;--z-menu:40;--z-toast:60;--ease:cubic-bezier(.22, 1, .36, 1);--dur-1:.12s;--dur-2:.22s;--dur-3:.38s;--bg:#f7f4ed;--surface:#fff;--surface-2:#fbf9f4;--line:#e4ddcc;--line-strong:#cfc6af;--text:#1d1b16;--text-2:#5b5444;--primary:#1f3f6e;--primary-hover:#17325a;--primary-ink:#fff;--primary-tint:#e9eef6;--accent:#a8731f;--accent-text:#7d530f;--accent-tint:#f6ecd8;--success:#1e6a42;--success-tint:#e1f0e6;--warning:#85560a;--warning-tint:#f8ecd0;--error:#a3262b;--error-tint:#f8e3e1;--info:#1c5c9a;--info-tint:#e2edf8;--focus:#2b6cd4;--overlay:#12110d80;--shadow-1:0 1px 2px #1d1b160f, 0 1px 1px #1d1b160a;--shadow-2:0 8px 20px -8px #1d1b162e, 0 2px 6px -2px #1d1b161a;--shadow-3:0 24px 48px -16px #12110d57, 0 8px 18px -8px #12110d29;--selection:#cfdcf1}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#12110d;--surface:#1b1912;--surface-2:#17150f;--line:#2f2b1f;--line-strong:#453f2e;--text:#efe9dc;--text-2:#b6ac97;--primary:#8fb0dc;--primary-hover:#a7c2e6;--primary-ink:#0d1a2c;--primary-tint:#1a2638;--accent:#e0b36d;--accent-text:#e6bf82;--accent-tint:#2c2314;--success:#86cc99;--success-tint:#16261b;--warning:#e6b45e;--warning-tint:#2c2210;--error:#f0a0a1;--error-tint:#2c1a1a;--info:#8fbbe8;--info-tint:#16212e;--focus:#8fb6f5;--overlay:#030509a8;--shadow-1:0 1px 2px #0006;--shadow-2:0 8px 22px -8px #0000008c;--shadow-3:0 26px 52px -18px #000000b3;--selection:#2a3d5a}@media (prefers-color-scheme:dark){:root:not([data-theme]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#12110d;--surface:#1b1912;--surface-2:#17150f;--line:#2f2b1f;--line-strong:#453f2e;--text:#efe9dc;--text-2:#b6ac97;--primary:#8fb0dc;--primary-hover:#a7c2e6;--primary-ink:#0d1a2c;--primary-tint:#1a2638;--accent:#e0b36d;--accent-text:#e6bf82;--accent-tint:#2c2314;--success:#86cc99;--success-tint:#16261b;--warning:#e6b45e;--warning-tint:#2c2210;--error:#f0a0a1;--error-tint:#2c1a1a;--info:#8fbbe8;--info-tint:#16212e;--focus:#8fb6f5;--overlay:#030509a8;--shadow-1:0 1px 2px #0006;--shadow-2:0 8px 22px -8px #0000008c;--shadow-3:0 26px 52px -18px #000000b3;--selection:#2a3d5a}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth;scrollbar-color:var(--line-strong) transparent}body{background:var(--bg);min-height:100dvh;color:var(--text);font-family:var(--font-body);font-size:var(--step-0);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;line-height:1.55;overflow-x:hidden}h1,h2,h3{font-family:var(--font-display);letter-spacing:-.02em;text-wrap:balance;margin:0;font-weight:600;line-height:1.15}p{margin:0}button,input,select{font:inherit;color:inherit}button{cursor:pointer}[hidden]{display:none!important}::selection{background:var(--selection)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:var(--r-pill);border:2px solid var(--bg)}:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:var(--r-sm)}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{top:var(--s-2);left:var(--s-2);z-index:calc(var(--z-toast) + 1);padding:var(--s-2) var(--s-4);background:var(--primary);color:var(--primary-ink);border-radius:var(--r-sm);font-weight:600;text-decoration:none;position:fixed;transform:translateY(-200%)}.skip-link:focus{transform:none}.muted{color:var(--text-2)}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.brand{align-items:center;gap:var(--s-3);min-width:0;display:flex}.brand-mark,.splash-mark{background:url(/attendance/icon.svg) 50%/contain no-repeat;border-radius:10px;flex:none;width:36px;height:36px}.brand-name{font-family:var(--font-display);font-weight:600;font-size:var(--step-1);letter-spacing:-.02em;line-height:1.1}.brand-text{flex-direction:column;min-width:0;display:flex}.brand-sub{font-size:var(--step--1);color:var(--text-2);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.brand-lg .brand-mark{width:44px;height:44px}.gate{place-content:center;justify-items:center;gap:var(--s-4);min-height:100dvh;padding:var(--s-5) var(--s-4);padding-top:max(var(--s-5), env(safe-area-inset-top));padding-bottom:max(var(--s-5), env(safe-area-inset-bottom));background:radial-gradient(60rem 30rem at 50% -10%, var(--primary-tint), transparent 70%), var(--bg);display:grid}.gate-card{gap:var(--s-4);width:min(100%,26rem);padding:var(--s-6) var(--s-5);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-2);animation:rise var(--dur-3) var(--ease) both;display:grid}.gate-card h1{font-size:var(--step-2)}.gate-card .brand{margin-bottom:var(--s-2)}.gate-actions{gap:var(--s-2);flex-wrap:wrap;display:flex}.gate-foot{font-size:var(--step--1);text-align:center}.splash-mark{width:56px;height:56px;animation:pulse 1.6s var(--ease) infinite}@keyframes rise{0%{opacity:0;transform:translateY(10px)}}@keyframes pulse{50%{opacity:.55;transform:scale(.96)}}.app{grid-template:"top""main"1fr/minmax(0,1fr);min-height:100dvh;display:grid}.topbar{z-index:var(--z-top);padding-top:env(safe-area-inset-top);background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:saturate(1.4)blur(14px);backdrop-filter:saturate(1.4)blur(14px);border-bottom:1px solid var(--line);grid-area:top;position:sticky;top:0}.topbar-inner{justify-content:space-between;align-items:center;gap:var(--s-3);min-height:64px;padding:var(--s-2) var(--s-4);max-width:80rem;margin:0 auto;display:flex}.topbar-actions{align-items:center;gap:var(--s-2);display:flex}.main{width:100%;max-width:var(--content-w);padding:var(--s-4) var(--s-4) calc(88px + env(safe-area-inset-bottom));outline:none;grid-area:main;margin:0 auto}.panel{gap:var(--s-4);animation:rise var(--dur-2) var(--ease) both;align-content:start;display:grid}.nav{z-index:var(--z-nav);padding:var(--s-1) var(--s-2) calc(var(--s-1) + env(safe-area-inset-bottom));background:color-mix(in srgb, var(--surface) 88%, transparent);-webkit-backdrop-filter:saturate(1.4)blur(14px);backdrop-filter:saturate(1.4)blur(14px);border-top:1px solid var(--line);grid-template-columns:repeat(5,1fr);display:grid;position:fixed;inset:auto 0 0}.nav-btn{min-height:56px;padding:var(--s-1);border-radius:var(--r-md);color:var(--text-2);letter-spacing:.01em;transition:color var(--dur-1), background var(--dur-1);background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:2px;font-size:.72rem;font-weight:600;display:flex}.nav-btn:hover{color:var(--text)}.nav-btn.is-active{color:var(--primary);background:var(--primary-tint)}.nav-btn:active{transform:scale(.97)}@media (min-width:60rem){.app{grid-template-columns:var(--rail-w) minmax(0, 1fr);grid-template-areas:"top top""nav main"}.nav{top:65px;inset:auto;top:calc(65px + env(safe-area-inset-top));align-self:start;gap:var(--s-1);padding:var(--s-4) var(--s-3);-webkit-backdrop-filter:none;backdrop-filter:none;background:0 0;border:0;flex-direction:column;grid-area:nav;display:flex;position:sticky}.nav-btn{justify-content:flex-start;gap:var(--s-3);padding:var(--s-2) var(--s-3);font-size:var(--step-0);flex-direction:row}.main{padding:var(--s-5) var(--s-5) var(--s-7);margin:0 auto}}.btn{justify-content:center;align-items:center;gap:var(--s-2);min-height:var(--tap);padding:0 var(--s-4);border-radius:var(--r-md);white-space:nowrap;transition:background var(--dur-1), border-color var(--dur-1), color var(--dur-1), transform var(--dur-1) var(--ease), box-shadow var(--dur-1);border:1px solid #0000;font-weight:600;line-height:1;display:inline-flex}.btn:active:not(:disabled){transform:translateY(1px)scale(.99)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-sm{padding:0 var(--s-3);font-size:var(--step--1)}.btn-block{width:100%}.btn-primary{background:var(--primary);color:var(--primary-ink);box-shadow:var(--shadow-1)}.btn-primary:hover:not(:disabled){background:var(--primary-hover);box-shadow:var(--shadow-2)}.btn-secondary{background:var(--surface);color:var(--text);border-color:var(--line-strong)}.btn-secondary:hover:not(:disabled){background:var(--primary-tint);border-color:var(--primary)}.btn-ghost{color:var(--text-2);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--primary-tint);color:var(--text)}.btn-danger-quiet{color:var(--error);border-color:color-mix(in srgb, var(--error) 35%, transparent);background:0 0}.btn-danger-quiet:hover:not(:disabled){background:var(--error-tint);border-color:var(--error)}.btn.is-busy .btn-label:after{content:"";vertical-align:-.1em;border:2px solid;border-right-color:#0000;border-radius:50%;width:.9em;height:.9em;margin-left:.6em;animation:.7s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.icon-btn{width:var(--tap);height:var(--tap);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);color:var(--text);transition:background var(--dur-1), border-color var(--dur-1);flex:none;place-items:center;padding:0;display:inline-grid}.icon-btn:hover{background:var(--primary-tint);border-color:var(--primary)}.icon-btn-quiet{color:var(--text-2);background:0 0;border-color:#0000}.link-btn{min-height:var(--tap);padding:0 var(--s-2);color:var(--primary);text-underline-offset:3px;background:0 0;border:0;justify-self:center;font-weight:600;text-decoration:underline}.avatar-btn{width:var(--tap);height:var(--tap);background:var(--primary);color:var(--primary-ink);border:0;border-radius:50%;font-weight:700}.account{position:relative}.menu{right:0;top:calc(100% + var(--s-2));z-index:var(--z-menu);min-width:15rem;padding:var(--s-3);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-3);animation:rise var(--dur-2) var(--ease) both;position:absolute}.menu-label{font-size:var(--step--1);color:var(--text-2)}.menu-email{margin-bottom:var(--s-3);overflow-wrap:anywhere;font-weight:600}.menu-item{align-items:center;gap:var(--s-2);width:100%;min-height:var(--tap);padding:0 var(--s-3);border-radius:var(--r-sm);text-align:left;background:0 0;border:0;display:flex}.menu-item:hover{background:var(--primary-tint)}.sync-pill{align-items:center;gap:var(--s-2);padding:6px var(--s-3);border:1px solid var(--line);border-radius:var(--r-pill);background:var(--surface);font-size:var(--step--1);color:var(--text-2);font-weight:600;display:none}@media (min-width:40rem){.sync-pill{display:inline-flex}}.sync-dot{background:var(--text-2);border-radius:50%;width:8px;height:8px}.sync-pill[data-status=ok] .sync-dot{background:var(--success)}.sync-pill[data-status=busy] .sync-dot{background:var(--warning);animation:1.2s ease-in-out infinite pulse}.sync-pill[data-status=off] .sync-dot{background:var(--error)}.field{gap:6px;min-width:0;display:grid}.field label,.label{font-size:var(--step--1);color:var(--text-2);font-weight:600}input[type=text],input[type=email],input[type=password],input[type=tel],input[type=date],input[type=search],select{width:100%;min-height:var(--tap);padding:0 var(--s-3);border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface);color:var(--text);transition:border-color var(--dur-1), box-shadow var(--dur-1);font-size:1rem}input:hover,select:hover{border-color:var(--text-2)}input:focus-visible,select:focus-visible{border-color:var(--focus);box-shadow:0 0 0 3px color-mix(in srgb, var(--focus) 30%, transparent);outline:none}input::placeholder{color:var(--text-2);opacity:.75}.field-grid{gap:var(--s-4);display:grid}@media (min-width:34rem){.field-grid{grid-template-columns:1fr 1fr}}.field-err{font-size:var(--step--1);color:var(--error);display:none}.field.invalid input{border-color:var(--error)}.field.invalid .field-err{display:block}.form-msg{padding:var(--s-3);border-radius:var(--r-md);background:var(--error-tint);color:var(--error);font-size:var(--step--1);font-weight:600}.form-msg.is-success{background:var(--success-tint);color:var(--success)}#loginForm{gap:var(--s-4);display:grid}.input-affix{position:relative}.input-affix input{padding-right:52px}.input-affix .icon-btn{position:absolute;top:0;right:0}.input-affix-btn{gap:var(--s-2);display:flex}.input-affix-btn input{padding-right:var(--s-3)}.form-actions{gap:var(--s-2);flex-wrap:wrap;display:flex}.segmented{border:1px solid var(--line-strong);border-radius:var(--r-md);background:var(--surface-2);justify-self:start;padding:3px;display:inline-flex}.seg{min-height:38px;padding:0 var(--s-5);border-radius:var(--r-sm);color:var(--text-2);background:0 0;border:0;font-weight:600}.seg.is-on{background:var(--primary);color:var(--primary-ink)}.card{padding:var(--s-4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1)}.form-card{gap:var(--s-4);display:grid}.form-card h2{font-size:var(--step-1)}.toolbar{gap:var(--s-2);flex-wrap:wrap;align-items:center;display:flex}.toolbar-fill>select,.toolbar-fill>.search{flex:1;min-width:0}.search{flex:14rem;position:relative}.search input{padding-left:42px}.search-icon{color:var(--text-2);pointer-events:none;display:grid;position:absolute;top:50%;left:13px;transform:translateY(-50%)}.date-bar{align-items:center;gap:var(--s-2);display:flex}.date-display{text-align:center;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);min-height:58px;box-shadow:var(--shadow-1);flex:1;place-content:center;display:grid;position:relative}.date-display:focus-within{outline:3px solid var(--focus);outline-offset:2px}.dow{font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);font-weight:600}.dnum{font-family:var(--font-display);font-size:var(--step-2);letter-spacing:-.02em;font-weight:600;line-height:1.1}.date-display input{opacity:0;cursor:pointer;width:100%;height:100%;min-height:0;position:absolute;inset:0}.note-pill{padding:6px var(--s-3);border-radius:var(--r-pill);font-size:var(--step--1);font-weight:600;display:inline-block}.note-weekend{background:var(--info-tint);color:var(--info)}.note-holiday{background:var(--warning-tint);color:var(--warning)}.stats-row{gap:var(--s-3);grid-template-columns:1fr 1fr;display:grid}.stats-row:empty{display:none}.ring-card{align-items:center;gap:var(--s-3);padding:var(--s-3) var(--s-4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);display:flex}.ring-track{stroke:var(--line)}.ring-val{stroke:var(--success);transition:stroke-dashoffset var(--dur-3) var(--ease)}.ring-label{font-size:var(--step--1);color:var(--text-2);font-weight:600}.ring-num{font-family:var(--font-display);font-size:var(--step-2);font-weight:600;line-height:1.1}.ring-num small{font-family:var(--font-body);font-size:var(--step--1);color:var(--text-2);font-weight:500}.group-title{align-items:center;gap:var(--s-2);margin-top:var(--s-3);font-size:var(--step-1);display:flex}.count{border-radius:var(--r-pill);background:var(--primary-tint);min-width:26px;height:22px;color:var(--primary);font-family:var(--font-body);font-size:var(--step--1);letter-spacing:0;place-items:center;padding:0 7px;font-weight:700;display:inline-grid}.reg-head,.stud-row{align-items:center;gap:var(--s-2);grid-template-columns:36px minmax(0,1fr) 56px 56px;display:grid}.reg-head{padding:0 var(--s-3);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;color:var(--text-2);font-weight:700}.rh-name{grid-column:1/3}.rh-col{text-align:center}.stud-row{min-height:56px;padding:var(--s-1) var(--s-3);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-1);transition:border-color var(--dur-1), box-shadow var(--dur-1)}.stud-row+.stud-row{margin-top:var(--s-2)}.stud-row:hover{border-color:var(--line-strong);box-shadow:var(--shadow-2)}.group-title+.stud-row{margin-top:var(--s-2)}#studentList .group-title{margin-bottom:0}.avatar{border-radius:50%;flex:none;place-items:center;width:36px;height:36px;font-size:.78rem;font-weight:700;display:grid}.avatar.g-M{background:var(--info-tint);color:var(--info)}.avatar.g-F{background:var(--accent-tint);color:var(--accent-text)}.name-wrap{min-width:0}.name{overflow-wrap:anywhere;font-weight:600;line-height:1.3;display:block}.tick{min-height:var(--tap);cursor:pointer;place-items:center;display:grid}.switch{width:48px;height:28px;position:relative}.switch input{opacity:0;cursor:pointer;width:100%;height:100%;min-height:0;margin:0;position:absolute;inset:0}.switch-track{border-radius:var(--r-pill);background:var(--line-strong);transition:background var(--dur-2) var(--ease);pointer-events:none;position:absolute;inset:0}.switch-track:after{content:"";width:22px;height:22px;transition:transform var(--dur-2) var(--ease);background:#fff;border-radius:50%;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0000004d}.switch input:checked+.switch-track{background:var(--success)}.switch input:checked+.switch-track:after{transform:translate(20px)}.switch input:focus-visible+.switch-track{outline:3px solid var(--focus);outline-offset:2px}.table-wrap{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1);overflow-x:auto}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%}th,td{padding:var(--s-3) var(--s-4);text-align:left;border-bottom:1px solid var(--line);vertical-align:middle}thead th{font-size:var(--step--1);letter-spacing:.06em;text-transform:uppercase;color:var(--text-2);background:var(--surface-2);font-weight:700}tbody th{font-weight:600}tbody tr:last-child td,tbody tr:last-child th{border-bottom:0}tfoot th,tfoot td{background:var(--primary-tint);border-bottom:0;font-weight:700}.num{text-align:right;white-space:nowrap;width:1%}.col-bar{min-width:9rem}.mini-bar-wrap{align-items:center;gap:var(--s-3);display:flex}.mini-bar{border-radius:var(--r-pill);background:var(--line);flex:1;height:8px;overflow:hidden}.mini-bar span{border-radius:inherit;background:var(--success);height:100%;display:block}.mini-bar.low span{background:var(--error)}.mini-pct{text-align:right;min-width:3.2rem;font-size:var(--step--1);color:var(--text-2);font-weight:600}.tag{border-radius:var(--r-pill);vertical-align:1px;padding:2px 8px;font-size:.72rem;font-weight:700;display:inline-block}.tag-star{background:var(--accent-tint);color:var(--accent-text)}.tag-risk{background:var(--error-tint);color:var(--error)}.tag-holiday{background:var(--warning-tint);color:var(--warning)}.overview-grid{gap:var(--s-3);grid-template-columns:repeat(3,1fr);display:grid}.overview-2{grid-template-columns:repeat(2,1fr)}.stat-card{padding:var(--s-4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-1)}.stat-card .v{font-family:var(--font-display);font-size:var(--step-3);font-weight:600;line-height:1.1}.stat-card .l{margin-top:var(--s-1);font-size:var(--step--1);color:var(--text-2);font-weight:600}.note{font-size:var(--step--1);color:var(--text-2)}.section-head{justify-content:space-between;align-items:center;gap:var(--s-3);margin-top:var(--s-2);display:flex}.section-head h2{font-size:var(--step-1)}.section-head-end{justify-content:flex-end}.stu-item,.hol-item{align-items:center;gap:var(--s-3);padding:var(--s-2) var(--s-3);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-1);display:flex}.stu-item+.stu-item,.hol-item+.hol-item{margin-top:var(--s-2)}.stu-open{align-items:center;gap:var(--s-3);min-width:0;min-height:var(--tap);text-align:left;background:0 0;border:0;flex:1;padding:0;display:flex}.stu-open:hover .n{color:var(--primary)}.txt{min-width:0;display:grid}.txt .n{overflow-wrap:anywhere;font-weight:600}.txt .a{font-size:var(--step--1);color:var(--text-2)}.hol-info{flex:1;min-width:0}.hol-info .d1{font-weight:600}.hol-info .d2{font-size:var(--step--1);color:var(--text-2);overflow-wrap:anywhere}.date-badge{border-radius:var(--r-md);background:var(--accent-tint);width:48px;height:52px;color:var(--accent-text);flex:none;place-items:center;line-height:1.1;display:grid}.date-badge b{font-family:var(--font-display);font-size:var(--step-1)}.date-badge span{text-transform:uppercase;letter-spacing:.06em;font-size:.66rem;font-weight:700}.empty-state{gap:var(--s-1);padding:var(--s-7) var(--s-4);text-align:center;border:1px dashed var(--line-strong);border-radius:var(--r-lg);justify-items:center;display:grid}.empty-title{font-family:var(--font-display);font-size:var(--step-1);font-weight:600}.banner{padding:var(--s-3) var(--s-4);margin-bottom:var(--s-4);border-radius:var(--r-md);font-size:var(--step--1);font-weight:600}.banner-error{background:var(--error-tint);color:var(--error)}.skeleton-row{grid-template-columns:36px 1fr}.sk{border-radius:var(--r-sm);background:linear-gradient(90deg, var(--line) 25%, var(--surface-2) 50%, var(--line) 75%);background-size:200% 100%;animation:1.4s linear infinite shimmer;display:block}.sk-avatar{border-radius:50%;width:36px;height:36px}.sk-line{width:55%;height:14px}@keyframes shimmer{to{background-position:-200% 0}}.toasts{left:50%;bottom:calc(84px + env(safe-area-inset-bottom));z-index:var(--z-toast);gap:var(--s-2);pointer-events:none;width:min(92vw,26rem);display:grid;position:fixed;transform:translate(-50%)}@media (min-width:60rem){.toasts{bottom:var(--s-5)}}.toast{padding:var(--s-3) var(--s-4);border-radius:var(--r-md);background:var(--text);color:var(--bg);font-size:var(--step--1);text-align:center;box-shadow:var(--shadow-3);animation:rise var(--dur-2) var(--ease) both;font-weight:600}.toast-error{background:var(--error);color:#fff}.toast.leave{opacity:0;transition:opacity var(--dur-2), transform var(--dur-2);transform:translateY(6px)}.dialog{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);width:min(92vw,26rem);color:var(--text);box-shadow:var(--shadow-3);padding:0}.dialog[open]{animation:rise var(--dur-2) var(--ease) both}.dialog::backdrop{background:var(--overlay);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.dialog-body{gap:var(--s-3);padding:var(--s-5);display:grid}.dialog-body h2{font-size:var(--step-1)}.dialog-body p{color:var(--text-2)}.dialog-actions{justify-content:flex-end;gap:var(--s-2);margin-top:var(--s-2);display:flex}@media print{.topbar,.nav,.toolbar,.form-card,.toasts,.date-bar,.section-head .btn,.banner,.skip-link{display:none!important}.app{display:block}.main{max-width:none;padding:0}body{color:#000;background:#fff}.table-wrap,.stat-card,.ring-card{box-shadow:none;border-color:#999}tr{break-inside:avoid}}#holBadge:empty{display:none}#weeklyOut,#termOut,#holList,#stuListM,#stuListF{gap:var(--s-4);align-content:start;display:grid}#holList,#stuListM,#stuListF{gap:0}
