:root{font-family:Segoe UI,Trebuchet MS,Arial,sans-serif;line-height:1.5;font-weight:400;color:#14213d;background:radial-gradient(circle at top left,#f0f7ff,#f9fbfd 45%,#f5f5f5);font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--bg-surface: #ffffff;--bg-muted: #f4f6fb;--border: #d9e1ee;--text: #14213d;--muted: #5b6780;--primary: #0f6cbd;--primary-strong: #0a5a9f;--success: #157347;--danger: #b02a37;--danger-bg: #fdecef;--success-bg: #e9f8ef;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-5: 20px;--radius-sm: 8px;--radius-md: 12px;--radius-lg: 16px;--shadow-sm: 0 6px 16px rgba(15, 40, 80, .08);--focus-ring: 0 0 0 3px rgba(15, 108, 189, .22)}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;color:var(--text);background:transparent;overflow-x:hidden}#root{min-height:100vh}a{color:inherit}button,input,select,textarea{font:inherit}button,input,select,textarea{border:1px solid var(--border);border-radius:10px;padding:10px 12px;background:#fff}button{cursor:pointer}button:disabled{opacity:.65;cursor:not-allowed}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{outline:none;box-shadow:var(--focus-ring)}.primary-btn{border:1px solid var(--primary);background:var(--primary);color:#fff}.primary-btn:hover{background:var(--primary-strong)}.ghost-btn{border:1px solid var(--border);background:var(--bg-surface);color:var(--text)}.danger-btn{border:1px solid var(--danger);background:var(--danger);color:#fff}.muted{color:var(--muted)}.center-page{min-height:100vh;display:grid;place-items:center}.auth-page{min-height:100vh;display:grid;place-items:center;padding:20px}.auth-card{width:min(420px,100%);border:1px solid var(--border);border-radius:16px;background:var(--bg-surface);padding:20px;box-shadow:0 14px 36px #0f285014}.auth-form{display:grid;gap:10px}.permission-splash{display:grid;gap:12px}.splash-logo{width:132px;height:132px;margin:0 auto;border-radius:22px;overflow:hidden;box-shadow:0 14px 34px #0f285038}.splash-logo img{width:100%;height:100%;object-fit:cover;display:block}.perm-grid{display:grid;gap:8px}.perm-step{display:grid;grid-template-columns:18px 1fr;gap:10px;align-items:center;padding:10px;border-radius:10px;border:1px solid var(--border);background:#fff;transition:all .14s ease}.perm-step-title{font-weight:600}.perm-step-detail{font-size:12px;color:var(--muted)}.perm-step-icon{width:14px;height:14px;border-radius:999px;border:2px solid #bcc7d9}.perm-step.pending{background:#f5f9ff;border-color:#c6d9f3}.perm-step.pending .perm-step-icon{border-color:#0f6cbd transparent #0f6cbd transparent;animation:spin .7s linear infinite}.perm-step.success{background:var(--success-bg);border-color:#b8e6c8}.perm-step.success .perm-step-icon{background:var(--success);border-color:var(--success)}.perm-step.error{background:#fff4f4;border-color:#f0c4c9}.perm-step.error .perm-step-icon{background:var(--danger);border-color:var(--danger)}.app-shell{display:grid;grid-template-columns:260px 1fr;min-height:100vh}.app-sidebar{border-right:1px solid var(--border);background:var(--bg-surface);padding:16px;display:grid;grid-template-rows:auto auto 1fr auto;gap:14px;height:100vh;overflow:hidden}.sidebar-header{display:flex;justify-content:space-between;align-items:center}.brand{font-weight:800;letter-spacing:.02em}.user-summary{border:1px solid var(--border);background:linear-gradient(145deg,#f7faff,#eef4ff);border-radius:12px;padding:10px;font-size:13px;display:grid;grid-template-columns:40px 1fr;gap:10px;align-items:center}.user-avatar{width:40px;height:40px;border-radius:999px;display:grid;place-items:center;font-weight:700;color:#fff;background:linear-gradient(145deg,#0f6cbd,#0a4f91);box-shadow:0 8px 20px #0f6cbd40}.user-meta{min-width:0;display:grid;gap:2px}.user-name{font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-role-badge{justify-self:start;border:1px solid #c3d6f2;background:#e9f2ff;color:#184b82;border-radius:999px;font-size:11px;line-height:1;padding:5px 8px}.user-subtle{color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-nav{display:grid;gap:10px;align-content:start;min-height:0;overflow-y:auto;padding-right:4px;scrollbar-gutter:stable}.nav-group{display:grid;gap:6px}.nav-group-title{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#6a768f;padding:0 4px}.nav-group-links{display:grid;gap:6px}.nav-link{text-decoration:none;border-radius:10px;padding:10px 12px;border:1px solid transparent}.nav-link:hover{background:var(--bg-muted)}.nav-link.active{border-color:#b7c6de;background:linear-gradient(145deg,#eaf2ff,#ddeaff);font-weight:600}.sidebar-logout{width:100%}.sidebar-version{margin-top:6px;font-size:12px;text-align:center}.content-shell{min-width:0;position:relative}.mobile-header{display:flex;justify-content:flex-start;gap:12px;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border);background:#fffffff5;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);min-height:64px;position:sticky;top:0;z-index:25}.app-content{padding:18px}.status-banner-stack{position:fixed;left:12px;bottom:12px;z-index:130;display:grid;gap:8px;width:min(460px,calc(100vw - 24px))}.status-banner{border:1px solid var(--border);background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:10px}.status-banner-actions{display:inline-flex;align-items:center;gap:8px}.status-banner-close{border:0;background:transparent;color:inherit;padding:0 4px;min-height:unset;font-size:18px;line-height:1;opacity:.85}.status-banner-close:hover{opacity:1}.status-banner-warning{border-color:#f3d19c;background:#fffaf2;color:#9a5b00}.status-banner-info{border-color:#c6d9f3;background:#f5f9ff;color:#245281}.status-banner-success{border-color:#b8e6c8;background:var(--success-bg);color:#0d5d35}.panel-card{border:1px solid var(--border);border-radius:14px;background:var(--bg-surface);padding:16px;box-shadow:var(--shadow-sm)}.page-title{margin:0 0 10px;text-align:center}.quick-grid,.dashboard-stats{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.dashboard-stat-link{text-decoration:none}.dashboard-stat-card{min-height:118px;display:grid;gap:4px;align-content:start;position:relative;overflow:hidden;border-color:#cdd9eb;background:linear-gradient(145deg,#f8fbff,#f0f6ff)}.dashboard-stat-card:before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:#4d84ce}.dashboard-stat-card.warning:before{background:#ce8d2f}.dashboard-stat-card.success:before{background:#2f8f62}.dashboard-stat-title{font-size:12px;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:#355a89}.dashboard-stat-card.warning .dashboard-stat-title{color:#9a6821}.dashboard-stat-card.success .dashboard-stat-title{color:#206c4a}.dashboard-stat-value{font-size:28px;line-height:1.1;font-weight:800;color:#1c3558}.dashboard-stat-subtitle{font-size:12px;color:#5f6f88}.quick-link{display:block;text-decoration:none;border:1px solid var(--border);border-radius:12px;background:var(--bg-surface);padding:12px}.quick-link:hover{border-color:#b7c6de;background:#eef5ff}.hide-desktop{display:none}.desktop-only{display:block}.mobile-only{display:none}.mobile-personnel-list{gap:10px}.personnel-mobile-card{border:1px solid var(--border);border-radius:12px;background:var(--bg-surface);padding:10px}.personnel-mobile-title{font-weight:700;margin-bottom:4px}.sidebar-overlay{position:fixed;inset:0;z-index:35;border:0;padding:0;margin:0;background:#0f213d6b;border-radius:0}.menu-toggle-btn{width:44px;height:44px;min-width:44px;padding:0;font-size:20px;line-height:1;border-radius:12px}.mobile-header-center{min-width:0;display:grid;gap:2px}.mobile-user-meta{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.modal-overlay{position:fixed;inset:0;background:#0f213d80;z-index:70;display:grid;place-items:center;padding:16px}.modal-card{width:min(920px,100%);max-height:calc(100vh - 32px);overflow:auto;border:1px solid var(--border);border-radius:14px;background:var(--bg-surface);box-shadow:0 18px 40px #0f213d40;padding:14px;display:grid;gap:12px}.modal-title{margin:0}.modal-message{color:var(--muted);margin-top:-4px}.modal-actions{display:flex;justify-content:flex-end;gap:8px}.btn-with-icon{display:inline-flex;align-items:center;gap:6px}.btn-icon{display:inline-block;min-width:10px;text-align:center;font-weight:700;opacity:.9}.btn-icon svg{width:14px;height:14px;stroke:currentColor;vertical-align:middle}.toast-stack{position:fixed;right:14px;bottom:14px;z-index:120;display:grid;gap:8px;width:min(360px,calc(100vw - 28px))}.toast{border:1px solid var(--border);border-radius:var(--radius-md);background:#fff;padding:10px 12px;box-shadow:var(--shadow-sm);display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.toast-success{border-color:#b8e6c8;background:var(--success-bg)}.toast-error{border-color:#f4c7cd;background:var(--danger-bg)}.toast-close{border:0;background:transparent;color:var(--muted);padding:0;min-height:unset}.inline-error{color:var(--danger);background:var(--danger-bg);border:1px solid #f4c7cd;border-radius:var(--radius-sm);padding:8px 10px}.inline-success{color:var(--success);background:var(--success-bg);border:1px solid #b8e6c8;border-radius:var(--radius-sm);padding:8px 10px}.empty-state{border:1px dashed var(--border);border-radius:var(--radius-md);padding:14px;text-align:center;color:var(--muted)}.empty-title{font-weight:600;color:var(--text)}.empty-action{margin-top:8px}.skeleton-list{display:grid;gap:8px}.skeleton-line{height:16px;border-radius:999px;background:linear-gradient(90deg,#ecf2fb,#f8fbff,#ecf2fb);background-size:200% 100%;animation:pulse 1.1s linear infinite}.table-wrap{overflow-x:auto}.form-grid{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.table-basic{width:100%;border-collapse:collapse}.table-basic th{text-align:left;border-bottom:1px solid var(--border);padding:8px;font-size:13px}.table-basic td{border-bottom:1px solid #edf1f7;padding:8px;font-size:13px}.holiday-table-wrap{border:1px solid #dfe6f2;border-radius:12px;background:#fff}.holiday-form-grid{display:grid;gap:10px;grid-template-columns:minmax(180px,220px) minmax(220px,1fr) auto;align-items:end}.holiday-table{min-width:620px}.holiday-table thead th{position:sticky;top:0;z-index:1;background:#f7f9fc;color:#2f4768;font-weight:700;text-transform:uppercase;letter-spacing:.03em;font-size:11px}.holiday-table tbody tr:nth-child(2n){background:#fafcff}.holiday-table tbody tr:hover{background:#f3f7fd}.holiday-date-chip{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;border:1px solid #d1deef;background:#f4f8ff;color:#2c4d78;font-weight:600;font-size:12px}.holiday-name{font-weight:600}.holiday-mobile-list{display:none;gap:10px}.holiday-mobile-card{border:1px solid #dfe6f2;border-radius:12px;background:#fff;padding:10px;display:grid;gap:8px;box-shadow:0 4px 12px #0f28500f;justify-items:center;text-align:center}.holiday-mobile-top{display:flex;gap:8px;flex-wrap:wrap;align-items:center;justify-content:center}.holiday-weekday-chip{display:inline-flex;align-items:center;padding:4px 10px;border-radius:999px;border:1px solid #d7e3f2;background:#f8fbff;color:#385b86;font-size:12px;font-weight:600}.holiday-mobile-actions{display:flex;justify-content:center;width:100%}.field{display:grid;gap:6px}.field-label,.field-hint{font-size:12px;color:var(--muted)}.field-error{font-size:12px;color:var(--danger)}.filter-row,.row-wrap{display:flex;gap:8px;flex-wrap:wrap;align-items:end}.stack{display:grid;gap:12px}.stats-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.stat-card{--stat-accent: #8ea6c7;--stat-value: #1f2e45;border:1px solid var(--border);border-radius:12px;background:#fff;padding:12px;display:grid;gap:6px;min-height:92px;position:relative;overflow:hidden;box-shadow:0 8px 18px #0f285014;transition:transform .14s ease,box-shadow .14s ease}.stat-card:before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:var(--stat-accent)}.stat-card:after{content:"";position:absolute;width:96px;height:96px;right:-24px;top:-24px;border-radius:999px;background:color-mix(in srgb,var(--stat-accent) 14%,transparent);pointer-events:none}.stat-card:hover{transform:translateY(-1px);box-shadow:0 12px 24px #0f28501f}.stat-card-info{--stat-accent: #5e94d6;border-color:#c8dcf6;background:#f4f9ff}.stat-card-primary{--stat-accent: #3677c8;border-color:#b9cff0;background:#edf5ff}.stat-card-success{--stat-accent: #3d9b69;border-color:#b9e6c8;background:#eefbf3}.stat-card-success-strong{--stat-accent: #228652;border-color:#9fd8b3;background:#e4f7ec}.stat-card-total{--stat-accent: #4a88d1;--stat-value: #184b82;border-color:#bfd8fb;background:linear-gradient(135deg,#f2f8ff,#e8f2ff)}.stat-card-total-strong{--stat-accent: #2f76cc;--stat-value: #153f6f;border-color:#9fc4f4;background:linear-gradient(135deg,#e9f3ff,#dae9ff)}.stat-card-approved{--stat-accent: #349764;--stat-value: #1b6640;border-color:#a9dfbf;background:linear-gradient(135deg,#effcf4,#e3f7eb)}.stat-card-approved-strong{--stat-accent: #247f51;--stat-value: #145233;border-color:#84cfaa;background:linear-gradient(135deg,#e5f8ee,#d5f0e2)}.stat-label{font-size:11px;letter-spacing:.03em;text-transform:uppercase;color:color-mix(in srgb,var(--stat-accent) 70%,#40506b);font-weight:700}.stat-value{font-size:22px;line-height:1.2;font-weight:700;color:var(--stat-value)}@media(max-width:640px){.stats-grid{grid-template-columns:1fr 1fr}.stat-card{min-height:84px;padding:10px}.stat-value{font-size:20px}}.loading-visual{display:inline-flex;align-items:center;gap:10px;color:var(--muted);background:#f5f9ff;border:1px solid #c6d9f3;border-radius:999px;padding:8px 12px;position:relative;overflow:hidden}.loading-visual:after{content:"";position:absolute;inset:0;background:linear-gradient(120deg,transparent 0%,rgba(255,255,255,.6) 48%,transparent 100%);transform:translate(-120%);animation:shimmer 1.25s ease-in-out infinite}.loading-spinner{width:14px;height:14px;border-radius:999px;border:2px solid #0f6cbd;border-right-color:transparent;animation:spin .7s linear infinite}.mobile-data-list{display:none;gap:10px}.mobile-data-card{border:1px solid var(--border);border-radius:12px;background:var(--bg-surface);padding:10px;display:grid;gap:4px}.mobile-data-title{font-weight:700;margin-bottom:2px}.mobile-data-actions{display:flex;gap:8px;margin-top:8px}@keyframes pulse{0%{background-position:0% 50%}to{background-position:100% 50%}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes shimmer{0%{transform:translate(-120%)}to{transform:translate(120%)}}@media(max-width:900px){.app-shell{grid-template-columns:1fr}.hide-desktop{display:inline-flex}.desktop-only{display:none!important}.mobile-only{display:block!important}.mobile-personnel-list,.mobile-data-list{display:grid!important}.app-sidebar{position:fixed;left:0;top:0;bottom:0;width:100vw;max-width:100vw;z-index:40;transform:translate(-104%);transition:transform .18s ease;box-shadow:0 20px 30px #0f285033;padding-bottom:calc(16px + env(safe-area-inset-bottom))}.app-sidebar.open{transform:translate(0)}.mobile-header{width:100%;padding-top:calc(10px + env(safe-area-inset-top))}.app-content{padding:12px}.panel-card{padding:12px;border-radius:12px}.page-title{font-size:18px;line-height:1.3}button,input,select{min-height:44px}.quick-grid,.holiday-form-grid{grid-template-columns:1fr}.holiday-form-grid .primary-btn{width:100%}.holiday-mobile-list{display:grid}.dashboard-stats{grid-template-columns:1fr}.quick-link,.auth-page{padding:14px}.auth-card{padding:16px;border-radius:14px}.modal-overlay{padding:10px}.modal-card{width:100%;max-height:calc(100vh - 20px);padding:12px}.status-banner-stack{left:10px;bottom:10px;width:calc(100vw - 20px)}.modal-actions{flex-direction:column-reverse}.toast-stack{right:10px;bottom:10px;width:calc(100vw - 20px)}}
