:root{--bg:oklch(97.5% .004 85);--surface:oklch(99% .003 85);--surface-2:oklch(95.5% .006 85);--text:oklch(24% .01 60);--text-2:oklch(45% .012 60);--text-3:oklch(60% .01 60);--accent:oklch(52% .13 40);--accent-hover:oklch(46% .13 40);--accent-ring:oklch(52% .13 40/.4);--border:oklch(90% .006 85);--border-strong:oklch(82% .008 85);--short:oklch(55% .16 25);--short-bg:oklch(94% .05 25);--over:oklch(58% .11 240);--over-bg:oklch(93% .04 240);--match:oklch(62% .12 150);--match-bg:oklch(93% .045 150);--night:oklch(50% .09 275);--edited:oklch(72% .11 85);--edited-bg:oklch(95% .05 90);--r-panel:8px;--r-control:6px;--shadow:0 1px 2px oklch(0% 0 0/.04);--font:Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--mono:"SF Mono", ui-monospace, "JetBrains Mono", Menlo, Consolas, monospace;--t:.16s cubic-bezier(.2, 0, 0, 1)}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;margin:0;font-size:13px;line-height:1.5}h1,h2,h3{letter-spacing:-.01em;margin:0;font-weight:600}h1{font-size:19px}h2{font-size:15.5px}h3{font-size:13px}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hover);text-decoration:underline}:focus-visible{outline:2px solid var(--accent-ring);outline-offset:1px;border-radius:3px}.num{font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.muted{color:var(--text-3)}.secondary{color:var(--text-2)}.small{font-size:11.5px}.shell{min-height:100%;display:flex}.sidebar{background:var(--surface-2);border-right:1px solid var(--border);flex-direction:column;flex:0 0 208px;gap:20px;width:208px;padding:16px 12px;display:flex}.brand{letter-spacing:-.01em;font-size:15.5px;font-weight:600}.brand small{color:var(--text-3);letter-spacing:0;font-size:11.5px;font-weight:400;display:block}.sidebar nav{flex-direction:column;gap:2px;display:flex}.sidebar nav a{border-radius:var(--r-control);color:var(--text-2);transition:background var(--t), color var(--t);padding:6px 8px}.sidebar nav a:hover{color:var(--text);background:oklch(93% .008 85);text-decoration:none}.sidebar nav a.active{background:var(--accent);color:oklch(99% .01 85)}.sidebar .foot{color:var(--text-3);flex-direction:column;gap:8px;margin-top:auto;font-size:11.5px;display:flex}.main{flex:1;min-width:0;padding:20px 24px 64px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:16px;display:flex}.page-head .sub{color:var(--text-2);margin-top:2px}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-panel);box-shadow:var(--shadow);overflow:hidden}.panel+.panel{margin-top:16px}.panel-head{border-bottom:1px solid var(--border);background:var(--surface-2);flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 12px;padding:10px 12px;display:flex}button,.btn{font:inherit;border-radius:var(--r-control);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);cursor:pointer;transition:background var(--t), border-color var(--t), color var(--t);padding:5px 10px;font-size:12px}button:hover:not(:disabled){background:var(--surface-2)}button:active:not(:disabled){transform:translateY(1px)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:oklch(99% .01 85)}button.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}button.danger{color:var(--short);border-color:var(--border-strong)}button.danger:hover:not(:disabled){background:var(--short-bg);border-color:var(--short)}button.quiet{color:var(--text-2);background:0 0;border-color:#0000}button.quiet:hover:not(:disabled){background:var(--surface-2);color:var(--text)}input,select,textarea{font:inherit;border:1px solid var(--border-strong);border-radius:var(--r-control);background:var(--surface);color:var(--text);padding:5px 8px;font-size:12px}input::placeholder{color:var(--text-3)}label{color:var(--text-2);margin-bottom:4px;font-size:11.5px;display:block}.field{flex-direction:column;display:flex}.field-row{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.table-wrap{max-height:calc(100vh - 260px);overflow:auto}table{border-collapse:separate;border-spacing:0;width:100%;font-size:12px}table.wide{table-layout:fixed;width:max-content;min-width:100%}table.wide th,table.wide td{white-space:nowrap;overflow:hidden}th{z-index:2;background:var(--surface-2);text-align:left;color:var(--text-2);border-bottom:1px solid var(--border-strong);white-space:nowrap;padding:7px 8px;font-weight:600;position:sticky;top:0}th.num{text-align:right}td{border-bottom:1px solid var(--border);vertical-align:middle;padding:4px 8px}tbody tr:hover td{background:oklch(96.5% .006 85)}tfoot td{background:var(--surface-2);border-top:1px solid var(--border-strong);border-bottom:none;padding:7px 8px;font-weight:600;position:sticky;bottom:0}.sticky-col{z-index:1;background:var(--surface);position:sticky;left:0}tbody tr:hover .sticky-col{background:oklch(96.5% .006 85)}th.sticky-col{z-index:3;background:var(--surface-2)}tfoot .sticky-col{background:var(--surface-2);z-index:3}.group-row td{background:var(--surface-2);color:var(--text-2);font-size:11.5px;font-weight:600}.cell-input{width:100%;transition:border-color var(--t), background var(--t);background:0 0;border:1px solid #0000;border-radius:4px;padding:3px 5px}.cell-input:hover{border-color:var(--border);background:var(--surface)}.cell-input:focus{border-color:var(--accent);background:var(--surface);outline:none}.cell-input.num{text-align:right}.cell-input.saving{border-color:var(--edited)}.cell-derived{color:var(--text-2);padding:3px 5px}.mismatch{position:relative}.mismatch:before{content:"";background:var(--edited);border-radius:50%;width:5px;height:5px;position:absolute;top:50%;left:1px;transform:translateY(-50%)}.delta{font-family:var(--mono);font-variant-numeric:tabular-nums}.delta.short{color:var(--short)}.delta.over{color:var(--over)}.delta.match{color:var(--match)}td.cell-short{background:var(--short-bg)}td.cell-over{background:var(--over-bg)}td.cell-match{background:var(--match-bg)}tbody tr:hover td.cell-short{background:oklch(92% .055 25)}tbody tr:hover td.cell-over{background:oklch(91% .045 240)}tbody tr:hover td.cell-match{background:oklch(91% .05 150)}tr.row-nodata td{color:var(--text-3);font-style:italic}tr.row-partial td{color:var(--text-2)}.day-toggle{font:inherit;color:var(--text);cursor:pointer;background:0 0;border:none;align-items:center;gap:5px;padding:2px 4px 2px 0;display:inline-flex}.day-toggle:hover:not(:disabled){color:var(--accent);background:0 0}.day-toggle:active:not(:disabled){transform:none}.chev{opacity:.55;width:0;height:0;transition:transform var(--t), opacity var(--t);border-top:3.5px solid #0000;border-bottom:3.5px solid #0000;border-left:4px solid}.chev.open{opacity:1;transform:rotate(90deg)}.day-toggle:hover .chev{opacity:1}tr.row-open td,tr.row-open .sticky-col{background:var(--surface-2)}tr.row-detail td{background:var(--surface-2);padding:0}tr.row-detail:hover td{background:var(--surface-2)}.day-detail{border-bottom:1px solid var(--border);padding:12px 12px 14px}.day-cols{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));align-items:start;gap:16px;display:grid}.day-cols h4{border-bottom:1px solid var(--border);justify-content:space-between;align-items:baseline;gap:8px;margin:0 0 6px;padding-bottom:4px;font-size:12px;font-weight:600;display:flex}.day-cols p{margin:0}.shift-list{margin:0;padding:0;list-style:none}.shift-list li{grid-template-columns:1fr auto auto;align-items:baseline;gap:8px;padding:2px 0;font-size:12px;display:grid}.shift-list li+li{border-top:1px solid oklch(93% .006 85)}.shift-list .who{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.shift-list .who .badge{margin-left:6px;font-size:10px}.shift-list .when{color:var(--text-2)}.shift-list .hrs{color:var(--text-3);min-width:44px}.shift-list .hrs.night-mark{color:var(--night)}.metrics{border-top:1px solid var(--border);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:0;display:grid}.metric{border-right:1px solid var(--border);padding:10px 12px}.metric:last-child{border-right:none}.metric .k{color:var(--text-2);font-size:11.5px}.metric .v{font-family:var(--mono);font-variant-numeric:tabular-nums;margin-top:2px;font-size:19px}.metric .v.short{color:var(--short)}.metric .v.over{color:var(--over)}.metric .v.match{color:var(--match)}.metric .n{color:var(--text-3);margin-top:1px;font-size:11.5px}.badge{border:1px solid var(--border-strong);color:var(--text-2);white-space:nowrap;border-radius:999px;padding:1px 6px;font-size:11px;display:inline-block}.badge.night{border-color:var(--night);color:var(--night)}.badge.day{border-color:var(--border-strong);color:var(--text-2)}.note{border-bottom:1px solid var(--border);background:var(--edited-bg);color:var(--text);gap:8px;padding:8px 12px;font-size:12px;display:flex}.note .dot{background:var(--edited);border-radius:50%;flex:none;width:6px;height:6px;margin-top:6px}.error-bar{background:var(--short-bg);color:var(--short);border:1px solid var(--short);border-radius:var(--r-control);justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;padding:7px 10px;display:flex}.empty{text-align:center;color:var(--text-2);padding:32px 16px}.empty p{max-width:46ch;margin:0 auto 12px}.skeleton{background:linear-gradient(90deg,oklch(94% .005 85) 25%,oklch(96.5% .005 85) 37%,oklch(94% .005 85) 63%) 0 0/400% 100%;border-radius:4px;height:11px;animation:1.4s infinite shimmer}@keyframes shimmer{0%{background-position:100% 0}to{background-position:0 0}}.login{place-items:center;min-height:100%;padding:24px;display:grid}.login form{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-panel);width:300px;box-shadow:var(--shadow);flex-direction:column;gap:12px;padding:20px;display:flex}.login input{width:100%}.login .err{color:var(--short);font-size:11.5px}@media (width<=720px){.shell{flex-direction:column}.sidebar{border-right:none;border-bottom:1px solid var(--border);flex:none;width:100%}.sidebar nav{flex-flow:wrap}.sidebar .foot{flex-direction:row;justify-content:space-between;margin-top:0}.main{padding:16px 12px 48px}.table-wrap{max-height:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
