:root{--paper:#f3f5f4;--surface:#ffffff;--sunken:#f8f9f8;--ink:#17212b;--ink-2:#3b4856;--muted:#6b7783;--faint:#9aa5ae;--line:#dfe4e6;--line-2:#ecefef;--indigo:#1f4b6e;--indigo-deep:#173a56;--indigo-soft:#e7eef3;--gold:#a87a1f;--gold-line:#c9a04a;--gold-soft:#f7f0de;--sage:#2c6a55;--sage-soft:#e4efe9;--rust:#ad452c;--rust-soft:#f8e9e4;--violet:#5b4a8a;--violet-soft:#eeebf5;--serif:"Songti SC","Noto Serif SC","Source Han Serif SC","STSong","SimSun",serif;--sans:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans SC",sans-serif;--r:6px;--r-lg:10px}*{box-sizing:border-box}body,html{height:100%}body{background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:14px;line-height:1.6;-webkit-font-smoothing:antialiased}body,h1,h2,h3,h4,p{margin:0}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}:focus-visible{outline:2px solid var(--indigo);outline-offset:1px;border-radius:3px}::selection{background:#cfe0ea}.serif{font-family:var(--serif)}.muted{color:var(--muted)}.faint{color:var(--faint)}.small{font-size:12.5px}.tiny{font-size:12px}.num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.row,.row-wrap{display:flex;align-items:center;gap:8px}.row-wrap{flex-wrap:wrap}.between{display:flex;align-items:center;justify-content:space-between;gap:12px}.col{display:flex;flex-direction:column}.grow{flex:1 1 auto;min-width:0}.clip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pre{white-space:pre-wrap;word-break:break-word}.shell{display:flex;flex-direction:column;height:100vh}.topbar{flex:0 0 52px;gap:28px;padding:0 20px;background:var(--surface);border-bottom:1px solid var(--line)}.brand,.topbar{display:flex;align-items:center}.brand{gap:10px;color:var(--indigo-deep)}.brand img{height:28px;width:auto;display:block}.brand span{font-family:var(--sans);font-size:12px;font-weight:400;letter-spacing:0;color:var(--muted)}.login-art .brand img{height:46px}.nav{gap:2px;height:100%}.nav,.nav a{display:flex}.nav a{align-items:center;padding:0 14px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px}.nav a:hover{color:var(--ink)}.nav a.on{color:var(--indigo-deep);border-bottom-color:var(--indigo);font-weight:600}.main{flex:1 1 auto;min-height:0;overflow:auto}.btn{height:32px;padding:0 12px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface);color:var(--ink-2);white-space:nowrap;display:inline-flex;align-items:center;justify-content:center;gap:6px}.btn:hover{border-color:#c3ccd1;background:var(--sunken)}.btn.primary{background:var(--indigo);border-color:var(--indigo);color:#fff}.btn.primary:hover{background:var(--indigo-deep)}.btn.gold{background:var(--gold-soft);border-color:#e6d5a8;color:#6f4f10}.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}.btn.ghost:hover{background:var(--line-2);color:var(--ink)}.btn.danger{color:var(--rust)}.btn.sm{height:26px;padding:0 8px;font-size:12.5px}.btn:disabled{opacity:.5;cursor:not-allowed}.link{background:none;border:0;padding:0;color:var(--indigo)}.link:hover{text-decoration:underline}.input,.select,.textarea{width:100%;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:6px 9px;min-height:32px}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--indigo);box-shadow:0 0 0 3px rgba(31,75,110,.12)}.textarea{resize:vertical;line-height:1.6}.label{display:block;font-size:12.5px;color:var(--muted);margin-bottom:4px}.form-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:12px 14px;gap:12px 14px}.form-grid .wide{grid-column:1/-1}.hint{color:var(--faint);margin-top:4px}.hint,.tag{font-size:12px}.tag{display:inline-flex;align-items:center;height:20px;padding:0 7px;border-radius:4px;white-space:nowrap;background:var(--line-2);color:var(--ink-2)}.tag.indigo{background:var(--indigo-soft);color:var(--indigo-deep)}.tag.gold{background:var(--gold-soft);color:#6f4f10}.tag.sage{background:var(--sage-soft);color:var(--sage)}.tag.rust{background:var(--rust-soft);color:var(--rust)}.tag.violet{background:var(--violet-soft);color:var(--violet)}.dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex:0 0 7px;background:var(--faint)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg)}.panel-h{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px 0}.panel-h h3{font-size:13px;font-weight:600;color:var(--ink-2)}.panel-b{padding:10px 16px 14px}.empty{color:var(--faint);font-size:13px;padding:6px 0}.overlay{position:fixed;inset:0;background:rgba(23,33,43,.36);display:flex;align-items:flex-start;justify-content:center;padding:8vh 16px 16px;z-index:50;overflow:auto}.modal{width:100%;max-width:560px;background:var(--surface);border-radius:12px;box-shadow:0 18px 50px rgba(23,33,43,.22)}.modal.wide{max-width:760px}.modal-h{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 0}.modal-h h2{font-family:var(--serif);font-size:18px}.modal-b{padding:14px 20px}.modal-f{display:flex;justify-content:flex-end;gap:8px;padding:0 20px 18px}.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--ink);color:#fff;padding:9px 16px;border-radius:8px;z-index:80;font-size:13.5px;max-width:80vw;box-shadow:0 8px 24px rgba(0,0,0,.2)}.toast.err{background:var(--rust)}.login{min-height:100vh;display:grid;grid-template-columns:1.1fr 1fr;background:#fff}.login-art{background:#f4f1ec;color:#241c1c;padding:56px 96px 56px 64px;display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden}.login-art:before{content:"";position:absolute;left:0;top:0;bottom:0;width:10px;background:linear-gradient(#104090 0 64%,#c01020 64% 100%)}.login-art h1{font-family:var(--serif);font-size:40px;line-height:1.35;font-weight:700;letter-spacing:.02em;max-width:11em;color:#1a1212}.login-art p{color:#5e564f;max-width:30em;margin-top:18px}.login-art .foot{color:#8a817c}.login-art .axis{position:absolute;right:72px;top:0;bottom:0;width:1px;background:rgba(16,64,144,.22)}.login-art .axis b{position:absolute;left:-4px;width:9px;height:9px;border-radius:50%;background:#104090}.login-art .axis b.now{background:#c01020;box-shadow:0 0 0 5px rgba(192,16,32,.16)}.login-form{display:flex;align-items:center;justify-content:center;padding:32px;background:#fff}.login-form form{width:100%;max-width:320px;display:flex;flex-direction:column;gap:14px}.login .btn.primary{background:#104090;border-color:#104090}.login .btn.primary:hover{background:#0c3270}@media (max-width:820px){.login{grid-template-columns:1fr}.login-art{display:none}}.page{max-width:1180px;margin:0 auto;padding:28px 24px 48px}.page-title{font-family:var(--serif);font-size:26px;font-weight:700}.figures{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);margin-top:20px;overflow:hidden}.figure{padding:14px 18px;border-right:1px solid var(--line-2)}.figure:last-child{border-right:0}.figure .v{font-family:var(--serif);font-size:28px;font-weight:700;line-height:1.25}.figure .l{color:var(--muted);font-size:12.5px}.figure.warn .v{color:var(--rust)}.figure.now .v{color:var(--gold)}.dash{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(280px,1fr);grid-gap:20px;gap:20px;margin-top:20px;align-items:start}@media (max-width:900px){.dash{grid-template-columns:1fr}}.todo-group{padding:4px 0 6px}.todo-group>h4{font-size:12.5px;font-weight:600;color:var(--muted);padding:10px 16px 4px;display:flex;gap:8px;align-items:center}.todo-line{display:grid;grid-template-columns:64px minmax(0,1fr) auto;grid-gap:12px;gap:12px;align-items:center;padding:9px 16px;border-top:1px solid var(--line-2)}.todo-line:hover{background:var(--sunken)}.todo-line .d{font-size:12.5px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.todo-line.late .d{color:var(--rust);font-weight:600}.todo-line.today .d{color:var(--gold);font-weight:600}.bar-row{display:grid;grid-template-columns:64px 1fr 32px;grid-gap:10px;gap:10px;align-items:center;padding:5px 0;font-size:13px}.bar{height:8px;background:var(--line-2);overflow:hidden}.bar,.bar i{border-radius:4px}.bar i{display:block;height:100%;background:var(--indigo)}.table{width:100%;border-collapse:collapse;font-size:13.5px}.table th{text-align:left;font-weight:500;color:var(--muted);font-size:12.5px;padding:8px 12px;border-bottom:1px solid var(--line);white-space:nowrap}.table td{padding:9px 12px;border-bottom:1px solid var(--line-2);vertical-align:top}.table tr:last-child td{border-bottom:0}.table tr.click:hover td{background:var(--sunken);cursor:pointer}.table .r{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.work{display:grid;grid-template-columns:var(--left,264px) minmax(0,1fr) var(--right,368px);height:100%}.work.collapsed{--left:44px}.work.side-collapsed{--right:44px}.work>*{min-height:0}.list{border-right:1px solid var(--line);background:var(--surface)}.list,.list-h{display:flex;flex-direction:column}.list-h{padding:12px 12px 8px;gap:8px;border-bottom:1px solid var(--line-2)}.list-b{overflow:auto;flex:1 1 auto}.cust{display:block;width:100%;text-align:left;border:0;background:none;padding:10px 14px;border-bottom:1px solid var(--line-2);border-left:3px solid transparent}.cust:hover{background:var(--sunken)}.cust.on{background:var(--indigo-soft);border-left-color:var(--indigo)}.cust .n{font-weight:600}.cust .s{font-size:12px;color:var(--muted)}.cust .s.late{color:var(--rust)}.center{overflow:auto;padding:22px 26px 60px}.side{border-left:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column}@media (max-width:1180px){.work{grid-template-columns:var(--left,220px) minmax(0,1fr) var(--right,320px)}}.head{display:grid;grid-template-columns:minmax(0,1fr) 340px;grid-gap:22px;gap:22px;align-items:start}@media (max-width:1320px){.head{grid-template-columns:1fr}}.cname{font-family:var(--serif);font-size:30px;font-weight:700;line-height:1.25}.summary{margin-top:12px;padding:10px 14px;border-left:3px solid var(--indigo);background:var(--surface);border-radius:0 var(--r) var(--r) 0}.facts,.summary{color:var(--ink-2)}.facts{display:flex;flex-wrap:wrap;gap:4px 18px;margin-top:10px;font-size:13px}.facts b{font-weight:500;color:var(--muted);margin-right:5px}.todo-card{background:var(--surface);border:1px solid var(--line);border-top:3px solid var(--gold-line);border-radius:var(--r-lg)}.todo-item{display:block;width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--line-2);padding:9px 14px}.todo-item:hover{background:var(--sunken)}.todo-item .t{font-weight:600}.todo-item .m{font-size:12px;color:var(--muted);display:flex;gap:8px;align-items:center;margin-top:1px}.late{color:var(--rust)}.blocks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:14px;gap:14px;margin-top:20px}.blocks .span2{grid-column:1/-1}@media (max-width:1080px){.blocks{grid-template-columns:1fr}}.kv{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-gap:2px 16px;gap:2px 16px}.kv .wide{grid-column:1/-1}.field{display:grid;grid-template-columns:68px minmax(0,1fr);align-items:baseline;grid-gap:8px;gap:8px;min-height:30px}.field>span{color:var(--muted);font-size:12.5px}.field .val{border:1px solid transparent;border-radius:4px;padding:2px 6px;margin-left:-6px;background:none;text-align:left;min-height:26px;width:100%;cursor:text}.field .val:hover{background:var(--sunken);border-color:var(--line)}.field .val.blank{color:var(--faint)}.field .input,.field .select{min-height:28px;padding:2px 6px;margin-left:-6px}.notes{list-style:none;margin:6px 0 0;padding:0}.notes li{display:flex;gap:8px;align-items:flex-start;padding:5px 0;border-top:1px dashed var(--line-2)}.notes li:first-child{border-top:0}.notes li:before{content:"";flex:0 0 5px;height:5px;border-radius:50%;background:var(--indigo);margin-top:9px;opacity:.55}.notes .txt{flex:1 1 auto;min-width:0;padding:0;text-align:left;cursor:text}.notes .txt,.notes .x{background:none;border:0}.notes .x{opacity:0;color:var(--faint);padding:0 4px}.notes li:hover .x{opacity:1}.notes .x:hover{color:var(--rust)}.add-note{margin-top:6px}.add-note .input{border-style:dashed;background:transparent}.insight{border-top:1px solid var(--line-2);padding:10px 0}.insight:first-child{border-top:0;padding-top:2px}.insight .t{font-weight:600}.insight .b{font-size:13px;color:var(--ink-2);margin-top:3px}.insight .b em{font-style:normal;color:var(--muted);margin-right:6px}.baby{gap:10px;padding:6px 0}.baby,.baby .av{display:flex;align-items:center}.baby .av{width:30px;height:30px;border-radius:50%;background:var(--gold-soft);color:#6f4f10;justify-content:center;font-family:var(--serif);font-weight:700;flex:0 0 30px}.tl-h{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:30px 0 6px}.tl-h h2{font-family:var(--serif);font-size:20px}.chips{display:flex;gap:4px;flex-wrap:wrap}.chip{height:26px;padding:0 10px;border-radius:13px;border:1px solid var(--line);background:var(--surface);color:var(--muted);font-size:12.5px}.chip.on{background:var(--ink);border-color:var(--ink);color:#fff}.tl{position:relative;padding:6px 0}.tl:before{content:"";position:absolute;left:98px;top:0;bottom:0;width:1px;background:var(--line)}.tl-item{display:grid;grid-template-columns:84px 29px minmax(0,1fr);align-items:start;padding:7px 0;position:relative}.tl-item .date{text-align:right;font-size:12.5px;color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;padding-top:1px}.tl-item .date small{display:block;color:var(--faint);font-size:11.5px}.tl-item .mk{display:flex;justify-content:center;padding-top:6px}.tl-item .mk i{width:9px;height:9px;border-radius:50%;background:var(--surface);border:2px solid var(--faint);position:relative;z-index:1}.tl-item.todo .mk i{border-color:var(--gold-line);background:var(--gold-soft);width:11px;height:11px;border-radius:3px}.tl-item.todo.done .mk i{border-color:var(--sage);background:var(--sage)}.tl-item.todo.skipped .mk i{border-color:var(--faint);background:var(--line-2)}.tl-item.record .mk i{border-color:var(--indigo);background:var(--indigo)}.tl-item.anchor .mk i{border-color:var(--ink);background:var(--ink);width:11px;height:11px}.tl-item.marker .mk i{border-style:dashed}.tl-item.event .mk i{border-color:var(--violet)}.tl-body{padding-left:6px;min-width:0}.tl-body .t{font-weight:500}.tl-item.anchor .tl-body .t,.tl-item.todo .tl-body .t{font-weight:600}.tl-item.done .tl-body .t,.tl-item.skipped .tl-body .t{color:var(--muted);font-weight:500}.tl-item.skipped .tl-body .t{text-decoration:line-through}.tl-body .d{font-size:13px;color:var(--muted)}.tl-body button.t{background:none;border:0;padding:0;text-align:left}.tl-body button.t:hover{color:var(--indigo)}.tl-today{display:grid;grid-template-columns:84px 29px minmax(0,1fr);align-items:center;margin:8px 0;position:relative}.tl-today .date{text-align:right;font-family:var(--serif);font-weight:700;color:var(--gold)}.tl-today .mk{display:flex;justify-content:center}.tl-today .mk i{width:13px;height:13px;border-radius:50%;background:var(--gold-line);box-shadow:0 0 0 5px var(--gold-soft);position:relative;z-index:1}.tl-today .rule{height:1px;background:linear-gradient(90deg,var(--gold-line),rgba(201,160,74,0));margin-left:6px}.tl-more{margin:6px 0 0 113px}.side-top{display:flex;align-items:stretch;border-bottom:1px solid var(--line);flex:0 0 auto}.side-top .tabs{flex:1 1 auto;border-bottom:0;padding-left:0}.fold{flex:0 0 36px;width:36px;border:0;background:none;color:var(--muted)}.fold:hover{color:var(--ink);background:var(--sunken)}.side.is-collapsed .side-main{display:none}.side-main{display:contents}.tabs{display:flex;border-bottom:1px solid var(--line);padding:0 8px;flex:0 0 auto}.tabs button{flex:1 1;height:44px;border:0;background:none;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;font-size:13.5px}.tabs button.on{color:var(--indigo-deep);border-bottom-color:var(--indigo);font-weight:600}.tabs .count{display:inline-block;min-width:18px;height:18px;line-height:18px;border-radius:9px;background:var(--gold-line);color:#fff;font-size:11.5px;margin-left:5px;padding:0 5px;font-weight:600}.side-b{flex:1 1 auto;overflow:auto;padding:14px;display:flex;flex-direction:column;gap:12px}.side-b>*{flex:0 0 auto}.drop{border:1px dashed #c6cfd4;border-radius:var(--r);padding:10px;background:var(--sunken)}.thumbs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}.thumb{position:relative;width:56px;height:56px;border-radius:5px;overflow:hidden;border:1px solid var(--line)}.thumb img{width:100%;height:100%;object-fit:cover;display:block}.thumb button{position:absolute;top:1px;right:1px;width:18px;height:18px;border-radius:50%;border:0;background:rgba(23,33,43,.7);color:#fff;font-size:12px;line-height:1;padding:0}.src{border:1px solid var(--line);border-radius:var(--r);padding:9px 11px;background:var(--surface)}.src .c{font-size:13px;color:var(--ink-2);max-height:4.8em;overflow:hidden;white-space:pre-wrap;word-break:break-word}.src.open .c{max-height:none}.prop{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}.prop-h{display:flex;align-items:center;gap:6px;padding:9px 12px 0;flex-wrap:wrap}.prop-b{padding:8px 12px 10px}.prop .new{font-weight:500}.prop .old{color:var(--faint);text-decoration:line-through;font-size:13px}.prop .why{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);font-size:12.5px;color:var(--muted)}.prop .quote{margin-top:4px;padding:5px 9px;border-left:2px solid var(--line);border-radius:0 4px 4px 0;color:var(--ink-2)}.prop .quote,.prop-f{background:var(--sunken)}.prop-f{display:flex;gap:6px;padding:8px 12px;border-top:1px solid var(--line-2)}.op-add{color:var(--sage)}.op-update{color:var(--indigo)}.op-delete{color:var(--rust)}.kvline{display:grid;grid-template-columns:62px minmax(0,1fr);grid-gap:6px;gap:6px;font-size:13.5px;padding:1px 0}.kvline>span:first-child{color:var(--muted);font-size:12.5px;padding-top:1px}.log{padding:10px 2px;border-top:1px solid var(--line-2)}.log:first-child{border-top:0}.log .ev{margin-top:6px;padding:8px 10px;background:var(--sunken);border-radius:var(--r);font-size:12.5px;color:var(--ink-2)}.admin{display:grid;grid-template-columns:200px minmax(0,1fr);height:100%}.admin-nav{border-right:1px solid var(--line);background:var(--surface);padding:16px 10px;display:flex;flex-direction:column;gap:2px}.admin-nav button{text-align:left;border:0;background:none;padding:8px 12px;border-radius:var(--r);color:var(--ink-2)}.admin-nav button:hover{background:var(--sunken)}.admin-nav button.on{background:var(--indigo-soft);color:var(--indigo-deep);font-weight:600}.admin-b{overflow:auto;padding:26px 30px 60px}.admin-b>.inner{max-width:1000px}.section-h{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:16px}.section-h h1{font-family:var(--serif);font-size:24px}.section-h p{color:var(--muted);font-size:13px;margin-top:2px;max-width:46em}.spin{width:14px;height:14px;border-radius:50%;border:2px solid;border-right:2px solid transparent;display:inline-block;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.spin{animation-duration:2s}}