:root{--bg:#ffffff;--fg:#111111;--muted:#666;--border:#e5e5e5;--accent:#0070f3;--accent-hover:#0059c2;--accent-fill:#0070f3;--accent-fill-hover:#0059c2;--danger:#d33;--error-fg:#b91c1c;--lane-1:var(--fg);--lane-2:var(--status-building);--lane-3:var(--status-ready);--lane-4:var(--muted);--status-building:#8a6a00;--status-ready:#0f766e;--status-error:#b91c1c;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--bg:#0a0a0a;--fg:#ededed;--muted:#888;--border:#222;--accent:#3b82f6;--accent-hover:#5b9dff;--accent-fill:#2563eb;--accent-fill-hover:#1d4ed8;--danger:#ff6b6b;--error-fg:#ff6b6b;--status-building:#d9a800;--status-ready:#2dd4bf;--status-error:#ff6b6b}}*{box-sizing:border-box}body,html{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.6}a{color:var(--accent);text-underline-offset:2px;transition:color .15s ease}a:hover{color:var(--accent-hover)}button{cursor:pointer;font:inherit}button:disabled{cursor:not-allowed}::selection{background:color-mix(in srgb,var(--accent) 24%,transparent)}input,textarea{caret-color:var(--accent)}::placeholder{color:var(--muted);opacity:1}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}code,pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}pre{background:rgba(127,127,127,.1);padding:12px;border-radius:6px;overflow-x:auto}.container{max-width:780px;margin:0 auto;padding:24px 20px}.prose{max-width:68ch;margin-inline:auto}.prose>:first-child{margin-top:0}.prose h1{font-size:28px;line-height:1.25;letter-spacing:-.01em;margin:36px 0 12px}.prose h2{font-size:22px;line-height:1.3;margin:32px 0 10px}.prose h3{font-size:17px;font-weight:600;line-height:1.4;margin:24px 0 8px}.prose ol,.prose p,.prose pre,.prose table,.prose ul{margin:0 0 16px}.prose ol,.prose ul{padding-left:22px}.prose li+li{margin-top:4px}.prose li::marker{color:var(--muted)}.prose a{text-decoration:underline}.prose strong{font-weight:600}.prose blockquote{margin:20px 0;padding:2px 0 2px 16px;border-left:3px solid rgba(127,127,127,.65);color:var(--muted)}.prose blockquote>:last-child{margin-bottom:0}.prose hr{border:none;border-top:1px solid var(--border);margin:32px 0}.prose img{display:block;max-width:100%;height:auto;border-radius:6px}.prose table{width:100%;border-collapse:collapse;font-size:14px}.prose td,.prose th{border:1px solid var(--border);padding:6px 10px;text-align:left;vertical-align:top}.prose td{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.prose thead th{background:rgba(127,127,127,.12);font-weight:600}.prose :not(pre)>code{background:rgba(127,127,127,.1);padding:1px 5px;border-radius:4px;font-size:.9em}.prose pre code{background:none;padding:0;font-size:13px}.admin{max-width:1000px;margin:0 auto;padding:24px 20px}.admin h1{margin-top:0;font-size:22px}.admin h2{font-size:16px}.admin nav{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;border-bottom:1px solid var(--border);margin-bottom:20px;padding-bottom:8px}.admin nav a{padding:6px 10px;border-radius:6px}.admin nav a.active{background:rgba(127,127,127,.15);text-decoration:none}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.field{display:block;margin-bottom:12px}.field label{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:4px}input,select,textarea{width:100%;padding:8px 10px;border:1px solid var(--border);border-radius:6px;background:var(--bg);color:var(--fg);font:inherit;transition:border-color .15s ease}input:focus,select:focus,textarea:focus{border-color:var(--accent)}input:focus-visible,select:focus-visible,textarea:focus-visible{outline-offset:0}input:disabled,select:disabled,textarea:disabled{opacity:.5;cursor:not-allowed}textarea{min-height:240px;resize:vertical;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}.btn{padding:6px 12px;border:1px solid var(--border);background:var(--bg);color:var(--fg);border-radius:6px;transition:background-color .15s ease,border-color .15s ease,color .15s ease}.btn:hover:not(:disabled){background:rgba(127,127,127,.08)}.btn.icon{gap:6px}.btn.icon,.btn.icon-only{display:inline-flex;align-items:center}.btn.icon-only{justify-content:center;padding:6px}.btn.active{background:rgba(127,127,127,.15);border-color:rgba(127,127,127,.35)}.btn:disabled{opacity:.5}.btn.primary{background:var(--accent-fill);color:white;border-color:var(--accent-fill)}.btn.primary:hover:not(:disabled){background:var(--accent-fill-hover);border-color:var(--accent-fill-hover)}.btn.danger{background:transparent;color:var(--danger);border-color:var(--danger)}.btn.danger:hover:not(:disabled){background:rgba(220,50,50,.12)}a.btn{text-decoration:none}.link-btn{border:none;background:none;padding:0;color:var(--accent);text-align:left;border-radius:4px;text-decoration:underline;text-underline-offset:2px;transition:color .15s ease}.link-btn:hover{color:var(--accent-hover)}.list-item{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border)}.list-item:last-child{border-bottom:none}.split{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px;gap:20px}@media (max-width:800px){.split{grid-template-columns:1fr}}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;background:rgba(127,127,127,.15)}.status-building{color:var(--status-building)}.status-ready{color:var(--status-ready)}.status-error{color:var(--status-error)}.error{background:rgba(220,50,50,.1);border:1px solid rgba(220,50,50,.4);border-radius:6px;color:var(--error-fg)}.error,.notice{padding:8px 12px;margin:12px 0}.notice{background:rgba(127,127,127,.1);border:1px solid var(--border);border-radius:6px;color:var(--fg)}.debts-scroll{overflow-x:auto;scrollbar-width:thin;scrollbar-color:rgba(127,127,127,.45) transparent}.save-status{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted)}.save-status:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}.save-status.dirty{color:var(--status-building)}.save-status.saved{color:var(--status-ready)}.save-status.failed{color:var(--status-error)}.debts-toolbar{position:-webkit-sticky;position:sticky;top:0;z-index:1;background:var(--bg);padding:8px 0;margin-bottom:12px;border-bottom:1px solid var(--border)}table.debts{border-collapse:collapse;width:100%;font-size:14px}table.debts.compact{width:auto;min-width:min(100%,420px)}table.debts.compact td,table.debts.compact th{padding-left:12px;padding-right:12px}table.debts td,table.debts th{border:0;border-bottom:1px solid var(--border);padding:4px 6px;text-align:center;white-space:nowrap}table.debts thead th{background:var(--bg);color:var(--muted);font-weight:600;font-size:12px;border-bottom:2px solid rgba(127,127,127,.35)}table.debts td.name,table.debts th.name{text-align:left;min-width:120px;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;position:-webkit-sticky;position:sticky;left:0;background:var(--bg)}table.debts td.tong{font-weight:600}table.debts td.carried,table.debts th.carried{border-left:3px solid #ffa73c}table.debts td.nocu,table.debts th.nocu{border-left:3px solid #ffe93c}table.debts td.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}table.debts td.day{min-width:76px}table.debts td.day input:not([type=checkbox]),table.debts td.day input[type=number]{width:46px;padding:2px 4px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}table.debts td input:not([type=checkbox]){width:60px;padding:2px 4px;text-align:right;border:1px solid transparent;border-radius:4px;background:rgba(127,127,127,.06);color:var(--fg);font:inherit;font-size:13px;transition:border-color .15s ease,background-color .15s ease}table.debts td input:not([type=checkbox]):hover:not(:disabled){border-color:var(--border)}table.debts td input:not([type=checkbox]):focus{outline:none;border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent)}table.debts td input:disabled{opacity:.5;cursor:not-allowed}table.debts td.day .tick{width:18px;height:18px;margin-left:4px;padding:0;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;border:1px solid var(--border);border-radius:4px;background:transparent;color:transparent;transition:background-color .15s ease,border-color .15s ease,color .15s ease}table.debts td.day .tick:hover:not(:disabled){border-color:var(--muted);color:var(--muted)}table.debts td.day .tick[aria-pressed=true]{background:#16a34a;border-color:#16a34a;color:#fff}table.debts td.day .tick:disabled{opacity:.5;cursor:not-allowed}table.debts td.day.paid input{color:#1b5e20}table.debts tfoot td{background:rgba(127,127,127,.12);font-weight:600}table.debts td .icon-btn{width:22px;height:22px}table.debts td.group-start,table.debts th.group-start{border-left:3px solid rgba(127,127,127,.65)}table.debts td.conno,table.debts th.conno{background:rgba(127,127,127,.22);font-weight:700;font-size:15px;min-width:84px}table.debts thead th.conno{background:rgba(127,127,127,.22);color:var(--fg)}table.debts td.conno.owing{color:#b71c1c}table.debts td.conno.clear{color:#1b5e20;font-weight:600}table.debts td.conno.credit{color:#1b5e20}@media (prefers-color-scheme:dark){table.debts td.day .tick[aria-pressed=true]{background:#4ade80;border-color:#4ade80;color:#0a0a0a}table.debts td.day.paid input{color:#6ee7a0}table.debts td.conno,table.debts th.conno{background:rgba(176,190,197,.16)}table.debts td.conno.owing{color:#ff6b6b}table.debts td.conno.clear,table.debts td.conno.credit{color:#6ee7a0}}table.debts tfoot td.conno{font-size:16px}table.debts td.act,table.debts th.act{background:var(--bg);border-color:transparent;width:32px}table.debts tbody tr:hover{background:rgba(127,127,127,.05)}table.debts tbody tr:hover td.name{background:color-mix(in srgb,#7f7f7f 5%,var(--bg))}table.debts tbody tr.is-focus{background:color-mix(in srgb,var(--accent) 13%,transparent)}table.debts tbody tr.is-focus td.name{background:color-mix(in srgb,var(--accent) 13%,var(--bg));font-weight:600}.who-owes{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.who-chip{display:inline-flex;align-items:center;gap:8px;padding:4px 10px;border:1px solid var(--border);border-radius:999px;background:var(--bg);color:var(--fg);font-size:13px;line-height:1.4;transition:background-color .15s ease,border-color .15s ease}.who-chip:hover{background:rgba(127,127,127,.08)}.who-chip.active{background:color-mix(in srgb,var(--accent) 13%,transparent);border-color:var(--accent)}.who-amt{font-weight:700;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.who-amt.owing{color:#b71c1c}.who-amt.clear{color:#1b5e20}@media (prefers-color-scheme:dark){.who-amt.owing{color:#ff6b6b}.who-amt.clear{color:#6ee7a0}}@media (prefers-reduced-motion:reduce){.who-chip{transition:none}}table.debts tfoot td.name{background:color-mix(in srgb,#7f7f7f 12%,var(--bg))}.debts-page{max-width:1280px;margin:0 auto;padding:20px}.debts-page h1{margin-top:0;font-size:22px}.debts-legend{color:var(--muted);font-size:12px;line-height:1.6;margin-top:4px}.debts-page table.debts td,.debts-page table.debts th{padding:4px}.debts-page table.debts td.day{min-width:0}.debts-page table.debts td.day input:not([type=checkbox]){width:38px}.debts-page table.debts td input:not([type=checkbox]){width:52px}.debts-page table.debts td.name,.debts-page table.debts th.name{min-width:96px}.debts-page table.debts thead th{white-space:normal;line-height:1.25}@media (max-width:700px){.debts-page{padding:16px 12px}.debts-page table.debts thead th{white-space:nowrap}.debts-page table.debts:has(th.act) td.conno,.debts-page table.debts:has(th.act) th.conno{position:-webkit-sticky;position:sticky;right:0;background:color-mix(in srgb,#7f7f7f 22%,var(--bg))}.debts-page table.debts:has(th.act) thead th.conno{background:color-mix(in srgb,#7f7f7f 22%,var(--bg))}}@media (pointer:coarse){.debts-page table.debts td input:not([type=checkbox]){min-height:36px;padding:4px 6px;font-size:16px;width:64px}.debts-page table.debts td.day input:not([type=checkbox]){width:52px}.debts-page table.debts td.day .tick{width:28px;height:28px;margin-left:6px;border-radius:6px}.debts-page table.debts td .icon-btn{width:36px;height:36px}.debts-page table.debts td.act,.debts-page table.debts th.act{width:44px}.who-chip{min-height:36px;padding:6px 12px;font-size:14px}}@media (max-width:700px) and (prefers-color-scheme:dark){.debts-page table.debts:has(th.act) td.conno{background:color-mix(in srgb,#b0bec5 16%,var(--bg))}.debts-page table.debts:has(th.act) thead th.conno{background:color-mix(in srgb,#b0bec5 16%,var(--bg))}}.admin:has(.tasks-board){max-width:1320px}.tasks-board{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,4fr);grid-gap:24px;gap:24px;align-items:start}@media (min-width:901px){.tasks-note{position:-webkit-sticky;position:sticky;top:16px;max-height:calc(100vh - 32px);overflow-y:auto}}@media (max-width:900px){.tasks-board{grid-template-columns:1fr}.tasks-note{order:-1}}.tasks-pane{border:1px solid var(--border);border-radius:10px;padding:14px 16px 16px}.tasks-pane-head{display:flex;align-items:center;gap:10px;margin-bottom:10px;min-height:32px}.tasks-pane-head h2{margin:0;font-size:15px;flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tasks-tree,.tasks-tree ul{list-style:none;margin:0;padding:0}.tasks-tree ul{margin-left:11px;padding-left:14px;border-left:1px solid var(--border)}.task-row{display:flex;align-items:center;gap:6px;min-height:34px;padding:1px 6px;border-radius:7px;cursor:pointer;transition:background-color .15s ease}.task-row:hover{background:rgba(127,127,127,.08)}.task-row.selected{background:color-mix(in srgb,var(--accent) 13%,transparent)}.task-toggle{flex:0 0 auto;width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border:none;background:none;padding:0;border-radius:4px;color:var(--muted)}.task-toggle svg{transition:transform .15s ease}.task-toggle.open svg{transform:rotate(90deg)}.task-toggle.leaf{visibility:hidden}.task-check{flex:0 0 auto;width:16px;height:16px;margin:0;accent-color:#16a34a;cursor:pointer}.task-check:disabled{cursor:not-allowed}.task-name{flex:1 1 auto;min-width:0;border:1px solid transparent;background:none;padding:4px 6px;border-radius:5px;font-size:14px;cursor:pointer}.task-name:hover{border-color:var(--border)}.task-name[readonly]{text-overflow:ellipsis}.task-name:focus{border-color:var(--accent);outline:none;background:var(--bg);cursor:text}.task-row.done>.task-name{text-decoration:line-through;color:var(--muted)}.task-progress{flex:0 0 auto;font-size:11px;padding:1px 7px;border-radius:999px;background:rgba(127,127,127,.15);color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.task-progress.complete{background:rgba(22,163,74,.15);color:#15803d}.task-note-dot{flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:var(--muted)}.task-more{display:none;position:relative;flex:0 0 auto}.task-more>summary{list-style:none}.task-more>summary::-webkit-details-marker{display:none}.task-more-menu{position:absolute;right:0;top:100%;z-index:2;min-width:168px;padding:4px;display:flex;flex-direction:column;background:var(--bg);border:1px solid var(--border);border-radius:6px}.task-more.up .task-more-menu{top:auto;bottom:100%}.task-more-item{display:flex;align-items:center;gap:10px;min-height:44px;padding:8px 12px;border:0;border-radius:4px;background:none;color:var(--fg);font:inherit;font-size:14px;text-align:left}.task-more-item:hover:not(:disabled){background:rgba(127,127,127,.08)}.task-more-item.danger{color:var(--danger)}.task-more-item:disabled{opacity:.4}.task-actions{display:flex;gap:2px;flex:0 0 auto;opacity:0;transition:opacity .15s ease}.task-row:focus-within .task-actions,.task-row:hover .task-actions{opacity:1}.icon-btn,.task-icon-btn{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border:none;background:none;padding:0;border-radius:5px;color:var(--muted);transition:background-color .15s ease,color .15s ease}.icon-btn:hover:not(:disabled),.task-icon-btn:hover{background:rgba(127,127,127,.15);color:var(--fg)}.icon-btn.danger:hover:not(:disabled),.task-icon-btn.danger:hover{background:rgba(220,50,50,.12);color:var(--danger)}.icon-btn:disabled,.task-icon-btn:disabled{opacity:.4;cursor:not-allowed}.note-status{font-size:12px;color:var(--muted);flex:0 0 auto}.note-preview{margin-top:14px;padding:4px 14px;border:1px dashed var(--border);border-radius:8px;overflow-wrap:break-word}.note-preview img{max-width:100%;border-radius:6px}.note-preview mark{background:rgba(255,235,60,.5);padding:0 2px;border-radius:2px}.tasks-empty{color:var(--muted);text-align:center;padding:16px 0}.undo-notice{display:flex;align-items:center;justify-content:space-between;gap:12px}.wip-pane{border:1px solid color-mix(in srgb,var(--accent) 55%,var(--border));border-radius:10px;padding:14px 16px 16px;margin-bottom:20px}.wip-beacon{flex:0 0 auto;width:8px;height:8px;border-radius:50%;background:var(--accent)}.wip-empty{margin:0;color:var(--muted);font-size:13px;display:flex;align-items:center;gap:5px}.wip-list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));grid-gap:10px;gap:10px}.wip-card{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;background:var(--bg);cursor:pointer;transition:border-color .15s ease}.wip-card:hover{border-color:var(--accent)}.wip-card.selected{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}.wip-card-text{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:2px}.wip-path{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--muted)}.wip-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;font-size:14px}.wip-swatches{display:flex;gap:4px;flex:0 0 auto;padding-right:8px;border-right:1px solid var(--border);opacity:0;transition:opacity .15s ease}.wip-card:focus-within .wip-swatches,.wip-card:hover .wip-swatches{opacity:1}.wip-swatch{width:18px;height:18px;padding:0;border-radius:50%;border:1px solid var(--border);background:none;color:var(--muted);font-size:10px;font-weight:600;line-height:1;font-feature-settings:"tnum";font-variant-numeric:tabular-nums;display:inline-flex;align-items:center;justify-content:center;transition:background-color .15s ease,color .15s ease,border-color .15s ease}.wip-swatch.p1{--lane:var(--lane-1)}.wip-swatch.p2{--lane:var(--lane-2)}.wip-swatch.p3{--lane:var(--lane-3)}.wip-swatch.p4{--lane:var(--lane-4)}.wip-swatch:hover:not(:disabled){border-color:var(--lane);color:var(--lane)}.wip-swatch.on{border:2px solid var(--lane);color:var(--lane);font-weight:700}.wip-swatches:has(.wip-swatch.on){opacity:1}@media (hover:hover){.wip-card:not(:hover):not(:focus-within) .wip-swatches:has(.wip-swatch.on) .wip-swatch:not(.on){display:none}}.wip-swatch:disabled{cursor:not-allowed}.wip-card.dragging{opacity:.4}.wip-card.drop-target{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 13%,transparent)}.wip-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.wip-hint{font-size:12px;color:var(--muted);flex:0 0 auto}.wip-card-actions{display:flex;gap:2px;flex:0 0 auto}.task-wip-btn{opacity:0;transition:opacity .15s ease,background-color .15s ease,color .15s ease}.task-row:focus-within .task-wip-btn,.task-row:hover .task-wip-btn,.task-wip-btn.active{opacity:1}.task-wip-btn.active{color:var(--accent)}.task-row.done .task-wip-btn{display:none}@media (prefers-color-scheme:dark){.task-check{accent-color:#4ade80}.task-progress.complete{color:#4ade80}.note-preview mark{background:rgba(255,235,60,.32);color:var(--fg)}}@media (hover:none){.task-actions,.task-wip-btn,.wip-swatches{opacity:1}.wip-hint{display:none}}@media (pointer:coarse){.task-row{min-height:44px;gap:4px}.task-toggle{width:24px;height:32px}.task-check{width:22px;height:22px}.icon-btn,.task-icon-btn{width:36px;height:36px}.task-name,textarea{font-size:16px}.task-actions{display:none}.task-more{display:block}.task-wip-btn:not(.active){display:none}.tasks-note .tasks-pane-head h2{white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.tasks-tree ul{margin-left:6px;padding-left:8px}.wip-card{flex-wrap:wrap;padding:10px 12px}.wip-card-text{flex:1 1 100%}.wip-card-actions{margin-left:auto}.wip-swatches{gap:8px}.wip-swatch{width:24px;height:24px;font-size:11px}}.wip-moves{display:none;gap:2px;padding-right:6px;margin-right:4px;border-right:1px solid var(--border)}@media (pointer:coarse){.wip-moves{display:inline-flex}}@media (prefers-reduced-motion:reduce){.btn,.link-btn,.task-actions,.task-icon-btn,.task-row,.task-toggle svg,.task-wip-btn,.wip-card,.wip-swatch,.wip-swatches,a,input,select,textarea{transition:none}}