:root{--bg:#F4F2EE;--panel:#FFFFFF;--side:#ECE8E1;--line:#E2DDD4;--line2:#EEEAE3;--ink:#1C1D1A;--muted:#64625B;--hover:#E3DED5;--euc:#2F5D57;--euc-ink:#FFFFFF;--euc-soft:#E3ECE9;--oak:#7C4E27;--oak-soft:#F4EADF;--tint:#F7F5F1;--good:#2E6B45;--good-soft:#E3F0E6;--warn:#8A5A12;--warn-soft:#F8EBD3;--bad:#A23A26;--bad-soft:#F7E2DC;--violet:#4A4580;--violet-soft:#E8E6F3;--bar-exp:#CFC9BF;--overlay:rgba(28,29,26,.42);--f-disp:"Jost","Futura","Century Gothic",system-ui,sans-serif;--f-body:"DM Sans",system-ui,-apple-system,"Segoe UI",sans-serif;--f-mono:"IBM Plex Mono",ui-monospace,Menlo,monospace}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--bg:#171816;--panel:#20211E;--side:#1B1C1A;--line:#34352F;--line2:#2B2C28;--ink:#ECEAE4;--muted:#A9A69C;--hover:#2A2B27;--euc:#7FB5AB;--euc-ink:#10201D;--euc-soft:#22332F;--oak:#D9A574;--oak-soft:#3A2E22;--tint:#252622;--good:#8CCB9F;--good-soft:#1F3326;--warn:#E3B464;--warn-soft:#3A2F1A;--bad:#EE9A86;--bad-soft:#3D2420;--violet:#B7B1EE;--violet-soft:#2B2943;--bar-exp:#4A4A43;--overlay:rgba(0,0,0,.6);color-scheme:dark}}:root[data-theme=dark]{--bg:#171816;--panel:#20211E;--side:#1B1C1A;--line:#34352F;--line2:#2B2C28;--ink:#ECEAE4;--muted:#A9A69C;--hover:#2A2B27;--euc:#7FB5AB;--euc-ink:#10201D;--euc-soft:#22332F;--oak:#D9A574;--oak-soft:#3A2E22;--tint:#252622;--good:#8CCB9F;--good-soft:#1F3326;--warn:#E3B464;--warn-soft:#3A2F1A;--bad:#EE9A86;--bad-soft:#3D2420;--violet:#B7B1EE;--violet-soft:#2B2943;--bar-exp:#4A4A43;--overlay:rgba(0,0,0,.6);color-scheme:dark}html,body{background:var(--bg);color:var(--ink)}body{font-family:var(--f-body);font-size:14px;line-height:1.45}*{box-sizing:border-box}a{color:var(--euc)}button,input,select,textarea{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--euc);outline-offset:2px}.disp{font-family:var(--f-disp)}.mono{font-family:var(--f-mono)}.num{font-variant-numeric:tabular-nums}.muted{color:var(--muted)}.small{font-size:12.5px}.lbl{font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:500}h1,h2,h3{margin:0;font-family:var(--f-disp);font-weight:500;text-wrap:balance}h1{font-size:clamp(28px,4vw,38px);letter-spacing:-.01em}h2{font-size:21px}h3{font-size:17px}p{margin:0}.app{display:flex;min-height:100vh;background:linear-gradient(90deg,var(--side) 236px,transparent 236px)}.side{flex:0 0 236px;background:var(--side);border-right:1px solid var(--line);padding:24px 14px;display:flex;flex-direction:column;gap:26px;position:sticky;top:0;height:100vh;overflow:auto}.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--ink);padding:0 8px}.brand-mark{width:36px;height:36px;border:1.5px solid var(--ink);display:grid;place-items:center;flex:none}.brand-name{font-family:var(--f-disp);font-weight:600;letter-spacing:.22em;font-size:15px}.nav{display:flex;flex-direction:column;gap:2px}.navlink{display:flex;align-items:center;gap:12px;padding:10px 12px;min-height:44px;border-radius:8px;text-decoration:none;color:var(--ink);font-weight:500}.navlink:hover{background:var(--hover)}.navlink.on{background:var(--panel);color:var(--euc);box-shadow:inset 0 0 0 1px var(--line)}.main{flex:1 1 auto;min-width:0;padding-block:28px 64px;padding-left:max(16px,env(safe-area-inset-left,0px));padding-right:max(16px,env(safe-area-inset-right,0px))}.wrap{max-width:1320px;margin:0 auto;display:flex;flex-direction:column;gap:24px;padding-inline:clamp(0px,2vw,24px)}@media (max-width:860px){.app{flex-direction:column;background:none}.side{position:static;height:auto;flex:none;flex-direction:row;align-items:center;gap:12px;padding:12px max(16px,env(safe-area-inset-right,0px)) 12px max(16px,env(safe-area-inset-left,0px));border-right:0;border-bottom:1px solid var(--line);overflow-x:auto}.side .nav{flex-direction:row}.side .navlink span.t{white-space:nowrap}.side .pins,.brand-sub{display:none}}.card{background:var(--panel);border:1px solid var(--line);border-radius:12px}.pad{padding:20px}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.between{justify-content:space-between}.stack{display:flex;flex-direction:column;gap:12px}.cols{display:flex;flex-wrap:wrap;gap:20px;align-items:flex-start}.col-main{flex:999 1 560px;min-width:0}.col-side{flex:1 1 300px;min-width:0}.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}.tile{padding:18px 20px;display:flex;flex-direction:column;gap:8px}.tile .v{font-family:var(--f-disp);font-size:28px;font-weight:500;font-variant-numeric:tabular-nums;line-height:1.1}.tile .v small{font-size:15px;color:var(--muted);margin-right:6px;font-weight:400}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:0 16px;border-radius:10px;border:1px solid var(--line);background:var(--panel);color:var(--ink);font-weight:500;cursor:pointer;text-decoration:none;white-space:nowrap}.btn:hover{background:var(--tint)}.btn.p{background:var(--euc);border-color:var(--euc);color:var(--euc-ink)}.btn.p:hover{filter:brightness(.93)}.btn.danger{color:var(--bad);border-color:var(--bad)}.btn.ghost{border-color:transparent;background:transparent}.btn.sm{min-height:36px;padding:0 12px;font-size:13px}.btn:disabled{opacity:.5;cursor:not-allowed}.icon-btn{width:44px;padding:0}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:500;white-space:nowrap}.c-good{background:var(--good-soft);color:var(--good)}.c-warn{background:var(--warn-soft);color:var(--warn)}.c-bad{background:var(--bad-soft);color:var(--bad)}.c-euc{background:var(--euc-soft);color:var(--euc)}.c-oak{background:var(--oak-soft);color:var(--oak)}.c-gray{background:var(--tint);color:var(--muted);box-shadow:inset 0 0 0 1px var(--line)}.c-vio{background:var(--violet-soft);color:var(--violet)}.seg{min-height:40px;padding:0 14px;border-radius:999px;border:1px solid var(--line);background:var(--panel);font-size:13px;font-weight:500;cursor:pointer}.seg[aria-pressed=true]{background:var(--ink);color:var(--bg);border-color:var(--ink)}.toggle{display:inline-flex;border:1px solid var(--line);border-radius:999px;overflow:hidden;background:var(--panel)}.toggle button{min-height:40px;padding:0 14px;border:0;background:transparent;font-size:13px;font-weight:500;cursor:pointer}.toggle button[aria-pressed=true]{background:var(--ink);color:var(--bg)}.tblwrap{overflow-x:auto}table.t{width:100%;border-collapse:collapse}table.t th{font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:500;text-align:left;padding:10px 14px;border-bottom:1px solid var(--line);white-space:nowrap}table.t td{padding:11px 14px;border-bottom:1px solid var(--line2);vertical-align:middle}table.t tbody tr:last-child td{border-bottom:0}table.t tr.click{cursor:pointer}table.t tr.click:hover td{background:var(--tint)}table.t .r{text-align:right}table.t th.grp{text-align:center;border-bottom:1px solid var(--ink);padding-bottom:6px}table.t .edge{border-left:1px solid var(--line)}table.t tr.sec td{background:var(--tint);font-weight:600;border-bottom:1px solid var(--line)}table.t tr.sub td{font-weight:600;border-bottom:1px solid var(--line)}.tbl-input{width:104px;min-height:36px;border:1px solid var(--line);border-radius:8px;padding:0 8px;text-align:right;background:var(--panel);font-variant-numeric:tabular-nums}.tabs{display:flex;gap:26px;border-bottom:1px solid var(--line);overflow-x:auto}.tab{padding:12px 2px;text-decoration:none;color:var(--muted);font-weight:500;border-bottom:2px solid transparent;white-space:nowrap}.tab:hover{color:var(--ink)}.tab.on{color:var(--ink);border-bottom-color:var(--euc)}.titleblock{display:grid;grid-template-columns:repeat(3,minmax(110px,auto));border-top:1px solid var(--ink);border-left:1px solid var(--ink);background:var(--panel);font-size:13px}.titleblock>div{display:flex;flex-direction:column;gap:3px;padding:10px 14px;border-right:1px solid var(--ink);border-bottom:1px solid var(--ink);min-width:0}@media (max-width:560px){.titleblock{grid-template-columns:repeat(2,minmax(0,1fr))}}.phasebar{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(9,minmax(86px,1fr));gap:6px;min-width:820px}.phasebar button{all:unset;display:flex;flex-direction:column;gap:8px;cursor:pointer;padding:4px 0;min-height:36px}.phasebar button:focus-visible{outline:2px solid var(--euc);outline-offset:2px}.phasebar .b{height:6px;border-radius:3px;background:var(--line)}.phasebar .done .b{background:var(--euc)}.phasebar .cur .b{background:var(--oak)}.phasebar .t{font-size:12.5px;color:var(--muted)}.phasebar .done .t{color:var(--ink)}.phasebar .cur .t{color:var(--ink);font-weight:600}.progress{height:6px;background:var(--line);border-radius:3px;overflow:hidden;flex:1}.progress>div{height:100%;background:var(--euc)}.swatch{width:36px;height:36px;border-radius:8px;flex:none;box-shadow:inset 0 0 0 1px #00000014;display:grid;place-items:center;background:var(--tint);color:var(--muted)}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field>span{font-size:12.5px;font-weight:500;color:var(--muted)}.input,select.input,textarea.input{width:100%;min-height:44px;border:1px solid var(--line);border-radius:10px;padding:0 12px;background:var(--panel)}textarea.input{padding:10px 12px;min-height:76px;resize:vertical}.input:disabled{background:var(--tint);color:var(--muted)}.grid2{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px}.search{position:relative}.search svg{position:absolute;left:13px;top:13px;pointer-events:none;color:var(--muted)}.search input{padding-left:40px}.check{display:inline-flex;align-items:center;gap:10px;min-height:44px;cursor:pointer}.check input{width:18px;height:18px;accent-color:var(--euc);margin:0}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--overlay);display:flex;align-items:flex-start;justify-content:center;padding:max(24px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) 24px max(16px,env(safe-area-inset-left,0px));overflow:auto;z-index:50}.dialog{background:var(--panel);border:1px solid var(--line);border-radius:14px;width:min(720px,100%);padding:24px;display:flex;flex-direction:column;gap:18px;margin-top:4vh}.toast{position:fixed;left:50%;transform:translate(-50%);bottom:calc(20px + env(safe-area-inset-bottom,0px));background:var(--ink);color:var(--bg);padding:12px 18px;border-radius:10px;z-index:60;max-width:calc(100% - 32px);font-weight:500}.banner{padding:12px 16px;border-radius:10px;background:var(--warn-soft);color:var(--warn);font-weight:500}.empty{padding:36px 24px;text-align:center;display:flex;flex-direction:column;gap:10px;align-items:center;color:var(--muted)}.empty h3{color:var(--ink)}.board{display:grid;grid-template-columns:repeat(8,minmax(108px,1fr));gap:8px;min-width:900px}.board .colm{display:flex;flex-direction:column;gap:8px;padding:12px;border-radius:10px;min-height:140px}.board .design{background:var(--oak-soft);border-top:3px solid var(--oak)}.board .build{background:var(--euc-soft);border-top:3px solid var(--euc)}.pcode{font-family:var(--f-mono);font-size:11px;background:var(--panel);border:1px solid var(--line);padding:3px 6px;border-radius:4px;color:var(--ink);text-decoration:none;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dot{width:8px;height:8px;border-radius:50%;flex:none;margin-top:7px}.list-item{display:flex;gap:12px;padding:12px 0;border-top:1px solid var(--line2)}.list-item:first-child{border-top:0}.files{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:16px}.thumb{height:140px;display:grid;place-items:center;border-bottom:1px solid var(--line);background-color:var(--tint);background-image:linear-gradient(var(--line2) 1px,transparent 1px),linear-gradient(90deg,var(--line2) 1px,transparent 1px);background-size:16px 16px;overflow:hidden}.thumb img{width:100%;height:100%;object-fit:cover}.stamp{border:1.5px solid var(--euc);color:var(--euc);padding:10px 14px;display:inline-flex;flex-direction:column;gap:2px;transform:rotate(-1.5deg);align-self:flex-start}.legend{display:inline-flex;gap:6px;align-items:center}.legend i{width:14px;height:6px;border-radius:2px;display:inline-block}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.qb{display:grid;grid-template-columns:minmax(370px,460px) minmax(0,1fr);gap:20px;align-items:start}.qrail{display:flex;flex-direction:column;gap:14px;min-width:0}.qcard{padding:14px;display:flex;flex-direction:column;gap:10px}.qcard h3{margin:0}.qgrid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}.qin{width:100%;min-height:36px;border:1px solid var(--line);border-radius:8px;padding:5px 8px;background:var(--panel);color:var(--ink);font-size:13.5px}textarea.qin{resize:vertical;min-height:52px;field-sizing:content;max-height:40vh;line-height:1.35}.qin.n{text-align:right;font-variant-numeric:tabular-nums}.qin:disabled{background:var(--tint);color:var(--muted)}.qpreview{position:sticky;top:16px;max-height:calc(100vh - 32px);overflow:auto;background:var(--tint);border:1px solid var(--line);border-radius:12px;padding:20px;min-width:0}.qsec{border:1px solid var(--line);border-radius:10px;padding:10px;background:var(--tint);display:flex;flex-direction:column;gap:2px}.qsec-head{display:flex;gap:4px;align-items:center}.qnum{font-weight:700;width:22px;text-align:center;flex:none}.qitem{display:grid;grid-template-columns:28px minmax(0,1fr) 44px;gap:6px;padding:8px 0;border-top:1px dashed var(--line);align-items:start}.qref{font-weight:600;font-size:12px;padding-top:8px;color:var(--muted)}.qitem .row2{grid-column:2/-1;display:grid;grid-template-columns:58px 54px minmax(84px,1fr) auto auto;gap:5px;align-items:center}.qamt{min-width:74px}.qamt{text-align:right;font-weight:600;font-size:13px}.qimg{position:relative;width:44px;height:44px}.qthumb{width:44px;height:44px;border:1px solid var(--line);border-radius:6px;background:var(--panel);display:flex;align-items:center;justify-content:center;overflow:hidden;cursor:pointer;padding:0;color:var(--muted)}.qthumb.empty{border-style:dashed}.qthumb:hover{border-color:var(--euc);color:var(--euc)}.qthumb img{width:100%;height:100%;object-fit:cover;background:#fff}.qimgx{position:absolute;top:-7px;right:-7px;width:20px;height:20px;border-radius:50%;border:1px solid var(--line);background:var(--panel);color:var(--bad);font-size:11px;line-height:1;padding:0;cursor:pointer}.ib{border:0;background:none;cursor:pointer;color:var(--muted);min-width:30px;min-height:32px;border-radius:6px;font-size:14px}.ib:hover{background:var(--panel);color:var(--ink)}.ib.del:hover{color:var(--bad)}.ib:disabled{opacity:.35;cursor:default}.qpages{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}.qpages li{display:flex;justify-content:space-between;gap:8px;font-size:13px;padding:5px 8px;background:var(--tint);border-radius:6px}.qpages li.bad{color:var(--bad)}.qviewtabs{display:none}@media (max-width:1180px){.qb{grid-template-columns:1fr}.qviewtabs{display:flex;gap:8px;align-items:center;position:sticky;top:0;z-index:4;background:var(--bg);padding:8px 0}.qb[data-view=preview] .qrail{display:none}.qpreview{position:static;max-height:none}.qpreview.qhide{height:0;padding:0;border:0;overflow:hidden;visibility:hidden}}@media (max-width:560px){.qgrid2{grid-template-columns:1fr}.qitem{grid-template-columns:24px minmax(0,1fr) 44px}.qitem .row2{grid-template-columns:1fr 1fr 1.3fr}.qamt{grid-column:1/3;text-align:left}.qpreview{padding:10px}}@media (prefers-reduced-motion:no-preference){.btn,.navlink,.seg{transition:background .15s,filter .15s}}.auth-wrap{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:24px 16px;gap:28px}.auth-brand{display:flex;flex-direction:column;align-items:center;gap:8px}.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:28px;width:min(420px,100%);display:flex;flex-direction:column;gap:18px}.auth-card h1{font-size:22px;text-align:center}.auth-card form{display:flex;flex-direction:column;gap:16px}.auth-error{padding:10px 14px;border-radius:10px;background:var(--bad-soft);color:var(--bad);font-weight:500}.auth-note{text-align:center}.side-foot{margin-top:auto;display:flex;flex-direction:column;gap:10px;padding:0 8px}.theme-toggle{display:inline-flex;align-items:center;gap:10px;justify-content:space-between;min-height:44px;padding:0 12px;border-radius:8px;border:1px solid var(--line);background:var(--panel);cursor:pointer;font-weight:500;color:var(--ink)}.theme-toggle:hover{background:var(--tint)}.userbox{display:flex;gap:10px;align-items:center;min-width:0;position:relative}.userbox .who{display:flex;flex-direction:column;min-width:0}.userbox .who span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.usermenu-btn{display:flex;gap:10px;align-items:center;min-width:0;flex:1;min-height:44px;padding:6px 10px;border-radius:8px;border:1px solid var(--line);background:var(--panel);cursor:pointer;color:var(--ink)}.usermenu-btn:hover{background:var(--tint)}.usermenu-btn:focus-visible{outline:2px solid var(--euc);outline-offset:1px}.usermenu{position:absolute;bottom:calc(100% + 8px);left:0;right:0;margin:0;padding:6px;list-style:none;background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px #0000002e;display:flex;flex-direction:column;z-index:40}.usermenu a,.usermenu button{display:flex;align-items:center;min-height:40px;padding:0 12px;border-radius:7px;text-decoration:none;color:var(--ink);font-weight:500;border:0;background:none;cursor:pointer;text-align:left}.usermenu a:hover,.usermenu button:hover,.usermenu a:focus-visible,.usermenu button:focus-visible{background:var(--tint);outline:none}.coming{border:1px dashed var(--line)}.coming .due{font-size:12.5px;color:var(--muted);letter-spacing:.08em;text-transform:uppercase;font-weight:500}.dl-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:14px}.dl-grid .pair{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere}.danger-card{border-color:var(--bad)}.app{min-width:0}@media (max-width:860px){.side .side-foot{margin-top:0;flex-direction:row;align-items:center;margin-left:auto}.side .userbox .who{display:none}.side .usermenu{position:fixed;left:12px;right:12px;bottom:12px}}
