:root,[data-theme=light]{--font-body:"Noto Sans TC","PingFang TC",sans-serif;--font-display:"Noto Serif TC","Songti TC",serif;--text-xs:clamp(.75rem, .7rem + .25vw, .875rem);--text-sm:clamp(.875rem, .8rem + .35vw, 1rem);--text-base:clamp(1rem, .95rem + .25vw, 1.125rem);--text-lg:clamp(1.125rem, 1rem + .75vw, 1.5rem);--text-xl:clamp(1.5rem, 1.2rem + 1.25vw, 2.25rem);--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.25rem;--space-6:1.5rem;--space-8:2rem;--space-10:2.5rem;--space-12:3rem;--space-16:4rem;--color-bg:#f4f2ee;--color-surface:#faf9f6;--color-surface-2:#fdfcfb;--color-surface-offset:#edebe6;--color-surface-dynamic:#e3e1dc;--color-divider:#d9d6d0;--color-border:#cfcbbf;--color-text:#26241c;--color-text-muted:#77746c;--color-text-faint:#b3b0a8;--color-text-inverse:#faf9f6;--color-primary:#5b4a3f;--color-primary-hover:#46372f;--color-primary-active:#322621;--color-primary-highlight:#e6dfd6;--color-success:#4a6e2f;--color-success-highlight:#dde5cf;--color-warning:#8a5a24;--color-warning-highlight:#ecdcc9;--color-error:#8a3530;--color-error-highlight:#edd5d1;--color-info:#3c5c74;--color-info-highlight:#d5e0e7;--color-accent-red:#b0392e;--color-accent-blue:#3a5f8a;--radius-sm:.375rem;--radius-md:.5rem;--radius-lg:.75rem;--radius-full:9999px;--transition-interactive:.18s cubic-bezier(.16,1,.3,1);--shadow-sm:0 1px 2px #26241c0f;--shadow-md:0 4px 12px #26241c14}[data-theme=dark]{--color-bg:#1a1917;--color-surface:#201f1c;--color-surface-2:#242320;--color-surface-offset:#1d1c1a;--color-surface-dynamic:#2e2d29;--color-divider:#282724;--color-border:#3a3834;--color-text:#d1cfca;--color-text-muted:#83817c;--color-text-faint:#5a5854;--color-text-inverse:#201f1c;--color-primary:#c0a48e;--color-primary-hover:#d4b8a2;--color-primary-active:#a8896f;--color-primary-highlight:#3a332c;--color-success:#8fb266;--color-success-highlight:#39422f;--color-warning:#c49257;--color-warning-highlight:#4a3a24;--color-error:#d07068;--color-error-highlight:#4a2c28;--color-info:#7d9cb5;--color-info-highlight:#2c3841;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 4px 12px #0006}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;scroll-behavior:smooth;hanging-punctuation:first last;scroll-padding-top:var(--space-16)}body{min-height:100dvh;line-height:1.6;font-family:var(--font-body);font-size:var(--text-base);color:var(--color-text);background:var(--color-bg)}img,picture,video,canvas,svg{max-width:100%;height:auto;display:block}ul[role=list],ol[role=list]{list-style:none}input,button,textarea,select{font:inherit;color:inherit}h1,h2,h3,h4,h5,h6{text-wrap:balance;line-height:1.15}p,li,figcaption{text-wrap:pretty;max-width:72ch}::selection{color:var(--color-text);background:#5b4a3f40}:focus-visible{outline:2px solid var(--color-primary);outline-offset:3px;border-radius:var(--radius-sm)}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}button{cursor:pointer;background:0 0;border:none}table{border-collapse:collapse;width:100%}a,button,[role=button],[role=link],input,textarea,select{transition:color var(--transition-interactive),background var(--transition-interactive), border-color var(--transition-interactive),box-shadow var(--transition-interactive)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.layout{grid-template-columns:228px 1fr;min-height:100dvh;display:grid}aside.side{background:var(--color-surface);border-right:1px solid var(--color-divider);padding:var(--space-6) var(--space-4);gap:var(--space-6);flex-direction:column;height:100dvh;display:flex;position:sticky;top:0;overflow-y:auto}.brand{align-items:center;gap:var(--space-3);color:var(--color-text);text-decoration:none;display:flex}.brand svg{width:34px;height:34px;color:var(--color-primary);flex-shrink:0}.brand b{font-family:var(--font-display);font-size:var(--text-base);font-weight:600;line-height:1.2;display:block}.brand small{font-size:var(--text-xs);color:var(--color-text-muted);display:block}.nav{flex-direction:column;gap:2px;display:flex}.nav .grp{font-size:var(--text-xs);color:var(--color-text-faint);padding:var(--space-3) var(--space-3) var(--space-1)}.nav a{padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);color:var(--color-text-muted);font-size:var(--text-sm);justify-content:space-between;align-items:center;text-decoration:none;display:flex}.nav a:hover{background:var(--color-surface-offset);color:var(--color-text)}.nav a.active{background:var(--color-primary-highlight);color:var(--color-text);font-weight:500}.nav .count{font-size:var(--text-xs);background:var(--color-error-highlight);color:var(--color-error);border-radius:var(--radius-full);padding:0 var(--space-2);text-align:center;min-width:1.5em}.side-foot{gap:var(--space-2);font-size:var(--text-xs);color:var(--color-text-muted);flex-direction:column;margin-top:auto;display:flex}.side-foot .row{gap:var(--space-2);justify-content:space-between;align-items:center;display:flex}main.main{padding:var(--space-8);width:100%;min-width:0;max-width:1360px}.top{justify-content:space-between;align-items:flex-end;gap:var(--space-4);margin-bottom:var(--space-6);flex-wrap:wrap;display:flex}.top h1{font-family:var(--font-display);font-size:var(--text-xl);font-weight:600}.top .sub{font-size:var(--text-sm);color:var(--color-text-muted);margin-top:var(--space-1)}.top .tools{gap:var(--space-2);flex-wrap:wrap;display:flex}.section{margin-bottom:var(--space-10)}.section>h2{font-size:var(--text-lg);margin-bottom:var(--space-4);align-items:baseline;gap:var(--space-3);flex-wrap:wrap;font-weight:600;display:flex}.section>h2 small{font-size:var(--text-xs);color:var(--color-text-muted);font-weight:400}.cards{gap:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(280px,1fr));display:grid}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-4);gap:var(--space-2);flex-direction:column;min-width:0;display:flex}.card.link{cursor:pointer;transition:box-shadow var(--transition-interactive)}.card.link:hover{box-shadow:var(--shadow-md)}.card h3{font-size:var(--text-base);overflow-wrap:anywhere;font-weight:500}.card .meta{font-size:var(--text-sm);color:var(--color-text-muted)}.card .who{font-size:var(--text-xs);color:var(--color-text-muted)}.card .acts{padding-top:var(--space-2);gap:var(--space-2);flex-wrap:wrap;margin-top:auto;display:flex}.row1{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.five{gap:var(--space-1) var(--space-3);font-size:var(--text-sm);grid-template-columns:auto 1fr;display:grid}.five dt{color:var(--color-text-muted);white-space:nowrap}.five dd{overflow-wrap:anywhere}.tag{font-size:var(--text-xs);padding:2px var(--space-2);border-radius:var(--radius-full);background:var(--color-surface-offset);color:var(--color-text-muted);white-space:nowrap;line-height:1.6}.tag.hot{background:var(--color-error-highlight);color:var(--color-error)}.tag.warn{background:var(--color-warning-highlight);color:var(--color-warning)}.tag.ok{background:var(--color-success-highlight);color:var(--color-success)}.tag.info{background:var(--color-info-highlight);color:var(--color-info)}.tag.core{background:var(--color-primary-highlight);color:var(--color-text)}.btn{align-items:center;gap:var(--space-1);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm);font-size:var(--text-sm);background:var(--color-primary);color:var(--color-text-inverse);white-space:nowrap;line-height:1.4;text-decoration:none;display:inline-flex}.btn:hover{background:var(--color-primary-hover)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.ghost{color:var(--color-primary);border:1px solid var(--color-border);background:0 0}.btn.ghost:hover{background:var(--color-surface-offset)}.btn.danger{background:var(--color-error);color:#fff}.btn.sm{padding:var(--space-1) var(--space-2);font-size:var(--text-xs)}.icon-btn{padding:var(--space-2);border-radius:var(--radius-sm);color:var(--color-text-muted);display:inline-flex}.icon-btn:hover{background:var(--color-surface-offset);color:var(--color-text)}.tabs{gap:var(--space-1);border-bottom:1px solid var(--color-divider);margin-bottom:var(--space-6);display:flex;overflow-x:auto}.tabs button{padding:var(--space-2) var(--space-3);font-size:var(--text-sm);color:var(--color-text-muted);white-space:nowrap;border-bottom:2px solid #0000;margin-bottom:-1px}.tabs button:hover{color:var(--color-text)}.tabs button.on{color:var(--color-text);border-bottom-color:var(--color-primary);font-weight:500}.panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-5)}.panel+.panel{margin-top:var(--space-4)}.panel h3{font-size:var(--text-base);margin-bottom:var(--space-3);font-weight:600}.grid2{gap:var(--space-4);grid-template-columns:1fr 1fr;display:grid}.grid3{gap:var(--space-4);grid-template-columns:repeat(3,1fr);display:grid}.form{gap:var(--space-3);display:grid}.form .cols{gap:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));display:grid}label.f{gap:var(--space-1);font-size:var(--text-sm);color:var(--color-text-muted);flex-direction:column;min-width:0;display:flex}label.f.inline{align-items:center;gap:var(--space-2);flex-direction:row}input,select,textarea{background:var(--color-surface-2);border:1px solid var(--color-border);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);font-size:var(--text-sm);color:var(--color-text);width:100%;min-width:0}input[type=checkbox],input[type=radio]{width:auto}input[type=range]{accent-color:var(--color-primary);padding:0}textarea{resize:vertical;min-height:5.5em;line-height:1.6}input:focus,select:focus,textarea:focus{outline:2px solid var(--color-primary-highlight);border-color:var(--color-primary)}.hint{font-size:var(--text-xs);color:var(--color-text-muted)}.err{font-size:var(--text-sm);color:var(--color-error);background:var(--color-error-highlight);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm)}.okmsg{font-size:var(--text-sm);color:var(--color-success);background:var(--color-success-highlight);padding:var(--space-2) var(--space-3);border-radius:var(--radius-sm)}.empty{padding:var(--space-6);text-align:center;color:var(--color-text-muted);font-size:var(--text-sm);border:1px dashed var(--color-border);border-radius:var(--radius-md)}.table-wrap{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);overflow-x:auto}table.t{font-size:var(--text-sm)}table.t th{text-align:left;color:var(--color-text-muted);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-divider);white-space:nowrap;font-weight:500;font-size:var(--text-xs)}table.t td{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--color-divider);vertical-align:top}table.t tr:last-child td{border-bottom:none}table.t tr.click{cursor:pointer}table.t tr.click:hover td{background:var(--color-surface-offset)}.num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.mono{font-variant-numeric:tabular-nums;font-size:var(--text-xs);color:var(--color-text-muted);white-space:nowrap}.muted{color:var(--color-text-muted)}.stack{gap:var(--space-3);flex-direction:column;display:flex}.hstack{gap:var(--space-2);flex-wrap:wrap;align-items:center;display:flex}.spread{justify-content:space-between;align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.bar{background:var(--color-surface-dynamic);border-radius:var(--radius-full);height:6px;position:relative;overflow:hidden}.bar>i{background:var(--color-primary);border-radius:var(--radius-full);position:absolute;inset:0 auto 0 0}.bar>i.warn{background:var(--color-warning)}.bar>i.hot{background:var(--color-error)}.bar>b{background:var(--color-text);width:2px;position:absolute;top:-3px;bottom:-3px}.pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:var(--text-sm)}.modal-bg{padding:var(--space-8) var(--space-4);z-index:50;background:#14120f73;justify-content:center;align-items:flex-start;display:flex;position:fixed;inset:0;overflow-y:auto}.modal{background:var(--color-surface);border-radius:var(--radius-lg);width:100%;max-width:640px;padding:var(--space-6);box-shadow:var(--shadow-md)}.modal h2{font-size:var(--text-lg);margin-bottom:var(--space-4);font-weight:600}.modal .foot{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-5);display:flex}.toast{bottom:var(--space-6);background:var(--color-text);color:var(--color-bg);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);font-size:var(--text-sm);z-index:60;box-shadow:var(--shadow-md);max-width:90vw;position:fixed;left:50%;transform:translate(-50%)}.toast.bad{background:var(--color-error);color:#fff}.skel{background:linear-gradient(90deg,var(--color-surface-offset),var(--color-surface-dynamic),var(--color-surface-offset));border-radius:var(--radius-sm);background-size:200% 100%;height:1em;animation:1.4s infinite sk}@keyframes sk{to{background-position:-200% 0}}.gantt{border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface);overflow-x:auto}.gantt-inner{min-width:760px;position:relative}.g-row{border-bottom:1px solid var(--color-divider);grid-template-columns:220px 1fr;min-height:44px;display:grid}.g-row:last-child{border-bottom:none}.g-label{padding:var(--space-2) var(--space-3);font-size:var(--text-sm);border-right:1px solid var(--color-divider);text-overflow:ellipsis;overflow:hidden}.g-label small{font-size:var(--text-xs);color:var(--color-text-muted);display:block}.g-track{position:relative}.g-bar{background:var(--color-primary);border-radius:3px;height:14px;position:absolute;top:10px}.g-bar.done{background:var(--color-success)}.g-bar.late{background:var(--color-error)}.g-base{background:var(--color-text-faint);border-radius:2px;height:5px;position:absolute;top:28px}.g-dia{background:var(--color-primary);width:16px;height:16px;position:absolute;top:9px;transform:translate(-8px)rotate(45deg)}.g-dia.done{background:var(--color-success)}.g-dia.late{background:var(--color-error)}.g-head{border-bottom:1px solid var(--color-divider);font-size:var(--text-xs);color:var(--color-text-muted);grid-template-columns:220px 1fr;display:grid}.g-scale{height:28px;position:relative}.g-scale span{white-space:nowrap;position:absolute;top:6px;transform:translate(-50%)}.g-today{background:var(--color-accent-red);opacity:.7;pointer-events:none;width:1px;position:absolute;top:0;bottom:0}.g-grid{background:var(--color-divider);pointer-events:none;width:1px;position:absolute;top:0;bottom:0}.hill svg{width:100%;height:auto;max-height:240px;color:var(--color-text-muted)}.mnav{display:none}@media (width<=900px){.layout{grid-template-rows:auto 1fr;grid-template-columns:1fr}aside.side{gap:var(--space-3);height:auto;padding:var(--space-3) var(--space-4);border-right:none;border-bottom:1px solid var(--color-divider);flex-direction:column;position:static}.nav{white-space:nowrap;gap:var(--space-1);flex-direction:row;overflow-x:auto}.nav .grp{display:none}.nav a{flex-shrink:0}.side-foot{display:none}main.main{padding:var(--space-4) var(--space-4) var(--space-16)}.grid2,.grid3{grid-template-columns:1fr}.top h1{font-size:var(--text-lg)}}@media (width<=520px){.cards{grid-template-columns:1fr}.panel,.modal{padding:var(--space-4)}}.auth{min-height:100dvh;padding:var(--space-6);place-items:center;display:grid}.auth .box{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);width:100%;max-width:400px;padding:var(--space-8)}.auth .brand{margin-bottom:var(--space-6)}.auth .brand svg{width:44px;height:44px}.seg{background:var(--color-surface-offset);border-radius:var(--radius-sm);margin-bottom:var(--space-4);padding:3px;display:flex}.seg button{padding:var(--space-2);font-size:var(--text-sm);border-radius:var(--radius-sm);color:var(--color-text-muted);flex:1}.seg button.on{background:var(--color-surface);color:var(--color-text);box-shadow:var(--shadow-sm)}.seg button{white-space:nowrap}.pend-row{align-items:flex-start;gap:var(--space-2);color:var(--color-text);font-size:var(--text-sm);display:flex}.pend-row input{margin-top:.35em}.pend-row .txt{flex:1;min-width:0}@media (width<=900px){.table-wrap table.t{min-width:680px}.seg{max-width:100%;overflow-x:auto}}
