*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Lato,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:var(--type-body-size);line-height:var(--type-body-line);color:var(--color-text);background:var(--color-background);-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:Circular Std,Lato,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;margin:0}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;color:var(--color-text)}.t-display{font-size:var(--type-display-size);font-weight:var(--type-display-weight);line-height:var(--type-display-line)}.t-title{font-size:var(--type-title-size);font-weight:var(--type-title-weight);line-height:var(--type-title-line)}.t-heading{font-size:var(--type-heading-size);font-weight:var(--type-heading-weight);line-height:var(--type-heading-line)}.t-body{font-size:var(--type-body-size);font-weight:var(--type-body-weight);line-height:var(--type-body-line)}.t-caption{font-size:var(--type-caption-size);font-weight:var(--type-caption-weight);line-height:var(--type-caption-line);color:var(--color-text-secondary)}.t-label{font-size:var(--type-label-size);font-weight:var(--type-label-weight);line-height:var(--type-label-line);letter-spacing:.08em;text-transform:uppercase}.btn{display:inline-flex;align-items:center;gap:var(--space-sm);border:none;border-radius:var(--radius-pill);padding:9px 18px;font-weight:600;font-size:var(--type-body-size);transition:background .12s ease}.btn-primary{background:var(--color-primary);color:var(--color-on-primary)}.btn-primary:hover{background:var(--color-primary-pressed)}.btn-secondary{background:var(--color-surface-alt);color:var(--color-text)}.btn-secondary:hover{background:var(--color-border)}.btn-danger{background:var(--color-danger);color:var(--color-on-primary)}.btn:disabled{opacity:.55;cursor:not-allowed}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg)}.tag-chip{display:inline-block;border-radius:var(--radius-pill);padding:2px 10px;font-size:var(--type-caption-size);font-weight:600;line-height:var(--type-caption-line);white-space:nowrap}.filter-chip{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary);border-radius:var(--radius-pill);padding:5px 14px;font-weight:600;font-size:var(--type-caption-size)}.filter-chip.active{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-on-primary)}.input,.select,.textarea{width:100%;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:9px 12px;outline:none}.input:focus,.select:focus,.textarea:focus{border-color:var(--color-primary)}.input::placeholder,.textarea::placeholder{color:var(--color-text-muted)}.data-table{width:100%;border-collapse:collapse}.data-table th{text-align:left;padding:10px 14px;font-size:var(--type-label-size);font-weight:var(--type-label-weight);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-secondary);border-bottom:1px solid var(--color-border);-webkit-user-select:none;user-select:none;white-space:nowrap}.data-table th.sortable{cursor:pointer}.data-table th.sortable:hover{color:var(--color-text)}.data-table td{padding:11px 14px;border-bottom:1px solid var(--color-border)}.data-table tbody tr.clickable{cursor:pointer}.data-table tbody tr.clickable:hover{background:var(--color-selected-bg)}.sidebar{background:var(--color-chrome);color:var(--color-on-chrome);width:232px;min-width:232px;display:flex;flex-direction:column;overflow-y:auto}.sidebar-group-label{color:var(--color-on-chrome-muted);padding:var(--space-lg) var(--space-lg) var(--space-xs)}.sidebar-link{display:flex;align-items:center;gap:10px;color:var(--color-on-chrome-muted);padding:8px var(--space-lg);font-weight:600;border-left:3px solid transparent}.sidebar-link:hover{color:var(--color-on-chrome);text-decoration:none}.sidebar-link.active{color:var(--color-on-chrome);background:#ffffff1a;border-left-color:var(--color-accent)}.segment-row{display:flex;gap:3px;background:var(--color-surface-alt);border-radius:var(--radius-md);padding:3px}.segment{flex:1;border:none;border-radius:calc(var(--radius-md) - 2px);padding:7px 10px;background:transparent;color:var(--color-text-secondary);font-weight:500;font-size:var(--type-caption-size);white-space:nowrap}.segment.active{background:var(--color-surface);color:var(--color-text);font-weight:600;box-shadow:0 1px 2px #00000014}.switch{width:40px;height:24px;border-radius:12px;border:none;background:var(--color-border);position:relative;transition:background .12s ease;flex-shrink:0;padding:0}.switch.on{background:var(--color-accent)}.switch-knob{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:left .12s ease;box-shadow:0 1px 2px #0003}.switch.on .switch-knob{left:19px}.tab-bar{display:flex;gap:2px;border-bottom:1px solid var(--color-border);margin-bottom:var(--space-xl);overflow-x:auto}.tab-link{padding:9px 16px;font-weight:600;font-size:var(--type-body-size);color:var(--color-text-secondary);border-bottom:2px solid transparent;white-space:nowrap}.tab-link:hover{color:var(--color-text);text-decoration:none}.tab-link.active{color:var(--color-primary);border-bottom-color:var(--color-accent)}.sched-week{display:grid}.sched-month{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.sched-head{padding:8px 10px;font-size:var(--type-label-size);font-weight:var(--type-label-weight);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-secondary);border-bottom:1px solid var(--color-border);white-space:nowrap;overflow:hidden}.sched-head.today{color:var(--color-primary)}.sched-row-label{padding:10px;font-weight:600;font-size:var(--type-caption-size);color:var(--color-text-secondary);border-bottom:1px solid var(--color-border);border-right:1px solid var(--color-border);overflow:hidden;text-overflow:ellipsis}.sched-cell{min-height:74px;padding:4px;border-bottom:1px solid var(--color-border);border-right:1px solid var(--color-border);display:flex;flex-direction:column;gap:3px;align-items:stretch}.sched-cell:nth-child(8n){border-right:none}.sched-cell.today{background:var(--color-selected-bg)}.sched-cell.month{min-height:96px}.sched-cell.dim{background:var(--color-surface-alt);opacity:.65}.sched-cell.drag-over{outline:2px dashed var(--color-accent);outline-offset:-2px}.sched-daynum{align-self:flex-start;background:none;border:none;padding:2px 4px;font-size:var(--type-caption-size);font-weight:600;color:var(--color-text-secondary)}.sched-daynum:hover{color:var(--color-primary)}.sched-more{background:none;border:none;text-align:left;padding:0 4px}.sched-more:hover{color:var(--color-primary)}.cal-chip{display:block;width:100%;text-align:left;border:none;border-left:3px solid var(--color-primary);border-radius:var(--radius-sm, 6px);background:var(--color-surface-alt);padding:3px 7px;font-size:var(--type-caption-size);line-height:1.3;color:var(--color-text);overflow:hidden}.cal-chip:hover{background:var(--color-border)}.cal-chip.complete{border-left-color:var(--color-success);background:#e3f2ea;color:#2e8b57;cursor:pointer}.cal-chip.complete .cal-chip-svc{color:#2e8b57;opacity:.8}.cal-chip.complete:hover{background:#d2e9dd}[data-theme=dark] .cal-chip.complete{background:#1e3428;color:#4caf7a}[data-theme=dark] .cal-chip.complete .cal-chip-svc{color:#4caf7a}[data-theme=dark] .cal-chip.complete:hover{background:#264534}.cal-chip.unscheduled{border-left-color:var(--color-accent)}.cal-chip[draggable=true]{cursor:grab}.cal-chip-unit{font-weight:700;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cal-chip-svc{display:block;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tray{width:272px;min-width:272px;padding:var(--space-lg)}.tray.drag-over{outline:2px dashed var(--color-accent);outline-offset:-2px}.spinner{display:inline-block;width:18px;height:18px;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
