:root{--paper:#f5f1e6;--paper-deep:#ece6d5;--card:#fffdf6;--ink:#2a251c;--ink-soft:#7d745f;--ink-faint:#b3a98f;--line:#ddd4bd;--line-soft:#e9e2cf;--accent:#c73e1d;--accent-soft:#f6ded5;--wash:#f0ebdc;--rail-w:300px;--day-w:84px;--week-gap-w:12px;--font-display:"Zen Old Mincho", serif;--font-body:"Zen Kaku Gothic New", sans-serif}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{font-family:var(--font-body);color:var(--ink);background:radial-gradient(1200px 600px at 20% -10%, #fbf8ef 0%, transparent 60%), radial-gradient(900px 500px at 110% 110%, #eee7d2 0%, transparent 55%), var(--paper);-webkit-font-smoothing:antialiased}#root{height:100%}.app{flex-direction:column;height:100vh;display:flex}.topbar{flex-wrap:wrap;align-items:center;gap:20px;padding:6px 12px;display:flex}.brand{font-family:var(--font-display);letter-spacing:.14em;align-items:center;gap:8px;font-size:17px;font-weight:900;display:flex}.brand-stamp{background:var(--accent);color:#fff8ef;letter-spacing:0;border-radius:5px;justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;display:inline-flex;transform:rotate(-4deg);box-shadow:1px 2px #2a251c2e}.board-tabs{align-items:center;gap:6px;display:flex}.board-tab{font-family:var(--font-body);color:var(--ink-soft);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:4px 14px;font-size:12.5px;font-weight:500;transition:all .15s}.board-tab:hover{border-color:var(--ink-soft);color:var(--ink)}.board-tab.is-active{background:var(--ink);border-color:var(--ink);color:var(--paper)}.board-tab-new{border-style:dashed}.board-range{color:var(--ink-soft);align-items:baseline;gap:12px;margin-left:auto;font-size:12px;display:flex}.board-days,.board-skip{color:var(--ink-faint);font-size:12px}.settings-btn{border:1px solid var(--line);color:var(--ink-soft);cursor:pointer;background:0 0;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;padding:0;font-size:13px;line-height:1;transition:all .15s;display:flex}.settings-btn:hover{border-color:var(--ink-soft);color:var(--ink);transform:rotate(30deg)}.dialog-backdrop{z-index:60;background:#2a251c40;position:fixed;inset:0}.dialog{z-index:61;background:var(--card);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:14px;width:440px;max-width:calc(100vw - 32px);max-height:calc(100vh - 64px);padding:20px;display:flex;position:fixed;top:50%;left:50%;overflow-y:auto;transform:translate(-50%,-50%);box-shadow:0 4px 12px #2a251c24,0 24px 64px -16px #2a251c66}.dialog-title{letter-spacing:.06em;font-size:15px;font-weight:700}.dialog-field{flex-direction:column;gap:6px;display:flex}.dialog-label{letter-spacing:.08em;color:var(--ink-soft);font-size:11px;font-weight:700}.dialog-input{font-family:var(--font-body);color:var(--ink);background:var(--wash);border:1px solid #0000;border-radius:6px;outline:none;padding:7px 10px;font-size:13px;transition:border-color .12s}.dialog-input:focus{border-color:var(--accent);background:var(--card)}.dialog-dates{align-items:center;gap:8px;display:flex}.dialog-dates .dialog-input{flex:1;min-width:0}.dialog-tilde{color:var(--ink-faint);font-size:12px}.dialog-icon-btn{color:var(--ink-soft);cursor:pointer;background:#2a251c14;border:none;border-radius:50%;flex-shrink:0;width:20px;height:20px;padding:0;font-size:11px}.dialog-icon-btn:hover{background:var(--accent);color:#fff}.dialog-add-btn{font-family:var(--font-body);color:var(--ink-soft);border:1px dashed var(--line);cursor:pointer;background:0 0;border-radius:6px;padding:6px;font-size:11.5px;transition:all .12s}.dialog-add-btn:hover{color:var(--accent);border-color:var(--accent)}.dialog-note{color:var(--ink-faint);font-size:11px;line-height:1.6}.dialog-footer{align-items:center;gap:8px;margin-top:4px;display:flex}.dialog-spacer{flex:1}.dialog-btn{font-family:var(--font-body);color:var(--ink-soft);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:6px 16px;font-size:12.5px;font-weight:500;transition:all .15s}.dialog-btn:hover{border-color:var(--ink-soft);color:var(--ink)}.dialog-primary{background:var(--ink);border-color:var(--ink);color:var(--paper)}.dialog-primary:hover{color:var(--card)}.dialog-primary:disabled{opacity:.4;cursor:default}.dialog-danger{font-family:var(--font-body);color:var(--accent);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:999px;padding:6px 10px;font-size:11.5px;transition:all .12s}.dialog-danger:hover{border-color:var(--accent)}.dialog-danger.is-armed{background:var(--accent);color:#fff;font-weight:700}.matrix-scroll{border-top:1px solid var(--line);background:var(--card);flex:1;overflow:auto}.matrix{grid-auto-rows:minmax(58px,auto);min-width:max-content;min-height:100%;display:grid}.issue-row{display:contents}.rail-head,.day-head,.matrix>.gap-cell{z-index:3;position:sticky;top:0}.rail-head{z-index:5;background:var(--card);border-bottom:1px solid var(--line);border-right:1px solid var(--line);justify-content:space-between;align-items:flex-end;padding:10px 14px;display:flex;left:0}.day-head{background:var(--card);border-bottom:1px solid var(--line);flex-direction:column;justify-content:flex-end;align-items:center;gap:1px;padding:8px 0 6px;display:flex;position:sticky}.day-month{color:var(--ink-soft);letter-spacing:.1em;font-size:10px;font-weight:700}.day-num{font-size:15px;font-weight:700;line-height:1.1}.day-dow{color:var(--ink-soft);letter-spacing:.2em;font-size:10px}.day-head.is-today{background:var(--accent-soft)}.gap-cell{background:repeating-linear-gradient(-45deg, transparent 0 5px, #2a251c0b 5px 6px), var(--wash);border-left:1px solid var(--line-soft);border-right:1px solid var(--line-soft);justify-content:center;align-items:center;display:flex;overflow:visible}.matrix>.gap-cell{border-bottom:1px solid var(--line);background-color:var(--card)}.rail-cell{z-index:2;background:var(--card);border-right:1px solid var(--line);border-top:1px solid var(--line-soft);flex-direction:column;justify-content:center;gap:6px;padding:10px 14px 10px 20px;display:flex;position:sticky;left:0}.rail-cell.is-drag-over{background:var(--wash);box-shadow:inset 3px 0 0 var(--accent)}.row-handle{color:var(--ink-faint);cursor:grab;opacity:0;-webkit-user-select:none;user-select:none;font-size:11px;transition:opacity .12s;position:absolute;top:50%;left:3px;transform:translateY(-50%)}.rail-cell:hover .row-handle{opacity:1}.group-tag{color:#8c4a5e;letter-spacing:.04em;background:#f7e3ea;border-radius:3px;align-self:flex-start;padding:2px 7px;font-size:10px;font-weight:700}.issue-main{justify-content:space-between;align-items:center;gap:10px;display:flex}.issue-title{cursor:text;flex:1;font-size:12.5px;font-weight:500;line-height:1.5}.issue-link{color:var(--ink-faint);margin-left:4px;font-size:11px;text-decoration:none}.issue-link:hover{color:var(--accent)}.issue-title-edit{text-align:left;background:var(--wash);border-radius:3px;flex:1;height:auto;min-height:38px;padding:2px 4px;line-height:1.5}.rail-del{color:#2a251c99;cursor:pointer;opacity:0;background:#2a251c1a;border:none;border-radius:50%;justify-content:center;align-items:center;width:15px;height:15px;padding:0;font-size:10px;line-height:1;transition:opacity .12s;display:flex;position:absolute;top:3px;right:3px}.rail-cell:hover .rail-del{opacity:1}.rail-del:hover{background:var(--accent);color:#fff}.add-issue-btn{font-family:var(--font-body);color:var(--ink-faint);border:1px dashed var(--line);cursor:pointer;text-align:left;background:0 0;border-radius:6px;padding:8px 12px;font-size:12px;transition:all .12s}.add-issue-btn:hover{color:var(--accent);border-color:var(--accent)}.add-issue-input{font-family:var(--font-body);color:var(--ink);background:var(--wash);border:none;border-bottom:1px solid var(--accent);border-radius:3px 3px 0 0;outline:none;width:100%;padding:8px 8px 6px;font-size:12.5px}.add-issue-input::placeholder{color:var(--ink-faint)}.cell-disabled,.cell-filler{cursor:default}.trail-cell{background:repeating-linear-gradient(-45deg, transparent 0 5px, #2a251c0b 5px 6px), var(--wash);border-left:1px solid var(--line-soft)}.trail-head{z-index:3;border-bottom:1px solid var(--line);background-color:var(--card);position:sticky;top:0}.trail-event{border-bottom:1px solid var(--line)}.rail-filler{padding:0}.assignees{flex-shrink:0;display:flex}.assignee-chip{color:#fff;border:2px solid var(--card);letter-spacing:.02em;border-radius:50%;justify-content:center;align-items:center;width:22px;height:22px;font-size:9px;font-weight:700;display:inline-flex}.assignee-chip+.assignee-chip{margin-left:-7px}.cell{cursor:pointer;background-image:radial-gradient(circle at 0 0,#2a251c2e 1.2px,#0000 1.8px),radial-gradient(circle at 100% 0,#2a251c2e 1.2px,#0000 1.8px),radial-gradient(circle at 0 100%,#2a251c2e 1.2px,#0000 1.8px),radial-gradient(circle at 100% 100%,#2a251c2e 1.2px,#0000 1.8px);background-repeat:no-repeat;transition:background-color .1s;position:relative}.cell.has-stack:hover,.cell.has-stack.is-editing{z-index:8}.cell.is-today{background-color:#c73e1d0b}.cell.is-hover-col,.issue-row:hover .cell{background-color:#2a251c09}.issue-row:hover .rail-cell,.day-head.is-hover-col{background:var(--wash)}.day-head.is-today.is-hover-col{background:var(--accent-soft)}.cell:hover{background-color:#c73e1d12!important}.cell-plus{opacity:0;color:var(--accent);pointer-events:none;justify-content:center;align-items:center;font-size:13px;transition:opacity .12s;display:flex;position:absolute;inset:0}.cell:hover .cell-plus{opacity:1}.add-slot{top:calc(50% - 26px - (var(--n,1) - 1) * 2.5px + var(--i,0) * 5px);left:calc(4px - (var(--n,1) - 1) * 2.5px + var(--i,0) * 5px);border:1.5px dashed var(--ink-faint);width:calc(100% - 8px);height:52px;color:var(--accent);cursor:pointer;opacity:0;pointer-events:none;background:#fffdf6b3;border-radius:3px;justify-content:center;align-items:center;padding:0;font-size:14px;transition:transform .15s,opacity .15s;display:flex;position:absolute}.cell.has-stack:hover .add-slot{transform:translate(calc(var(--i,0) * -5px), calc(var(--i,0) * 57px));opacity:1;pointer-events:auto}.add-slot:hover{border-color:var(--accent);background:var(--accent-soft)}.chip{top:calc(50% - 26px - (var(--n,1) - 1) * 2.5px + var(--i,0) * 5px);left:calc(4px - (var(--n,1) - 1) * 2.5px + var(--i,0) * 5px);width:calc(100% - 8px);height:52px;z-index:calc(var(--i,0) + 1);text-align:center;cursor:grab;border-radius:3px;justify-content:center;align-items:center;padding:4px 6px;transition:transform .15s,box-shadow .15s;display:flex;position:absolute;box-shadow:0 1px 2px #2a251c24,0 2px 5px -2px #2a251c1a}.cell.has-stack:hover .chip,.cell.has-stack.is-editing .chip{transform:translate(calc(var(--i,0) * -5px), calc(var(--i,0) * 57px));box-shadow:0 2px 4px #2a251c29,0 6px 14px -4px #2a251c38}.cell.has-stack:hover .chip:after{content:"";height:14px;position:absolute;top:100%;left:0;right:0}.chip.is-dragging{opacity:.35;cursor:grabbing}.chip-focus{background:#fdf3a4}.chip-sync{background:#dbcff5}.chip-label{color:#3d3728;overflow-wrap:anywhere;word-break:break-word;font-weight:500;line-height:1.3}.chip:has(.chip-event) .chip-label{padding-top:8px}.chip-sync .chip-label{color:#3c3055}.chip-del{color:#2a251ca6;cursor:pointer;opacity:0;background:#2a251c1f;border:none;border-radius:50%;justify-content:center;align-items:center;width:15px;height:15px;font-size:10px;line-height:1;transition:opacity .12s;display:flex;position:absolute;top:1px;right:1px}.chip:hover .chip-del,.event-card:hover .chip-del{opacity:1}.chip-del:hover{background:var(--accent);color:#fff}.chip-bind{color:#3c5a75;cursor:pointer;opacity:0;background:#3c5a7524;border:none;border-radius:50%;justify-content:center;align-items:center;width:15px;height:15px;padding:0;font-size:8px;line-height:1;transition:opacity .12s;display:flex;position:absolute;top:1px;left:1px}.chip:hover .chip-bind{opacity:1}.chip-bind:hover{color:#fff;background:#3c5a75}.inline-edit{resize:none;text-align:center;width:100%;height:42px;font-family:var(--font-body);color:inherit;background:0 0;border:none;outline:none;font-weight:500;line-height:1.3}.bind-menu-empty{color:var(--ink-faint);font-size:11px}.unbind-btn{font-family:var(--font-body);color:var(--ink-soft);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;align-self:flex-start;padding:4px 10px;font-size:11px;transition:all .12s}.unbind-btn:hover{border-color:var(--accent);color:var(--accent)}.event-rail{z-index:2;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#f0f4f8;align-items:center;padding:6px 14px;display:flex;position:sticky;left:0}.event-cell{border-bottom:1px solid var(--line);cursor:pointer;background:#f5f8fb;flex-direction:column;gap:4px;min-height:36px;padding:5px 4px;transition:background .1s;display:flex}.event-cell:hover,.event-cell.is-hover-col{background:#ebf1f7}.event-cell.is-today{box-shadow:inset 0 -1px 0 var(--line);background:#f3eff0}.event-card{text-align:center;cursor:grab;background:#c9dcec;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;height:52px;padding:4px 6px;transition:transform .1s,box-shadow .1s;display:flex;position:relative;box-shadow:0 1px 2px #2a251c24,0 2px 5px -2px #2a251c1a}.event-card:hover{transform:translateY(-1px);box-shadow:0 2px 4px #2a251c29,0 4px 9px -3px #2a251c24}.event-card.is-dragging{opacity:.35;cursor:grabbing}.event-card-label{color:#2c4358;overflow-wrap:anywhere;word-break:break-word;font-weight:500;line-height:1.3}.chip-event{color:#3c5a75;letter-spacing:.02em;white-space:nowrap;text-align:center;font-size:7.5px;font-weight:700;position:absolute;top:2px;left:4px;right:4px;overflow:hidden}.status-dot{cursor:pointer;border:none;border-radius:50%;flex-shrink:0;align-self:flex-start;width:10px;height:10px;margin-top:5px;padding:0}.status-dot.st-todo{border:1.5px solid var(--ink-faint);background:0 0}.status-dot.st-doing{background:#7a9464}.status-dot.st-done{background:var(--ink-faint)}.issue-row.st-done .issue-title{color:var(--ink-faint)}.backdrop{z-index:40;position:fixed;inset:0}.popover{z-index:50;background:var(--card);border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:10px;padding:12px;display:flex;position:fixed;box-shadow:0 2px 6px #2a251c1f,0 16px 40px -12px #2a251c4d}.popover-kind{background:var(--wash);border-radius:7px;gap:4px;padding:3px;display:flex}.kind-btn{font-family:var(--font-body);color:var(--ink-soft);cursor:pointer;background:0 0;border:none;border-radius:5px;flex:1;padding:6px 4px;font-size:11.5px;font-weight:500;transition:all .12s}.kind-btn.kind-focus.is-active{color:#3d3728;background:#fdf3a4;font-weight:700}.kind-btn.kind-sync.is-active{color:#3c3055;background:#dbcff5;font-weight:700}.popover-section-label{letter-spacing:.08em;color:var(--ink-soft);font-size:10.5px;font-weight:700}.popover-events{flex-direction:column;gap:6px;display:flex}.popover-event-opts{flex-wrap:wrap;gap:5px;display:flex}.event-opt{font-family:var(--font-body);color:#3c5a75;cursor:pointer;background:0 0;border:1px solid #a9c4da;border-radius:999px;padding:4px 10px;font-size:11px;transition:all .12s}.event-opt:hover{border-color:#5b7fa6}.event-opt.is-active{color:#2c4358;background:#c9dcec;border-color:#5b7fa6;font-weight:700}.popover-presets{flex-wrap:wrap;gap:5px;display:flex}.preset-btn{font-family:var(--font-body);color:var(--ink);border:1px solid var(--line);cursor:pointer;background:0 0;border-radius:999px;padding:4px 11px;font-size:11.5px;transition:all .12s}.preset-btn:hover{border-color:var(--accent);color:var(--accent)}.popover-input{font-family:var(--font-body);color:var(--ink);border:none;border-bottom:1px solid var(--line);background:0 0;outline:none;padding:6px 2px;font-size:12.5px}.popover-input:focus{border-bottom-color:var(--accent)}.popover-input::placeholder{color:var(--ink-faint)}
