:root{--ink: #1A1A1A;--ink-dim: #6B6B6B;--rule: rgba(0, 0, 0, .08);--today: #0D9488;--ring: rgba(23, 24, 27, .22);--scrim: rgba(0, 0, 0, .35);--cat-err: #D14343;--tile-r: 12px;--bar-r: 5px;--gap: 3px;--hdr-h: 56px;--fab-inset: calc(64px + env(safe-area-inset-bottom)) }@media(prefers-color-scheme:dark){:root{--ink: #E8E6E1;--ink-dim: #9A978F;--rule: rgba(255, 255, 255, .09);--today: #2DD4BF;--ring: rgba(232, 230, 225, .26);--scrim: rgba(0, 0, 0, .55);--cat-err: #F87171}}html,body{margin:0;height:100%;background:var(--surface);color:var(--ink);font:14px/1.35 system-ui,-apple-system,Segoe UI,sans-serif;touch-action:manipulation;overscroll-behavior:none}#app{box-sizing:border-box;height:100%;display:flex;flex-direction:column;padding-bottom:var(--fab-inset)}.hdr{height:var(--hdr-h);flex:none;display:flex;align-items:center;gap:12px;padding:0 12px;position:sticky;top:0;z-index:3;background:var(--surface)}.hdr-range{font-weight:620;font-size:15px}.hdr-spacer{flex:1}.hdr button{font:inherit;color:var(--ink);background:none;border:0;padding:6px 10px;border-radius:8px}.hdr button[aria-pressed=true]{background:var(--band-b)}.hdr-avatar{display:flex;align-items:center;min-width:28px;height:28px}.scroller{position:relative;flex:1;overflow:hidden;touch-action:none}.week{position:absolute;left:0;right:0;top:0;display:grid;grid-template-columns:var(--expand-cols, repeat(7, minmax(0, 1fr)));gap:var(--gap);padding:0 var(--gap);will-change:transform;touch-action:none}.day{position:relative;border-radius:var(--tile-r);background:var(--band-a);box-shadow:var(--el-rest);padding:4px 6px;min-width:0;overflow:hidden}.day[data-band=b]{background:var(--band-b)}.day[data-weekend][data-band=a]{background:var(--band-a-end)}.day[data-weekend][data-band=b]{background:var(--band-b-end)}.day:after{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:var(--el-hover),inset 0 0 0 1px var(--ring);opacity:0;pointer-events:none}@media(hover:hover){.day:hover{transform:translateY(-2px)}.day:hover:after{opacity:1}}.day[data-today]:before{content:"";position:absolute;inset:0;border-radius:inherit;box-shadow:inset 0 0 0 2px var(--today);pointer-events:none}.day[data-today] .daynum{color:var(--today);font-weight:700}.daynum{position:absolute;top:3px;right:6px;font-size:12px;font-variant-numeric:tabular-nums}.badge{position:absolute;top:3px;left:6px;font-size:11px;color:var(--ink-dim);letter-spacing:.02em}.more{position:absolute;bottom:3px;left:6px;font-size:11px;color:var(--ink-dim)}.week .rule{position:absolute;top:0;height:1px;background:var(--rule);pointer-events:none}.bars{position:absolute;inset:0;padding:0 var(--gap);display:grid;grid-template-columns:inherit;gap:var(--gap);column-gap:inherit;pointer-events:none}.bar{grid-row:1;align-self:start;min-width:0;margin-top:calc(20px + var(--lane) * 20px);height:18px;border-radius:var(--bar-r);background:color-mix(in srgb,var(--cat) 16%,transparent);border-left:3px solid var(--cat);color:var(--cat);font-size:12px;line-height:18px;padding:0 6px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.bar[data-cont-before]{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.bar[data-cont-after]{border-top-right-radius:0;border-bottom-right-radius:0}.chip{display:flex;align-items:center;gap:4px;font-size:12px;min-width:0}.chip .dot{width:6px;height:6px;border-radius:50%;background:var(--cat);flex:none}.chip .at{color:var(--ink-dim);font-variant-numeric:tabular-nums;flex:none}.chip .ttl{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.chips{position:absolute;left:6px;right:6px;bottom:16px;display:flex;flex-direction:column;gap:2px}.day[data-open]{box-shadow:var(--el-open);overflow:hidden;z-index:1}.day[data-open]:after{opacity:0}.day[data-open] .chips,.day[data-open] .more{display:none}.week[data-full]{column-gap:0}.dp{position:relative;margin-top:18px;padding-bottom:8px;display:flex;flex-direction:column;gap:6px;touch-action:auto}.dp-head{font-weight:620;font-size:13px}.dp-list{display:flex;flex-direction:column;gap:2px}.dp-ev{display:flex;align-items:center;gap:6px;min-width:0;font:inherit;font-size:12px;text-align:left;color:var(--ink);background:color-mix(in srgb,var(--cat) 16%,transparent);border:0;border-left:3px solid var(--cat);border-radius:var(--bar-r);padding:4px 6px}.dp-at{color:var(--ink-dim);font-variant-numeric:tabular-nums;flex:none}.dp-ttl{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1}.dp-cat{color:var(--cat);font-size:11px;flex:none}.dp-none{color:var(--ink-dim);font-size:12px}.dp-slot{min-height:0}.dp-add{font:inherit;font-size:12px;color:var(--ink);background:var(--band-b-end);border:0;border-radius:8px;padding:5px 9px;align-self:start}.dp-form{display:flex;flex-direction:column;gap:6px}.dp-form input,.dp-form textarea,.dp-form select{font:inherit;font-size:12px;color:var(--ink);background:var(--surface);border:1px solid var(--rule);border-radius:6px;padding:5px 7px;min-width:0;width:100%;box-sizing:border-box}.dp-form textarea{resize:vertical;min-height:44px}.dp-when{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.dp-when input{width:auto;flex:1 1 96px}.dp-cats{display:flex;flex-wrap:wrap;gap:4px}.dp-chip{font:inherit;font-size:11px;color:var(--cat);background:color-mix(in srgb,var(--cat) 14%,transparent);border:1px solid transparent;border-radius:999px;padding:3px 9px}.dp-chip[aria-pressed=true]{border-color:var(--cat);font-weight:620}.dp-line{display:flex;align-items:center;gap:6px;font-size:12px}.dp-line input[type=checkbox],.dp-line input[type=radio]{width:auto}.dp-err{color:var(--cat-err);font-size:12px;margin:0}.dp-actions{display:flex;gap:6px;align-items:center}.dp-actions button{font:inherit;font-size:12px;color:var(--ink);background:var(--band-b-end);border:0;border-radius:8px;padding:5px 9px}.dp-save{font-weight:620}.dp-del{margin-left:auto;color:var(--cat-err)}.dp-del[data-confirm]{background:color-mix(in srgb,var(--cat-err) 18%,transparent)}.dp-form[data-busy]{opacity:.6;pointer-events:none}#toasts{position:fixed;left:50%;bottom:24px;transform:translate(-50%);z-index:30;display:flex;flex-direction:column;gap:6px;align-items:center;pointer-events:none}.toast{background:var(--band-b-end);color:var(--ink);box-shadow:var(--el-open);border-radius:8px;padding:8px 14px;font-size:13px;max-width:min(90vw,420px)}[hidden]{display:none!important}#firstrun{position:fixed;inset:0;z-index:20;background:var(--surface);color:var(--ink);display:grid;place-items:safe center;overflow-y:auto;padding:calc(24px + env(safe-area-inset-top)) calc(24px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) calc(24px + env(safe-area-inset-left))}.set-fr-card{display:flex;flex-direction:column;align-items:flex-start;gap:10px;max-width:340px}.set-fr-mark{width:44px;height:44px;border-radius:12px;background:var(--band-b);box-shadow:var(--el-rest);display:grid;place-items:center;font-size:22px;font-weight:700}.set-fr-name{margin:4px 0 0;font-size:22px;font-weight:620}.set-fr-desc{margin:0;color:var(--ink-dim)}.set-fr-lines{margin:6px 0 10px;padding-left:0;list-style:none;color:var(--ink-dim);display:flex;flex-direction:column;gap:4px}.set-fr-connect{font:inherit;font-weight:620;color:var(--surface);background:var(--ink);border:0;border-radius:10px;padding:11px 18px;width:100%}.set-fr-demo{font:inherit;color:var(--ink);background:var(--band-b-end);border:0;border-radius:10px;padding:11px 18px;width:100%}.set-fr-demo:disabled{opacity:.45}.set-fr-note{margin:0;font-size:12px;color:var(--ink-dim)}.set-fr-support{margin-top:8px;font-size:12px;color:var(--ink-dim)}.set-avatar{position:relative;width:28px;height:28px;border-radius:50%;background:var(--band-b);border:0;padding:0;box-shadow:var(--el-rest)}.set-avatar-dot{position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;border-radius:50%;background:var(--today);box-shadow:0 0 0 2px var(--surface)}.set-pill{font:inherit;font-size:12px;font-weight:620;color:var(--surface);background:var(--cat-err);border:0;border-radius:999px;padding:5px 10px}.set-fab{position:fixed;z-index:12;right:calc(16px + env(safe-area-inset-right));bottom:calc(16px + env(safe-area-inset-bottom));width:48px;height:48px;border-radius:50%;font:inherit;font-size:24px;line-height:1;color:var(--surface);background:var(--ink);border:0;box-shadow:var(--el-hover)}.set-fab:disabled{opacity:.35}.set-scrim{position:fixed;inset:0;z-index:14;background:var(--scrim)}.set-sheet{position:fixed;z-index:15;top:calc(var(--hdr-h) + 6px);right:calc(8px + env(safe-area-inset-right));width:min(380px,calc(100vw - 16px));max-height:calc(100vh - var(--hdr-h) - 24px);overflow-y:auto;background:var(--band-b);color:var(--ink);border-radius:14px;box-shadow:var(--el-open)}@media(max-width:560px){.set-sheet{inset:auto 0 0;width:auto;max-height:82vh;border-radius:14px 14px 0 0;padding-bottom:env(safe-area-inset-bottom)}}.set-body{display:flex;flex-direction:column;gap:2px;padding:10px}.set-row{display:flex;align-items:center;gap:8px;padding:8px 6px;min-height:34px}.set-lbl{flex:1;min-width:0}.set-note{font-size:12px;color:var(--ink-dim)}.set-btn{font:inherit;font-size:12px;color:var(--ink);background:var(--band-b-end);border:0;border-radius:8px;padding:5px 9px}.set-btn:disabled{opacity:.45}.set-seg{display:flex;gap:2px;background:var(--band-b-end);border-radius:8px;padding:2px}.set-segb{font:inherit;font-size:12px;color:var(--ink-dim);background:none;border:0;border-radius:6px;padding:4px 9px}.set-segb[aria-pressed=true]{color:var(--ink);font-weight:620;background:var(--surface)}.set-h2{margin:12px 6px 4px;font-size:12px;font-weight:620;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.06em}.set-colors{display:flex;flex-direction:column;gap:2px}.set-cat{display:flex;align-items:center;gap:6px;padding:5px 6px;min-height:34px}.set-cat-lab{font:inherit;font-size:13px;color:var(--ink);background:var(--band-b-end);border:0;border-radius:8px;padding:5px 8px;flex:1 1 80px;min-width:0}.set-cat-cid{font:inherit;font-size:12px;color:var(--ink);background:var(--band-b-end);border:0;border-radius:8px;padding:5px 6px;flex:0 1 104px;min-width:0}.set-cat-sw{display:flex;gap:2px;flex:none}.set-cat-swg,.set-cat-swd{width:12px;height:18px;background:var(--sw);flex:none}.set-cat-swg{border-radius:4px 0 0 4px}.set-cat-sw>.set-cat-swg:only-child{border-radius:4px}.set-cat-swd{border-radius:0 4px 4px 0}.set-cat-hex{width:26px;height:24px;padding:0;border:0;background:none;flex:none}.set-cat-del{font:inherit;font-size:12px;color:var(--cat-err);background:var(--band-b-end);border:0;border-radius:8px;padding:5px 8px;flex:none}.set-cat-del[data-confirm]{background:color-mix(in srgb,var(--cat-err) 18%,transparent)}.set-cat-add{display:flex;align-items:center;gap:8px;padding:6px}.yearview{flex:1;overflow:auto;position:relative}.yr{display:flex;flex-direction:column;gap:2px;padding:8px}.yrrow{position:relative;display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:2px}.yrcell{position:relative;aspect-ratio:1 / 1.25;border-radius:6px;background:var(--band-a);padding:2px 3px;min-width:0;overflow:hidden}.yrcell[data-band=b]{background:var(--band-b)}.yrcell[data-weekend][data-band=a]{background:var(--band-a-end)}.yrcell[data-weekend][data-band=b]{background:var(--band-b-end)}.yrcell[data-pad]{background:none}.yrcell[data-today]{box-shadow:inset 0 0 0 2px var(--today)}.yrcell[data-today] .yrnum{color:var(--today);font-weight:700}.yrwd{font-size:9px;color:var(--ink-dim);display:block;line-height:1}.yrnum{font-size:11px;font-variant-numeric:tabular-nums;display:block;line-height:1.2}.yrcell .badge{top:auto;bottom:2px;left:3px;font-size:9px}.yrbars{position:absolute;inset:0;display:grid;grid-template-columns:repeat(var(--cols),1fr);gap:2px;pointer-events:none}.yrbar{grid-row:1;align-self:end;height:3px;border-radius:2px;background:var(--cat);margin-bottom:calc(3px + var(--lane) * 5px);min-width:0}.yrpanel{position:absolute;z-index:4;pointer-events:none;background:var(--band-b);color:var(--ink);border-radius:8px;box-shadow:var(--el-open);padding:6px 10px;font-size:12px;line-height:1.4;min-width:140px;max-width:280px}.yrp-day{color:var(--ink-dim);font-size:11px;margin-top:4px}.yrp-day[data-focus]{color:var(--ink);font-weight:620}.yrp-none{color:var(--ink-dim)}.yrp-ev{display:flex;align-items:center;gap:4px;min-width:0}.yrp-ev .dot{width:6px;height:6px;border-radius:50%;background:var(--cat);flex:none}.yrp-ev .at{color:var(--ink-dim);font-variant-numeric:tabular-nums;flex:none}.yrp-ev .ttl{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}:root{--t-fast: .14s;--t-base: .24s;--t-open: .38s;--t-stagger: 40ms;--t-toast: 3.2s;--ease-out: cubic-bezier(.22, 1, .36, 1);--ease-spring: cubic-bezier(.34, 1.56, .64, 1);--el-rest: 0 1px 2px rgba(0, 0, 0, .06);--el-hover: 0 4px 12px rgba(0, 0, 0, .12);--el-open: 0 12px 32px rgba(0, 0, 0, .2)}@media(prefers-color-scheme:dark){:root{--el-rest: 0 1px 2px rgba(0, 0, 0, .4);--el-hover: 0 4px 14px rgba(0, 0, 0, .55);--el-open: 0 14px 36px rgba(0, 0, 0, .65)}}.enter{opacity:0;transform:translateY(6px)}.enter[data-in]{opacity:1;transform:none;transition:opacity var(--t-base) var(--ease-out),transform var(--t-base) var(--ease-out);transition-delay:calc(var(--t-stagger) * var(--i, 0))}.enter[data-out]{opacity:0;transform:none;transition:opacity var(--t-base) var(--ease-out);transition-delay:0s}.day:after{transition:opacity var(--t-fast) var(--ease-out)}@media(hover:hover){.day:hover{transition:transform var(--t-fast) var(--ease-out)}.day:not(:hover){transition:transform var(--t-base) var(--ease-out)}}.week[data-anim]{transition-property:transform,height,column-gap}.week[data-anim=expand]{transition-duration:var(--t-open);transition-timing-function:var(--ease-spring)}.week[data-anim=collapse]{transition-duration:var(--t-base);transition-timing-function:var(--ease-out);transition-delay:var(--t-fast)}.week[data-cols-anim]{transition-property:grid-template-columns}.week[data-cols-anim=expand]{transition-duration:var(--t-open);transition-timing-function:var(--ease-spring)}.week[data-cols-anim=collapse]{transition-duration:var(--t-base);transition-timing-function:var(--ease-out);transition-delay:var(--t-fast)}.week[data-anim][data-cols-anim]{transition-property:transform,height,column-gap,grid-template-columns}.week[data-anim][data-jump],.week[data-cols-anim][data-jump]{transition-property:none}@keyframes toast-life{0%{opacity:0;transform:translateY(6px)}10%,90%{opacity:1;transform:none}to{opacity:0;transform:translateY(6px)}}@keyframes toast-life-plain{0%{opacity:0}10%,90%{opacity:1}to{opacity:0}}.toast{animation:toast-life var(--t-toast) var(--ease-out) both}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:80ms!important;transition-property:opacity!important;animation-duration:80ms!important}.toast{animation-name:toast-life-plain!important;animation-duration:var(--t-toast)!important}}
