@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lexend-vietnamese-400-normal-DoLa7jNB.woff2)format("woff2"),url(/assets/lexend-vietnamese-400-normal-mPlHoWg5.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lexend-latin-ext-400-normal-D38JI5AK.woff2)format("woff2"),url(/assets/lexend-latin-ext-400-normal-D9P7pMo-.woff)format("woff");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:Lexend;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lexend-latin-400-normal-CwRJVcUA.woff2)format("woff2"),url(/assets/lexend-latin-400-normal-CHypAkT3.woff)format("woff");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:Lexend;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/lexend-vietnamese-500-normal-Bos7Oy9U.woff2)format("woff2"),url(/assets/lexend-vietnamese-500-normal-EFAPmUTE.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/lexend-latin-ext-500-normal-Bo17xs96.woff2)format("woff2"),url(/assets/lexend-latin-ext-500-normal-DbCmXT_D.woff)format("woff");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:Lexend;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/lexend-latin-500-normal-Dl-X5nog.woff2)format("woff2"),url(/assets/lexend-latin-500-normal-D9x1QWTH.woff)format("woff");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:Lexend;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lexend-vietnamese-600-normal-Cr1ePs6O.woff2)format("woff2"),url(/assets/lexend-vietnamese-600-normal-BxEVPgxw.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lexend-latin-ext-600-normal-hDcqLAH9.woff2)format("woff2"),url(/assets/lexend-latin-ext-600-normal-BXtyp5LP.woff)format("woff");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:Lexend;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lexend-latin-600-normal-DdvlkEkX.woff2)format("woff2"),url(/assets/lexend-latin-600-normal-DSBzZxpA.woff)format("woff");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:Lexend;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/lexend-vietnamese-700-normal-BrGlFDtO.woff2)format("woff2"),url(/assets/lexend-vietnamese-700-normal-NEp7hM5T.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Lexend;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/lexend-latin-ext-700-normal-CcWyeg4T.woff2)format("woff2"),url(/assets/lexend-latin-ext-700-normal-iR1cPiNX.woff)format("woff");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:Lexend;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/lexend-latin-700-normal-DqO8md6r.woff2)format("woff2"),url(/assets/lexend-latin-700-normal-DVyJlN8t.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-sans-3-cyrillic-ext-400-normal-BwJdxs7r.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-ext-400-normal-Cd63HKDh.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-sans-3-cyrillic-400-normal-DjhbW-4D.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-400-normal-7kQcAFpS.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-sans-3-greek-ext-400-normal-CpIwTHMM.woff2)format("woff2"),url(/assets/source-sans-3-greek-ext-400-normal-BI1kUwmR.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-sans-3-greek-400-normal-DZReXJla.woff2)format("woff2"),url(/assets/source-sans-3-greek-400-normal-DJm9Ud5h.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-sans-3-vietnamese-400-normal-CwtaIDr2.woff2)format("woff2"),url(/assets/source-sans-3-vietnamese-400-normal-dYp9C364.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-sans-3-latin-ext-400-normal-UNsKFIBq.woff2)format("woff2"),url(/assets/source-sans-3-latin-ext-400-normal-BGPHfnm_.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/assets/source-sans-3-latin-400-normal-DQi5PRDE.woff2)format("woff2"),url(/assets/source-sans-3-latin-400-normal-AFMiCETP.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:500;src:url(/assets/source-sans-3-cyrillic-ext-500-normal-D8Dd5jAI.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-ext-500-normal-CaAUUz-j.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:500;src:url(/assets/source-sans-3-cyrillic-500-normal-BmnPaoCF.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-500-normal-B7bCyCk_.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:500;src:url(/assets/source-sans-3-greek-ext-500-normal-9wgnofA_.woff2)format("woff2"),url(/assets/source-sans-3-greek-ext-500-normal-FO4an0ZF.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:500;src:url(/assets/source-sans-3-greek-500-normal-eLQqTu5G.woff2)format("woff2"),url(/assets/source-sans-3-greek-500-normal-BOY5JFvG.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:500;src:url(/assets/source-sans-3-vietnamese-500-normal-BSXhk166.woff2)format("woff2"),url(/assets/source-sans-3-vietnamese-500-normal-7g9Z1MMl.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:500;src:url(/assets/source-sans-3-latin-ext-500-normal-tzH6xoxH.woff2)format("woff2"),url(/assets/source-sans-3-latin-ext-500-normal-DYiJOyLu.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:500;src:url(/assets/source-sans-3-latin-500-normal-DiWS0tcR.woff2)format("woff2"),url(/assets/source-sans-3-latin-500-normal-BtDzq-z9.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-sans-3-cyrillic-ext-600-normal-6AhwUnSr.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-ext-600-normal-uAL1a5gb.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-sans-3-cyrillic-600-normal-BnFu5nHC.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-600-normal-y-RO8wOd.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-sans-3-greek-ext-600-normal-DynePNDL.woff2)format("woff2"),url(/assets/source-sans-3-greek-ext-600-normal-D7vJ4nVX.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-sans-3-greek-600-normal-BSO157bq.woff2)format("woff2"),url(/assets/source-sans-3-greek-600-normal-BNF9LBpG.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-sans-3-vietnamese-600-normal-B2sTNYey.woff2)format("woff2"),url(/assets/source-sans-3-vietnamese-600-normal-DpSexF-T.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-sans-3-latin-ext-600-normal-AEyhgUpm.woff2)format("woff2"),url(/assets/source-sans-3-latin-ext-600-normal-Wy7HIzqC.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/assets/source-sans-3-latin-600-normal-DeckBYAU.woff2)format("woff2"),url(/assets/source-sans-3-latin-600-normal-BvDVuF-j.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/source-sans-3-cyrillic-ext-700-normal-BhUSqjb8.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-ext-700-normal-B6RPsSdD.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/source-sans-3-cyrillic-700-normal-CIuudVLB.woff2)format("woff2"),url(/assets/source-sans-3-cyrillic-700-normal-DYE6gq6k.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/source-sans-3-greek-ext-700-normal-Dd6uIcuy.woff2)format("woff2"),url(/assets/source-sans-3-greek-ext-700-normal-C6ITAlBU.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/source-sans-3-greek-700-normal-C8Tp2qRF.woff2)format("woff2"),url(/assets/source-sans-3-greek-700-normal-BWdBblwd.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/source-sans-3-vietnamese-700-normal-Bgamivog.woff2)format("woff2"),url(/assets/source-sans-3-vietnamese-700-normal-BHxM10oo.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/source-sans-3-latin-ext-700-normal-6Xi0A2be.woff2)format("woff2"),url(/assets/source-sans-3-latin-ext-700-normal-ChH_v7nA.woff)format("woff");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:"Source Sans 3";font-style:normal;font-display:swap;font-weight:700;src:url(/assets/source-sans-3-latin-700-normal-CkzU-mV9.woff2)format("woff2"),url(/assets/source-sans-3-latin-700-normal-BBbVrHF_.woff)format("woff");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{--brand-50:#eaf3fe;--brand-100:#d6e8fd;--brand-200:#b4d5fb;--brand-300:#8cbef7;--brand-400:#4ea0f2;--brand-500:#2b7fd4;--brand-600:#1f66b3;--brand-700:#184f8c;--status-excused:#16a34a;--status-excused-bg:#dcfce7;--status-unexcused:#dc2626;--status-unexcused-bg:#fee2e2;--status-open:#b45309;--status-open-bg:#fef3c7;--status-late:#ea580c;--status-late-bg:#ffedd5;--status-remark:#7c3aed;--status-remark-bg:#ede9fe;--status-present:#16a34a;--status-present-bg:#dcfce7;--status-absent:#dc2626;--status-absent-bg:#fee2e2;--status-pending:#2563eb;--status-pending-bg:#dbeafe;--status-disputed:#be185d;--status-disputed-bg:#fce7f3;--status-miscoded:#475569;--status-miscoded-bg:#f1f5f9;--radius-sm:6px;--radius:10px;--radius-lg:16px;--shadow-sm:0 1px 2px #0f172a0f, 0 1px 3px #0f172a14;--shadow-md:0 4px 12px #0f172a14, 0 2px 4px #0f172a0f;--shadow-lg:0 12px 32px #0f172a24;--topbar-h:60px;--font-heading:"Lexend", system-ui, sans-serif;--font-body:"Source Sans 3", system-ui, sans-serif}:root,:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#f2f6fc;--surface:#fff;--surface-2:#f8fafc;--elevated:#fff;--text:#0f172a;--text-muted:#475569;--text-soft:#64748b;--border:#e2e8f0;--border-strong:#cbd5e1;--brand:var(--brand-400);--brand-ink:var(--brand-600);--brand-tint:var(--brand-50);--ring:#4ea0f273;--cover:var(--brand-400)}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0b1220;--surface:#131c2b;--surface-2:#0f1826;--elevated:#18243a;--text:#e6edf6;--text-muted:#9fb0c6;--text-soft:#7d8da6;--border:#24314a;--border-strong:#33456a;--brand:var(--brand-300);--brand-ink:var(--brand-200);--brand-tint:#132239;--ring:#8cbef780;--cover:var(--brand-500);--status-excused-bg:#10281a;--status-unexcused-bg:#2c1416;--status-open-bg:#2c2410;--status-late-bg:#2c1c10;--status-excused:#4ade80;--status-unexcused:#f87171;--status-open:#fbbf24;--status-late:#fb923c;--status-remark-bg:#241a3d;--status-remark:#a78bfa;--status-present-bg:#10281a;--status-present:#4ade80;--status-absent-bg:#2c1416;--status-absent:#f87171;--status-pending-bg:#142a4d;--status-pending:#60a5fa;--status-disputed-bg:#2e1526;--status-disputed:#f472b6;--status-miscoded-bg:#1e293b;--status-miscoded:#94a3b8;--shadow-sm:0 1px 2px #0006;--shadow-md:0 6px 16px #00000073;--shadow-lg:0 16px 40px #0000008c}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0b1220;--surface:#131c2b;--surface-2:#0f1826;--elevated:#18243a;--text:#e6edf6;--text-muted:#9fb0c6;--text-soft:#7d8da6;--border:#24314a;--border-strong:#33456a;--brand:var(--brand-300);--brand-ink:var(--brand-200);--brand-tint:#132239;--ring:#8cbef780;--cover:var(--brand-500);--status-excused-bg:#10281a;--status-unexcused-bg:#2c1416;--status-open-bg:#2c2410;--status-late-bg:#2c1c10;--status-excused:#4ade80;--status-unexcused:#f87171;--status-open:#fbbf24;--status-late:#fb923c;--shadow-sm:0 1px 2px #0006;--shadow-md:0 6px 16px #00000073;--shadow-lg:0 16px 40px #0000008c}}*{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font-body);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.55}h1,h2,h3,h4,h5{font-family:var(--font-heading);color:var(--text);margin:0;font-weight:600;line-height:1.25}a{color:var(--brand-ink);text-decoration:none}a:hover{text-decoration:underline}button{font-family:inherit}:focus-visible{outline:3px solid var(--ring);outline-offset:2px;border-radius:var(--radius-sm)}@media (prefers-reduced-motion:reduce){*{transition-duration:.001ms!important;animation-duration:.001ms!important}}.app-shell{flex-direction:column;min-height:100vh;display:flex}.app-main{flex:1}.app-footer{z-index:20;background:var(--surface);border-top:1px solid var(--border);color:var(--text-muted);grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;padding:7px 20px;font-size:12.5px;display:grid;position:sticky;bottom:0}.app-footer .foot-left{justify-self:start}.app-footer .foot-mid{text-align:center;justify-self:center}.app-footer .foot-right{justify-self:end;align-items:center;display:flex}.app-footer .foot-logo{width:auto;height:20px}.app-footer .foot-logo-light{display:block}.app-footer .foot-logo-dark,:root[data-theme=dark] .app-footer .foot-logo-light{display:none}:root[data-theme=dark] .app-footer .foot-logo-dark{display:block}@media (width<=600px){.app-footer{grid-template-columns:1fr auto}.app-footer .foot-mid{display:none}}.page{width:100%;max-width:1240px;margin:0 auto;padding:24px 24px 64px}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;margin-bottom:20px;display:flex}.page-title{letter-spacing:-.01em;font-size:24px}.page-subtitle{color:var(--text-muted);margin-top:4px;font-size:15px}.grid{gap:16px;display:grid}.grid-kpi{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}.grid-2{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(270px,1fr))}.stack{flex-direction:column;gap:16px;display:flex}.row{align-items:center;gap:10px;display:flex}.row-between{justify-content:space-between;align-items:center;gap:10px;display:flex}.spacer{flex:1}.strong{font-weight:600}.self-start{align-self:flex-start}.wrap{flex-wrap:wrap}.mt-0{margin-top:0}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mb-0{margin-bottom:0}.mb-2{margin-bottom:8px}.mb-4{margin-bottom:16px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card-pad{padding:18px 20px}.card-header{border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:16px 20px;display:flex}.card-header h3{font-size:15px;font-weight:600}.card-header .card-header-icon{color:var(--brand-ink);place-items:center;display:grid}.app-boot{min-height:100vh;color:var(--text-muted);place-items:center;font-size:15px;display:grid}.btn{border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap;border:1px solid #0000;align-items:center;gap:8px;padding:9px 15px;font-size:14px;font-weight:600;transition:background-color .18s,border-color .18s,color .18s;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand-400);color:#062138}:root[data-theme=dark] .btn-primary{color:#06121f}.btn-primary:hover:not(:disabled){background:var(--brand-500);color:#fff}.btn-ghost{color:var(--text-muted);border-color:var(--border-strong);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--surface-2);color:var(--text)}.btn-danger{background:var(--status-unexcused-bg);color:var(--status-unexcused);border-color:#0000}.btn-danger:hover:not(:disabled){background:var(--status-unexcused);color:#fff}.btn-success{background:var(--status-excused-bg);color:var(--status-excused)}.btn-success:hover:not(:disabled){background:var(--status-excused);color:#fff}.btn-sm{padding:6px 10px;font-size:13px}.btn-icon{border-radius:var(--radius-sm);padding:8px}.chip{white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 10px 3px 8px;font-size:12.5px;font-weight:600;line-height:1.5;display:inline-flex}.chip svg{width:14px;height:14px}.chip-excused{background:var(--status-excused-bg);color:var(--status-excused)}.chip-unexcused{background:var(--status-unexcused-bg);color:var(--status-unexcused)}.chip-open{background:var(--status-open-bg);color:var(--status-open)}.chip-late{background:var(--status-late-bg);color:var(--status-late)}.chip-remark{background:var(--status-remark-bg);color:var(--status-remark)}.chip-pending{background:var(--status-pending-bg);color:var(--status-pending)}.chip-disputed{background:var(--status-disputed-bg);color:var(--status-disputed)}.chip-miscoded{background:var(--status-miscoded-bg);color:var(--status-miscoded)}.chip-neutral{background:var(--surface-2);color:var(--text-muted);border:1px solid var(--border)}.kpi{flex-direction:column;gap:6px;padding:18px 20px;display:flex;position:relative;overflow:hidden}.kpi-icon{background:var(--brand-tint);width:38px;height:38px;color:var(--brand-ink);border-radius:10px;place-items:center;display:grid;position:absolute;top:16px;right:16px}.kpi-label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;font-size:13px;font-weight:600}.kpi-value{font-family:var(--font-heading);letter-spacing:-.02em;font-size:30px;font-weight:700}.kpi-trend{color:var(--text-soft);align-items:center;gap:4px;font-size:13px;display:flex}.kpi-up{color:var(--status-excused)}.kpi-down{color:var(--status-unexcused)}.table-wrap{width:100%;overflow-x:auto}table.data{border-collapse:collapse;width:100%;font-size:14px}table.data thead th{text-align:left;color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--border);white-space:nowrap;background:var(--surface);cursor:pointer;-webkit-user-select:none;user-select:none;padding:11px 14px;font-size:12.5px;font-weight:600;position:sticky;top:0}table.data thead th.no-sort{cursor:default}table.data thead th .th-inner{align-items:center;gap:4px;display:inline-flex}table.data tbody td{border-bottom:1px solid var(--border);vertical-align:middle;padding:11px 14px}table.data tbody tr{transition:background-color .12s}table.data tbody tr:hover{background:var(--surface-2)}table.data tbody tr.clickable{cursor:pointer}.num{font-variant-numeric:tabular-nums}@media (width<=640px){table.data thead{display:none}table.data,table.data tbody,table.data tr,table.data td{width:100%;display:block}table.data tr{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:10px;padding:4px 14px}table.data tbody tr:hover{background:0 0}table.data td{border:none;border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:14px;padding:9px 0;display:flex;text-align:right!important}table.data td:last-child{border-bottom:none}table.data td:before{content:attr(data-label);color:var(--text-muted);text-align:left;white-space:nowrap;font-weight:600}table.data td[data-label=""]{display:none}}.schedule{gap:6px;min-width:720px;display:grid}.schedule.schedule-single{min-width:0}.schedule.schedule-single .schedule-corner,.schedule.schedule-single .schedule-dayhead{display:none}.day-nav{justify-content:space-between;align-items:center;gap:8px;margin-bottom:14px;display:flex}.day-nav-label{font-family:var(--font-heading);font-size:16px;font-weight:600}.schedule-corner,.schedule-dayhead{color:var(--text-muted);text-align:center;padding:8px;font-size:13px;font-weight:600}.schedule-dayhead.today{color:var(--brand-ink)}.schedule-dayhead .dh-date{color:var(--text-soft);font-size:12px;font-weight:400;display:block}.schedule-timecell{color:var(--text-muted);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;justify-content:flex-end;align-items:flex-start;padding:9px 10px 0 0;font-size:12.5px;font-weight:600;display:flex}.lesson{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);flex-direction:column;gap:2px;min-height:56px;padding:8px 10px;font-size:13px;transition:box-shadow .15s,transform 50ms;display:flex;position:relative}.lesson.filled{border-left:3px solid var(--brand-400)}.lesson.clickable{cursor:pointer}.lesson.clickable:hover{box-shadow:var(--shadow-md)}.lesson.now{box-shadow:0 0 0 2px var(--brand-400);background:var(--brand-tint)}.lesson.confirmed{border-left-color:var(--status-present);background:var(--status-present-bg)}.lesson.confirmed .lesson-subject{color:var(--status-present)}.lesson.notheld{opacity:.6}.lesson.notheld .lesson-subject{text-decoration:line-through}.lesson-test{background:var(--status-remark);color:#fff;width:17px;height:17px;font-size:11px;font-weight:800;font-family:var(--font-heading);border-radius:5px;place-items:center;display:grid;position:absolute;top:5px;right:5px}.lesson-badges{align-items:center;gap:3px;display:flex;position:absolute;bottom:5px;right:5px}.cbadge{min-width:18px;height:18px;font-size:11px;font-weight:700;font-family:var(--font-heading);font-variant-numeric:tabular-nums;background:var(--surface);border-radius:9px;place-items:center;padding:0 4px;display:grid}.cbadge-blue{color:var(--status-pending);border:1.5px solid var(--status-pending)}.cbadge-blue.filled{background:var(--status-pending);color:#fff}.cbadge-red{color:var(--status-unexcused);border:1.5px solid var(--status-unexcused)}.cbadge-red.filled{background:var(--status-unexcused);color:#fff}.cbadge-x{color:#fff;background:var(--status-unexcused);border:none}.lesson-subject{font-weight:600}.lesson-class{color:var(--text-soft);margin-left:6px;font-weight:400}.lesson-meta{color:var(--text-soft);flex-wrap:wrap;gap:8px;font-size:12px;display:flex}.lesson-empty{opacity:.5;background:0 0;border-style:dashed}.lesson-badge{position:absolute;top:6px;right:6px}.progress{background:var(--surface-2);border:1px solid var(--border);border-radius:999px;height:10px;overflow:hidden}.progress-fill{background:linear-gradient(90deg, var(--brand-400), var(--brand-500));height:100%;transition:width .4s}.modal-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:50;background:#02081480;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.modal{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:520px;max-height:90vh;overflow:auto}.modal-wide{max-width:900px}.modal-head{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:18px 20px;display:flex}.modal-body{padding:20px}.modal-foot{border-top:1px solid var(--border);justify-content:flex-end;gap:10px;padding:16px 20px;display:flex}.field{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.field label{color:var(--text-muted);font-size:13px;font-weight:600}.field input,.field select,.field textarea{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);width:100%;padding:9px 11px;font-family:inherit;font-size:14px}.field input[type=checkbox],.field input[type=radio]{width:auto}.field textarea{resize:vertical;min-height:84px}.dropzone{border:1.5px dashed var(--border-strong);border-radius:var(--radius);text-align:center;color:var(--text-muted);background:var(--surface-2);padding:18px;font-size:14px;transition:border-color .12s,background-color .12s}.dropzone.dragging{border-color:var(--brand-500);background:var(--brand-tint);color:var(--brand-ink)}.empty{text-align:center;color:var(--text-muted);padding:40px 20px}.empty svg{color:var(--text-soft);margin-bottom:10px}.muted{color:var(--text-muted)}.soft{color:var(--text-soft)}.small{font-size:13px}.tag-role{text-transform:uppercase;letter-spacing:.04em;background:var(--brand-tint);color:var(--brand-ink);border-radius:6px;padding:2px 7px;font-size:11px;font-weight:700}.legend{color:var(--text-muted);flex-wrap:wrap;gap:14px;font-size:13px;display:flex}.legend .dot{vertical-align:middle;border-radius:3px;width:10px;height:10px;margin-right:5px;display:inline-block}.dot-excused{background:var(--status-excused)}.dot-unexcused{background:var(--status-unexcused)}.dot-open{background:var(--status-open)}.dot-late{background:var(--status-late)}.divider{background:var(--border);height:1px;margin:4px 0}.list-reset{margin:0;padding:0;list-style:none}.topbar{z-index:30;background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow-sm);position:sticky;top:0}.topbar:before{content:"";background:var(--cover);height:3px;display:block}.topbar-inner{max-width:1400px;height:var(--topbar-h);align-items:center;gap:18px;margin:0 auto;padding:0 20px;display:flex}.topbar-brand{cursor:pointer;color:var(--text);align-items:center;padding-right:6px;display:flex}.topbar-brand .brand-full{align-items:center;display:inline-flex}.topbar-brand .brand-mark{border-radius:6px;width:auto;height:30px;display:none}.topbar-nav{align-items:center;gap:2px;display:flex}.nav-link{border-radius:var(--radius-sm);color:var(--text-muted);white-space:nowrap;align-items:center;gap:7px;padding:8px 12px;font-size:14px;font-weight:600;text-decoration:none;transition:background-color .15s,color .15s;display:inline-flex}.nav-link:hover{background:var(--surface-2);color:var(--text);text-decoration:none}.nav-link.active{color:var(--brand-ink);background:var(--brand-tint)}.topbar-search{flex:1;max-width:420px;margin-left:auto;position:relative}.topbar-search .search-icon{color:var(--text-soft);pointer-events:none;position:absolute;top:50%;left:12px;transform:translateY(-50%)}.topbar-search input{border:1px solid var(--border-strong);background:var(--surface-2);width:100%;color:var(--text);border-radius:999px;padding:9px 12px 9px 36px;font-family:inherit;font-size:14px}.topbar-search input::placeholder{color:var(--text-soft)}.search-pop{box-shadow:var(--shadow-lg);z-index:40;padding:8px;position:absolute;top:calc(100% + 8px);left:0;right:0}.search-empty{padding:10px}.search-group+.search-group{margin-top:6px}.search-group-title{text-transform:uppercase;letter-spacing:.04em;color:var(--text-soft);padding:6px 8px 4px;font-size:11px;font-weight:700}.search-item{text-align:left;border-radius:var(--radius-sm);cursor:pointer;width:100%;color:var(--text);background:0 0;border:none;align-items:center;gap:8px;padding:8px;font-size:14px;display:flex}.search-item:hover{background:var(--surface-2)}.topbar-actions{align-items:center;gap:8px;display:flex}.avatar-wrap{position:relative}.avatar-btn{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:999px;align-items:center;gap:8px;padding:4px 8px 4px 4px;transition:background-color .15s;display:flex}.avatar-btn:hover{background:var(--surface-2)}.avatar{background:var(--brand-400);color:#06121f;width:32px;height:32px;font-size:13px;font-weight:700;font-family:var(--font-heading);border-radius:50%;place-items:center;display:grid}.avatar-lg{width:40px;height:40px;font-size:15px}.avatar-name{color:var(--text);font-size:14px;font-weight:600}.menu{width:250px;box-shadow:var(--shadow-lg);z-index:40;padding:8px;position:absolute;top:calc(100% + 8px);right:0}.menu-head{align-items:center;gap:10px;padding:8px 8px 10px;display:flex}.menu-section-title{text-transform:uppercase;letter-spacing:.04em;color:var(--text-soft);align-items:center;gap:6px;padding:6px 8px;font-size:11px;font-weight:700;display:flex}.menu-item{text-align:left;border-radius:var(--radius-sm);cursor:pointer;width:100%;color:var(--text);background:0 0;border:none;align-items:center;gap:8px;padding:9px 10px;font-size:14px;font-weight:500;display:flex}.menu-item:hover{background:var(--surface-2)}.menu-item.current{color:var(--brand-ink);font-weight:600}.dot-active{background:var(--brand-400);border-radius:50%;width:8px;height:8px;margin-left:auto}@media (width<=860px){.avatar-name,.nav-link span{display:none}.topbar-search{max-width:200px}}@media (width<=620px){.topbar-search,.topbar-brand .brand-full{display:none}.topbar-brand .brand-mark{display:block}.topbar-actions{margin-left:auto}}.login{grid-template-columns:1.05fr 1fr;min-height:100vh;display:grid}.login-cover{background:linear-gradient(150deg, var(--brand-500), var(--brand-400) 55%, var(--brand-300));color:#fff;flex-direction:column;justify-content:space-between;padding:48px;display:flex;position:relative;overflow:hidden}.login-cover:after{content:"";background:#ffffff1f;border-radius:50%;width:520px;height:520px;position:absolute;bottom:-200px;right:-160px}.login-cover-inner{z-index:1;color:#fff;max-width:420px;position:relative}.login-cover .brand-logo,.login-cover span[role=img]{color:#fff}.login-headline{letter-spacing:-.02em;color:#fff;margin-top:28px;font-size:40px}.login-tagline{opacity:.92;margin-top:10px;font-size:18px;line-height:1.5}.login-points{flex-direction:column;gap:12px;margin-top:28px;display:flex}.login-points li{opacity:.95;padding-left:26px;position:relative}.login-points li:before{content:"";border-bottom:2px solid #fff;border-left:2px solid #fff;width:14px;height:8px;position:absolute;top:7px;left:0;transform:rotate(-45deg)}.login-cover-foot{z-index:1;opacity:.8;font-size:13px;position:relative}.login-main{background:var(--bg);place-items:center;padding:40px;display:grid}.login-box{width:100%;max-width:420px}.login-title{font-size:26px}.login-signin{justify-content:center;gap:8px;width:100%;padding:12px;font-size:15px}.login-roles{flex-direction:column;gap:12px;display:flex}.login-role{text-align:left;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);cursor:pointer;align-items:center;gap:14px;width:100%;padding:16px;transition:border-color .15s,box-shadow .15s,transform 50ms;display:flex}.login-role:hover{border-color:var(--brand-400);box-shadow:var(--shadow-md)}.login-role:active{transform:translateY(1px)}.login-role-icon{background:var(--brand-tint);width:46px;height:46px;color:var(--brand-ink);border-radius:12px;flex-shrink:0;place-items:center;display:grid}.login-role-text{flex-direction:column;flex:1;gap:2px;display:flex}.login-role-name{font-size:16px;font-weight:600}.login-role-hint{color:var(--text-muted);font-size:13px}.login-role-arrow{color:var(--text-soft)}.login-role:hover .login-role-arrow{color:var(--brand-ink)}@media (width<=820px){.login{grid-template-columns:1fr}.login-cover{display:none}}.detail-row{color:var(--text);align-items:center;gap:10px;font-size:14.5px;display:flex}.detail-row svg{color:var(--brand-ink);flex-shrink:0}.lesson-list{flex-direction:column;display:flex}.lesson-list-item{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:9px 0;font-size:14px;display:flex}.lesson-list-item:last-child{border-bottom:none}.ll-period{color:var(--text-soft);width:22px;font-weight:600}.ll-subject{font-weight:600}.toolbar{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:12px;padding:14px 16px;display:flex}.toolbar-search{flex:1;align-items:center;min-width:200px;max-width:340px;display:flex;position:relative}.toolbar-search svg{color:var(--text-soft);position:absolute;left:11px}.toolbar-search input{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);width:100%;color:var(--text);padding:8px 12px 8px 34px;font-family:inherit;font-size:14px}.absence-list{flex-direction:column;display:flex}.absence-item{border-bottom:1px solid var(--border);align-items:center;gap:16px;padding:14px 20px;display:flex}.absence-item:last-child{border-bottom:none}.absence-main{flex:1;min-width:0}.absence-actions{flex-shrink:0;align-items:center;gap:10px;display:flex}.attach-list{flex-direction:column;gap:6px;display:flex}.attach{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);color:var(--text);align-items:center;gap:10px;padding:8px 10px;text-decoration:none;display:flex}.attach:hover{border-color:var(--brand-400);text-decoration:none}.attach-icon{background:var(--brand-tint);width:30px;height:30px;color:var(--brand-ink);border-radius:6px;flex-shrink:0;place-items:center;display:grid}.attach-name{word-break:break-all;flex:1;font-size:14px;font-weight:500}.chat{flex-direction:column;gap:10px;max-height:260px;margin-bottom:14px;display:flex;overflow-y:auto}.chat-msg{flex-direction:column;max-width:80%;display:flex}.chat-msg.student{align-self:flex-start;align-items:flex-start}.chat-msg.teacher{align-self:flex-end;align-items:flex-end}.chat-bubble{border-radius:12px;padding:9px 12px;font-size:14px;line-height:1.4}.chat-msg.student .chat-bubble{background:var(--surface-2);border:1px solid var(--border);border-bottom-left-radius:3px}.chat-msg.teacher .chat-bubble{background:var(--brand-tint);color:var(--brand-ink);border-bottom-right-radius:3px}.chat-meta{color:var(--text-soft);margin-top:3px;font-size:11.5px}.chat-input{gap:8px;display:flex}.chat-input input{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text);flex:1;padding:9px 11px;font-family:inherit;font-size:14px}.status-choices{flex-wrap:wrap;gap:8px;display:flex}.status-choice{cursor:pointer;opacity:.55;background:0 0;border:1px solid #0000;border-radius:999px;padding:2px;transition:opacity .12s,box-shadow .12s}.status-choice:hover{opacity:1}.status-choice.active{opacity:1;box-shadow:0 0 0 2px var(--brand-400)}.decision-banner{border-radius:var(--radius-sm);align-items:center;gap:8px;padding:10px 12px;font-size:14px;font-weight:600;display:flex}.decision-banner.excused{background:var(--status-excused-bg);color:var(--status-excused)}.decision-banner.unexcused{background:var(--status-unexcused-bg);color:var(--status-unexcused)}.status-line{align-items:center;gap:10px;font-size:14.5px;display:flex}.status-line .ok{color:var(--status-excused)}.status-line .warn{color:var(--status-open)}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.student-head{align-items:center;gap:16px;margin-bottom:18px;display:flex}.student-avatar{background:var(--brand-400);color:#06121f;width:60px;height:60px;font-size:22px;font-weight:700;font-family:var(--font-heading);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.mini-select{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);width:210px;max-width:100%;color:var(--text);padding:7px 10px;font-family:inherit;font-size:13px}.select{display:inline-flex;position:relative}.select-trigger{border:1px solid var(--border-strong);border-radius:var(--radius-sm);max-width:260px;color:var(--text-muted);cursor:pointer;background:0 0;align-items:center;gap:8px;padding:7px 10px 7px 12px;font-family:inherit;font-size:13px;font-weight:500;transition:border-color .15s,background-color .15s,color .15s,box-shadow .15s;display:inline-flex}.select-trigger:hover{background:var(--surface-2);color:var(--text)}.select-trigger:focus-visible{border-color:var(--brand-400);box-shadow:0 0 0 3px var(--brand-tint);outline:none}.select-trigger svg{color:var(--brand-ink);flex-shrink:0}.select-label{text-align:left;text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.select-caret{transition:transform .15s;color:var(--text-soft)!important}.select.open .select-caret{transform:rotate(180deg)}.field .select{width:100%;display:flex}.field .select-trigger{width:100%;max-width:none;color:var(--text);background:var(--surface);padding:9px 11px;font-size:14px}.select-menu{z-index:40;width:max-content;min-width:100%;max-width:320px;box-shadow:var(--shadow-lg);padding:6px;position:absolute;top:calc(100% + 6px);left:0}.select-menu-right{left:auto;right:0}.select-menu .menu-item{white-space:nowrap;gap:12px}.week-picker{display:inline-flex;position:relative}.chip-btn{cursor:pointer;font:inherit}.chip-btn:hover{background:var(--surface-3,var(--surface-2));color:var(--text)}.chip-btn:focus-visible{border-color:var(--brand-400);box-shadow:0 0 0 3px var(--brand-tint);outline:none}.chip-caret{color:var(--text-soft);transition:transform .15s}.chip-caret.open{transform:rotate(180deg)}.week-picker-menu{z-index:40;min-width:200px;box-shadow:var(--shadow-lg);flex-direction:column;gap:8px;padding:12px;display:flex;position:absolute;top:calc(100% + 6px);left:0}.week-picker-menu .wp-label{color:var(--text-muted);font-size:12px;font-weight:600}.week-picker-menu .wp-date{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:8px;padding:7px 10px;font-family:inherit;font-size:13px}.week-picker-menu .wp-date:focus-visible{border-color:var(--brand-400);box-shadow:0 0 0 3px var(--brand-tint);outline:none}.nodata-jumps{margin-top:16px;align-items:stretch;gap:8px;max-width:340px;margin-inline:auto}.nodata-jumps .btn{justify-content:center}.select-search{border-bottom:1px solid var(--border);align-items:center;gap:8px;margin-bottom:4px;padding:6px 8px;display:flex}.select-search svg{flex-shrink:0}.select-search input{min-width:160px;color:var(--text);background:0 0;border:none;outline:none;flex:1;font-family:inherit;font-size:13px}.select-options{max-height:300px;overflow-y:auto}.info-list{flex-direction:column;display:flex}.info-row{border-bottom:1px solid var(--border);grid-template-columns:22px 160px 1fr;align-items:start;gap:12px;padding:11px 0;font-size:14px;display:grid}.info-row:last-child{border-bottom:none}.info-icon{color:var(--brand-ink);place-items:center;padding-top:1px;display:grid}.info-label{color:var(--text-muted);font-weight:600}.info-value{color:var(--text)}@media (width<=560px){.info-row{grid-template-columns:22px 1fr}.info-label{display:none}}.lesson-pick{flex-direction:column;gap:6px;display:flex}.lesson-pick-item{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);cursor:pointer;align-items:center;gap:12px;padding:10px 14px;font-size:14px;display:flex}.lesson-pick-item input[type=checkbox]{width:17px;height:17px;accent-color:var(--brand-400);cursor:pointer;flex:none;margin:0}.lesson-pick-item.on{border-color:var(--brand-400);background:var(--brand-tint)}.lp-num{width:26px;color:var(--text-soft);text-align:right;flex:none}.lp-sub{flex:1;font-weight:600}.lp-meta{white-space:nowrap;text-align:right;flex:none}.comment{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);padding:12px 14px}.comment-head{justify-content:space-between;align-items:center;margin-bottom:5px;display:flex}.sched-legend-wrap>summary{cursor:pointer;color:var(--text-muted);-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:13px;font-weight:600;list-style:none;display:inline-flex}.sched-legend-wrap>summary::-webkit-details-marker{display:none}.sched-legend-wrap>summary:before{content:"▸";transition:transform .15s;display:inline-block}.sched-legend-wrap[open]>summary:before{transform:rotate(90deg)}.sched-legend{grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:8px 22px;margin-top:10px;display:grid}.leg-item{color:var(--text-muted);align-items:center;gap:11px;font-size:12.5px;display:flex}.leg-badge{width:22px;height:22px;font-size:11px;font-weight:700;font-family:var(--font-heading);font-variant-numeric:tabular-nums;background:var(--surface);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.leg-badge.blue{color:var(--status-pending);border:1.5px solid var(--status-pending)}.leg-badge.blue.filled{background:var(--status-pending);color:#fff;border-color:var(--status-pending)}.leg-badge.red{color:var(--status-unexcused);border:1.5px solid var(--status-unexcused)}.leg-badge.red.filled{background:var(--status-unexcused);color:#fff;border-color:var(--status-unexcused)}.leg-p{text-align:center;width:22px;color:var(--status-remark);font-size:16px;font-weight:800;line-height:1;font-family:var(--font-heading);flex-shrink:0}.leg-x{width:22px;color:var(--status-unexcused);flex-shrink:0;place-items:center;display:grid}.tabs{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:4px 2px;display:flex}.tab{color:var(--text-muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:7px;margin-bottom:-1px;padding:11px 16px;font-family:inherit;font-size:14px;font-weight:600;transition:color .15s,border-color .15s;display:inline-flex}.tab:hover{color:var(--text)}.tab.active{color:var(--brand-ink);border-bottom-color:var(--brand-400)}.admin-form{flex-wrap:wrap;align-items:flex-end;gap:12px;display:flex}.admin-form .field{flex:1;min-width:150px;margin-bottom:0}.admin-form .btn{margin-bottom:0}.halfday-approve{flex-wrap:wrap;align-items:center;gap:12px;padding:4px 0;display:flex}.halfday-choice{gap:10px;display:flex}.halfday-opt{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-muted);cursor:pointer;flex:1;justify-content:center;align-items:center;gap:8px;padding:12px;font-family:inherit;font-size:14px;font-weight:600;transition:border-color .15s,color .15s,background-color .15s;display:inline-flex}.halfday-opt:hover{background:var(--surface-2)}.halfday-opt.active{border-color:var(--brand-400);color:var(--brand-ink);background:var(--brand-tint)}.doc-file{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);align-items:center;gap:12px;padding:12px 14px;display:flex}.doc-icon{background:var(--status-unexcused-bg);width:40px;height:40px;color:var(--status-unexcused);border-radius:8px;flex-shrink:0;place-items:center;display:grid}.switch{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:10px;display:inline-flex}.switch input{opacity:0;width:0;height:0;position:absolute}.switch-track{background:var(--border-strong);border-radius:999px;flex-shrink:0;width:40px;height:23px;transition:background-color .18s;position:relative}.switch-thumb{width:18px;height:18px;box-shadow:var(--shadow-sm);background:#fff;border-radius:50%;transition:transform .18s;position:absolute;top:2.5px;left:2.5px}.switch input:checked+.switch-track{background:var(--brand-400)}.switch input:checked+.switch-track .switch-thumb{transform:translate(17px)}.switch input:focus-visible+.switch-track{outline:3px solid var(--ring);outline-offset:2px}.switch-label{font-size:14px;font-weight:600}.print-menu{position:relative}.print-menu .menu{top:calc(100% + 6px)}.notheld-banner{color:var(--status-unexcused);background:var(--status-unexcused-bg);border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:16px 20px;display:flex}.confirmed-banner{border-radius:var(--radius);color:var(--status-present);background:var(--status-present-bg);align-items:center;gap:10px;margin-bottom:14px;padding:12px 16px;font-size:14px;display:flex}.roster{flex-direction:column;display:flex}.roster-row{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:10px 16px;display:flex}.roster-row:last-child{border-bottom:none}.roster-avatar{background:var(--brand-tint);width:34px;height:34px;color:var(--brand-ink);font-size:12.5px;font-weight:700;font-family:var(--font-heading);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.roster-name{flex-shrink:0;width:180px;font-size:14px;font-weight:600}.roster-min{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);width:66px;color:var(--text);padding:7px 8px;font-family:inherit;font-size:13px}.roster-comment{border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--surface);min-width:120px;color:var(--text);flex:1;padding:7px 10px;font-family:inherit;font-size:13px}.roster-remove{color:var(--text-soft);flex-shrink:0}.roster-remove:hover{color:var(--status-unexcused)}.seg{border:1px solid var(--border-strong);border-radius:var(--radius-sm);flex-shrink:0;align-self:flex-start;width:fit-content;max-width:100%;display:inline-flex;overflow:hidden}.seg-btn{background:var(--surface);color:var(--text-muted);cursor:pointer;border:none;border-right:1px solid var(--border);align-items:center;gap:5px;padding:7px 10px;font-family:inherit;font-size:12.5px;font-weight:600;transition:background-color .12s,color .12s;display:inline-flex}.seg-btn:last-child{border-right:none}.seg-btn:hover{background:var(--surface-2)}.seg-btn.active-present{background:var(--status-present-bg);color:var(--status-present)}.seg-btn.active-delayed{background:var(--status-late-bg);color:var(--status-late)}.seg-btn.active-absent{background:var(--status-absent-bg);color:var(--status-absent)}.seg-btn.active-remark{background:var(--status-remark-bg);color:var(--status-remark)}@media (width<=960px){.seg-label{display:none}.roster-name{width:130px}}@media (width<=720px){.roster-row{flex-wrap:wrap}.roster-comment{flex-basis:100%;order:5;width:100%}}.print-area{display:none}.print-head{justify-content:space-between;align-items:flex-start;margin-bottom:16px;display:flex}.print-table{border-collapse:collapse;width:100%;font-size:13px}.print-table th,.print-table td{text-align:left;border:1px solid #999;height:30px;padding:7px 8px}.print-table th{background:#eee;font-weight:700}.print-photo{color:#666;background:#eee;border-radius:4px;place-items:center;width:38px;height:38px;font-size:12px;font-weight:700;display:inline-grid}@media print{body{background:#fff}body *{visibility:hidden}.print-area,.print-area *{visibility:visible}.print-area{width:100%;padding:12px;position:absolute;top:0;left:0;display:block!important}}@media (width<=640px){.absence-item{flex-direction:column;align-items:flex-start;gap:10px}.absence-actions{justify-content:space-between;width:100%}}
