:root{--bg: #f8fafc;--surface: #ffffff;--surface-hover: #f1f5f9;--border: #e2e8f0;--border-focus: #3b82f6;--text: #1e293b;--text-secondary: #64748b;--text-muted: #94a3b8;--primary: #2563eb;--primary-hover: #1d4ed8;--primary-light: #eff6ff;--danger: #dc2626;--danger-hover: #b91c1c;--danger-light: #fef2f2;--success: #16a34a;--success-light: #f0fdf4;--warning: #d97706;--warning-light: #fffbeb;--radius-sm: 6px;--radius: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .04);--shadow: 0 1px 3px rgba(0, 0, 0, .08), 0 1px 2px rgba(0, 0, 0, .04);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .08), 0 2px 4px -2px rgba(0, 0, 0, .04);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .08), 0 4px 6px -4px rgba(0, 0, 0, .04);--transition: .15s cubic-bezier(.4, 0, .2, 1)}*,*:before,*:after{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Inter,Segoe UI,system-ui,sans-serif;color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5;font-size:14px}button{border:none;border-radius:var(--radius);background:var(--primary);color:#fff;padding:.5rem .875rem;cursor:pointer;font-size:.8125rem;font-weight:600;transition:all var(--transition);box-shadow:none;line-height:1.4;font-family:inherit;white-space:nowrap}button:hover:not(:disabled){background:var(--primary-hover);box-shadow:var(--shadow-sm)}button:active:not(:disabled){transform:scale(.98)}button:disabled{opacity:.5;cursor:not-allowed}button.danger{background:var(--danger)}button.danger:hover:not(:disabled){background:var(--danger-hover)}button.secondary{background:transparent;color:var(--text-secondary);border:1px solid var(--border)}button.secondary:hover:not(:disabled){background:var(--surface-hover);color:var(--text);border-color:var(--text-muted)}button.sm{padding:.35rem .625rem;font-size:.75rem}.btn-row{display:flex;gap:.375rem;flex-wrap:wrap;align-items:center}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.25rem;display:flex;flex-direction:column;gap:.875rem;box-shadow:var(--shadow-sm);min-width:0}.card h2,.card h3{margin:0;font-size:1rem;font-weight:700;letter-spacing:-.01em}.card h3{font-size:.875rem}.split{display:grid;grid-template-columns:360px 1fr;gap:1.25rem;align-items:start}.split>*{min-width:0}label{display:flex;flex-direction:column;gap:.25rem;font-size:.8125rem;font-weight:500;color:var(--text-secondary)}label.checkbox-label{flex-direction:row;align-items:center;gap:.5rem;font-size:.8125rem;color:var(--text);font-weight:400}label.checkbox-label input[type=checkbox]{width:1rem;height:1rem;accent-color:var(--primary)}input,textarea,select{border:1px solid var(--border);border-radius:var(--radius);padding:.5rem .625rem;font:inherit;font-size:.875rem;background:var(--surface);color:var(--text);transition:border-color var(--transition),box-shadow var(--transition);width:100%}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--border-focus);box-shadow:0 0 0 2px #3b82f614}input::placeholder,textarea::placeholder,select::placeholder{color:var(--text-muted)}textarea{resize:vertical;min-height:72px}select{cursor:pointer}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.row,.customer-row{display:flex;justify-content:space-between;gap:.75rem;align-items:center;padding:.625rem 0;border-bottom:1px solid var(--border)}.row:last-of-type,.customer-row:last-of-type{border-bottom:none;padding-bottom:0}.row:first-of-type,.customer-row:first-of-type{padding-top:0}.row>div,.customer-row>div{min-width:0}.invoice-row{align-items:flex-start}.paid-row{opacity:.55}.invoiced{opacity:.5}.muted{color:var(--text-muted);font-size:.8125rem;overflow-wrap:anywhere}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:.125rem .5rem;font-size:.6875rem;font-weight:600;margin-left:.375rem;letter-spacing:.01em}.badge.paid{background:var(--success-light);color:var(--success)}.badge.open{background:var(--warning-light);color:var(--warning)}.error{background:var(--danger-light);color:var(--danger);border:1px solid #fecaca;border-radius:var(--radius);padding:.625rem .875rem;font-size:.8125rem;font-weight:500}.success{background:var(--success-light);color:var(--success);border:1px solid #bbf7d0;border-radius:var(--radius);padding:.625rem .875rem;font-size:.8125rem;font-weight:500}.summary-bar{margin-bottom:0}.summary-bar h3{margin:0 0 .375rem;font-size:.75rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.tags{display:flex;gap:.375rem;flex-wrap:wrap}.tag{background:var(--primary-light);color:var(--primary);border-radius:999px;padding:.2rem .625rem;font-size:.75rem;font-weight:600}.summary-tiles{display:flex;gap:1.5rem;flex-wrap:wrap}.tile{display:flex;flex-direction:column;gap:.1rem}.tile-label{font-size:.6875rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.tile-value{font-size:1.375rem;font-weight:800;letter-spacing:-.02em}.tile-value.warn{color:var(--warning)}.tile-value.ok{color:var(--success)}.table-scroll{width:100%;overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius)}.time-list{width:100%;border-collapse:collapse;font-size:.8125rem;min-width:640px}.time-list th,.time-list td{padding:.5rem .625rem;vertical-align:middle;text-align:left;overflow-wrap:anywhere}.time-list th{color:var(--text-muted);font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;background:var(--bg);border-bottom:1px solid var(--border);position:sticky;top:0}.time-list td{border-bottom:1px solid var(--border)}.time-list tbody tr{transition:background var(--transition)}.time-list tbody tr:hover{background:var(--surface-hover)}.time-list tbody tr:last-child td{border-bottom:none}.time-list input[type=checkbox]{width:.875rem;height:.875rem;accent-color:var(--primary)}.table-tools{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.625rem}.db-list{max-height:400px;overflow:auto}.db-row-editor textarea{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.8125rem}.card-header{display:flex;justify-content:space-between;align-items:center;gap:.75rem}.card-header h2{margin:0}.admin-user-grid{display:grid;grid-template-columns:280px 1fr;gap:1.25rem}.admin-user-form{display:flex;flex-direction:column;gap:.625rem}.admin-user-form h3{margin:0;font-size:.8125rem;font-weight:600;color:var(--text-secondary)}.admin-user-list{display:flex;flex-direction:column;gap:.375rem}.admin-user-list h3{margin:0;font-size:.8125rem;font-weight:600;color:var(--text-secondary)}.admin-user-item{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.5rem .625rem;background:var(--bg);border-radius:var(--radius);border:1px solid var(--border)}.admin-user-info{display:flex;align-items:center;gap:.375rem}.admin-user-icon{font-size:1rem}.admin-user-name{font-weight:600;font-size:.8125rem}.badge-current{font-size:.6875rem;font-weight:600;background:var(--primary-light);color:var(--primary);padding:.1rem .375rem;border-radius:999px}.db-toolbar{display:flex;gap:.625rem;align-items:end;flex-wrap:wrap}.db-toolbar label{flex:1;min-width:140px}.db-toolbar-action{display:flex;align-items:end}@media(max-width:900px){.split,.admin-user-grid{grid-template-columns:1fr}.time-list{min-width:560px}}@media(max-width:480px){.card{padding:1rem;border-radius:var(--radius)}.form-row{grid-template-columns:1fr}}.time-entry-form{display:flex;flex-direction:column;gap:.75rem;max-width:560px}.inline-filter{margin:0;min-width:160px}.inline-filter select{width:100%}.invoice-create-form{display:flex;flex-direction:column;gap:.75rem;max-width:480px}.invoice-item{display:flex;justify-content:space-between;align-items:center;gap:.75rem;padding:.625rem 0;border-bottom:1px solid var(--border)}.invoice-item:last-of-type{border-bottom:none;padding-bottom:0}.invoice-item:first-of-type{padding-top:0}.invoice-item-info{min-width:0;display:flex;flex-direction:column;gap:.2rem}.invoice-item-header{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;font-size:.875rem}.invoice-item-details{font-size:.8125rem}.invoice-item-details strong{color:var(--text)}
