:root[data-theme=dark]{--bg: #091422;--surface-low: #111c2a;--surface: #182333;--surface-high: #222d3d;--surface-highest: #2b3545;--text: #d8e3f7;--text-dim: #bcc7da;--text-faint: #8093ab;--pto: #2dd4bf;--pto-soft: rgba(45, 212, 191, .26);--pto-text: #8df5e4;--pending: #f5b942;--pending-soft: rgba(245, 185, 66, .24);--rejected: #ff6b81;--rejected-soft: rgba(255, 107, 129, .14);--cancelled: #9aa4b5;--cancelled-soft: rgba(154, 164, 181, .24);--holiday: rgba(100, 160, 210, .2);--weekend: #050d18;--outline: rgba(70, 69, 87, .35);--shadow: 0 20px 40px rgba(0, 0, 0, .4);--glass: rgba(24, 35, 51, .8);--accent: #2913ae;--accent-hover: #3b22cf;--accent-text: #a5a9ff;--on-accent: #ffffff;--accent-soft: rgba(120, 110, 255, .28)}:root[data-theme=light]{--bg: #f8f9fb;--surface-low: #f3f4f6;--surface: #ffffff;--surface-high: #eceef2;--surface-highest: #e4e7ec;--text: #191c1e;--text-dim: #434654;--text-faint: #7a7f8e;--pto: #00675c;--pto-soft: rgba(0, 103, 92, .2);--pto-text: #00201c;--pending: #8f6410;--pending-soft: rgba(143, 100, 16, .18);--rejected: #b3261e;--rejected-soft: rgba(179, 38, 30, .1);--cancelled: #5f6672;--cancelled-soft: rgba(95, 102, 114, .2);--holiday: rgba(25, 90, 140, .16);--weekend: #e4e7ec;--outline: rgba(67, 70, 84, .15);--shadow: 0 0 24px rgba(25, 28, 30, .06);--glass: rgba(255, 255, 255, .8);--accent: #2913ae;--accent-hover: #1e0e86;--accent-text: #2913ae;--on-accent: #ffffff;--accent-soft: rgba(41, 19, 174, .14)}:root[data-theme=light][data-accent=teal]{--accent: #41e8ff;--accent-hover: #22d9f2;--accent-text: #087e93;--on-accent: #010039;--accent-soft: rgba(65, 232, 255, .28)}:root[data-theme=dark][data-accent=teal]{--accent: #41e8ff;--accent-hover: #79efff;--accent-text: #41e8ff;--on-accent: #010039;--accent-soft: rgba(65, 232, 255, .24)}:root[data-theme=light][data-accent=purple]{--accent: #6942e1;--accent-hover: #5735c1;--accent-text: #6942e1;--on-accent: #ffffff;--accent-soft: rgba(105, 66, 225, .16)}:root[data-theme=dark][data-accent=purple]{--accent: #6942e1;--accent-hover: #7e5cf0;--accent-text: #a5a9ff;--on-accent: #ffffff;--accent-soft: rgba(126, 92, 240, .28)}:root[data-theme=light][data-accent=neutral]{--accent: #63668a;--accent-hover: #50536f;--accent-text: #565a75;--on-accent: #ffffff;--accent-soft: rgba(123, 126, 158, .2)}:root[data-theme=dark][data-accent=neutral]{--accent: #7b7e9e;--accent-hover: #8f92ae;--accent-text: #b9bcd3;--on-accent: #ffffff;--accent-soft: rgba(123, 126, 158, .3)}:root{--primary: var(--accent-text);--on-primary: var(--on-accent);--cta: linear-gradient(135deg, var(--accent), var(--accent-hover));--cta-solid: var(--accent);--selection: var(--accent);--selection-soft: var(--accent-soft);--color-bg-page: var(--bg);--color-bg-sidebar: var(--surface-low);--color-bg-surface: var(--surface);--color-bg-elevated: var(--surface-high);--color-bg-input: var(--surface-highest);--color-bg-disabled: var(--surface-high);--color-text-primary: var(--text);--color-text-secondary: var(--text-dim);--color-text-muted: var(--text-faint);--color-border-default: var(--outline);--color-divider: var(--outline);--color-state-hover: var(--surface-high);--color-state-selected: var(--selection-soft);--color-focus-ring: var(--accent);--color-action-primary: var(--accent);--color-action-primary-hover: var(--accent-hover);--color-action-destructive: var(--rejected);--color-status-success: var(--pto);--color-status-warning: var(--pending);--color-status-info: var(--accent-text);--color-status-approved: var(--pto);--color-status-pending: var(--pending);--color-status-cancelled: var(--cancelled);--color-status-holiday: var(--holiday);--color-weekend: var(--weekend);--color-table-stripe: var(--surface-low);--color-bg-tooltip: var(--surface);--color-overlay: rgba(0, 0, 0, .45);--shadow-1: 0 2px 8px rgba(0, 0, 0, .12);--shadow-2: var(--shadow);--shadow-3: 0 12px 40px rgba(0, 0, 0, .35)}.spinner{display:inline-block;width:.85em;height:.85em;vertical-align:-.1em;margin-right:.15em;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-rotate .6s linear infinite}@keyframes spinner-rotate{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{transition:none!important;animation:none!important}}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100vh}:focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:2px}body{background:var(--bg);color:var(--text);font-family:Manrope,system-ui,sans-serif;font-size:15px;transition:background .25s ease,color .25s ease}h1,h2,h3{font-family:Space Grotesk,Manrope,sans-serif;letter-spacing:-.02em;margin:0}.label{font-family:Inter,sans-serif;font-size:.6875rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-faint);font-weight:500}.app-shell{display:flex;min-height:100vh}.sidebar{width:220px;flex-shrink:0;background:var(--surface-low);padding:1.5rem 1rem;display:flex;flex-direction:column;gap:.25rem;position:sticky;top:0;height:100vh}.main{flex:1;padding:2rem 2.5rem 4rem;max-width:1200px}.brand{display:flex;align-items:center;gap:.6rem;padding:0 .5rem 1.5rem}.brand svg{flex-shrink:0}.brand-name{font-family:Space Grotesk,sans-serif;font-weight:700;font-size:1.05rem;letter-spacing:-.02em}.brand-sub{font-size:.65rem;color:var(--text-faint);text-transform:uppercase;letter-spacing:.12em}.nav-link{display:block;padding:.55rem .75rem;border-radius:.375rem;color:var(--text-dim);text-decoration:none;font-weight:600;font-size:.9rem;transition:background .15s}.nav-link:hover{background:var(--color-state-hover)}.nav-link.active{background:var(--surface-highest);color:var(--text);box-shadow:inset 2px 0 0 var(--accent)}.sidebar-footer{margin-top:auto;display:flex;flex-direction:column;gap:.75rem;padding:0 .5rem}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:2.5rem;gap:1rem;flex-wrap:wrap}.topbar-controls{display:flex;align-items:center;gap:.75rem}.btn{font-family:Manrope,sans-serif;font-weight:700;font-size:.85rem;padding:.55rem 1.1rem;border-radius:.375rem;border:none;cursor:pointer;background:var(--cta);color:var(--on-primary)}.btn:hover:not(:disabled){filter:brightness(1.08)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-ghost{background:transparent;color:var(--primary);box-shadow:inset 0 0 0 1px var(--outline)}.btn-danger{background:var(--color-action-destructive);color:#fff}.btn-sm{padding:.35rem .7rem;font-size:.78rem}input,select,textarea{font-family:Inter,sans-serif;font-size:.875rem;background:var(--surface-highest);color:var(--text);border:none;border-radius:.375rem;padding:.55rem .7rem;outline:none}input:focus,select:focus,textarea:focus{box-shadow:0 0 0 1px var(--outline),0 0 12px var(--selection-soft)}.field{display:flex;flex-direction:column;gap:.3rem}.theme-toggle{background:var(--surface-highest);border:none;cursor:pointer;color:var(--text);border-radius:999px;padding:.4rem .9rem;font-size:.8rem;font-weight:700;font-family:Manrope,sans-serif}.segmented{display:inline-flex;background:var(--color-bg-input);border-radius:999px;padding:2px;gap:2px}.segmented button{border:none;background:transparent;color:var(--text-dim);cursor:pointer;padding:.3rem .7rem;border-radius:999px;font-family:Manrope,sans-serif;font-size:.78rem;font-weight:700}.segmented button[aria-pressed=true]{background:var(--accent);color:var(--on-accent)}.segmented button:hover:not([aria-pressed=true]){color:var(--text)}.accent-swatches{display:flex;gap:.6rem;align-items:center}.accent-swatch{width:1.7rem;height:1.7rem;border-radius:50%;cursor:pointer;padding:0;border:2px solid var(--color-border-default);display:inline-flex;align-items:center;justify-content:center;font-size:.8rem;line-height:1}.accent-swatch[aria-pressed=true]{border-color:var(--text)}.card{background:var(--surface);border-radius:.75rem;padding:1.25rem;box-shadow:var(--shadow)}.card+.card{margin-top:1.5rem}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1rem;margin-bottom:2rem}.stat{background:var(--surface);border-radius:.75rem;padding:1.1rem 1.25rem;box-shadow:var(--shadow)}.stat .value{font-family:Space Grotesk,sans-serif;font-size:1.9rem;font-weight:700;letter-spacing:-.02em}.chip{display:inline-flex;align-items:center;gap:.4rem;font-family:Inter,sans-serif;font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;padding:.25rem .65rem;border-radius:999px}.chip:before{content:"";width:4px;height:4px;border-radius:50%;background:currentColor}.chip.approved,.chip.auto_approved{background:var(--pto-soft);color:var(--pto)}.chip.pending,.chip.submitted{background:var(--pending-soft);color:var(--pending)}.chip.rejected{background:var(--rejected-soft);color:var(--rejected)}.chip.cancelled{background:var(--cancelled-soft);color:var(--text-dim);text-decoration:line-through}.chip.exception{background:var(--rejected-soft);color:var(--rejected)}.chip.historical{background:var(--pending-soft);color:var(--text-faint)}.helptip{position:relative;display:inline-flex;vertical-align:middle;margin-left:.35rem}.helptip-btn{width:1.1rem;height:1.1rem;padding:0;border:none;border-radius:50%;background:var(--surface-highest);color:var(--text-faint);font-size:.72rem;font-weight:700;line-height:1;cursor:help;display:inline-flex;align-items:center;justify-content:center}.helptip-btn:hover,.helptip-btn:focus-visible{color:var(--text);box-shadow:0 0 0 2px var(--outline);outline:none}.helptip-pop{position:absolute;top:calc(100% + 6px);z-index:60;width:max-content;max-width:min(340px,80vw);background:var(--color-bg-tooltip);color:var(--color-text-primary);border:1px solid var(--color-border-default);border-radius:8px;box-shadow:var(--shadow-3);padding:.6rem .75rem;font-size:.82rem;font-weight:400;line-height:1.45;text-align:left;white-space:normal}.helptip-pop.left{left:0}.helptip-pop.right{right:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--color-overlay);display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem}.modal{background:var(--color-bg-surface);color:var(--color-text-primary);border:1px solid var(--color-border-default);border-radius:10px;box-shadow:var(--shadow-3);padding:1.25rem;width:100%;max-width:480px}table{border-collapse:collapse;width:100%}th{text-align:left;padding:.5rem .75rem;font-family:Inter,sans-serif;font-size:.6875rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-faint);font-weight:500}td{padding:.65rem .75rem;font-size:.875rem}tbody tr:nth-child(odd){background:var(--surface-low)}.link-btn{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:var(--primary);font-weight:600;text-align:left}.link-btn:hover{text-decoration:underline}th .th-sort{background:none;border:none;padding:0;cursor:pointer;font:inherit;color:inherit;text-transform:inherit;letter-spacing:inherit;display:inline-flex;align-items:center;gap:.3rem}th .th-sort:hover{color:var(--text)}th .th-sort .sort-ind{font-size:.6rem;opacity:.35}th .th-sort.active{color:var(--text)}th .th-sort.active .sort-ind{opacity:1}tbody tr:hover{background:var(--surface-high)}.cal-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem}.cal-month-title{font-size:1.3rem;font-weight:700}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.25rem}.cal-dow{text-align:center;padding-bottom:.4rem}.cal-cell{position:relative;aspect-ratio:1.15;border-radius:.5rem;background:var(--surface-low);cursor:pointer;-webkit-user-select:none;user-select:none;display:flex;flex-direction:column;padding:.35rem .45rem;overflow:hidden;transition:background .12s;border:none;font:inherit;color:inherit;text-align:left}.cal-cell:hover:not(.disabled){background:var(--surface-high)}.cal-cell.empty-slot{background:transparent;cursor:default}.cal-cell.weekend{background:var(--color-weekend);color:var(--text-faint);cursor:not-allowed}.cal-cell.cancelled-day .cal-daynum{text-decoration:line-through;color:var(--cancelled)}.cal-cell.cancelled-day .cal-fill{opacity:.8}.cal-cell.holiday{background:var(--holiday);cursor:not-allowed}.cal-cell.past{opacity:.4}.cal-cell.today{box-shadow:inset 0 -2px 0 0 var(--primary)}.cal-daynum{font-family:Inter,sans-serif;font-size:.8rem;font-weight:600}.cal-note{font-size:.58rem;line-height:1.15;color:var(--text-faint);margin-top:auto;overflow:hidden}.cal-fill{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.cal-fill.full{background:var(--fill, var(--selection-soft))}.cal-fill.am{background:linear-gradient(to bottom right,var(--fill, var(--selection-soft)) 46%,transparent 54%)}.cal-fill.pm{background:linear-gradient(to bottom right,transparent 46%,var(--fill, var(--selection-soft)) 54%)}.cal-cell .half-label{position:absolute;font-family:Inter,sans-serif;font-size:.55rem;letter-spacing:.5px;color:var(--text-dim);font-weight:600}.half-label.am{top:3px;right:5px}.half-label.pm{bottom:3px;right:5px}.month-picker-wrap{position:relative;display:inline-flex}.month-picker-trigger{background:none;border:none;cursor:pointer;color:var(--text);font:inherit;font-family:Space Grotesk,Manrope,sans-serif;font-weight:700;padding:.2rem .5rem;border-radius:.375rem}.month-picker-trigger:hover{background:var(--color-state-hover)}.month-picker{position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%);z-index:70;display:grid;grid-template-columns:repeat(3,1fr);gap:4px;background:var(--color-bg-surface);border:1px solid var(--color-border-default);border-radius:10px;box-shadow:var(--shadow-3);padding:.5rem;min-width:220px}.month-picker-item{border:none;background:transparent;color:var(--text-dim);cursor:pointer;padding:.45rem .5rem;border-radius:.375rem;font-size:.82rem;font-weight:600;white-space:nowrap}.month-picker-item:hover{background:var(--color-state-hover);color:var(--text)}.month-picker-item.active{background:var(--accent);color:var(--on-accent)}.cycle-hint{display:flex;align-items:center;gap:.5rem;margin-top:.75rem;padding:.5rem .75rem;background:var(--selection-soft);border-radius:.5rem;font-size:.85rem;color:var(--text)}.cycle-hint-dismiss{margin-left:auto;background:none;border:none;cursor:pointer;color:var(--text-dim);font-size:1rem;line-height:1;padding:.15rem .35rem;border-radius:.25rem}.cycle-hint-dismiss:hover{color:var(--text);background:var(--surface-high)}.cal-legend{display:flex;gap:1.1rem;flex-wrap:wrap;margin-top:1rem}.cal-legend .item{display:flex;align-items:center;gap:.4rem;font-size:.75rem;color:var(--text-dim)}.cal-legend .swatch{width:14px;height:14px;border-radius:4px}.matrix{overflow-x:auto}.matrix table{width:auto;border-collapse:separate;border-spacing:0}.matrix td.day-cell{padding:0;width:26px;height:30px;min-width:26px;position:relative}.matrix .name-col{position:sticky;left:0;z-index:2;background:var(--surface);font-weight:600;white-space:nowrap;padding-right:1.25rem;min-width:170px;box-shadow:4px 0 8px -4px #0000002e}.matrix thead th.name-col{z-index:3}.matrix tbody tr:nth-child(odd){background:transparent}.matrix tbody tr:nth-child(odd) td{background:var(--surface-low)}.matrix tbody tr:nth-child(2n) td{background:var(--surface)}.matrix tbody tr:hover td{background:var(--surface-high)}.matrix tbody td.day-cell.wk,.matrix tbody tr:hover td.day-cell.wk{background:var(--bg)}.matrix tbody td.day-cell.hol,.matrix tbody tr:hover td.day-cell.hol{background:var(--holiday)}.matrix thead th{position:sticky;top:0;background:var(--surface);z-index:1}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:1.5rem}.login-card{width:380px;max-width:100%;background:var(--surface);border-radius:1rem;padding:2.25rem;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:1rem}.error-box{background:var(--rejected-soft);color:var(--rejected);border-radius:.5rem;padding:.7rem .9rem;font-size:.85rem;white-space:pre-wrap}.ok-box{background:var(--pto-soft);color:var(--pto);border-radius:.5rem;padding:.7rem .9rem;font-size:.85rem}.row{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap}.grow{flex:1}.muted{color:var(--text-faint);font-size:.82rem}.section-gap{margin-top:3rem}.tabs{display:flex;gap:.4rem;margin-bottom:1.5rem;flex-wrap:wrap}.tab{border:none;cursor:pointer;font-family:Manrope,sans-serif;font-weight:700;font-size:.85rem;padding:.5rem 1rem;border-radius:999px;background:transparent;color:var(--text-dim)}.tab.active{background:var(--surface-highest);color:var(--text);box-shadow:inset 0 -2px 0 var(--accent)}.tab:disabled{opacity:.45;cursor:not-allowed}@media (max-width: 860px){.app-shell{flex-direction:column}.sidebar{width:100%;height:auto;position:static;flex-direction:row;align-items:center;overflow-x:auto;padding:.75rem 1rem}.brand{padding:0 1rem 0 0}.sidebar-footer{margin:0 0 0 auto;flex-direction:row}.main{padding:1.25rem 1rem 3rem}}
