.proj-grid[data-v-31f3f307]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}.proj-card[data-v-31f3f307]{display:block;background:var(--card, #fff);border:1px solid var(--line);border-radius:12px;padding:14px 16px;text-decoration:none;color:inherit;transition:box-shadow .15s}.proj-card[data-v-31f3f307]:hover{box-shadow:0 2px 10px #00000014}.proj-card.dim[data-v-31f3f307]{opacity:.65}.proj-head[data-v-31f3f307]{display:flex;align-items:center;gap:8px}.proj-name[data-v-31f3f307]{font-weight:600;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proj-range[data-v-31f3f307]{color:var(--ink-soft);font-size:.82rem;margin:4px 0 10px}.proj-row[data-v-31f3f307]{display:flex;align-items:center;gap:8px;margin-top:8px;font-size:.82rem}.proj-label[data-v-31f3f307]{color:var(--ink-soft);min-width:2.4em}.proj-val[data-v-31f3f307]{color:var(--ink-soft);min-width:7em;text-align:right;white-space:nowrap}.bar[data-v-31f3f307]{flex:1;height:8px;border-radius:4px;background:var(--line);overflow:hidden}.fill[data-v-31f3f307]{height:100%;border-radius:4px}.fill.time[data-v-31f3f307]{background:#3a6ea5}.fill.time.over[data-v-31f3f307]{background:#b4442c}.fill.done[data-v-31f3f307]{background:var(--brand, #2e6e4e)}.fill.manual[data-v-31f3f307]{background:#b8860b}.chip.warn[data-v-31f3f307]{background:#fdf3e7;color:#b4442c;border:1px solid #e8c9a8}:root{color-scheme:light;--bg: #f6f5f1;--paper: #ffffff;--ink: #23272b;--ink-soft: #6b7280;--line: #e5e2da;--brand: #2e6e4e;--brand-strong: #245a3f;--brand-soft: #e7f0eb;--danger: #b4442c;--radius: 10px;font-size:16px}*{box-sizing:border-box}body{margin:0;font-family:PingFang SC,Hiragino Sans GB,Microsoft YaHei,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased}#app{min-height:100vh}.shell{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:20px;padding:0 22px;height:54px;background:var(--paper);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:10}.brand{font-weight:700;letter-spacing:-.02em;color:var(--ink);text-decoration:none;display:flex;align-items:center;gap:8px}.brand:before{content:"";width:20px;height:20px;border-radius:5px;background:var(--brand) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath d='M9 16.5l5 5 9-11' stroke='%23fff' stroke-width='3.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/70% no-repeat}.nav{display:flex;gap:4px}.nav a{color:var(--ink-soft);text-decoration:none;padding:6px 12px;border-radius:8px;transition:background .15s,color .15s}.nav a:hover{background:var(--brand-soft);color:var(--brand-strong)}.nav a.router-link-active{color:var(--brand-strong);background:var(--brand-soft);font-weight:600}.spacer{flex:1}.who{color:var(--ink-soft);font-size:.9rem}.main{flex:1;width:100%;max-width:860px;margin:0 auto;padding:28px 20px 60px}.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:22px;margin-bottom:18px}.card h2{margin:0 0 14px;font-size:1.05rem}.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}.field label{font-size:.85rem;color:var(--ink-soft)}input,select{font:inherit;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:#fcfbf9;color:var(--ink);outline:none;transition:border-color .15s,box-shadow .15s}input:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}button{font:inherit;cursor:pointer;border:none;border-radius:8px;padding:9px 18px;background:var(--brand);color:#fff;font-weight:600;transition:background .15s}button:hover{background:var(--brand-strong)}button:disabled{opacity:.55;cursor:not-allowed}button.ghost{background:transparent;color:var(--ink-soft);font-weight:500;padding:6px 12px}button.ghost:hover{background:var(--brand-soft);color:var(--brand-strong)}.msg{font-size:.9rem;margin:10px 0 0}.msg.error{color:var(--danger)}.msg.ok{color:var(--brand-strong)}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 18% 12%,var(--brand-soft) 0%,transparent 42%),var(--bg)}.auth-card{width:100%;max-width:380px;background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:30px 28px 26px;box-shadow:0 12px 40px #23272b0f}.auth-logo{display:flex;align-items:center;gap:10px;margin-bottom:4px}.auth-logo .mark{width:34px;height:34px;border-radius:9px;background:var(--brand) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath d='M9 16.5l5 5 9-11' stroke='%23fff' stroke-width='3.6' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/68% no-repeat}.auth-logo h1{font-size:1.3rem;margin:0;letter-spacing:-.02em}.auth-sub{color:var(--ink-soft);font-size:.88rem;margin:0 0 20px}.tabs{display:flex;gap:4px;margin-bottom:18px;background:var(--bg);border-radius:9px;padding:4px}.tabs button{flex:1;background:transparent;color:var(--ink-soft);font-weight:500;padding:7px 0}.tabs button.active{background:var(--paper);color:var(--ink);font-weight:600;box-shadow:0 1px 3px #00000012}.tabs button:hover{background:var(--paper)}.auth-card form button[type=submit]{width:100%;margin-top:4px}.page-title{font-size:1.4rem;margin:0 0 4px;letter-spacing:-.01em}.page-date{color:var(--ink-soft);font-size:.9rem;margin:0 0 22px}.empty{border:1.5px dashed var(--line);border-radius:var(--radius);padding:34px 24px;text-align:center;color:var(--ink-soft);background:#ffffff8c}.empty strong{color:var(--ink)}.kv{display:grid;grid-template-columns:96px 1fr;row-gap:8px;font-size:.92rem}.kv dt{color:var(--ink-soft)}.kv dd{margin:0}@media (max-width: 560px){.nav a{padding:6px 8px}.who{display:none}.main{padding:20px 14px 48px}}.body{display:flex;flex:1;min-height:0}.sidebar{width:224px;flex-shrink:0;background:var(--paper);border-right:1px solid var(--line);padding:14px 10px 20px;display:flex;flex-direction:column;gap:4px;overflow-y:auto;position:sticky;top:54px;height:calc(100vh - 54px)}.menu-btn{display:none;font-size:1.05rem;padding:6px 10px}.side-nav{display:flex;flex-direction:column;gap:2px}.side-nav a{display:flex;align-items:center;gap:9px;padding:8px 12px;border-radius:8px;color:var(--ink);text-decoration:none;font-size:.95rem}.side-nav a:hover{background:var(--brand-soft)}.side-nav a.on{background:var(--brand-soft);color:var(--brand-strong);font-weight:600}.side-nav a.dim{color:var(--ink-soft)}.side-nav .ln{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.side-nav .cnt{font-size:.78rem;color:var(--ink-soft)}.side-sec{display:flex;align-items:center;justify-content:space-between;margin:14px 4px 4px;padding:0 8px;font-size:.78rem;color:var(--ink-soft);letter-spacing:.05em}.side-archived{margin-top:8px}.side-archived summary{cursor:pointer;padding:4px 12px;font-size:.8rem;color:var(--ink-soft)}.side-bottom{margin-top:auto;padding-top:14px;border-top:1px solid var(--line)}.dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.dot.big{width:14px;height:14px;display:inline-block;margin-right:4px}.backdrop{display:none}.quick-add{display:flex;align-items:center;gap:10px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:4px 14px;margin-bottom:18px}.quick-add input{flex:1;border:none;background:transparent;padding:9px 0;box-shadow:none!important}.qa-plus{color:var(--brand);font-weight:700}.quick-add.sub{margin:6px 0 0;padding:0 10px}.sec{margin-bottom:22px}.sec-title{font-size:.85rem;color:var(--ink-soft);margin:0 0 8px 4px;font-weight:600}.sec-title.red{color:var(--danger)}.task-row{display:flex;align-items:flex-start;gap:12px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:11px 14px;margin-bottom:8px;cursor:pointer;transition:border-color .15s,box-shadow .15s}.task-row:hover{border-color:var(--brand)}.task-row.done .t-title{text-decoration:line-through;color:var(--ink-soft)}.task-row.pr-3{border-left:3px solid var(--danger)}.task-row.pr-2{border-left:3px solid #b8860b}.task-row.pr-1{border-left:3px solid #3a6ea5}.check{width:20px;height:20px;flex-shrink:0;margin-top:1px;border:2px solid var(--line);border-radius:50%;background:transparent;padding:0}.check:hover{border-color:var(--brand);background:var(--brand-soft)}.check.checked{border-color:var(--brand);background:var(--brand) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cpath d='M9 16.5l5 5 9-11' stroke='%23fff' stroke-width='4' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/70% no-repeat}.check.big{width:24px;height:24px}.t-main{flex:1;min-width:0}.t-title{word-break:break-word}.t-meta{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.chip{font-size:.75rem;color:var(--ink-soft);background:var(--bg);border-radius:5px;padding:1px 7px}.chip.time{color:var(--brand-strong);background:var(--brand-soft)}.chip.time.red{color:#fff;background:var(--danger)}.drawer-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;background:#23272b52;display:flex;justify-content:flex-end}.drawer{width:min(440px,100%);height:100%;background:var(--paper);display:flex;flex-direction:column;box-shadow:-12px 0 40px #0000001f}.drawer-head{display:flex;align-items:center;gap:12px;padding:16px 18px;border-bottom:1px solid var(--line)}.d-title{flex:1;border:none;font-size:1.05rem;font-weight:600;background:transparent;box-shadow:none!important;padding:4px 0}.drawer-body{flex:1;overflow-y:auto;padding:18px}.drawer-foot{display:flex;gap:8px;padding:14px 18px;border-top:1px solid var(--line)}.d-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}textarea{font:inherit;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:#fcfbf9;color:var(--ink);outline:none;resize:vertical}textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.seg{display:flex;background:var(--bg);border-radius:8px;padding:3px;gap:3px}.seg button{flex:1;background:transparent;color:var(--ink-soft);font-weight:500;padding:6px 0}.seg button.on{background:var(--paper);color:var(--ink);font-weight:600;box-shadow:0 1px 3px #00000012}.inline-check{display:flex;align-items:center;gap:8px;margin-bottom:14px;font-size:.9rem;color:var(--ink-soft);cursor:pointer}.inline-check input{width:auto}.sub-item{display:flex;align-items:center;gap:10px;padding:6px 2px}.sub-item .check{width:17px;height:17px}.sub-item span{flex:1;font-size:.93rem}.sub-item .struck{text-decoration:line-through;color:var(--ink-soft)}button.mini{padding:2px 8px;font-size:.85rem}button.danger{color:var(--danger)}button.danger:hover{background:#f8e9e5;color:var(--danger)}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#23272b52;display:grid;place-items:center;padding:20px}.modal{width:100%;max-width:360px;background:var(--paper);border-radius:14px;padding:22px;box-shadow:0 20px 60px #0000002e}.modal h2{margin:0 0 16px;font-size:1.05rem}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:6px}.palette{display:flex;gap:8px;flex-wrap:wrap}.swatch{width:26px;height:26px;border-radius:50%;padding:0;border:2px solid transparent}.swatch.on{border-color:var(--ink);transform:scale(1.12)}.list-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:6px}.list-head .page-title{margin:0;display:flex;align-items:center;gap:8px}.list-actions{display:flex;gap:2px}.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}.cal-head .page-title{margin:0}.cal-nav{display:flex;gap:2px}.cal-nav button{font-size:1rem}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-bottom:6px}.cal-grid.head{margin-bottom:4px}.cal-w{text-align:center;font-size:.75rem;color:var(--ink-soft);padding:4px 0}.cal-cell{aspect-ratio:1 / .82;background:var(--paper);border:1px solid var(--line);border-radius:8px;padding:6px 8px;cursor:pointer;position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:2px;transition:border-color .15s}.cal-cell:hover{border-color:var(--brand)}.cal-cell.blank{background:transparent;border-color:transparent;cursor:default}.cal-cell.today .cal-d{background:var(--brand);color:#fff}.cal-cell.on{border-color:var(--brand);box-shadow:0 0 0 2px var(--brand-soft)}.cal-d{font-size:.85rem;width:24px;height:24px;border-radius:50%;display:grid;place-items:center}.cal-n{font-size:.72rem;color:var(--brand-strong);background:var(--brand-soft);border-radius:999px;padding:0 7px;margin-top:auto}.trash-row{display:flex;align-items:center;gap:10px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:11px 14px;margin-bottom:8px}.channel{border:1px solid var(--line);border-radius:8px;padding:10px 14px;margin-bottom:10px;background:#fcfbf9}.channel summary{cursor:pointer;font-weight:600;display:flex;align-items:center;gap:8px}.channel[open] summary{margin-bottom:12px}.test-results{list-style:none;margin:10px 0 0;padding:0;font-size:.88rem}.test-results .msg{display:inline}.rem-add{display:flex;gap:6px;flex-wrap:wrap;align-items:center}.rem-add select,.rem-add input{padding:6px 9px;font-size:.9rem}.record-row{background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:11px 14px;margin-bottom:8px}.rec-logs{margin-top:8px;border-top:1px dashed var(--line);padding-top:8px}.rec-log{display:flex;gap:8px;align-items:center;font-size:.85rem;margin-bottom:3px;flex-wrap:wrap}.rec-log .msg{margin:0}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.8rem;color:var(--ink-soft)}.tpl-card{display:flex;align-items:center;gap:8px;background:var(--paper);border:1px solid var(--line);border-radius:var(--radius);padding:13px 14px;margin-bottom:8px}.tpl-item{border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin-bottom:8px;background:#fcfbf9}.tpl-item-head{display:flex;gap:4px;align-items:center;margin-bottom:6px}.tpl-title{flex:1;border:none;background:transparent;box-shadow:none!important;padding:4px 2px;font-weight:500}.off-chips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.chip-x{background:none;border:none;color:inherit;padding:0 0 0 4px;font-size:.75rem;cursor:pointer;font-weight:700}.off-editor{display:flex;gap:8px;align-items:center;flex-wrap:wrap;border:1px dashed var(--brand);border-radius:8px;padding:10px 12px;margin-bottom:12px;background:var(--brand-soft);font-size:.9rem}.modal.wizard{max-width:460px;max-height:86vh;overflow-y:auto}.steps{display:flex;gap:12px;margin-bottom:16px;font-size:.85rem;color:var(--ink-soft)}.steps .on{color:var(--brand-strong);font-weight:700}.preview-list{max-height:44vh;overflow-y:auto;margin-bottom:8px}.pv-item{border:1px solid var(--line);border-radius:8px;padding:8px 10px;margin-bottom:8px}.pv-item.dim{opacity:.5}.pv-title{display:flex;align-items:center;gap:6px;font-weight:600;margin-bottom:4px}.pv-off{display:flex;align-items:center;gap:8px;font-size:.9rem;padding:3px 0;cursor:pointer}.pv-off input{width:auto}.pv-off.expired{color:var(--danger)}.cal-lunar{font-size:.68rem;color:var(--ink-soft);line-height:1.1}.cal-lunar.special{color:var(--brand-strong);font-weight:600}.cal-grid.week .cal-cell.week{aspect-ratio:auto;min-height:130px;cursor:pointer;display:flex;flex-direction:column;gap:3px}.wk-head{display:flex;align-items:baseline;gap:6px;margin-bottom:2px}.wk-task{font-size:.75rem;background:var(--brand-soft);color:var(--brand-strong);border-radius:5px;padding:2px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wk-task.done{text-decoration:line-through;opacity:.6;background:var(--bg);color:var(--ink-soft)}.top-search{width:200px;padding:6px 12px;font-size:.88rem;border-radius:999px;background:var(--bg)}@media (max-width: 640px){.top-search{width:110px}}@media (max-width: 768px){.menu-btn{display:inline-block}.sidebar{position:fixed;left:0;top:54px;bottom:0;z-index:30;height:auto;transform:translate(-100%);transition:transform .2s ease;box-shadow:12px 0 40px #0000001a}.sidebar.open{transform:translate(0)}.backdrop{display:block;position:fixed;top:54px;right:0;bottom:0;left:0;z-index:25;background:#23272b40}.d-grid{grid-template-columns:1fr}.cal-cell{aspect-ratio:1 / 1;padding:4px 5px}.cal-n{padding:0 5px}.list-actions{width:100%}}
