:root{--color-page-bg: #F7F8FA;--color-surface: #FFFFFF;--color-surface-subtle: #F8F9FB;--color-surface-muted: #F1F3F5;--color-surface-hover: #F5F6F8;--color-surface-active: #EEF1F4;--color-border: #E4E7EB;--color-border-strong: #D0D5DD;--color-border-focus: #2563EB;--color-text-primary: #171A1F;--color-text-secondary: #667085;--color-text-tertiary: #98A2B3;--color-text-disabled: #B8BEC8;--color-text-inverse: #FFFFFF;--color-primary: #2563EB;--color-primary-hover: #1D4ED8;--color-primary-active: #1E40AF;--color-primary-subtle: #EFF6FF;--color-success: #16A34A;--color-success-hover: #15803D;--color-success-subtle: #F0FDF4;--color-warning: #D97706;--color-warning-hover: #B45309;--color-warning-subtle: #FFFBEB;--color-danger: #DC2626;--color-danger-hover: #B91C1C;--color-danger-subtle: #FEF2F2;--color-info: #0284C7;--color-info-hover: #0369A1;--color-info-subtle: #F0F9FF;--status-present-bg: #F0FDF4;--status-present-text: #16A34A;--status-present-border: #BBF7D0;--status-late-bg: #FFFBEB;--status-late-text: #D97706;--status-late-border: #FDE68A;--status-absent-bg: #FEF2F2;--status-absent-text: #DC2626;--status-absent-border: #FECACA;--status-half-day-bg: #FEFCE8;--status-half-day-text: #CA8A04;--status-half-day-border: #FEF08A;--status-on-leave-bg: #F0F9FF;--status-on-leave-text: #0284C7;--status-on-leave-border: #BAE6FD;--status-holiday-bg: #FAF5FF;--status-holiday-text: #7C3AED;--status-holiday-border: #E9D5FF;--status-weekend-bg: #F1F5F9;--status-weekend-text: #64748B;--status-weekend-border: #CBD5E1;--status-overtime-bg: #ECFDF5;--status-overtime-text: #059669;--status-overtime-border: #A7F3D0;--status-unprocessed-bg: #F1F3F5;--status-unprocessed-text: #667085;--status-unprocessed-border: #E4E7EB;--status-unmarked-bg: #F8F9FA;--status-unmarked-text: #98A2B3;--status-unmarked-border: #E4E7EB;--status-corrected-bg: #EFF6FF;--status-corrected-text: #2563EB;--status-corrected-border: #BFDBFE;--status-missing-punch-bg: #FFF7ED;--status-missing-punch-text: #EA580C;--status-missing-punch-border:#FFEDD5;--device-online-dot: #16A34A;--device-offline-dot: #DC2626;--device-maintenance-dot: #D97706;--device-syncing-dot: #2563EB;--font-sans: "Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--font-size-2xs: 11px;--font-size-xs: 12px;--font-size-sm: 13px;--font-size-md: 14px;--font-size-lg: 16px;--font-size-xl: 18px;--font-size-2xl: 20px;--font-size-3xl: 24px;--font-size-4xl: 28px;--font-size-5xl: 32px;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-tight: 1.25;--line-height-normal: 1.5;--line-height-relaxed: 1.625;--space-0-5: 2px;--space-1: 4px;--space-1-5: 6px;--space-2: 8px;--space-2-5: 10px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--space-6: 24px;--space-8: 32px;--space-10: 40px;--space-12: 48px;--space-16: 64px;--radius-xs: 2px;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--radius-2xl: 16px;--radius-full: 9999px;--shadow-xs: 0 1px 2px rgba(16, 24, 40, .04);--shadow-sm: 0 1px 3px rgba(16, 24, 40, .08), 0 1px 2px rgba(16, 24, 40, .04);--shadow-md: 0 4px 12px rgba(16, 24, 40, .08), 0 2px 4px rgba(16, 24, 40, .04);--shadow-lg: 0 12px 32px rgba(16, 24, 40, .12), 0 4px 8px rgba(16, 24, 40, .06);--shadow-xl: 0 20px 48px rgba(16, 24, 40, .16);--transition-fast: .12s cubic-bezier(.16, 1, .3, 1);--transition-normal: .2s cubic-bezier(.16, 1, .3, 1);--transition-slow: .3s cubic-bezier(.16, 1, .3, 1);--sidebar-width: 260px;--sidebar-collapsed-width: 68px;--topbar-height: 60px}[data-theme=dark]{--color-page-bg: #0D1117;--color-surface: #161B22;--color-surface-subtle: #1C2128;--color-surface-muted: #21262D;--color-surface-hover: #262C36;--color-surface-active: #30363D;--color-border: #30363D;--color-border-strong: #484F58;--color-border-focus: #58A6FF;--color-text-primary: #F0F6FC;--color-text-secondary: #8B949E;--color-text-tertiary: #6E7681;--color-text-disabled: #484F58;--color-text-inverse: #0D1117;--color-primary: #388BFD;--color-primary-hover: #58A6FF;--color-primary-active: #1F6FEB;--color-primary-subtle: rgba(56, 139, 253, .15);--color-success: #3FB950;--color-success-hover: #56D364;--color-success-subtle: rgba(63, 185, 80, .15);--color-warning: #D29922;--color-warning-hover: #E3B341;--color-warning-subtle: rgba(210, 153, 34, .15);--color-danger: #F85149;--color-danger-hover: #FF7B72;--color-danger-subtle: rgba(248, 81, 73, .15);--color-info: #58A6FF;--color-info-hover: #79C0FF;--color-info-subtle: rgba(88, 166, 255, .15);--status-present-bg: rgba(63, 185, 80, .15);--status-present-text: #3FB950;--status-present-border: rgba(63, 185, 80, .35);--status-late-bg: rgba(210, 153, 34, .15);--status-late-text: #E3B341;--status-late-border: rgba(210, 153, 34, .35);--status-absent-bg: rgba(248, 81, 73, .15);--status-absent-text: #F85149;--status-absent-border: rgba(248, 81, 73, .35);--status-half-day-bg: rgba(234, 179, 8, .15);--status-half-day-text: #FACC15;--status-half-day-border: rgba(234, 179, 8, .35);--status-on-leave-bg: rgba(56, 189, 248, .15);--status-on-leave-text: #38BDF8;--status-on-leave-border: rgba(56, 189, 248, .35);--status-holiday-bg: rgba(168, 85, 247, .15);--status-holiday-text: #C084FC;--status-holiday-border: rgba(168, 85, 247, .35);--status-weekend-bg: rgba(148, 163, 184, .12);--status-weekend-text: #94A3B8;--status-weekend-border: rgba(148, 163, 184, .25);--status-overtime-bg: rgba(52, 211, 153, .15);--status-overtime-text: #34D399;--status-overtime-border: rgba(52, 211, 153, .35);--status-unprocessed-bg: #21262D;--status-unprocessed-text: #8B949E;--status-unprocessed-border: #30363D;--status-unmarked-bg: #1C2128;--status-unmarked-text: #6E7681;--status-unmarked-border: #30363D;--status-corrected-bg: rgba(56, 139, 253, .15);--status-corrected-text: #58A6FF;--status-corrected-border: rgba(56, 139, 253, .35);--status-missing-punch-bg: rgba(251, 146, 60, .15);--status-missing-punch-text: #FB923C;--status-missing-punch-border:rgba(251, 146, 60, .35);--shadow-xs: 0 1px 2px rgba(0, 0, 0, .3);--shadow-sm: 0 1px 3px rgba(0, 0, 0, .4), 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 12px rgba(0, 0, 0, .5), 0 2px 4px rgba(0, 0, 0, .3);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .6), 0 4px 8px rgba(0, 0, 0, .4);--shadow-xl: 0 20px 48px rgba(0, 0, 0, .75)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:var(--font-sans);line-height:var(--line-height-normal);color-scheme:light dark}body{min-height:100vh;color:var(--color-text-primary);background-color:var(--color-page-bg);font-family:var(--font-sans);font-size:var(--font-size-md);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:inherit;color:inherit;margin:0}button,[role=button]{cursor:pointer}button:disabled,[role=button]:disabled{cursor:not-allowed}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}table{border-collapse:collapse;width:100%}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}code,kbd,samp,pre{font-family:var(--font-mono);font-size:1em}.text-2xs{font-size:var(--font-size-2xs)}.text-xs{font-size:var(--font-size-xs)}.text-sm{font-size:var(--font-size-sm)}.text-md{font-size:var(--font-size-md)}.text-lg{font-size:var(--font-size-lg)}.text-xl{font-size:var(--font-size-xl)}.text-2xl{font-size:var(--font-size-2xl)}.text-3xl{font-size:var(--font-size-3xl)}.text-4xl{font-size:var(--font-size-4xl)}.text-5xl{font-size:var(--font-size-5xl)}.font-normal{font-weight:var(--font-weight-regular)}.font-medium{font-weight:var(--font-weight-medium)}.font-semibold{font-weight:var(--font-weight-semibold)}.font-bold{font-weight:var(--font-weight-bold)}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}.text-disabled{color:var(--color-text-disabled)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-danger{color:var(--color-danger)}.text-info{color:var(--color-info)}.font-mono{font-family:var(--font-mono)}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.btn-primary:hover:not(:disabled){background-color:var(--color-primary-hover)!important;border-color:var(--color-primary-hover)!important}.btn-primary:active:not(:disabled){background-color:var(--color-primary-active)!important;border-color:var(--color-primary-active)!important}.btn-subtle:hover:not(:disabled){background-color:var(--color-primary-subtle-hover)!important}.btn-outline:hover:not(:disabled){background-color:var(--color-primary-subtle)!important;border-color:var(--color-primary)!important;color:var(--color-primary)!important}.sidebar-nav-item{display:flex;align-items:center;gap:10px;border-radius:var(--radius-md);text-decoration:none;font-size:var(--font-size-xs);font-weight:500;color:var(--color-text-secondary);transition:all var(--transition-fast);border:1px solid transparent}.sidebar-nav-item:hover{background-color:var(--color-primary-subtle)!important;color:var(--color-primary)!important}.sidebar-nav-item.active{background-color:var(--color-primary-subtle)!important;color:var(--color-primary)!important;font-weight:600;border-color:var(--color-primary-border, rgba(37, 99, 235, .25))!important}.sidebar-nav-item.active:hover{background-color:var(--color-primary-subtle-hover)!important}.sidebar-toggle-btn:hover{background-color:var(--color-primary-subtle)!important;color:var(--color-primary)!important;border-color:var(--color-primary-border, rgba(37, 99, 235, .25))!important}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--color-border-strong);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--color-text-tertiary)}.card{background-color:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xs);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.card-interactive:hover{border-color:var(--color-border-strong);box-shadow:var(--shadow-sm)}.flex{display:flex}.inline-flex{display:inline-flex}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-wrap{flex-wrap:wrap}.gap-1{gap:var(--space-1)}.gap-2{gap:var(--space-2)}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.gap-5{gap:var(--space-5)}.gap-6{gap:var(--space-6)}.gap-8{gap:var(--space-8)}.grid{display:grid}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}@media(max-width:1024px){.grid-cols-4{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(1,minmax(0,1fr))}}@media(max-width:640px){.grid-cols-2,.grid-cols-4{grid-template-columns:1fr}}.p-2{padding:var(--space-2)}.p-3{padding:var(--space-3)}.p-4{padding:var(--space-4)}.p-5{padding:var(--space-5)}.p-6{padding:var(--space-6)}.px-4{padding-left:var(--space-4);padding-right:var(--space-4)}.px-6{padding-left:var(--space-6);padding-right:var(--space-6)}.py-2{padding-top:var(--space-2);padding-bottom:var(--space-2)}.py-3{padding-top:var(--space-3);padding-bottom:var(--space-3)}.py-4{padding-top:var(--space-4);padding-bottom:var(--space-4)}.w-full{width:100%}.h-full{height:100%}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideInRight{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes slideInUp{0%{transform:translateY(8px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.animate-pulse{animation:pulse 1.5s cubic-bezier(.4,0,.6,1) infinite}.animate-fade-in{animation:fadeIn .2s ease-out forwards}.animate-slide-up{animation:slideInUp .2s ease-out forwards}
