*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{cursor:pointer;font-family:inherit}input,select,textarea{font-family:inherit;font-size:var(--text-md)}:focus-visible{outline:2px solid var(--indigo);outline-offset:2px}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--indigo);outline-offset:2px}.skip-link{position:absolute;top:-100px;left:0;background:var(--blue);color:#fff;padding:.5rem 1rem;z-index:1000;font-size:var(--text-sm);border-radius:0 0 var(--radius-md) 0}.skip-link:focus{top:0}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.3}}:root{--sidebar-w: 240px;--header-h: 56px;--control-h-xs: 24px;--control-h-sm: 28px;--control-h-md: 36px;--control-h-lg: 44px;--control-check: 16px;--control-w-search: 280px;--control-px-xs: .375rem;--control-px-sm: .75rem;--control-px-md: 1rem;--control-px-lg: 1.25rem;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--text-2xs: .625rem;--text-xs: .75rem;--text-sm: .8125rem;--text-md: .875rem;--text-lg: 1rem;--text-xl: 1.125rem;--text-2xl: 1.5rem;--text-3xl: 3rem;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-full: 9999px;--bg: #f1f2f6;--bg-subtle: #f9fafb;--bg-hover: #f3f4f6;--card: #fff;--card-hover: #fafafb;--border: #e2e4ea;--text-primary: #1a1a2e;--text-body: #4b5563;--text-secondary: #6b7280;--text-muted: #9ca3af;--blue: #3b82f6;--blue-hover: #2563eb;--blue-light: #eef2ff;--green: #22c55e;--green-bg: #dcfce7;--red: #dc2626;--red-bg: #fee2e2;--amber: #f59e0b;--amber-bg: #fef3c7;--indigo: #6366f1;--indigo-hover: #4f46e5;--warn-bg: #fffbeb;--warn-border: #fde68a;--warn-text: #92400e;--error-bg: #fef2f2;--error-border: #fecaca;--error-text: #991b1b;--sidebar-bg: #1e293b;--sidebar-text: #94a3b8;--sidebar-active: #3b82f6;--accent-gradient: linear-gradient(135deg, #3b82f6, #6366f1);--accent-gradient-hover: linear-gradient(135deg, #2563eb, #4f46e5);--glow-color: rgb(99 102 241 / 15%);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 10%);--radius: var(--radius-lg)}html{background:var(--card)}body{background:var(--bg);color:var(--text-primary)}#main-content:focus{outline:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.app-layout{display:flex;min-height:100vh}.sidebar{width:var(--sidebar-w);background:var(--sidebar-bg);color:var(--sidebar-text);position:fixed;top:0;left:0;height:100vh;display:flex;flex-direction:column;z-index:100}.main{margin-left:var(--sidebar-w);flex:1;min-height:100vh;min-width:0}.header{height:var(--header-h);background:var(--card);border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;padding:0 var(--space-6);position:sticky;top:0;z-index:50}.clock-timer-btn{display:inline-flex;align-items:center;gap:var(--space-1);height:var(--control-h-sm);background:none;border:1px solid var(--border);border-radius:var(--radius-md);padding:0 var(--control-px-sm);font-size:var(--text-sm);cursor:pointer;color:var(--text-secondary);transition:background-color .15s,border-color .15s}.clock-timer-btn:hover{background-color:var(--card-hover)}.content{padding:var(--space-6)}.sidebar-logo{padding:var(--space-4) var(--space-5);font-size:var(--text-xl);font-weight:700;color:#fff;text-decoration:none;border-bottom:1px solid rgb(255 255 255 / 8%);display:flex;align-items:center;gap:var(--space-2);height:var(--header-h)}.sidebar-logo span{color:#818cf8}.sidebar-nav{flex:1;padding:var(--space-3) 0;overflow-y:auto}.sidebar-section{padding:0 var(--space-3);margin-bottom:.5rem}.sidebar-section-label{font-size:var(--text-2xs);text-transform:uppercase;letter-spacing:.08em;color:#ffffff8c;padding:var(--space-2) var(--space-3) var(--space-1);font-weight:600}.sidebar-link{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);font-size:var(--text-sm);color:var(--sidebar-text);cursor:pointer;transition:background-color .3s,color .3s;text-decoration:none}.sidebar-link:hover{background:#ffffff0f;color:#fff}.sidebar-link:focus-visible{outline:2px solid #818cf8;outline-offset:-2px}.sidebar-link.active{background:var(--accent-gradient);color:#fff}.sidebar-link svg{width:18px;height:18px;flex-shrink:0}.sidebar-link .sidebar-badge{margin-left:auto;padding:0 var(--space-1);min-width:1.25rem;line-height:1.25rem;background:#ffffff1f;color:#fff}.sidebar-user{padding:var(--space-3) var(--space-4);border-top:1px solid rgb(255 255 255 / 8%);display:flex;align-items:center;gap:var(--space-3);font-size:var(--text-sm)}.sidebar-avatar{width:32px;height:32px;border-radius:50%;background:var(--accent-gradient);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600;font-size:var(--text-xs);flex-shrink:0}.sidebar-user-name{color:#fff;font-weight:500}.sidebar-user-role{color:var(--sidebar-text);font-size:var(--text-xs)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--space-1);height:var(--control-h-md);padding:0 var(--control-px-lg);border-radius:var(--radius-md);font-size:var(--text-md);font-weight:500;border:none;white-space:nowrap;transition:background-color .3s,color .3s,opacity .3s,border-color .3s}.btn-label-stack{display:grid;place-items:center}.btn-label-stack>*{grid-area:1 / 1}.btn-label-sizer{visibility:hidden}.btn-primary{background:linear-gradient(135deg,var(--blue),var(--indigo),var(--blue-hover),var(--indigo-hover));background-size:200% 200%;background-position:0% 0%;color:#fff;border:1px solid transparent;transition:background-position .3s,opacity .3s}.btn-primary:hover:not(:disabled){background-position:100% 100%}.btn-secondary{background-color:var(--card);color:var(--text-primary);border:1px solid var(--border)}.btn-secondary:hover{background-color:#f0f1f5}.btn-danger{background-color:var(--red);color:#fff}.btn-danger:hover{background-color:#b91c1c}.btn-sm{height:var(--control-h-sm);padding:0 var(--control-px-sm);font-size:var(--text-sm)}.btn-xs{height:var(--control-h-xs);padding:0 var(--control-px-xs);font-size:var(--text-xs)}.btn-lg{height:var(--control-h-lg);padding:0 var(--space-6)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-busy-quiet:disabled{opacity:1;cursor:pointer}.btn-link{display:inline-flex;align-items:center;min-height:var(--control-h-xs);padding:0;background:none;border:none;font-size:var(--text-xs);font-weight:500;cursor:pointer;color:var(--blue-hover)}.btn-link:hover:not(:disabled){text-decoration:underline}.btn-link:disabled{opacity:.5;cursor:not-allowed}.btn-link--danger{color:var(--red)}.btn-link--muted{color:var(--text-muted)}.btn-link--2xs{font-size:var(--text-2xs)}.btn-link--sm{font-size:var(--text-sm)}.card{background:var(--card);border-radius:var(--radius);border:1px solid var(--border);overflow:hidden}.card-header{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border)}.card-title{font-size:var(--text-lg);font-weight:600}.card-toolbar{padding:var(--space-5) var(--space-5) var(--space-4)}.stat-card{padding:var(--space-5)}.stat-card-label{font-weight:500;margin-bottom:var(--space-1)}.stat-card-value{font-size:var(--text-2xl);font-weight:700}.stat-card-value--text{font-size:var(--text-sm);font-weight:600}.stat-card-extra{margin-top:var(--space-2)}.badge{display:inline-block;padding:.125rem var(--space-2);border-radius:var(--radius-full);font-size:var(--text-xs);font-weight:600;white-space:nowrap;text-align:center}.badge-green{background:var(--green-bg);color:#166534}.badge-red{background:var(--red-bg);color:var(--error-text)}.badge-amber{background:var(--amber-bg);color:var(--warn-text)}.badge-blue{background:var(--blue-light);color:#4338ca}.badge-gray{background:var(--bg-hover);color:var(--text-body)}.table-scroll{overflow:auto}table{width:100%;border-collapse:collapse;font-size:var(--text-sm);table-layout:fixed}.auto-table{table-layout:auto}thead th{text-align:left;padding:var(--space-3) var(--space-4);font-weight:600;font-size:var(--text-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--border);background:#f8f9fc}tbody td{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border)}tbody tr.clickable-row{transition:background-color .3s}tbody tr.clickable-row:hover{background-color:var(--bg-hover)!important}tbody tr:last-child td{border-bottom:none}table:not(.ts-grid) tfoot td{padding:var(--space-3) var(--space-4);border-top:1px solid var(--border)}table.ts-grid.nav-table th,table.ts-grid.nav-table td{text-align:left;padding-left:var(--space-2)}table.ts-grid.nav-table th:first-child,table.ts-grid.nav-table td:first-child{padding-left:var(--space-5)}table.ts-grid.nav-table th:last-child,table.ts-grid.nav-table td:last-child{padding-right:var(--space-5)}.form-group{margin-bottom:var(--space-4)}.form-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--space-3)}.form-row .form-group{margin-bottom:0}.form-pair{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3)}.form-check{display:flex;align-items:center;gap:var(--space-2);margin-bottom:var(--space-2)}.form-check label{font-size:var(--text-sm)}.form-error{margin-top:var(--space-1);color:var(--red);font-size:var(--text-xs)}.form-group label{display:block;font-size:var(--text-sm);font-weight:600;margin-bottom:var(--space-1);color:var(--text-secondary)}.form-group input,.form-group select,.form-group textarea,.input{width:100%;padding:0 var(--control-px-sm);border:1px solid var(--border);border-radius:var(--radius-md);font-size:var(--text-md);outline:none;transition:border-color .3s,box-shadow .3s}.input{width:auto}.form-group input,.form-group select,.input{height:var(--control-h-md)}.input-sm{height:var(--control-h-sm);font-size:var(--text-sm)}.form-group textarea{min-height:var(--control-h-md);padding:var(--space-2) var(--control-px-sm);line-height:1.5}.form-group input:focus,.form-group select:focus,.form-group textarea:focus,.input:focus{border-color:var(--indigo);box-shadow:0 0 0 3px var(--glow-color)}.form-group input:disabled,.form-group textarea:disabled,.input:disabled{background-color:var(--bg-hover);color:var(--text-muted);cursor:not-allowed}input[type=date]::-webkit-calendar-picker-indicator{opacity:.5;cursor:pointer;transition:opacity .3s}input[type=date]::-webkit-calendar-picker-indicator:hover,input[type=date]:focus::-webkit-calendar-picker-indicator{opacity:1}select.select{width:100%;height:var(--control-h-md);padding:0 var(--space-8) 0 var(--control-px-sm);border:1px solid var(--border);border-radius:var(--radius-md);outline:none;background-color:#fff;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right var(--space-2) center;-webkit-appearance:none;-moz-appearance:none;appearance:none;font-size:var(--text-md);cursor:pointer;transition:border-color .3s,box-shadow .3s}select.select:focus{border-color:var(--indigo);box-shadow:0 0 0 3px var(--glow-color)}select.select:disabled{background-color:var(--bg-hover);color:var(--text-muted);cursor:not-allowed}select.select-filter{width:150px}select.select-chip{width:auto;height:auto;padding:var(--space-1) var(--space-6) var(--space-1) var(--space-3);background-position:right var(--space-2) center;background-size:12px;font-size:var(--text-xs)}input[type=checkbox]{width:var(--control-check);height:var(--control-check);margin:0;accent-color:var(--blue);cursor:pointer}input[type=checkbox]:disabled{cursor:not-allowed}.timer-dot{display:inline-block;flex:none;width:8px;height:8px;border-radius:50%;background:var(--red);animation:pulse-dot 1.5s ease-in-out infinite}.timer-dot--sm{width:6px;height:6px}.timer-dot--paused{background:var(--amber);opacity:.6;animation:none}.progress-bar{height:8px;background:#e5e7eb;border-radius:var(--radius-full);overflow:hidden}.progress-fill{height:100%;border-radius:var(--radius-full);transition:width .3s ease}.progress-fill.green{background:linear-gradient(90deg,var(--green),#10b981)}.progress-fill.red{background:linear-gradient(90deg,var(--red),#ef4444)}.text-sm{font-size:var(--text-sm)}.text-xs{font-size:var(--text-xs)}.text-secondary{color:var(--text-secondary)}.text-muted{color:var(--text-muted)}.fw-600{font-weight:600}.pointer{cursor:pointer}.row{display:flex;gap:var(--space-2)}.row-between{display:flex;justify-content:space-between}.stack{display:flex;flex-direction:column;gap:var(--space-2)}.items-center{align-items:center}.gap-3{gap:var(--space-3)}.gap-4{gap:var(--space-4)}.gap-6{gap:var(--space-6)}.sign-out-btn{display:inline-flex;align-items:center;height:var(--control-h-sm);background:none;border:none;color:var(--text-secondary);font-size:var(--text-sm);font-weight:600;cursor:pointer;padding:0 var(--space-2);transition:color .3s}.sign-out-btn:hover{color:var(--text-primary)}.pagination{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-top:1px solid var(--border);font-size:var(--text-sm)}.pagination-controls{display:flex;align-items:center;gap:var(--space-2)}.empty-state{--empty-state-pad: var(--space-8);padding:var(--empty-state-pad);text-align:center;color:var(--text-muted)}.empty-state-sm{--empty-state-pad: var(--space-4)}.empty-state-md{--empty-state-pad: var(--space-10)}.empty-state-lg{--empty-state-pad: var(--space-12)}.empty-state-flush{--empty-state-pad: var(--space-4) 0}.ts-grid td.empty-state,table.ts-grid.nav-table td.empty-state{padding:var(--empty-state-pad);text-align:center}.to-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:var(--space-4);font-size:var(--text-sm)}.to-details-heading{font-weight:600}.to-details-heading:not(:first-child){margin-top:var(--space-2)}.to-details-list{padding-left:var(--space-5);margin:var(--space-1) 0}.to-details-note{white-space:pre-wrap}.multiselect-trigger{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);width:100%;height:var(--control-h-md);padding:0 var(--space-2) 0 var(--control-px-sm);border:1px solid var(--border);border-radius:var(--radius-md);background:#fff;font-size:var(--text-md);text-align:left;color:var(--text-primary);cursor:pointer;transition:border-color .3s,box-shadow .3s}.multiselect-trigger:disabled{background:var(--bg-subtle);cursor:not-allowed}.multiselect-trigger:focus-visible,.multiselect-trigger[data-state=open]{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px #3b82f626}.multiselect-trigger>span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.multiselect-trigger svg{flex:none;color:var(--text-muted)}.multiselect-placeholder{color:var(--text-muted)}.multiselect-content{min-width:var(--radix-dropdown-menu-trigger-width);max-width:var(--radix-dropdown-menu-trigger-width);max-height:min(320px,var(--radix-dropdown-menu-content-available-height));overflow-y:auto;padding:var(--space-1);background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);z-index:250}.multiselect-item{display:flex;align-items:flex-start;gap:var(--space-2);padding:var(--space-2) var(--space-2);border-radius:var(--radius-sm);font-size:var(--text-sm);line-height:1.3;cursor:pointer;outline:none;-webkit-user-select:none;user-select:none}.multiselect-item[data-highlighted]{background:var(--bg-hover)}.multiselect-check{flex:none;pointer-events:none}.multiselect-item .multiselect-check{margin-top:1px}.multiselect-hint{display:block;color:var(--text-muted);font-size:var(--text-xs)}.dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:200;display:flex;align-items:center;justify-content:center}.dialog-content-wrapper{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;display:flex;align-items:center;justify-content:center}.dialog-content{background:var(--card);border-radius:var(--radius-lg);padding:var(--space-6);width:480px;max-width:90vw;max-height:90vh;overflow-y:auto;box-shadow:0 20px 60px #00000026}.dialog-content--wide{width:720px}.dialog-title{font-size:var(--text-lg);font-weight:600;margin-bottom:var(--space-1)}.dialog-description{font-size:var(--text-sm);color:var(--text-secondary);margin-bottom:var(--space-5)}.dialog-actions{display:flex;gap:var(--space-2);justify-content:flex-end;margin-top:var(--space-5)}.dialog-actions-start{margin-right:auto}.toast-viewport{position:fixed;bottom:1rem;right:1rem;display:flex;flex-direction:column;gap:var(--space-2);width:360px;max-width:90vw;z-index:300;list-style:none}.toast{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-3) var(--space-4);box-shadow:0 4px 12px #0000001f;font-size:var(--text-sm);animation:toast-slide-in .2s ease-out}.toast-success{border-left:3px solid var(--green)}.toast-error{border-left:3px solid var(--red)}@keyframes toast-slide-in{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.ts-grid{width:100%;border-collapse:collapse}.ts-grid th{padding:var(--space-3) var(--space-2);text-align:center;font-size:var(--text-xs);color:var(--text-secondary);font-weight:600;text-transform:uppercase;letter-spacing:.04em;border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:#f8f9fc}.ts-grid th.col-project{text-align:left;padding-left:var(--space-5)}.ts-grid th.col-total{width:80px;padding-right:var(--space-6);text-align:right}.ts-grid th.col-day{width:90px}.ts-grid td{padding:var(--space-2) var(--space-1);text-align:center;border-bottom:1px solid var(--border);vertical-align:middle}.ts-grid tfoot tr:last-child td,.ts-grid tbody tr:last-child td{border-bottom:none}.ts-grid td.project-cell{text-align:left;padding:var(--space-3) var(--space-2) var(--space-3) var(--space-5);vertical-align:middle}.ts-project-name{font-weight:600;font-size:var(--text-sm)}.ts-task-name{font-size:var(--text-xs);color:var(--text-secondary)}.ts-cell{position:relative}.ts-cell input[type=number]{width:100%;height:var(--control-h-sm);padding:0 var(--space-1);border:1px solid var(--border);border-radius:var(--radius-sm);text-align:center;font-size:var(--text-sm);background:#fff;outline:none}.ts-cell input[type=number]:focus{border-color:var(--indigo);box-shadow:0 0 0 3px var(--glow-color)}.ts-cell input[type=number]:disabled{background:var(--bg-hover);color:var(--text-muted)}.ts-desc{font-size:var(--text-xs);color:var(--text-muted);margin-top:2px;max-width:85px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:center;cursor:pointer;margin-inline:auto}.ts-desc:hover,.ts-cell-multi:hover .ts-desc{color:var(--blue);text-decoration:underline}.ts-desc-hover{opacity:0;transition:opacity .15s}.ts-cell:hover .ts-desc-hover{opacity:1}.ts-total{font-weight:700;font-size:var(--text-md);padding:var(--space-3) var(--space-6) var(--space-3) var(--space-2)!important;text-align:right!important;vertical-align:middle!important}.ts-day-total{font-weight:600;font-size:var(--text-sm);color:var(--text-secondary)}.ts-add-row{display:flex;align-items:center;gap:var(--space-1);height:var(--control-h-sm);color:var(--blue-hover);font-size:var(--text-sm);background:none;border:none;cursor:pointer;padding:0 var(--space-2);font-weight:500}.ts-add-row:hover{text-decoration:underline}.ts-footer{display:flex;justify-content:space-between;align-items:center;padding:var(--space-4) var(--space-5);border-top:1px solid var(--border)}.ts-week-nav{display:flex;align-items:center;gap:var(--space-3)}.ts-week-nav button{height:var(--control-h-sm);background-color:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);padding:0 var(--control-px-sm);font-size:var(--text-sm);cursor:pointer;transition:background-color .3s}.ts-week-nav button:hover{background-color:#f0f1f5}.ts-week-label{font-weight:600;font-size:var(--text-sm)}.ts-locked-banner{background:var(--amber-bg);border:1px solid var(--warn-border);border-radius:var(--radius-md);padding:var(--space-3) var(--space-4);font-size:var(--text-sm);color:var(--warn-text);margin-bottom:var(--space-4);display:flex;align-items:center;gap:var(--space-2)}.ts-remove-row{color:var(--red);cursor:pointer;font-size:var(--text-xs);opacity:0;transition:opacity .15s;background:none;border:none;padding:var(--space-1) 0;min-height:var(--control-h-xs)}tr:hover .ts-remove-row,.ts-remove-row:focus{opacity:1}.entry-slot{display:flex;flex-direction:column;gap:var(--space-2);margin-bottom:var(--space-3);padding:var(--space-3);border-radius:var(--radius-md);background:var(--bg-subtle)}.entry-slot .form-group{margin-bottom:0}.ts-grid th.ts-day-off,.ts-grid td.ts-day-off{background:var(--bg);border-left:1px solid var(--border);border-right:1px solid var(--border)}.ts-grid th.ts-day-off{color:var(--text-secondary)}.ts-day-expected{font-size:var(--text-2xs);font-weight:500;color:var(--text-muted);letter-spacing:0;text-transform:none;min-height:1em;margin-top:3px;padding:1px 6px;border:1px solid transparent}.ts-day-pill{display:block;width:fit-content;margin-inline:auto;border-color:var(--border);border-radius:var(--radius-full);background:var(--card);color:var(--text-body);font-weight:600;text-transform:uppercase;letter-spacing:.06em}.ts-day-pill-hours{text-transform:none;letter-spacing:0}.res-level{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);cursor:pointer}.res-level:hover{background:var(--bg-subtle)}.res-level-static{cursor:default}.res-level-static:hover{background:transparent}.res-row{display:flex;align-items:center;gap:var(--space-3)}.res-chevron{width:16px;color:var(--text-muted);flex-shrink:0;font-size:var(--text-xs)}.res-name{flex:1}.res-actions{display:flex;gap:var(--space-1);flex-shrink:0}.res-progress{width:200px;flex-shrink:0}.res-level-0{font-weight:700;font-size:var(--text-lg)}.res-level-1{padding-left:var(--space-8);font-weight:600;font-size:var(--text-md)}.res-level-2{padding-left:var(--space-12);font-size:var(--text-sm)}.res-level-3{padding-left:4rem;font-size:var(--text-sm)}.res-level-4{padding-left:5rem;font-size:var(--text-sm);cursor:default}.res-level-5{padding-top:var(--space-2);padding-bottom:var(--space-2);padding-left:5rem;font-size:var(--text-sm);color:var(--text-secondary);border-bottom-color:#f1f3f5}.res-level-5 .res-hours{display:flex;justify-content:flex-end;font-size:var(--text-sm);color:var(--text-secondary);font-variant-numeric:tabular-nums}.res-name-uncategorized{font-style:italic;color:var(--text-muted)}.res-timeline{font-size:var(--text-xs);color:var(--text-muted);margin-left:.5rem}.rp-loading{text-align:center;padding:var(--space-12);color:var(--text-muted)}.rp-layout{display:grid;grid-template-rows:auto 1fr;gap:var(--space-3) 0}.rp-r1c1{grid-column:1;grid-row:1}.rp-r1c2{grid-column:2;grid-row:1}.rp-r1c3{grid-column:3;grid-row:1}.rp-r2c1{grid-column:1;grid-row:2}.rp-r2c2{grid-column:2;grid-row:2}.rp-r2c3{grid-column:3;grid-row:2}.rp-toolbar{display:flex;justify-content:space-between;align-items:center}.rp-toolbar-group{display:flex;align-items:center;gap:var(--space-3)}.rp-toolbar-actions{display:flex;gap:var(--space-2);align-items:center}.rp-sidebar-toolbar{display:flex;justify-content:flex-end;align-items:flex-end}.rp-card{overflow:auto}.rp-grid th{border-top:none}.rp-grid--overview{min-width:700px}.rp-grid--plan{min-width:500px}.rp-th-project{min-width:250px}.rp-th-month{width:90px}.rp-th-100{width:100px}.rp-th-120{width:120px}.rp-grid th.rp-th-employee{text-align:left;padding-left:var(--space-3);min-width:140px}.rp-grid th.rp-th-60{width:60px;font-size:var(--text-2xs)}.rp-th-30{width:30px}.rp-th-label{font-size:var(--text-xs)}.rp-th-prev,.rp-th-sub{font-size:var(--text-2xs);color:var(--text-muted)}.rp-th-sub-blue{font-size:var(--text-2xs);color:var(--blue)}.rp-grid td.rp-td-project{text-align:left;padding-left:var(--space-5)}.rp-grid td.rp-td-task{text-align:left;padding-left:calc(var(--space-5) + 26px)}.rp-grid td.rp-td-emp{text-align:left;padding-left:calc(var(--space-5) + 52px);font-size:var(--text-sm)}.rp-inline{display:inline-flex;align-items:center;gap:var(--space-1)}.rp-task-name,.rp-num{font-size:var(--text-sm)}.rp-num-sm{font-size:var(--text-xs)}.rp-total{font-weight:600;font-size:var(--text-sm)}.rp-muted{color:var(--text-muted)}.rp-blue{color:var(--blue)}.rp-project-row{background:var(--bg-subtle)}.rp-name-wrap{display:flex;align-items:center;gap:var(--space-1);width:100%}.rp-flex1{flex:1}.rp-spacer{width:18px;flex-shrink:0}.rp-project-dates{font-weight:400;font-size:var(--text-xs)}.rp-project-meta{font-size:var(--text-xs);color:var(--text-muted);margin-top:1px}.rp-expected{display:inline-flex;align-items:center;gap:var(--space-1);font-size:var(--text-xs);color:var(--text-muted);margin-top:2px}.rp-grid td.rp-cell{text-align:center;padding:var(--space-1)}.rp-cell-input{width:100%;height:var(--control-h-xs);max-width:70px;padding:var(--space-1);border:1px solid var(--border);border-radius:var(--radius-sm);text-align:center;font-size:var(--text-sm);background:#fff;outline:none}.rp-cell-input--sm{max-width:55px;padding:var(--space-1);font-size:var(--text-xs)}.rp-cell-input.is-edited{border-color:var(--blue);background:var(--blue-light)}.rp-expected-input{width:50px;height:var(--control-h-xs);padding:var(--space-1) var(--space-1);border:1px solid var(--border);border-radius:var(--radius-sm);text-align:center;font-size:var(--text-xs);outline:none;background:#fff}.rp-expected-input.is-staged{border-color:var(--blue);background:var(--blue-light)}.rp-add-link{font-size:var(--text-xs);color:var(--blue);background:none;border:none;cursor:pointer;padding:0}.rp-grid td.rp-empty{text-align:center;padding:var(--space-8);color:var(--text-muted)}.rp-resize-handle{cursor:col-resize;border-radius:var(--radius-sm);background:transparent;transition:background .15s}.rp-resize-handle:hover{background:var(--border)}.rp-sidebar{align-self:start;position:sticky;top:calc(var(--header-h) + .75rem)}.rp-sidebar-card{overflow:auto;max-height:calc(100vh - var(--header-h) - 1.5rem)}.rp-sidebar thead{position:sticky;top:0;z-index:1}.rp-grid td.rp-emp-name{text-align:left;padding-left:var(--space-3);font-size:var(--text-sm);font-weight:500;white-space:nowrap}.rp-grid td.rp-emp-task{text-align:left;padding-left:calc(var(--space-3) + 26px);font-size:var(--text-xs)}.rp-emp-project{font-size:var(--text-2xs)}.rp-target-btn{font-size:var(--text-xs);border-radius:var(--radius-full);width:var(--control-h-xs);height:var(--control-h-xs);cursor:pointer;padding:0;display:inline-flex;align-items:center;justify-content:center}.cal-layout{display:grid;grid-template-columns:1fr 340px;gap:var(--space-4);align-items:start}.cal-views{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-3)}.cal-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap;margin-bottom:var(--space-4)}.cal-toolbar-group{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap}.cal-chips{display:flex;gap:var(--space-2);flex-wrap:wrap}.cal-chips-label{align-self:center;font-size:var(--text-xs);color:var(--text-muted);white-space:nowrap}.cal-chip{background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-1) var(--space-3);font-size:var(--text-xs);color:var(--text-muted);white-space:nowrap}.cal-chip strong{color:var(--text-primary);font-size:var(--text-sm);margin-left:4px}.cal-chip--over{border-color:var(--warn-border)}.cal-chip--over strong{color:var(--red)}.cal-chip--forfeit{background-color:var(--warn-bg);border-color:var(--warn-border)}.cal-chip--forfeit strong{color:var(--warn-text)}.cal-chip-note{margin-left:6px;color:var(--warn-text)}.cal-month{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;-webkit-user-select:none;user-select:none}.cal-dow-row{display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--border);background:var(--bg-subtle)}.cal-dow{padding:var(--space-2);font-size:var(--text-xs);font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);text-align:center}.cal-week{position:relative;display:grid;grid-template-columns:repeat(7,1fr);border-bottom:1px solid var(--border);min-height:122px}.cal-week:last-child{border-bottom:none}.cal-cell{border-right:1px solid var(--border);padding:var(--space-1) var(--space-2);cursor:pointer;min-width:0}.cal-cell:last-child{border-right:none}.cal-cell-outside{background:#fafafa}.cal-cell-outside .cal-cell-date{color:var(--text-muted);opacity:.6}.cal-cell-selected{background:var(--blue-light)}.cal-cell-date{font-size:var(--text-sm);font-weight:500;display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:24px;border-radius:var(--radius-full)}.cal-cell-today .cal-cell-date{background:linear-gradient(135deg,var(--blue),var(--indigo));color:#fff;font-weight:600}.cal-holiday-chip{display:block;margin-top:2px;font-size:var(--text-2xs);font-weight:600;color:#047857;background:#ecfdf5;border:1px solid #a7f3d0;border-radius:var(--radius-sm);padding:1px 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:border-color .3s,background-color .3s}.cal-holiday-chip:hover{background-color:#d1fae5;border-color:#6ee7b7}.cal-more{position:absolute;bottom:2px;font-size:var(--text-2xs);color:var(--blue);font-weight:600;cursor:pointer;padding:0 4px}.cal-bar{position:absolute;height:20px;border-radius:var(--radius-sm);font-size:var(--text-2xs);font-weight:600;line-height:18px;padding:0 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border:1px solid transparent;z-index:1;cursor:pointer}.cal-bar-pending:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:inherit;background:repeating-linear-gradient(45deg,var(--amber-bg),var(--amber-bg) 6px,var(--warn-border) 6px,var(--warn-border) 12px);opacity:0;transition:opacity .3s;will-change:opacity}.cal-bar-pending:hover:before,.cal-bar-pending.cal-bar-hovered:before{opacity:1}.cal-bar-other{background:var(--blue-light);color:#3730a3;border-color:#c7d2fe;transition:background-color .3s}.cal-bar-other:hover,.cal-bar-other.cal-bar-hovered{background:#e0e7ff}.cal-bar-holiday{background:#ecfdf5;color:#047857;border-color:#a7f3d0;transition:background-color .3s}.cal-bar-holiday:hover,.cal-bar-holiday.cal-bar-hovered{background-color:#d1fae5;border-color:#6ee7b7}.cal-bar-own{background:linear-gradient(135deg,var(--blue),var(--indigo),var(--blue-hover),var(--indigo-hover));background-size:200% 200%;background-position:0% 0%;color:#fff;transition:background-position .3s}.cal-bar-own:hover,.cal-bar-own.cal-bar-hovered{background-position:100% 100%}.cal-bar-pending{background:repeating-linear-gradient(45deg,var(--warn-bg),var(--warn-bg) 6px,var(--amber-bg) 6px,var(--amber-bg) 12px);color:var(--warn-text);border:1px dashed var(--amber)}.cal-bar-continues-left{border-top-left-radius:0;border-bottom-left-radius:0}.cal-bar-continues-right{border-top-right-radius:0;border-bottom-right-radius:0}.cal-timegrid{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;-webkit-user-select:none;user-select:none}.cal-timegrid-header{display:grid;border-bottom:1px solid var(--border);background:var(--bg-subtle)}.cal-timegrid-header .cal-dow{border-right:1px solid var(--border)}.cal-allday{display:grid;border-bottom:1px solid var(--border);min-height:34px}.cal-allday-cell{border-right:1px solid var(--border);min-width:0}.cal-allday-chips{padding:2px 2px 0;min-width:0}.cal-allday-label{align-self:center;padding:var(--space-2) var(--space-1);font-size:var(--text-2xs);letter-spacing:0;white-space:nowrap}.cal-allday .cal-bar{position:relative;display:block;margin:1px 3px;min-width:0}.cal-agenda .cal-bar{position:relative;display:inline-block;align-self:flex-start}.cal-hours-scroll{max-height:640px;overflow-y:auto}.cal-hours{display:grid;position:relative}.cal-gutter{border-right:1px solid var(--border)}.cal-gutter-hour{height:48px;font-size:var(--text-2xs);color:var(--text-muted);text-align:right;padding-right:var(--space-2);transform:translateY(-6px)}.cal-day-col{position:relative;border-right:1px solid var(--border)}.cal-day-col:last-child{border-right:none}.cal-hour-cell{height:48px;border-bottom:1px solid var(--bg-hover);cursor:pointer}.cal-hour-cell:hover{background:#f8fafc}.cal-timed-block{position:absolute;left:4px;right:4px;border-radius:var(--radius-sm);font-size:var(--text-2xs);font-weight:600;padding:2px 6px;overflow:hidden;z-index:1;border:1px solid transparent;cursor:pointer}.cal-drag-preview{position:absolute;left:4px;right:4px;background:#6366f12e;border:1px dashed var(--indigo);border-radius:var(--radius-sm);z-index:2;pointer-events:none}.cal-agenda{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.cal-agenda-day{display:grid;grid-template-columns:140px 1fr;border-bottom:1px solid var(--border)}.cal-agenda-day:last-child{border-bottom:none}.cal-agenda-date{padding:var(--space-3) var(--space-4);font-size:var(--text-sm);font-weight:600;color:var(--text-muted);background:var(--bg-subtle);border-right:1px solid var(--border)}.cal-agenda-items{padding:var(--space-2) var(--space-4);display:flex;flex-direction:column;gap:var(--space-1)}.cal-agenda-empty{padding:var(--space-8);text-align:center;color:var(--text-muted)}.cal-panel{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden}.cal-panel-header{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);font-weight:600;font-size:var(--text-md)}.cal-panel-list{max-height:720px;overflow-y:auto}.cal-request-item{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);font-size:var(--text-sm)}.cal-request-item:last-child{border-bottom:none}.cal-panel-group{padding:var(--space-2) var(--space-4);background:var(--bg-subtle);border-bottom:1px solid var(--border);font-size:var(--text-xs);font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.cal-request-meta{color:var(--text-muted);font-size:var(--text-xs);margin-top:2px}.cal-request-actions{display:flex;gap:var(--space-2);margin-top:var(--space-2)}.form-group .cal-partial-toggle{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-2);margin-bottom:0;font-size:var(--text-sm);font-weight:400;color:var(--text-secondary);cursor:pointer}.cal-partial-toggle input[type=checkbox]{flex:none}.cal-partial-fields{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);margin-top:var(--space-2);padding-left:var(--space-5);border-left:2px solid var(--border)}.cal-partial-fields-single{grid-template-columns:minmax(0,.8fr) minmax(0,1fr) minmax(0,1fr)}.cal-partial-fields .form-group{margin-bottom:0}.cal-warning-panel{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-text);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-size:var(--text-sm);margin-top:var(--space-2)}.cal-error-panel{background:var(--error-bg);border:1px solid var(--error-border);color:var(--error-text);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-size:var(--text-sm);margin:var(--space-2) 0 var(--space-3)}.cal-error-panel-lead{display:block;font-weight:600;margin-bottom:var(--space-1)}.cal-error-panel[data-stale=true]{opacity:.65}.stack>.cal-warning-panel{margin-top:0}.cal-warning-list{margin:var(--space-2) 0 0;padding-left:var(--space-5)}.cal-warning-panel--leading{margin-bottom:var(--space-4)}.pto-balances{font-variant-numeric:tabular-nums}.pto-over{color:var(--red)}.pto-forfeit{color:var(--warn-text);font-weight:600}.grant-bar{display:flex;max-width:260px}.cal-request-item .grant-bar{margin-top:var(--space-2)}.grant-bar-used{height:100%;background:linear-gradient(90deg,var(--blue),var(--indigo))}.grant-bar-pending{height:100%;background:repeating-linear-gradient(45deg,var(--amber-bg),var(--amber-bg) 4px,var(--amber) 4px,var(--amber) 8px)}.grant-bar--forfeit{background:var(--amber-bg);box-shadow:inset 0 0 0 1px var(--warn-border)}.cal-preview-panel{background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--radius-md);padding:var(--space-2) var(--space-3);font-size:var(--text-sm);margin-top:var(--space-2)}@media(max-width:1100px){.cal-layout{grid-template-columns:1fr}}.cal-grant-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:var(--space-2)}.cal-bar-scheduled-off{background:var(--bg-subtle);color:var(--text-muted);border-color:var(--border);transition:background-color .3s}.cal-bar-scheduled-off:hover{background-color:var(--bg-hover)}.cal-scheduled-off-chip{display:block;margin-top:2px;font-size:var(--text-2xs);font-weight:500;color:var(--text-muted);background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--radius-sm);padding:1px 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:background-color .3s}.cal-scheduled-off-chip:hover{background-color:var(--bg-hover)}.cal-bar-scheduled-off--own,.cal-scheduled-off-chip--own{background:linear-gradient(135deg,var(--blue),var(--indigo),var(--blue-hover),var(--indigo-hover));background-size:200% 200%;background-position:0% 0%;color:#fff;border-color:transparent;transition:background-position .3s}.cal-bar-scheduled-off--own:hover,.cal-scheduled-off-chip--own:hover{background-position:100% 100%}.cal-scheduled-off-chip--pending{position:relative;z-index:1;background:repeating-linear-gradient(45deg,var(--warn-bg),var(--warn-bg) 6px,var(--amber-bg) 6px,var(--amber-bg) 12px);color:var(--warn-text);border:1px dashed var(--amber)}.cal-scheduled-off-chip--pending:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;border-radius:inherit;background:repeating-linear-gradient(45deg,var(--amber-bg),var(--amber-bg) 6px,var(--warn-border) 6px,var(--warn-border) 12px);opacity:0;transition:opacity .3s;will-change:opacity}.cal-scheduled-off-chip--pending:hover:before{opacity:1}.swap-picker{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin:var(--space-3) 0 var(--space-2)}.swap-picker-head{padding:var(--space-1) 0;text-align:center;font-size:var(--text-xs);font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.swap-picker-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;height:48px;padding:var(--space-1);border:1px solid transparent;border-radius:var(--radius-md);background:var(--bg-subtle);color:var(--text-secondary);font-size:var(--text-sm);font-family:inherit}.swap-picker-cell--open{background:#fff;border-color:var(--border);color:var(--text-primary);cursor:pointer}.swap-picker-cell--open:hover{border-color:var(--blue)}.swap-picker-cell--selected{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:600}.swap-picker-cell--off,.swap-picker-cell--booked{background:var(--bg);border-color:var(--border);font-weight:600}.swap-picker-off{font-size:var(--text-2xs);font-weight:600;line-height:1.2;color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em}.swap-picker-cell--blocked{opacity:.55}.swap-picker-cell--muted{opacity:.35}.swap-picker-legend{color:var(--text-muted);font-size:var(--text-xs);margin-bottom:var(--space-3)}.swap-preview{margin-bottom:var(--space-4)}.clock-page{max-width:400px;min-height:100vh;margin:0 auto;padding:var(--space-4);background:var(--bg);font-family:var(--font-sans)}.clock-title{font-size:var(--text-lg);font-weight:700}.clock-title span{font-size:var(--text-2xs);font-weight:400;opacity:.5}.clock-beta{margin-bottom:var(--space-4);padding:var(--space-2) var(--space-3);border:1px solid #dbe4ff;border-radius:var(--radius-md);background:#f0f4ff;color:#3b5998;font-size:var(--text-xs)}.clock-card{display:flex;flex-direction:column;padding:var(--space-4);border:1px solid var(--border);border-radius:10px;background:#fff}.clock-card--running{border-color:var(--red)}.clock-elapsed{font-size:var(--text-2xl);font-weight:700;font-variant-numeric:tabular-nums}.clock-elapsed--running{color:var(--red)}.clock-saving{margin-left:var(--space-1);font-size:var(--text-2xs)}.clock-action{flex:1;justify-content:center}.clock-action--stop{color:var(--red);font-size:var(--text-xs);line-height:1.3}.clock-note{width:100%;padding:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-md);outline:none;font-family:inherit;font-size:var(--text-xs);resize:vertical}.clock-entry{padding:var(--space-2) 0}.clock-entry+.clock-entry{border-top:1px solid var(--border)}.clock-entry-main{flex:1;min-width:0}.clock-entry-client,.clock-entry-desc{font-size:var(--text-2xs);color:var(--text-muted)}.clock-entry-desc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.clock-entry-task{font-size:var(--text-sm);font-weight:500}.clock-entry-category{font-size:var(--text-2xs);color:var(--blue)}.clock-entry-aside{margin-left:var(--space-2);flex:none}.clock-entry-hours{font-size:var(--text-sm);font-weight:600;font-variant-numeric:tabular-nums}.clock-entry-start{padding:var(--space-1) .4rem;border:1px solid var(--border);border-radius:var(--radius-sm);background:none;color:var(--blue);font-size:var(--text-2xs);cursor:pointer}.inv-cell{text-align:center;vertical-align:middle;padding:var(--space-2)}.inv-cell-body{display:grid;grid-template-rows:22px 20px 16px;row-gap:2px;place-items:center}.inv-cell-body>.badge{grid-row:1}.inv-cell-body>.badge:only-child{grid-row:1 / -1}.inv-cell-figure,.inv-cell-empty{grid-row:2}.inv-cell-body>button{grid-row:3;min-height:0;white-space:nowrap}.inv-cell-figure{font-weight:600;font-size:var(--text-sm)}.inv-cell-figure--muted{color:var(--text-secondary)}.inv-cell-empty{font-size:var(--text-sm);color:var(--text-secondary)}.inv-cell-drift{margin-left:var(--space-1);color:var(--amber);cursor:help}.inv-review-lines{margin-top:var(--space-3);max-height:50vh;overflow-y:auto;border:1px solid var(--border);border-radius:var(--radius-md)}.inv-review-lines thead th{position:sticky;top:0;z-index:1}.inv-review-lines tfoot td{position:sticky;bottom:0;background:var(--card)}.inv-review-unapproved{margin-top:var(--space-2);font-size:var(--text-sm)}
