:root{--c-control: 40px;--c-control-sm: 32px}.c-muted{color:var(--color-muted-fg)}.c-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;min-height:var(--c-control);padding:0 var(--sp-lg);border:1px solid transparent;font-family:var(--font-ui);font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;line-height:1.35;white-space:nowrap;transition:background-color var(--dur-standard) var(--ease-mech),color var(--dur-standard) var(--ease-mech)}.c-btn:disabled{background:transparent;color:var(--color-faint);border-color:var(--color-faint);cursor:default}.c-btn--sm{min-height:var(--c-control-sm);padding:0 var(--sp-md);font-size:11px}.c-btn__content{display:inline-flex;align-items:center;gap:var(--sp-sm)}.c-btn__content[data-hidden]{visibility:hidden}.c-btn--primary{background:var(--color-fg);color:var(--color-bg)}.c-btn--primary:hover:not(:disabled){background:var(--color-bg);color:var(--color-fg);border-color:var(--color-fg)}.c-btn--secondary,.c-btn--danger{background:transparent;color:var(--color-fg);border-color:var(--color-line)}.c-btn--secondary:hover:not(:disabled),.c-btn--danger:hover:not(:disabled){background:var(--color-fg);color:var(--color-bg)}.c-btn--ghost{color:var(--color-fg)}.c-btn--ghost:hover:not(:disabled){background:var(--color-hover)}.c-spinner{position:absolute;width:16px;height:16px;border-radius:0;border:2px solid currentColor;border-right-color:transparent;animation:c-spin .7s linear infinite}@keyframes c-spin{to{transform:rotate(360deg)}}.c-icon-btn{width:var(--c-control);height:var(--c-control);display:inline-flex;align-items:center;justify-content:center;border-radius:0;color:var(--color-muted-fg)}.c-icon-btn:hover:not(:disabled){background:var(--color-muted);color:var(--color-fg)}.c-icon-btn:disabled{color:var(--color-faint);cursor:default}.c-icon-btn--danger:hover:not(:disabled){color:var(--color-accent)}.c-field{display:flex;flex-direction:column;gap:var(--sp-xs)}.c-field__label{display:flex;align-items:center;gap:var(--sp-sm);color:var(--color-muted-fg)}.c-field__error{color:var(--color-accent)}.c-field__hint{color:var(--color-meta)}.c-input{width:100%;min-height:var(--c-control);padding:0 var(--sp-sm);border:none;border-bottom:2px solid var(--color-line);background:transparent;color:var(--color-fg);font-family:var(--font-mono);font-size:14px;outline:none}.c-input:focus{background:var(--color-hover)}.c-input::placeholder{color:var(--color-meta);font-style:italic}.c-input[aria-invalid]{border-color:var(--color-accent)}textarea.c-input{padding:var(--sp-sm);border:1px solid var(--color-line);resize:vertical;min-height:160px;line-height:1.5}.c-select{cursor:pointer}.c-input-wrap{position:relative}.c-input-wrap .c-input{padding-right:var(--c-control)}.c-input-wrap__action{position:absolute;right:0;top:0;width:var(--c-control);height:var(--c-control);display:flex;align-items:center;justify-content:center;color:var(--color-meta)}.c-tag{padding:0 var(--sp-sm);border-radius:0;background:var(--color-muted);color:var(--color-meta)}.c-chip{display:inline-flex;align-items:center;min-height:var(--c-control-sm);padding:0 var(--sp-md);border:1px solid var(--color-line);background:transparent;color:var(--color-fg)}.c-chip:hover{background:var(--color-hover)}.c-chip[data-selected]{background:var(--color-fg);color:var(--color-bg)}.c-chip-row{display:flex;flex-wrap:wrap;gap:var(--sp-sm)}.c-badge{display:inline-flex;align-items:center;gap:var(--sp-sm);padding:var(--sp-xxs) var(--sp-sm);font-family:var(--font-ui);font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;white-space:nowrap}.c-badge--neutral{border:1px solid var(--color-line-light);color:var(--color-muted-fg)}.c-badge--primary,.c-badge--present{padding-left:0;color:var(--color-fg)}.c-badge--present:before{content:"";width:9px;height:9px;background:currentColor}.c-badge--excused{border:1px solid var(--color-line);color:var(--color-fg)}.c-badge--absent{background:var(--color-accent);color:var(--color-on-accent)}.c-modal{margin:auto;max-width:calc(100vw - 2 * var(--sp-lg));max-height:calc(100vh - 2 * var(--sp-xxl));border:1px solid var(--color-line);border-radius:0;background:var(--color-bg);color:var(--color-fg);box-shadow:var(--shadow-hard);padding:0}.c-modal::backdrop{background:var(--color-scrim)}.c-modal__inner{display:flex;flex-direction:column;max-height:calc(100vh - 2 * var(--sp-xxl))}.c-modal__head{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-md);padding:var(--sp-lg) var(--sp-md) var(--sp-sm) var(--sp-xxl)}.c-modal__body{display:flex;flex-direction:column;gap:var(--sp-lg);padding:var(--sp-sm) var(--sp-xxl) var(--sp-xl);overflow-y:auto}.c-modal__foot{display:flex;justify-content:flex-end;gap:var(--sp-sm);padding:var(--sp-md) var(--sp-xxl);border-top:1px solid var(--color-line-light)}.c-empty{display:flex;flex-direction:column;align-items:center;gap:var(--sp-sm);padding:var(--sp-huge) var(--sp-xxl);text-align:center}.c-skeleton{display:flex;flex-direction:column;gap:var(--sp-sm)}.c-skeleton__row{height:44px;border-radius:0;background:var(--color-muted);animation:c-pulse 1.4s ease-in-out infinite}@keyframes c-pulse{50%{opacity:.55}}.c-error-block{display:flex;align-items:center;gap:var(--sp-md);padding:var(--sp-md) var(--sp-lg);border-left:4px solid var(--color-accent);background:var(--color-hover);color:var(--color-fg)}.c-error-block>.t-body-sm{flex:1}.c-toast{position:fixed;left:50%;bottom:var(--sp-xxl);transform:translate(-50%);z-index:100;max-width:560px;padding:var(--sp-md) var(--sp-xl);border-radius:0;background:var(--color-fg);color:var(--color-bg);box-shadow:var(--shadow-hard);animation:c-toast-in var(--dur-standard) var(--ease-mech)}.c-toast--error{background:var(--color-accent);color:var(--color-on-accent)}@keyframes c-toast-in{0%{opacity:0;transform:translate(-50%,8px)}}.c-table-wrap{border-top:2px solid var(--color-line);border-bottom:1px solid var(--color-line);border-radius:0;background:var(--color-bg);overflow:auto}.c-table{width:100%;border-collapse:collapse;font-size:14px}.c-table th{position:sticky;top:0;z-index:1;text-align:left;font-family:var(--font-ui);font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--color-muted-fg);background:var(--color-muted);padding:var(--sp-sm) var(--sp-md);border-bottom:2px solid var(--color-line);white-space:nowrap}.c-table th+th,.c-table td+td{border-left:1px solid var(--color-line-light)}.c-table td{padding:var(--sp-sm) var(--sp-md);border-bottom:1px solid var(--color-line-light);vertical-align:middle;white-space:nowrap}.c-table .c-select{min-width:150px}.c-select:disabled{color:var(--color-meta);background:var(--color-muted);cursor:default}.c-table tr:last-child td{border-bottom:none}.c-table .num{text-align:right;font-family:var(--font-mono);font-variant-numeric:tabular-nums}.c-table tbody tr:hover td{background:var(--color-hover)}.c-actions{display:flex;justify-content:flex-end;gap:var(--sp-xxs)}.shell{display:grid;grid-template-columns:var(--sidebar-width) minmax(0,1fr);min-height:100vh}.shell__side{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;gap:var(--sp-xl);padding:var(--sp-xl) var(--sp-md);border-right:1px solid var(--color-line)}.shell__brand{padding:0 var(--sp-sm) var(--sp-md);border-bottom:4px solid var(--color-line);box-shadow:0 3px 0 0 var(--color-bg),0 4px 0 0 var(--color-fg)}.shell__nav{display:flex;flex-direction:column;gap:var(--sp-xxs);flex:1}.shell__link{display:flex;align-items:center;gap:var(--sp-md);min-height:40px;padding:0 var(--sp-md);font-family:var(--font-ui);font-size:12px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--color-muted-fg);border-bottom:1px solid var(--color-line-light)}.shell__link:hover{background:var(--color-hover);color:var(--color-fg)}.shell__link.active{background:var(--color-fg);color:var(--color-bg)}.shell__user{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-xs);padding:var(--sp-md) var(--sp-sm) 0;border-top:1px solid var(--color-line)}.shell__username{color:var(--color-meta);margin-bottom:var(--sp-sm)}.shell__main{min-width:0;padding:var(--sp-xxl) var(--sp-xxxl) var(--sp-huge)}.page{display:flex;flex-direction:column;gap:var(--sp-lg);max-width:var(--page-max-width)}.page__head{display:flex;align-items:flex-end;flex-wrap:wrap;gap:var(--sp-md);padding-bottom:var(--sp-md);border-bottom:4px solid var(--color-line);box-shadow:0 3px 0 0 var(--color-bg),0 4px 0 0 var(--color-fg);margin-bottom:var(--sp-sm)}.page__title{flex:1;min-width:200px}.page__lead{color:var(--color-muted-fg)}.toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:var(--sp-sm)}.month-nav{display:flex;align-items:center;gap:var(--sp-xs)}.month-nav__label{min-width:180px;text-align:center}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/playfair-display-latin-700-normal-CuDiGg7c.woff2) format("woff2"),url(/assets/playfair-display-latin-700-normal-Bc_1Q1cG.woff) format("woff")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/playfair-display-vietnamese-700-normal-CaKJSIny.woff2) format("woff2"),url(/assets/playfair-display-vietnamese-700-normal-Cr1rw0mr.woff) format("woff")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/playfair-display-latin-900-normal-oSb7_CWx.woff2) format("woff2"),url(/assets/playfair-display-latin-900-normal-DypQvTWf.woff) format("woff")}@font-face{font-family:Playfair Display;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/playfair-display-vietnamese-900-normal-wtaM1xIw.woff2) format("woff2"),url(/assets/playfair-display-vietnamese-900-normal-dpsjWZtQ.woff) format("woff")}@font-face{font-family:Playfair Display;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/playfair-display-latin-400-italic-LeeEXsx5.woff2) format("woff2"),url(/assets/playfair-display-latin-400-italic-hIeePEuE.woff) format("woff")}@font-face{font-family:Playfair Display;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/playfair-display-vietnamese-400-italic-CD15TOr5.woff2) format("woff2"),url(/assets/playfair-display-vietnamese-400-italic-Cpv4sfwY.woff) format("woff")}@font-face{font-family:Lora;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lora-latin-400-normal-DnxXpLNu.woff2) format("woff2"),url(/assets/lora-latin-400-normal-DBJS-Hc6.woff) format("woff")}@font-face{font-family:Lora;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/lora-vietnamese-400-normal-BxA6xcFr.woff2) format("woff2"),url(/assets/lora-vietnamese-400-normal-DlgyXXxo.woff) format("woff")}@font-face{font-family:Lora;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lora-latin-600-normal-B-3RcLOQ.woff2) format("woff2"),url(/assets/lora-latin-600-normal-Dc3EneHn.woff) format("woff")}@font-face{font-family:Lora;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/lora-vietnamese-600-normal-B_IFhWKN.woff2) format("woff2"),url(/assets/lora-vietnamese-600-normal-BnEhOXH8.woff) format("woff")}@font-face{font-family:Lora;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/lora-latin-400-italic-DYjZp4sZ.woff2) format("woff2"),url(/assets/lora-latin-400-italic-wRLkZNVE.woff) format("woff")}@font-face{font-family:Lora;font-style:italic;font-display:swap;font-weight:400;src:url(/assets/lora-vietnamese-400-italic-DFs7jfwN.woff2) format("woff2"),url(/assets/lora-vietnamese-400-italic-DGRK7mLs.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-latin-400-normal-C38fXH4l.woff2) format("woff2"),url(/assets/inter-latin-400-normal-CyCys3Eg.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-vietnamese-400-normal-DMkecbls.woff2) format("woff2"),url(/assets/inter-vietnamese-400-normal-Bbgyi5SW.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-latin-500-normal-Cerq10X2.woff2) format("woff2"),url(/assets/inter-latin-500-normal-BL9OpVg8.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/inter-vietnamese-500-normal-DOriooB6.woff2) format("woff2"),url(/assets/inter-vietnamese-500-normal-mJboJaSs.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-latin-600-normal-LgqL8muc.woff2) format("woff2"),url(/assets/inter-latin-600-normal-CiBQ2DWP.woff) format("woff")}@font-face{font-family:Inter;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/inter-vietnamese-600-normal-Cc8MFFhd.woff2) format("woff2"),url(/assets/inter-vietnamese-600-normal-BuLX-rYi.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-400-normal-CqNFfHCs.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2) format("woff2"),url(/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff) format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:500;src:url(data:font/woff2;base64,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) format("woff2"),url(/assets/jetbrains-mono-vietnamese-500-normal-DNRqzVM1.woff) format("woff")}:root{color-scheme:light;--color-bg: #f9f9f7;--color-fg: #111111;--color-hover: #f0f0ec;--color-muted: #e5e5e0;--color-muted-fg: #595959;--color-meta: #6b6b6b;--color-faint: #a3a3a3;--color-accent: #cc0000;--color-on-accent: #ffffff;--color-line: #111111;--color-line-light: #e5e5e0;--color-scrim: rgb(17 17 17 / .55);--rule-hair: 1px solid var(--color-line-light);--rule-thin: 1px solid var(--color-line);--rule-medium: 2px solid var(--color-line);--rule-thick: 4px solid var(--color-line);--shadow-hard: 4px 4px 0 0 var(--color-fg);--font-display: "Playfair Display", "Times New Roman", serif;--font-body: "Lora", Georgia, serif;--font-ui: "Inter", "Helvetica Neue", Arial, sans-serif;--font-mono: "JetBrains Mono", "Courier New", monospace;--sp-xxs: 2px;--sp-xs: 4px;--sp-sm: 8px;--sp-md: 12px;--sp-lg: 16px;--sp-xl: 20px;--sp-xxl: 24px;--sp-xxxl: 32px;--sp-huge: 40px;--sp-massive: 64px;--radius: 0;--control-height: 48px;--tap: 48px;--chip-height: 36px;--row-height: 56px;--row-tall: 68px;--topbar-height: 56px;--bottom-nav-height: 60px;--mark-size: 10px;--focus-ring: 2px;--dur-fast: .12s;--dur-standard: .2s;--ease-mech: cubic-bezier(.2, 0, 0, 1);--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--page-max-width: 480px;--gutter: 16px;--texture-dots: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3E%3Cpath fill='%23111111' fill-opacity='0.04' d='M1 3h1v1H1V3zm2-2h1v1H3V1z'/%3E%3C/svg%3E")}.t-hero{font-family:var(--font-display);font-weight:900;font-size:clamp(56px,18vw,84px);line-height:1;letter-spacing:-.04em}.t-display{font-family:var(--font-display);font-weight:900;font-size:clamp(34px,10.5vw,44px);line-height:1.05;letter-spacing:-.03em}.t-title{font-family:var(--font-display);font-weight:700;font-size:24px;line-height:1.15;letter-spacing:-.015em}.t-italic{font-family:var(--font-display);font-style:italic;font-weight:400;font-size:22px;line-height:1.25}.t-numeral{font-family:var(--font-display);font-weight:900;font-size:34px;line-height:1;font-variant-numeric:lining-nums tabular-nums}.t-name{font-family:var(--font-body);font-weight:600;font-size:18px;line-height:1.35}.t-body{font-family:var(--font-body);font-weight:400;font-size:16px;line-height:1.625}.t-body-sm{font-family:var(--font-body);font-weight:400;font-size:14px;line-height:1.55}.t-label{font-family:var(--font-ui);font-weight:600;font-size:12px;line-height:1.4;letter-spacing:.12em;text-transform:uppercase}.t-label-sm{font-family:var(--font-ui);font-weight:600;font-size:11px;line-height:1.4;letter-spacing:.1em;text-transform:uppercase}.t-button{font-family:var(--font-ui);font-weight:600;font-size:13px;line-height:1.3;letter-spacing:.12em;text-transform:uppercase}.t-meta{font-family:var(--font-mono);font-weight:400;font-size:13px;line-height:1.4;font-variant-numeric:tabular-nums}.t-muted{color:var(--color-muted-fg)}:root{--page-max-width: 1280px;--sidebar-width: 232px}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0;border-radius:0}body{font-family:var(--font-body);font-size:15px;line-height:1.55;background:var(--color-bg) var(--texture-dots);color:var(--color-fg);-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}a{color:inherit;text-decoration:none}svg{display:block;flex-shrink:0}ul,ol{list-style:none}:focus-visible{outline:var(--focus-ring) solid var(--color-fg);outline-offset:2px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.inline-row{display:flex;align-items:flex-start;gap:var(--sp-sm)}.inline-row>.c-field{flex:1}.inline-row__action{padding-top:22px}.credential{display:grid;grid-template-columns:auto 1fr;align-items:center;gap:var(--sp-sm) var(--sp-lg);padding:var(--sp-lg);border-radius:0;background:var(--color-muted)}.credential code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;-webkit-user-select:all;user-select:all}.form-stack{display:flex;flex-direction:column;gap:var(--sp-lg)}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-md)}.auth__error{color:var(--color-accent)}.boot{min-height:100vh;display:flex;align-items:center;justify-content:center;color:var(--color-muted-fg)}
