@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600&family=Inter:wght@400;500;600&display=swap";:root{--color-maroon-900:#4a1418;--color-maroon-700:#6b1e23;--color-maroon-600:#832832;--color-gold-600:#a97a2f;--color-gold-500:#c69a4e;--color-ivory:#faf6ef;--color-paper:#fff;--color-ink:#2b2420;--color-ink-soft:#6b615a;--color-border:#e6ddd0;--color-success:#3f7a54;--color-success-bg:#eaf3ec;--color-warn:#b34a2f;--color-warn-bg:#fbeee9;--color-pending:#a97a2f;--color-pending-bg:#f8f0e0;--font-display:"Fraunces", Georgia, serif;--font-body:"Inter", system-ui, sans-serif;--radius-sm:5px;--radius:8px;--radius-lg:12px;--shadow-xs:0 1px 2px #2b24200d;--shadow-card:0 1px 3px #2b24200f, 0 1px 10px #2b24200a;--shadow-md:0 4px 16px #2b242014, 0 2px 6px #2b24200d;--shadow-lg:0 12px 32px #2b242024, 0 4px 12px #2b242014;--shadow-focus:0 0 0 3px #a97a2f2e;--ease:cubic-bezier(.4, 0, .2, 1);--transition-fast:.12s var(--ease);--transition:.18s var(--ease)}*{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font-body);color:var(--color-ink);background:var(--color-ivory);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;margin:0}h1,h2,h3{font-family:var(--font-display);color:var(--color-maroon-900);letter-spacing:-.01em;margin:0;font-weight:600}button{font-family:inherit}a{color:var(--color-maroon-700);transition:color var(--transition-fast)}:focus-visible{outline:2px solid var(--color-gold-600);outline-offset:2px;border-radius:3px}table{border-collapse:collapse;width:100%}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#2b24202e padding-box padding-box;border:2px solid #0000;border-radius:999px}::-webkit-scrollbar-thumb:hover{background:#2b24204d padding-box padding-box}*{scrollbar-width:thin;scrollbar-color:#2b24202e transparent}.app-shell{grid-template-columns:240px 1fr;min-height:100vh;display:grid}.sidebar{background:linear-gradient(175deg, var(--color-maroon-700) 0%, var(--color-maroon-900) 130%);color:#f4e9dd;flex-direction:column;padding:24px 16px;display:flex;box-shadow:2px 0 12px #0000001f}.sidebar-brand-row{align-items:center;gap:10px;margin-bottom:20px;display:flex}.sidebar-logo{object-fit:cover;border-radius:50%;flex-shrink:0;width:42px;height:42px;box-shadow:0 0 0 2px #ffffff40,0 2px 6px #0003}.sidebar-brand{font-family:var(--font-display);color:#fff;font-size:1.05rem;line-height:1.25}.sidebar-brand-sub{color:#d9b98a;text-transform:uppercase;letter-spacing:.02em;font-size:.68rem}.sidebar-nav{flex:1;min-height:0;overflow-y:auto}.nav-icon{vertical-align:-3px;flex-shrink:0;margin-right:9px}.exit-link{border-top:1px solid #ffffff1f;border-radius:0;margin-top:8px;padding-top:14px}.topbar-banner{aspect-ratio:1983/446;border-bottom:1px solid var(--color-border);background:var(--color-maroon-900);width:100%;line-height:0;overflow:hidden}.topbar-banner img{object-fit:contain;width:100%;height:100%;display:block}.nav-link{border-radius:var(--radius-sm);color:#f0dfc8;transition:background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), transform var(--transition-fast);border-left:3px solid #0000;margin-bottom:2px;padding:10px 12px;font-size:.92rem;text-decoration:none;display:block}.nav-link:hover{background:#ffffff14;transform:translate(2px)}.nav-link.active{border-left-color:var(--color-gold-500);color:#fff;background:#ffffff1f;font-weight:500;box-shadow:inset 0 0 0 1px #ffffff0f}.user-bar{background:var(--color-paper);border-bottom:1px solid var(--color-border);box-shadow:var(--shadow-xs);z-index:1;justify-content:flex-end;align-items:center;gap:14px;padding:10px 32px;display:flex;position:relative}.user-bar-name{color:var(--color-ink);align-items:center;gap:8px;font-size:.85rem;display:flex}.user-bar-role{text-transform:lowercase;color:var(--color-ink-soft);background:var(--color-ivory);border:1px solid var(--color-border);border-radius:999px;padding:2px 9px;font-size:.7rem}.logout-btn-top{border:1px solid var(--color-border);color:var(--color-ink);border-radius:var(--radius-sm);cursor:pointer;transition:border-color var(--transition-fast), color var(--transition-fast), background-color var(--transition-fast);background:0 0;padding:6px 12px;font-size:.82rem}.logout-btn-top:hover{border-color:var(--color-maroon-700);color:var(--color-maroon-700);background:#fbf8f2}.sidebar-footer{border-top:1px solid #ffffff1f;margin-top:auto;padding-top:16px}.sidebar-user{color:#f0dfc8;margin-bottom:8px;font-size:.85rem}.sidebar-role{text-transform:lowercase;color:#d9b98a;background:#ffffff14;border-radius:4px;margin-top:2px;padding:1px 6px;font-size:.7rem;display:inline-block}.logout-btn{color:#f0dfc8;border-radius:var(--radius);cursor:pointer;background:0 0;border:1px solid #ffffff40;width:100%;padding:6px 10px;font-size:.82rem}.logout-btn:hover{background:#ffffff14}.main{flex-direction:column;min-width:0;display:flex}.topbar{background:var(--color-paper);border-bottom:1px solid var(--color-border);padding:16px 32px}.content{flex:1;padding:28px 32px 48px}.app-footer{border-top:1px solid var(--color-border);background:var(--color-paper);flex-direction:column;align-items:center;gap:6px;padding:16px 32px;display:flex}.app-footer-links{flex-wrap:wrap;justify-content:center;gap:8px;font-size:.78rem;display:flex}.app-footer-links a{color:var(--color-ink-soft);text-decoration:none}.app-footer-links a:hover{color:var(--color-maroon-700);text-decoration:underline}.app-footer-links span{color:var(--color-border)}.app-footer-credit{color:var(--color-ink-soft);font-size:.76rem}.app-footer-credit a{color:var(--color-maroon-700);text-decoration:none}.app-footer-credit a:hover{text-decoration:underline}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:20px;display:flex}.page-header p{color:var(--color-ink-soft);margin:4px 0 0;font-size:.9rem}.card{background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow-card);transition:box-shadow var(--transition), border-color var(--transition)}.card-pad{padding:22px 24px}.stat-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:28px;display:grid}.stat-card{background:var(--color-paper);border:1px solid var(--color-border);border-radius:var(--radius);box-shadow:var(--shadow-xs);transition:box-shadow var(--transition), transform var(--transition), border-color var(--transition);padding:18px 20px;position:relative;overflow:hidden}.stat-card:before{content:"";background:linear-gradient(90deg, var(--color-maroon-700), var(--color-gold-500));opacity:0;height:3px;transition:opacity var(--transition);position:absolute;top:0;left:0;right:0}.stat-card:hover{box-shadow:var(--shadow-md);border-color:#a97a2f59;transform:translateY(-2px)}.stat-card:hover:before{opacity:1}.stat-value{font-family:var(--font-display);color:var(--color-maroon-700);font-variant-numeric:tabular-nums;font-size:2.1rem;line-height:1}.stat-label{color:var(--color-ink-soft);margin-top:7px;font-size:.82rem}table.data-table th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--color-ink-soft);border-bottom:1px solid var(--color-border);background:#faf7f2;padding:12px 16px;font-size:.72rem;font-weight:600}table.data-table th:first-child{border-top-left-radius:var(--radius)}table.data-table th:last-child{border-top-right-radius:var(--radius)}table.data-table td{border-bottom:1px solid var(--color-border);transition:background-color var(--transition-fast);padding:13px 16px;font-size:.9rem}table.data-table tr:last-child td{border-bottom:none}table.data-table tr:hover td{background:#fbf8f2}.badge{letter-spacing:.01em;border-radius:999px;align-items:center;gap:5px;padding:3px 10px;font-size:.74rem;font-weight:600;display:inline-flex}.badge:before{content:"";background:currentColor;border-radius:50%;flex-shrink:0;width:6px;height:6px}.badge-success{background:var(--color-success-bg);color:var(--color-success)}.badge-warn{background:var(--color-warn-bg);color:var(--color-warn)}.badge-pending{background:var(--color-pending-bg);color:var(--color-pending)}.badge-neutral{color:var(--color-ink-soft);background:#eee7db}.btn{border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-paper);color:var(--color-ink);cursor:pointer;transition:border-color var(--transition-fast), background-color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast), color var(--transition-fast);padding:9px 16px;font-size:.88rem;font-weight:500}.btn:hover{border-color:var(--color-gold-600);box-shadow:var(--shadow-xs)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.55;cursor:not-allowed;box-shadow:none;transform:none}.btn:focus-visible{box-shadow:var(--shadow-focus)}.btn-primary{background:var(--color-maroon-700);border-color:var(--color-maroon-700);color:#fff;box-shadow:0 1px 2px #4a141840}.btn-primary:hover{background:var(--color-maroon-900);border-color:var(--color-maroon-900);transform:translateY(-1px);box-shadow:0 4px 12px #4a141847}.btn-primary:active{transform:translateY(0);box-shadow:0 1px 2px #4a141840}.toolbar{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:16px;display:flex}select,input[type=text],input[type=date],input[type=number],input[type=email],input[type=password],textarea{border:1px solid var(--color-border);border-radius:var(--radius-sm);background:var(--color-paper);color:var(--color-ink);transition:border-color var(--transition-fast), box-shadow var(--transition-fast);padding:9px 12px;font-family:inherit;font-size:.9rem}select:hover,input:hover,textarea:hover{border-color:#d5c8b3}select:focus,input:focus,textarea:focus{border-color:var(--color-gold-600);box-shadow:var(--shadow-focus);outline:none}select{cursor:pointer}.form-field{flex-direction:column;gap:6px;margin-bottom:16px;display:flex}.form-field label{color:var(--color-ink);font-size:.82rem;font-weight:500}.form-grid{grid-template-columns:1fr 1fr;gap:0 16px;display:grid}.modal-overlay{-webkit-backdrop-filter:blur(3px);z-index:20;animation:overlay-fade-in var(--transition) both;background:#2b242066;justify-content:center;align-items:flex-start;padding:60px 20px;display:flex;position:fixed;inset:0}.modal{background:var(--color-paper);border-radius:var(--radius-lg);width:100%;max-width:480px;box-shadow:var(--shadow-lg);animation:modal-rise .22s var(--ease) both;padding:28px}@keyframes overlay-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-rise{0%{opacity:0;transform:translateY(10px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@media (prefers-reduced-motion:reduce){.modal-overlay,.modal{animation:none}}.modal h2{margin-bottom:18px;font-size:1.2rem}.modal-actions{justify-content:flex-end;gap:10px;margin-top:20px;display:flex}.empty-state{text-align:center;color:var(--color-ink-soft);padding:48px 24px;font-size:.92rem}.error-text{color:var(--color-warn);margin-top:4px;font-size:.85rem}.banner{border-radius:var(--radius-sm);box-shadow:var(--shadow-xs);animation:banner-in .22s var(--ease) both;margin-bottom:20px;padding:12px 18px;font-size:.88rem}@keyframes banner-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.banner{animation:none}}.banner-warn{background:var(--color-warn-bg);color:var(--color-warn);border:1px solid #edcabb}.login-shell{background:var(--color-maroon-700);background-image:radial-gradient(circle at 20% 20%,#ffffff0f,#0000 40%),radial-gradient(circle at 80% 80%,#ffffff0d,#0000 40%);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card-wrap{width:100%;max-width:480px;animation:login-rise .42s var(--ease) both}@keyframes login-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.login-card-wrap{animation:none}}.login-footer-links{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:18px;font-size:.78rem;display:flex}.login-footer-links a{color:#ffffffd9;text-decoration:none}.login-footer-links a:hover{text-decoration:underline}.login-footer-links span{color:#fff6}.login-footer-credit{text-align:center;color:#fff9;margin-top:8px;font-size:.75rem}.login-footer-credit a{color:#ffffffd9;text-decoration:none}.login-footer-credit a:hover{text-decoration:underline}.login-banner{border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:100%;box-shadow:var(--shadow-lg);display:block}.login-card{background:var(--color-paper);border-radius:0 0 var(--radius-lg) var(--radius-lg);width:100%;box-shadow:var(--shadow-lg);padding:40px 36px}.login-title{margin-bottom:2px;font-size:1.5rem}.login-sub{color:var(--color-ink-soft);margin-bottom:28px;font-size:.88rem}.login-tabs{border-radius:var(--radius);background:#f0e9db;margin-bottom:24px;padding:4px;display:flex}.login-tab{border-radius:var(--radius-sm);color:var(--color-ink-soft);cursor:pointer;transition:background-color var(--transition-fast), color var(--transition-fast), box-shadow var(--transition-fast);background:0 0;border:none;flex:1;padding:9px 12px;font-size:.88rem;font-weight:500}.login-tab.active{background:var(--color-paper);color:var(--color-maroon-700);box-shadow:var(--shadow-xs)}.mark-buttons{gap:6px;display:flex}.mark-btn{border-radius:var(--radius-sm);border:1px solid var(--color-border);background:var(--color-paper);color:var(--color-ink-soft);cursor:pointer;transition:background-color var(--transition-fast), border-color var(--transition-fast), color var(--transition-fast), box-shadow var(--transition-fast), transform var(--transition-fast);padding:6px 12px;font-size:.82rem;font-weight:500}.mark-btn:hover:not(:disabled):not(.active){border-color:var(--color-gold-600);transform:translateY(-1px)}.mark-btn:disabled{opacity:.6;cursor:not-allowed}.mark-btn.mark-present.active{background:var(--color-success);border-color:var(--color-success);color:#fff;box-shadow:0 2px 6px #3f7a544d}.mark-btn.mark-absent.active{background:var(--color-warn);border-color:var(--color-warn);color:#fff;box-shadow:0 2px 6px #b34a2f4d}.mark-btn.mark-excused.active{color:#fff;background:#c69a1f;border-color:#c69a1f;box-shadow:0 2px 6px #c69a1f4d}.loading-shell{min-height:100vh;color:var(--color-ink-soft);font-family:var(--font-body);justify-content:center;align-items:center;display:flex}
