:root{--bg: #f4f5f7;--surface: #ffffff;--surface-2: #f8f9fb;--border: #dfe3e8;--text: #1c2430;--muted: #67717f;--accent: #2f6feb;--accent-ink: #ffffff;--pos: #1a7f4b;--neg: #c2401f;--warn-bg: #fff5e0;--warn-border: #e8b458;--warn-ink: #6b4a06;--radius: 10px;--shadow: 0 1px 2px rgb(16 24 40 / 6%), 0 1px 3px rgb(16 24 40 / 4%);color-scheme:light dark}@media (prefers-color-scheme: dark){:root{--bg: #12161c;--surface: #1a1f27;--surface-2: #212832;--border: #2e3742;--text: #e6e9ee;--muted: #97a1af;--accent: #5b8cf5;--accent-ink: #0b1017;--pos: #4cc38a;--neg: #f27052;--warn-bg: #34290f;--warn-border: #8a6a24;--warn-ink: #f0d9a4;--shadow: none}}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:15px/1.5 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}h2{font-size:1.05rem;margin:0 0 .75rem}h3{font-size:.95rem;margin:1rem 0 .5rem}.shell{min-height:100vh}.topbar{display:flex;align-items:center;gap:1.5rem;padding:.75rem 1.25rem;background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10;flex-wrap:wrap}.brand{font-weight:700;letter-spacing:-.02em;font-size:1.15rem}.brand span{color:var(--accent)}.brand.big{font-size:1.8rem;text-align:center;margin-bottom:.5rem}.topbar nav{display:flex;gap:.25rem}.topbar nav a{color:var(--muted);text-decoration:none;padding:.35rem .7rem;border-radius:999px;font-weight:500}.topbar nav a:hover{background:var(--surface-2);color:var(--text)}.topbar nav a.active{background:var(--accent);color:var(--accent-ink)}.topbar-right{margin-left:auto;display:flex;gap:.75rem;align-items:center}main{padding:1.25rem}.page{max-width:1080px;margin:0 auto;display:flex;flex-direction:column;gap:1rem}.boot{padding:3rem;text-align:center;color:var(--muted)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.15rem;box-shadow:var(--shadow)}.card-head,.month-head{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:.75rem}.card-head h2,.month-head h2{margin:0}.month-nav{display:flex;align-items:center;gap:.5rem}.month-nav h2{min-width:11rem;text-align:center}.exports{display:flex;gap:.5rem}button,.button{font:inherit;padding:.4rem .85rem;border-radius:8px;border:1px solid var(--border);background:var(--surface-2);color:var(--text);cursor:pointer;text-decoration:none;display:inline-block}button:hover:not(:disabled),.button:hover{border-color:var(--accent)}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}button.danger{color:var(--neg);border-color:color-mix(in srgb,var(--neg) 40%,var(--border))}button.linklike{background:none;border:none;color:var(--muted);padding:.2rem}button.linklike:hover{color:var(--text);text-decoration:underline}input,select{font:inherit;padding:.35rem .5rem;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text);min-width:0}input:focus,select:focus,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}label{display:flex;flex-direction:column;gap:.25rem;font-size:.82rem;color:var(--muted)}label.check{flex-direction:row;align-items:center;gap:.4rem;align-self:end;padding-bottom:.45rem}.row{display:flex;gap:.75rem;align-items:flex-end;flex-wrap:wrap}.row .grow{flex:1;min-width:10rem}.stack{display:flex;flex-direction:column;gap:.75rem;max-width:22rem}.error{color:var(--neg);font-size:.9rem}.muted{color:var(--muted)}.small{font-size:.82rem}.warn-text{color:var(--warn-ink);background:var(--warn-bg);padding:0 .3rem;border-radius:4px}.banner{border-radius:8px;padding:.65rem .85rem;margin:.5rem 0;font-size:.9rem}.banner.warn{background:var(--warn-bg);border:1px solid var(--warn-border);color:var(--warn-ink)}.banner p{margin:0 0 .5rem}.login-page{min-height:100vh;display:grid;place-items:center;padding:1rem}.login-card{width:min(22rem,100%);display:flex;flex-direction:column;gap:.85rem}.clock-card{text-align:center}.day-label{color:var(--muted);font-size:.9rem}.state{font-size:1.1rem;margin:.75rem 0}.state.on .dot{display:inline-block;width:.6rem;height:.6rem;border-radius:50%;background:var(--pos);margin-right:.45rem;animation:pulse 2s ease-in-out infinite}@keyframes pulse{50%{opacity:.25}}.state.off{color:var(--muted)}.clock-buttons{display:flex;gap:1rem;justify-content:center;margin:1rem 0}button.big{font-size:1.1rem;padding:.9rem 2.2rem;border-radius:12px}.stat-row{display:flex;flex-wrap:wrap;gap:.5rem 2rem;justify-content:center;border-top:1px solid var(--border);padding-top:.85rem;margin-top:.85rem}.stat{display:flex;flex-direction:column;min-width:6.5rem}.stat-label{font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.stat-value{font-size:1.25rem;font-weight:600;font-variant-numeric:tabular-nums}.stat-value.pos{color:var(--pos)}.stat-value.neg{color:var(--neg)}table.periods{width:100%;border-collapse:collapse;font-size:.9rem}table.periods th{text-align:left;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--border);padding:.4rem .5rem}table.periods td{padding:.4rem .5rem;border-bottom:1px solid var(--border);vertical-align:middle}table.periods .num{text-align:right;font-variant-numeric:tabular-nums}table.periods .actions{display:flex;gap:.4rem;justify-content:flex-end}tr.open-period td{background:var(--warn-bg)}tr.disabled-row td{opacity:.55}tr.expanded td{background:var(--surface-2)}.pill{margin-left:.4rem;font-size:.7rem;padding:.1rem .4rem;border-radius:999px;background:var(--warn-border);color:var(--warn-ink)}.add-period{margin-top:1rem;border-top:1px solid var(--border);padding-top:.5rem}.mark-row{display:flex;gap:.75rem;align-items:center;flex-wrap:wrap}.nominal-panel{margin-top:.75rem;border-top:1px dashed var(--border);padding-top:.75rem}.calendar-grid{display:flex;flex-direction:column;gap:4px;overflow-x:auto}.grid-head,.grid-row{display:grid;grid-template-columns:repeat(7,minmax(5.5rem,1fr)) minmax(6rem,.9fr);gap:4px;min-width:46rem}.wd{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);padding:0 .35rem .2rem}.wd.week-col{text-align:right}.day-cell{display:grid;grid-template-areas:"num badge" "worked worked" "dev dev";align-content:start;gap:1px;text-align:left;min-height:5rem;padding:.35rem .45rem;border:1px solid var(--border);border-radius:8px;background:var(--surface-2);position:relative}.day-cell .dnum{grid-area:num;font-weight:600;font-size:.85rem}.day-cell .badge{grid-area:badge;justify-self:end;font-size:.62rem;font-weight:700;letter-spacing:.04em;padding:.05rem .3rem;border-radius:4px;background:var(--border);color:var(--text)}.day-cell .badge.faint{opacity:.5}.day-cell .worked{grid-area:worked;font-size:1.05rem;font-weight:600;font-variant-numeric:tabular-nums}.day-cell .dev{grid-area:dev;font-size:.8rem;font-variant-numeric:tabular-nums}.dev.pos{color:var(--pos)}.dev.neg{color:var(--neg)}.day-cell.other-month{opacity:.4}.day-cell.future{border-style:dashed}.day-cell.today{outline:2px solid var(--accent)}.day-cell.running{border-color:var(--pos)}.day-cell .flag{position:absolute;right:.3rem;bottom:.25rem;font-weight:800;color:var(--warn-ink);background:var(--warn-bg);border:1px solid var(--warn-border);border-radius:4px;padding:0 .3rem;font-size:.7rem}.day-cell.weekend{background:color-mix(in srgb,var(--bg) 70%,var(--surface-2))}.day-cell.vacation{background:color-mix(in srgb,#2f9e6f 16%,var(--surface-2))}.day-cell.sick{background:color-mix(in srgb,#c2401f 14%,var(--surface-2))}.day-cell.holiday{background:color-mix(in srgb,#7a5af5 15%,var(--surface-2))}.day-cell.half_day{background:color-mix(in srgb,#e0a92a 18%,var(--surface-2))}.day-cell.off{background:color-mix(in srgb,var(--muted) 14%,var(--surface-2))}.day-cell.incomplete{border-color:var(--warn-border)}.week-total{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:1px;padding:.35rem .5rem;border:1px solid var(--border);border-radius:8px;background:var(--surface)}.week-total .wk{font-size:.7rem;color:var(--muted)}.week-total .worked{font-weight:700;font-variant-numeric:tabular-nums}.week-total .dev{font-size:.8rem;font-variant-numeric:tabular-nums}.legend{display:flex;flex-wrap:wrap;gap:.4rem;margin:.85rem 0 .5rem}.legend-item{font-size:.72rem;padding:.15rem .5rem;border-radius:999px;border:1px solid var(--border);background:var(--surface-2)}.legend-item.weekend{background:color-mix(in srgb,var(--bg) 70%,var(--surface-2))}.legend-item.vacation{background:color-mix(in srgb,#2f9e6f 16%,var(--surface-2))}.legend-item.sick{background:color-mix(in srgb,#c2401f 14%,var(--surface-2))}.legend-item.holiday{background:color-mix(in srgb,#7a5af5 15%,var(--surface-2))}.legend-item.half_day{background:color-mix(in srgb,#e0a92a 18%,var(--surface-2))}.legend-item.off{background:color-mix(in srgb,var(--muted) 14%,var(--surface-2))}.legend-item.incomplete{border-color:var(--warn-border);background:var(--warn-bg);color:var(--warn-ink)}@media (max-width: 640px){.clock-buttons{flex-direction:column}button.big{width:100%}main{padding:.75rem}.card{padding:.85rem .7rem}.grid-head,.grid-row{grid-template-columns:repeat(7,minmax(0,1fr));min-width:0;gap:3px}.wd{font-size:.62rem;padding:0 .1rem .15rem;text-align:center}.wd.week-col{display:none}.week-total{grid-column:1 / -1;flex-direction:row;align-items:baseline;justify-content:flex-start;gap:.6rem;padding:.3rem .5rem}.day-cell{min-height:3.5rem;padding:.25rem .3rem;text-align:center;justify-items:center}.day-cell .dnum,.day-cell .worked{font-size:.78rem}.day-cell .dev{font-size:.64rem}.day-cell .badge{font-size:.5rem;padding:0 .15rem}.day-cell .badge.faint{display:none}.day-cell .flag{right:.15rem;bottom:.1rem;font-size:.6rem}.month-head,.month-nav{gap:.35rem}.month-nav h2{min-width:0;flex:1}.stat-row{gap:.5rem 1.25rem;justify-content:space-between}table.periods.editable,table.periods.editable tbody{display:block}table.periods.editable thead{display:none}table.periods.editable tr{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.6rem .5rem;margin-bottom:.5rem;border:1px solid var(--border);border-radius:8px}table.periods.editable td{display:block;padding:0;border-bottom:none}table.periods.editable td:has(input[type=text]){flex:1 1 100%}table.periods.editable td input[type=text]{width:100%}table.periods.editable td.num{text-align:left;color:var(--muted);font-size:.85rem}table.periods.editable td.num:before{content:attr(data-label) ": "}table.periods.editable td.actions{flex:1 1 100%;justify-content:flex-start}tr.open-period{background:var(--warn-bg)}}@media (pointer: coarse),(max-width: 640px){.dm-chip{font-size:.9rem;padding:.55rem .9rem}.dm-periods li{min-height:2.75rem;gap:.75rem;font-size:.95rem}.dm-periods .linklike,.dm-foot .linklike{padding:.6rem;font-size:.95rem}.dm-times .linklike{padding:.6rem .4rem}.dm-times button.primary{min-height:2.75rem;padding:.5rem 1.2rem}.time-field{min-height:2.75rem;padding:.35rem .8rem}.month-nav button{min-width:2.75rem;min-height:2.75rem}.day-cell{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}input,select{font-size:16px}}.day-menu{position:fixed;z-index:40;width:min(23rem,calc(100vw - 1rem));max-height:calc(100dvh - 1rem);overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:.7rem;padding:.8rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 6px 24px #1018282e}.dm-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:flex-end;background:#080c1273}.day-menu.sheet{position:relative;z-index:auto;width:100%;max-height:88dvh;padding:.5rem 1rem calc(1rem + env(safe-area-inset-bottom));border-width:1px 0 0;border-radius:18px 18px 0 0;box-shadow:0 -8px 32px #080c1247}.dm-grip{align-self:center;width:2.5rem;height:4px;flex:none;border-radius:999px;background:var(--border);margin-bottom:.2rem}.dm-head{display:flex;flex-direction:column;gap:.1rem;flex:none;padding-bottom:.6rem;border-bottom:1px solid var(--border)}.dm-section{display:flex;flex-direction:column;gap:.35rem;flex:none}.dm-section p{margin:0}.dm-label{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.dm-chips{display:flex;flex-wrap:wrap;gap:.3rem}.dm-chip{font-size:.75rem;padding:.2rem .55rem;border-radius:999px}.dm-chip.on{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}.dm-times{display:flex;align-items:center;flex-wrap:wrap;gap:.4rem}.dm-dash{color:var(--muted)}.dm-periods{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.15rem}.dm-periods li{display:flex;align-items:center;gap:.5rem;font-size:.85rem;font-variant-numeric:tabular-nums}.dm-periods .dm-mins{margin-left:auto;color:var(--muted)}.dm-foot{display:flex;flex:none;justify-content:space-between;border-top:1px solid var(--border);padding-top:.5rem}.time-field{display:flex;flex-direction:column;align-items:flex-start;line-height:1.15;padding:.25rem .6rem;min-width:4.6rem}.tf-label{font-size:.62rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}.tf-value{font-size:1.05rem;font-weight:600;font-variant-numeric:tabular-nums}.tp-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;display:flex;overflow-y:auto;overscroll-behavior:contain;padding:.75rem;background:#080c1273}.tp-sheet{margin:auto;display:flex;flex-direction:column;align-items:center;gap:.9rem;padding:1.1rem;background:var(--surface);border:1px solid var(--border);border-radius:22px;box-shadow:0 10px 40px #080c1259}.tp-title{align-self:flex-start;margin:0;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}.tp-readout,.tp-typed{display:flex;align-items:center;gap:.4rem}.tp-typed label{display:flex;flex-direction:column;gap:.2rem;font-size:.7rem;color:var(--muted)}.tp-typed input{width:5rem;font-size:1.8rem;text-align:center;font-variant-numeric:tabular-nums}.tp-colon{font-size:2.2rem;font-weight:300;color:var(--muted)}.tp-part{font-size:2.6rem;font-weight:500;font-variant-numeric:tabular-nums;padding:.15rem .7rem;border-radius:10px;background:var(--surface-2)}.tp-part.on{background:color-mix(in srgb,var(--accent) 22%,var(--surface));border-color:var(--accent);color:var(--text)}.clock-dial{position:relative;border-radius:50%;background:var(--surface-2);touch-action:none;cursor:pointer;-webkit-user-select:none;user-select:none}.clock-dial:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.clock-pin{position:absolute;left:50%;top:50%;width:7px;height:7px;margin:-3.5px 0 0 -3.5px;border-radius:50%;background:var(--accent)}.clock-hand{position:absolute;left:50%;bottom:50%;width:2px;transform-origin:bottom center;background:var(--accent)}.clock-knob{position:absolute;left:50%;top:0;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:var(--accent)}.clock-knob.bare{width:12px;height:12px;margin:-6px 0 0 -6px}.clock-num{position:absolute;transform:translate(-50%,-50%);width:34px;height:34px;display:grid;place-items:center;border-radius:50%;font-size:.95rem;font-variant-numeric:tabular-nums;pointer-events:none}.clock-num.small{font-size:.78rem;color:var(--muted)}.clock-num.on{color:var(--accent-ink);font-weight:700}.tp-actions{display:flex;align-items:center;gap:.4rem;width:100%}.tp-actions .grow{flex:1}.tp-toggle{font-size:.8rem}.kbd{font-size:.7rem;font-family:ui-monospace,monospace;padding:.05rem .3rem;margin-left:.35rem;border:1px solid var(--border);border-radius:4px;background:var(--surface);color:var(--muted)}.time-cell{display:flex;align-items:center;gap:.3rem}.time-cell .pill{margin-left:0}.time-cell button.linklike{font-size:.75rem;white-space:nowrap}
