:root{--bg: #f8fafc;--surface: #ffffff;--surface-2: #f1f5f9;--text: #0f172a;--muted: #526077;--border: #dbe2ea;--primary: #1d4ed8;--primary-text: #ffffff;--danger: #b91c1c;--ok: #15803d;--warn: #a16207;--in: #15803d;--in-tint: #dcfce7;--out: #b91c1c;--brk: #b45309;--brk-tint: #fef3c7;--work-tint: #dcfce7;--radius: 14px;--shadow: 0 1px 2px rgb(15 23 42 / 6%), 0 4px 16px rgb(15 23 42 / 6%);--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--safe-right: env(safe-area-inset-right, 0px);--topbar-h: 56px;--drawer-w: 280px;color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #0b1120;--surface: #131c2e;--surface-2: #1c2740;--text: #e8eef7;--muted: #9aa8bd;--border: #2a3650;--primary: #60a5fa;--primary-text: #0b1120;--danger: #f87171;--ok: #4ade80;--warn: #fbbf24;--in: #22c55e;--in-tint: #0f2a1c;--out: #ef4444;--brk: #f59e0b;--brk-tint: #2e2210;--work-tint: #0f2a1c;--shadow: 0 1px 2px rgb(0 0 0 / 40%);color-scheme:dark}}:root[data-theme=dark]{--bg: #0b1120;--surface: #131c2e;--surface-2: #1c2740;--text: #e8eef7;--muted: #9aa8bd;--border: #2a3650;--primary: #60a5fa;--primary-text: #0b1120;--danger: #f87171;--ok: #4ade80;--warn: #fbbf24;--in: #22c55e;--in-tint: #0f2a1c;--out: #ef4444;--brk: #f59e0b;--brk-tint: #2e2210;--work-tint: #0f2a1c;--shadow: 0 1px 2px rgb(0 0 0 / 40%);color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{font:-apple-system-body;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-text-size-adjust:100%;text-size-adjust:100%;-webkit-tap-highlight-color:transparent}body{margin:0;background:var(--bg);color:var(--text);line-height:1.45;overscroll-behavior-y:none}h1,h2,h3{line-height:1.2;margin:0}p{margin:0 0 .75em}a{color:var(--primary)}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.muted{color:var(--muted)}.small{font-size:.875em}.center{text-align:center}.error{color:var(--danger);font-weight:600}.ok{color:var(--ok)}.warn{color:var(--warn)}.visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}hr{border:0;border-top:1px solid var(--border);margin:1rem 0}.app{min-height:100dvh}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:8px;height:calc(var(--topbar-h) + var(--safe-top));padding:var(--safe-top) calc(8px + var(--safe-right)) 0 calc(8px + var(--safe-left));background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--border)}.topbar-title{font-size:1.1rem;font-weight:700;flex:1;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-spacer{width:44px}.main{max-width:720px;margin:0 auto;padding:16px calc(16px + var(--safe-right)) calc(96px + var(--safe-bottom)) calc(16px + var(--safe-left));outline:none}.icon-btn{display:inline-grid;place-items:center;min-width:44px;min-height:44px;border:0;border-radius:12px;background:transparent;cursor:pointer}.icon-btn:hover{background:var(--surface-2)}.drawer{position:fixed;inset:0 auto 0 0;z-index:40;width:min(var(--drawer-w),85vw);padding:calc(8px + var(--safe-top)) 8px calc(16px + var(--safe-bottom)) calc(8px + var(--safe-left));background:var(--surface);border-right:1px solid var(--border);transform:translate(-105%);transition:transform .22s ease;visibility:hidden;overflow-y:auto}.menu-open .drawer{transform:none;visibility:visible}.scrim{position:fixed;inset:0;z-index:30;background:#0006;opacity:0;pointer-events:none;transition:opacity .2s}.menu-open .scrim{opacity:1;pointer-events:auto}.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:4px 4px 12px 8px}.drawer-brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:1.1rem}.drawer ul{list-style:none;margin:0;padding:0}.drawer a{display:flex;align-items:center;gap:14px;min-height:48px;padding:0 14px;border-radius:12px;color:var(--text);text-decoration:none;font-weight:500}.drawer a:hover{background:var(--surface-2)}.drawer a.active{background:color-mix(in srgb,var(--primary) 14%,transparent);color:var(--primary);font-weight:700}@media(max-width:599px){.drawer{inset:auto 0 0;width:100%;max-height:85dvh;border-right:0;border-radius:20px 20px 0 0;padding-left:calc(8px + var(--safe-left));padding-right:calc(8px + var(--safe-right));transform:translateY(105%)}.drawer-head:before{content:"";position:absolute;top:8px;left:50%;width:40px;height:5px;margin-left:-20px;border-radius:3px;background:var(--border)}.drawer-head{padding-top:14px}}@media(min-width:1024px){.drawer{transform:none;visibility:visible;transition:none}.drawer-close,.menu-btn,.scrim{display:none}.app{padding-left:var(--drawer-w)}}.screen{display:grid;gap:16px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}.card-title{font-size:1.05rem;margin-bottom:12px}.field{display:grid;gap:6px;margin-bottom:12px}.field label,legend{font-weight:600;font-size:.9em}input:not([type=checkbox],[type=radio]),select,textarea{width:100%;min-height:44px;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--surface-2);font-size:max(16px,1em)}input[type=time],input[type=date]{appearance:none;-webkit-appearance:none}textarea{resize:vertical}fieldset{border:0;padding:0;margin:0 0 12px;min-width:0}.row-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}.input-suffix{display:flex;align-items:center;gap:8px}.indent{padding-left:12px;border-left:3px solid var(--border);margin:4px 0 12px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 16px;border-radius:12px;border:1px solid var(--border);background:var(--surface-2);color:var(--text);font-weight:600;text-decoration:none;cursor:pointer}.btn:disabled{opacity:.5;cursor:default}.btn-primary{background:var(--primary);border-color:var(--primary);color:var(--primary-text)}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-danger-text{border-color:transparent;background:transparent;color:var(--danger);padding:0 8px}.btn-small{min-height:36px;padding:0 12px;font-size:.9em}.btn-large{min-height:52px;width:100%;font-size:1.05em}.link-btn{display:inline-flex;align-items:center;gap:6px;min-height:44px;border:0;background:none;color:var(--primary);font-weight:600;cursor:pointer;padding:0}.switch-row{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:52px;padding:6px 0}.switch-label{display:grid;gap:2px;font-weight:600}.switch-label small{font-weight:400}.switch{appearance:none;-webkit-appearance:none;flex:none;width:52px;height:32px;border-radius:16px;background:var(--border);position:relative;cursor:pointer;transition:background .15s}.switch:after{content:"";position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;background:#fff;box-shadow:0 1px 3px #0000004d;transition:transform .15s}.switch:checked{background:var(--ok)}.switch:checked:after{transform:translate(20px)}.check{display:flex;align-items:center;gap:10px;min-height:44px}.check input{width:22px;height:22px}.radio-list{display:grid;gap:8px}.radio{display:flex;align-items:center;gap:12px;min-height:48px;padding:0 14px;border:1px solid var(--border);border-radius:12px;cursor:pointer}.radio.on{border-color:var(--primary);background:color-mix(in srgb,var(--primary) 10%,transparent)}.radio input{width:20px;height:20px;accent-color:var(--primary)}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.chip{display:inline-flex;align-items:center;min-height:40px;padding:0 14px;border-radius:20px;border:1px solid var(--border);cursor:pointer;font-weight:600}.chip input{position:absolute;opacity:0;pointer-events:none}.chip.on{background:var(--primary);border-color:var(--primary);color:var(--primary-text)}.chip:focus-within{outline:3px solid var(--primary);outline-offset:2px}.badge{display:inline-block;padding:1px 8px;border-radius:999px;background:var(--surface-2);border:1px solid var(--border);font-size:.75em;font-weight:600;color:var(--muted)}.rule{border-top:1px solid var(--border);padding-top:12px}.rule legend{font-size:1em;padding-top:12px}.rule-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:12px}@media(max-width:420px){.rule-grid{grid-template-columns:1fr;gap:0}}.rule-example{margin-top:-4px}.callout{display:flex;gap:12px;align-items:flex-start}.callout-icon{flex:none;color:var(--primary)}.banner{display:flex;align-items:center;flex-wrap:wrap;gap:8px 12px;padding:12px 14px;margin-bottom:16px;border-radius:var(--radius);background:color-mix(in srgb,var(--primary) 12%,var(--surface));border:1px solid color-mix(in srgb,var(--primary) 35%,transparent)}.banner>span{flex:1 1 200px}.banner-warn{background:var(--brk-tint);border-color:color-mix(in srgb,var(--brk) 40%,transparent)}.banner-error{background:color-mix(in srgb,var(--danger) 12%,var(--surface));border-color:var(--danger)}.empty{display:grid;justify-items:center;text-align:center;padding:40px 16px;gap:4px}.empty-icon{color:var(--muted);opacity:.6;margin-bottom:8px}.empty-title{font-weight:700;margin:0}.toasts{position:fixed;left:50%;bottom:calc(16px + var(--safe-bottom));transform:translate(-50%);z-index:60;display:grid;gap:8px;width:min(480px,calc(100vw - 32px))}.toast{border:0;border-radius:12px;padding:12px 16px;background:var(--text);color:var(--bg);text-align:left;font-weight:600;box-shadow:var(--shadow);cursor:pointer;animation:toast-in .2s ease}.toast-error{background:var(--danger);color:#fff}@keyframes toast-in{0%{transform:translateY(8px);opacity:0}}.dialog{border:0;padding:0;width:min(560px,calc(100vw - 24px));max-height:calc(100dvh - 24px - var(--safe-top) - var(--safe-bottom));border-radius:18px;background:var(--surface);color:var(--text);box-shadow:0 20px 60px #00000059}.dialog::backdrop{background:#00000073}.dialog-body{display:flex;flex-direction:column;max-height:inherit}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:8px 8px 8px 20px;border-bottom:1px solid var(--border)}.dialog-header h2{font-size:1.1rem}.dialog-content{padding:16px 20px;overflow-y:auto}.dialog-footer{display:flex;flex-wrap:wrap;gap:8px;padding:12px 16px;border-top:1px solid var(--border);justify-content:flex-end}.dialog-footer .spacer{flex:1}.home{display:grid;justify-items:center;gap:20px;padding-top:8px;text-align:center}.status-pill{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;border-radius:999px;font-weight:700;background:var(--surface-2);border:1px solid var(--border)}.status-pill .dot{width:12px;height:12px;border-radius:50%;background:var(--muted)}.state-working .status-pill{background:var(--work-tint);border-color:var(--in)}.state-working .status-pill .dot{background:var(--in);animation:pulse 1.6s ease-in-out infinite}.state-break .status-pill{background:var(--brk-tint);border-color:var(--brk)}.state-break .status-pill .dot{background:var(--brk)}@keyframes pulse{50%{opacity:.35}}.timer-value{font-size:clamp(3rem,16vw,5rem);font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.02em;line-height:1}.state-off .timer-value{color:var(--muted)}.timer-sub{margin-top:6px;color:var(--muted)}.break-timer{display:inline-flex;align-items:center;gap:6px;margin-top:8px;padding:4px 12px;border-radius:999px;background:var(--brk-tint);color:var(--brk);font-weight:700;font-variant-numeric:tabular-nums}.punch-buttons{display:grid;gap:14px;width:100%;max-width:420px;justify-items:center}.punch-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:0;cursor:pointer;color:#fff;font-weight:800;font-size:1.25rem;touch-action:manipulation;user-select:none;-webkit-user-select:none;transition:transform .08s ease,filter .15s}.punch-btn:active{transform:scale(.97)}.punch-btn:disabled{filter:saturate(.6)}.punch-in{width:min(64vw,240px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 30% 25%,#22c55e,#15803d);box-shadow:0 12px 30px #15803d59,inset 0 -6px #00000026;font-size:1.5rem}.punch-out{width:min(56vw,200px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 30% 25%,#ef4444,#b91c1c);box-shadow:0 12px 30px #b91c1c4d,inset 0 -6px #00000026}.punch-break{flex-direction:row;width:100%;min-height:64px;border-radius:18px;background:#b45309;font-size:1.15rem}.punch-break.is-on-break{background:#15803d}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;width:100%}.stat,.summary>div{display:grid;gap:2px;padding:14px;border-radius:var(--radius);background:var(--surface);border:1px solid var(--border)}.stat-label{color:var(--muted);font-size:.85em;font-weight:600}.stat-value{font-size:1.6rem;font-weight:800;font-variant-numeric:tabular-nums}.stat-value.small{font-size:1.2rem}.stat-sub{color:var(--muted);font-size:.85em}.pos{color:var(--ok)}.neg{color:var(--danger)}.day-note-field{width:100%;text-align:left}.segmented{display:grid;grid-template-columns:repeat(3,1fr);padding:4px;border-radius:12px;background:var(--surface-2);border:1px solid var(--border)}.segmented button{min-height:40px;border:0;border-radius:9px;background:transparent;font-weight:600;cursor:pointer}.segmented button.active{background:var(--surface);box-shadow:var(--shadow)}.period-nav{display:flex;align-items:center;gap:8px}.period-title{flex:1;text-align:center}.period-title h2{font-size:1.05rem}.summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}.summary.card{padding:10px}.summary.card>div{border:0;background:transparent;padding:6px}.day-list,.shift-list{list-style:none;margin:0;padding:0}.day-list{display:grid;gap:12px}.day.card{padding:8px 0}.day-head{display:flex;justify-content:space-between;align-items:baseline;padding:6px 16px 8px}.day-head h3{font-size:1rem}.day-total{font-weight:800;font-variant-numeric:tabular-nums}.shift-row{display:grid;grid-template-columns:1fr auto;gap:2px 12px;width:100%;min-height:56px;padding:10px 16px;border:0;border-top:1px solid var(--border);background:transparent;text-align:left;cursor:pointer}.shift-row:hover{background:var(--surface-2)}.shift-times{font-weight:600;font-variant-numeric:tabular-nums}.shift-dur{grid-row:1 / span 2;grid-column:2;align-self:center;font-weight:700;font-variant-numeric:tabular-nums}.shift-meta{display:flex;gap:10px;align-items:center;font-size:.85em}.shift-meta svg{vertical-align:-2px}.shift-note{grid-column:1 / -1;color:var(--muted);font-size:.9em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.running{color:var(--in)}.fab{position:fixed;right:calc(16px + var(--safe-right));bottom:calc(20px + var(--safe-bottom));z-index:15;display:inline-flex;align-items:center;gap:8px;min-height:56px;padding:0 20px 0 16px;border:0;border-radius:28px;background:var(--primary);color:var(--primary-text);font-weight:700;box-shadow:0 8px 24px #00000040;cursor:pointer}.editor .breaks{border-top:1px solid var(--border);padding-top:12px}.break-row{display:grid;grid-template-columns:1fr 1fr auto;gap:8px;align-items:end}.break-row .icon-btn{margin-bottom:12px}.actions{display:grid;gap:10px}.sticky-actions{position:sticky;bottom:calc(12px + var(--safe-bottom))}.storage-status p{margin-bottom:4px}.about-head{display:flex;align-items:center;gap:14px;margin-bottom:12px}.about-head img{border-radius:14px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.day-note-field .saved{color:var(--ok);font-weight:600}.day-head-actions{display:flex;align-items:center;gap:4px}.day-head .icon-btn{min-width:36px;min-height:36px;color:var(--muted)}.day-note{display:flex;gap:8px;align-items:flex-start;width:100%;padding:8px 16px 10px;border:0;background:transparent;color:var(--text);text-align:left;white-space:pre-wrap;cursor:pointer}.day-note svg{flex:none;margin-top:2px;color:var(--primary)}.day-note:hover{background:var(--surface-2)}.feedback-actions{display:grid;gap:10px}.feedback-card{display:flex;align-items:center;gap:14px;min-height:64px;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--surface-2);color:var(--text);text-decoration:none}.feedback-card:hover{border-color:var(--primary)}.feedback-card>span{display:grid;gap:2px;flex:1}.feedback-icon{flex:none;color:var(--primary)}
