:root{--bg:#f5f6f8;--surface:#fff;--surface-2:#fafbfc;--sunken:#f0f2f5;--line:#e3e6eb;--line-strong:#d0d5dd;--text:#151a23;--text-2:#475467;--text-3:#8a94a6;--accent:#2552c7;--accent-soft:#eaf0fd;--good:#137a52;--good-soft:#e6f4ee;--warn:#b25a00;--warn-soft:#fdf1e2;--bad:#c03221;--bad-soft:#fcebe8;--r1:#2e9e6b;--r2:#c8a412;--r3:#e07b1a;--r4:#cf3a2a;--v0:#6b7385;--v1:#2552c7;--v2:#0f8b8d;--v3:#7b4bd1;--v4:#b4527a;--radius:8px;--mono:ui-monospace, "SF Mono", "Cascadia Mono", Consolas, monospace;color:var(--text);background:var(--bg);font-feature-settings:"tnum" 1, "cv11" 1;-webkit-font-smoothing:antialiased;font-family:Inter,Segoe UI Variable Text,Segoe UI,system-ui,-apple-system,sans-serif;font-size:13px;line-height:1.45}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit;color:inherit}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}h1,h2,h3{letter-spacing:-.01em;margin:0;font-weight:600}h1{font-size:20px}h2{font-size:15px}h3{font-size:13px}.topbar{z-index:20;background:var(--surface);border-bottom:1px solid var(--line);align-items:center;gap:24px;height:48px;padding:0 20px;display:flex;position:sticky;top:0}.brand{letter-spacing:-.01em;align-items:center;gap:8px;font-size:14px;font-weight:650;display:flex}.brand-mark{background:var(--text);border-radius:6px;place-items:center;width:22px;height:22px;display:grid}.brand-sub{color:var(--text-3);font-weight:500}.nav{gap:2px;height:100%;display:flex}.nav a{color:var(--text-2);border-bottom:2px solid #0000;align-items:center;padding:0 12px;font-weight:500;text-decoration:none;display:flex}.nav a:hover{color:var(--text)}.nav a.on{color:var(--text);border-bottom-color:var(--text)}.topbar-right{color:var(--text-2);align-items:center;gap:14px;margin-left:auto;display:flex}.live{color:var(--text-3);align-items:center;gap:6px;font-size:12px;display:inline-flex}.live i{background:var(--text-3);border-radius:50%;width:7px;height:7px}.live.on i{background:var(--good);box-shadow:0 0 0 3px var(--good-soft)}.avatar{background:var(--sunken);width:26px;height:26px;color:var(--text-2);border:1px solid var(--line);border-radius:50%;place-items:center;font-size:11px;font-weight:600;display:grid}.page{max-width:1680px;margin:0 auto;padding:24px 28px 64px}.page-head{align-items:flex-end;gap:16px;margin-bottom:20px;display:flex}.page-head .sub{color:var(--text-2);max-width:760px;margin-top:4px}.spacer{flex:1}.muted{color:var(--text-2)}.faint{color:var(--text-3)}.mono{font-family:var(--mono);font-size:12px}.small{font-size:12px}.right{text-align:right}.nowrap{white-space:nowrap}.row{align-items:center;gap:8px;display:flex}.stack{flex-direction:column;gap:12px;display:flex}.btn{border:1px solid var(--line-strong);background:var(--surface);cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;height:30px;padding:0 12px;font-weight:500;display:inline-flex}.btn:hover{background:var(--surface-2);border-color:var(--text-3)}.btn.primary{background:var(--text);color:#fff;border-color:var(--text)}.btn.primary:hover{background:#2a3140}.btn.ghost{color:var(--text-2);background:0 0;border-color:#0000}.btn.ghost:hover{background:var(--sunken);color:var(--text)}.btn.sm{height:26px;padding:0 9px;font-size:12px}.btn:disabled{opacity:.5;cursor:default}.input,.select,.textarea{border:1px solid var(--line-strong);background:var(--surface);border-radius:6px;outline:none;min-width:0;height:30px;padding:0 10px}.textarea{resize:vertical;height:auto;padding:8px 10px}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.search{background:var(--surface) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238a94a6' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E") no-repeat 10px center;width:260px;padding-left:30px}.seg{background:var(--sunken);border-radius:7px;gap:2px;padding:2px;display:inline-flex}.seg button{height:26px;color:var(--text-2);cursor:pointer;background:0 0;border:0;border-radius:5px;padding:0 10px;font-weight:500}.seg button.on{background:var(--surface);color:var(--text);box-shadow:0 0 0 1px var(--line)}.chip{border:1px solid var(--line-strong);background:var(--surface);height:26px;color:var(--text-2);cursor:pointer;border-radius:13px;align-items:center;gap:6px;padding:0 10px;font-size:12px;font-weight:500;display:inline-flex}.chip:hover{color:var(--text);border-color:var(--text-3)}.chip.on{background:var(--text);border-color:var(--text);color:#fff}.chip .n{color:inherit;opacity:.6}.badge{letter-spacing:.01em;background:var(--sunken);height:20px;color:var(--text-2);white-space:nowrap;border-radius:4px;align-items:center;gap:5px;padding:0 7px;font-size:11px;font-weight:600;display:inline-flex}.badge.sheet{color:#4b5565;background:#eef0f3}.badge.solidworks{background:var(--accent-soft);color:var(--accent)}.badge.estimate{color:#6a3fc0;background:#f1ecfb}.badge.lock:before{content:"";background:currentColor;width:8px;height:9px;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 18'%3E%3Cpath d='M3 8V5a5 5 0 0 1 10 0v3h1a1 1 0 0 1 1 1v8a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1zm2 0h6V5a3 3 0 0 0-6 0z'/%3E%3C/svg%3E") 50%/contain no-repeat}.flag{letter-spacing:.02em;background:var(--sunken);color:var(--text-2);border-radius:3px;margin-right:3px;padding:0 5px;font-size:10px;font-weight:600;line-height:17px;display:inline-block}.flag.warn{background:var(--warn-soft);color:var(--warn)}.flag.bad{background:var(--bad-soft);color:var(--bad)}.vdot{border-radius:2px;flex:none;width:9px;height:9px;display:inline-block}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius)}.card-head{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:12px 16px;display:flex}.card-body{padding:16px}.vcards{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin-bottom:24px;display:grid}.vcard{cursor:pointer;padding:16px;transition:border-color .12s;position:relative}.vcard:hover{border-color:var(--line-strong)}.vcard.off{opacity:.45}.vcard .top{align-items:center;gap:8px;margin-bottom:10px;display:flex}.vcard .name{margin-bottom:2px;font-size:14px;font-weight:600}.vcard .big{letter-spacing:-.02em;margin-top:12px;font-size:26px;font-weight:650;line-height:1.1}.vcard .big small{color:var(--text-2);letter-spacing:0;font-size:13px;font-weight:500}.vcard .delta{margin-top:2px;font-size:12px;font-weight:600}.vcard .kv{grid-template-columns:1fr auto;gap:4px 12px;margin-top:14px;font-size:12px;display:grid}.vcard .kv span:nth-child(odd){color:var(--text-2)}.vcard .kv span:nth-child(2n){text-align:right;font-weight:500}.vcard .foot{border-top:1px solid var(--line);color:var(--text-3);margin-top:12px;padding-top:10px;font-size:11px}.vcard .stripe{border-radius:0 3px 3px 0;width:3px;position:absolute;top:14px;bottom:14px;left:0}.up{color:var(--bad)}.down{color:var(--good)}.meter{background:var(--sunken);border-radius:2px;height:4px;overflow:hidden}.meter>i{background:var(--text-2);border-radius:2px;height:100%;display:block}.ctable{border-collapse:separate;border-spacing:0;width:100%}.ctable th{text-align:left;color:var(--text-2);text-transform:uppercase;letter-spacing:.04em;border-bottom:1px solid var(--line);background:var(--surface-2);z-index:2;padding:10px 14px;font-size:11px;font-weight:600;position:sticky;top:48px}.ctable td{border-bottom:1px solid var(--line);vertical-align:middle;padding:9px 14px}.ctable tr:last-child td{border-bottom:0}.ctable tr.total td{background:var(--surface-2);border-top:1px solid var(--line-strong);font-weight:600}.ctable .mod{white-space:nowrap;font-weight:500}.cell-bar{flex-direction:column;gap:4px;min-width:150px;display:flex}.cell-bar .v{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.cell-bar .bar{background:var(--sunken);border-radius:3px;height:6px;position:relative;overflow:hidden}.cell-bar .bar i{border-radius:3px;position:absolute;top:0;bottom:0;left:0}.cell-bar .bar b{opacity:.25;border-radius:3px;position:absolute;top:0;bottom:0}.cell-bar .d{font-size:11px;font-weight:600}.toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;display:flex}.tree-wrap{max-height:calc(100vh - 210px);overflow:auto}.tree{border-collapse:separate;border-spacing:0;width:100%;font-size:12.5px}.tree th{z-index:3;background:var(--surface-2);text-align:left;color:var(--text-2);border-bottom:1px solid var(--line);white-space:nowrap;padding:8px 10px;font-size:11px;font-weight:600;position:sticky;top:0}.tree td{white-space:nowrap;border-bottom:1px solid #eef0f3;height:32px;padding:0 10px}.tree tr:hover td{background:#f7f9fc}.tree tr.sel td{background:var(--accent-soft)}.tree tr.inactive td{color:var(--text-3)}.tree tr.inactive .nm{text-decoration:line-through}.tree tr.asm .nm{font-weight:600}.tree .nmcell{align-items:center;min-width:320px;max-width:520px;display:flex}.tree .nm{text-overflow:ellipsis;overflow:hidden}.tree .pn{color:var(--text-3);font-family:var(--mono);margin-left:8px;font-size:11px}.twist{cursor:pointer;width:18px;height:18px;color:var(--text-3);background:0 0;border:0;border-radius:4px;flex:none;place-items:center;margin-right:2px;padding:0;display:grid}.twist:hover{background:var(--sunken);color:var(--text)}.twist svg{transition:transform .12s}.twist.open svg{transform:rotate(90deg)}.num{text-align:right;font-variant-numeric:tabular-nums}.edit{cursor:text;border-radius:4px;margin:0 -4px;padding:2px 4px}.edit:hover{background:var(--surface);box-shadow:inset 0 0 0 1px var(--line-strong)}.cell-input{border:1px solid var(--accent);text-align:right;border-radius:4px;outline:none;width:90px;height:24px;padding:0 6px}.cell-input.wide{text-align:left;width:160px}.src-offer{color:var(--text-3)}.mat{color:var(--text-2);align-items:center;gap:5px;font-size:11px;display:inline-flex}.mat i{border:1.5px solid;border-radius:50%;width:8px;height:8px}.mat.weighed i,.mat.datasheet i{background:currentColor}.mat.weighed,.mat.datasheet{color:var(--good)}.mat.cad,.mat.heritage,.mat.sized{color:var(--accent)}.mat.cad i,.mat.heritage i,.mat.sized i{background:linear-gradient(90deg,currentColor 50%,#0000 50%)}.mat.scaled,.mat.estimate{color:var(--warn)}.mat.target,.mat.placeholder{color:var(--bad)}.risk{color:#fff;border-radius:4px;place-items:center;width:20px;height:20px;font-size:11px;font-weight:700;display:inline-grid}.risk.r0{color:var(--text-3);background:0 0;font-weight:400}.risk.r1{background:var(--r1)}.risk.r2{background:var(--r2)}.risk.r3{background:var(--r3)}.risk.r4{background:var(--r4)}.summary{grid-template-columns:repeat(5,minmax(0,1fr));gap:0;margin-bottom:16px;display:grid}.summary>div{border-right:1px solid var(--line);padding:14px 18px}.summary>div:last-child{border-right:0}.summary .lbl{color:var(--text-2);text-transform:uppercase;letter-spacing:.04em;font-size:11px;font-weight:500}.summary .val{letter-spacing:-.02em;margin-top:4px;font-size:22px;font-weight:650}.summary .hint{color:var(--text-2);margin-top:2px;font-size:12px}.cov{grid-template-columns:64px 1fr 36px;align-items:center;gap:4px 8px;margin-top:6px;font-size:11px;display:grid}.cov span:last-child{text-align:right}.checks{flex-wrap:wrap;gap:8px;margin-bottom:16px;display:flex}.check{border:1px solid var(--line);background:var(--surface);cursor:pointer;text-align:left;border-radius:8px;flex-direction:column;gap:2px;min-width:200px;max-width:320px;padding:10px 12px;display:flex}.check:hover{border-color:var(--line-strong)}.check.on{border-color:var(--text);box-shadow:0 0 0 1px var(--text)}.check .t{font-weight:600}.check .t:before{content:"";background:var(--text-3);vertical-align:2px;border-radius:50%;width:6px;height:6px;margin-right:7px;display:inline-block}.check.warn .t:before{background:var(--warn)}.check .d{color:var(--text-2);font-size:12px}.sw{vertical-align:-.5px;border-radius:2px;flex:none;width:9px;height:9px;margin-right:8px;display:inline-block}.dim{opacity:.35}.breakdown-card{margin-bottom:16px}.breakdown{grid-template-columns:auto auto minmax(320px,640px);justify-content:start;align-items:center;gap:32px;padding:18px 22px 10px;display:grid}.donut{position:relative}.donut svg{display:block;overflow:visible}.donut circle{cursor:default;transition:opacity .12s,stroke-width .12s}.donut-c{text-align:center;pointer-events:none;flex-direction:column;justify-content:center;align-items:center;padding:0 34px;display:flex;position:absolute;inset:0}.donut-c .v{letter-spacing:-.02em;font-size:18px;font-weight:650}.donut-c .faint{text-overflow:ellipsis;white-space:nowrap;max-width:100%;overflow:hidden}.mod-legend{border-collapse:collapse;width:100%;font-size:12.5px}.mod-legend th{color:var(--text-2);text-align:left;border-bottom:1px solid var(--line);padding:0 8px 6px;font-size:11px;font-weight:500}.mod-legend td{border-bottom:1px solid var(--line);white-space:nowrap;padding:5px 8px}.mod-legend .num{text-align:right;font-variant-numeric:tabular-nums}.mod-legend tr{transition:opacity .12s}.mod-legend tbody tr:not(.tot):hover{background:var(--surface-2)}.mod-legend tr.tot td{border-bottom:0;font-weight:650}.toplists{grid-template-columns:1fr 1fr;gap:28px;padding:8px 22px 18px;display:grid}.toplist .tl-head{color:var(--text-2);text-transform:uppercase;letter-spacing:.04em;margin-bottom:6px;font-size:11px;font-weight:500}.tl-row{cursor:pointer;border-radius:4px;grid-template-columns:minmax(0,1.4fr) minmax(60px,1fr) 76px 38px;align-items:center;gap:10px;padding:3px 4px;font-size:12.5px;transition:opacity .12s;display:grid}.tl-row:hover{background:var(--surface-2)}.tl-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tl-bar{background:var(--sunken);border-radius:2px;height:8px;overflow:hidden}.tl-bar i{border-radius:2px;height:100%;display:block}.tl-v,.tl-p{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.compo{flex-direction:column;gap:10px;padding:16px 18px 14px;display:flex}.compo-row{grid-template-columns:120px 1fr 86px;align-items:center;gap:12px;display:grid}.compo-name{cursor:pointer;color:var(--text);text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:0;font-size:12.5px;font-weight:600;display:flex}.compo-name:hover{color:var(--accent)}.compo-track{background:var(--sunken);border-radius:4px;height:28px;overflow:hidden}.compo-bar{gap:1px;height:100%;display:flex}.cseg{white-space:nowrap;color:#fff;text-shadow:0 0 2px #00000059;justify-content:center;align-items:center;min-width:0;height:100%;font-size:11px;font-weight:600;transition:opacity .12s;display:flex;overflow:hidden}.compo-total{text-align:right;font-variant-numeric:tabular-nums;font-weight:650}.compo-legend{color:var(--text-2);flex-wrap:wrap;gap:6px 16px;padding:6px 0 0 132px;font-size:12px;display:flex}.compo-legend>span{cursor:default;transition:opacity .12s}@media (width<=1100px){.breakdown{grid-template-columns:auto auto}.breakdown .mod-legend{grid-column:1/-1}.toplists{grid-template-columns:1fr}}.scrim{z-index:40;background:#151a232e;position:fixed;inset:0}.drawer{background:var(--surface);z-index:41;border-left:1px solid var(--line);flex-direction:column;width:min(620px,100vw);animation:.16s ease-out slide;display:flex;position:fixed;top:0;bottom:0;right:0}@keyframes slide{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}.drawer-head{border-bottom:1px solid var(--line);padding:18px 22px 14px}.drawer-body{flex:1;padding:4px 22px 40px;overflow:auto}.section{border-bottom:1px solid var(--line);padding:18px 0}.section:last-child{border-bottom:0}.section>h3{align-items:center;gap:8px;margin-bottom:12px;display:flex}.fields{grid-template-columns:1fr 1fr;gap:10px 16px;display:grid}.field{flex-direction:column;gap:4px;display:flex}.field label{color:var(--text-2);font-size:11px;font-weight:500}.field .input,.field .select{width:100%}.field.full{grid-column:1/-1}.minitable{border-collapse:collapse;width:100%;font-size:12px}.minitable th{text-align:left;color:var(--text-2);border-bottom:1px solid var(--line);padding:6px 8px;font-size:11px;font-weight:600}.minitable th.num{text-align:right}.minitable td{vertical-align:top;border-bottom:1px solid #eef0f3;padding:7px 8px}.minitable tr:last-child td{border-bottom:0}.axes{grid-template-columns:repeat(5,1fr);gap:8px;display:grid}.axis{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:6px;padding:10px;display:flex}.axis .lbl{color:var(--text-2);font-size:11px;font-weight:500}.axis .when{color:var(--text-3);font-size:10px}.scorepick{gap:4px;display:flex}.scorepick button{border:1px solid var(--line-strong);background:var(--surface);cursor:pointer;border-radius:6px;width:28px;height:28px;font-weight:700}.scorepick button.on.s1{background:var(--r1);border-color:var(--r1);color:#fff}.scorepick button.on.s2{background:var(--r2);border-color:var(--r2);color:#fff}.scorepick button.on.s3{background:var(--r3);border-color:var(--r3);color:#fff}.scorepick button.on.s4{background:var(--r4);border-color:var(--r4);color:#fff}.timeline{flex-direction:column;display:flex}.tl{border-bottom:1px solid #eef0f3;grid-template-columns:22px 1fr;gap:10px;padding:8px 0;display:grid}.tl:last-child{border-bottom:0}.tl .meta{color:var(--text-3);font-size:11px}.kvlist{grid-template-columns:minmax(140px,220px) 1fr;font-size:12px;display:grid}.kvlist>div{overflow-wrap:anywhere;border-bottom:1px solid #f0f2f5;padding:5px 0}.kvlist>div:nth-child(odd){color:var(--text-2);padding-right:12px}.empty{text-align:center;color:var(--text-2);padding:48px}.toast{background:var(--text);color:#fff;z-index:60;border-radius:8px;padding:9px 14px;font-weight:500;animation:.16s ease-out slide;position:fixed;bottom:20px;left:50%;transform:translate(-50%)}.toast.err{background:var(--bad)}.callout{background:var(--surface-2);border:1px solid var(--line);color:var(--text-2);border-radius:8px;padding:12px 14px;font-size:12px}.callout b{color:var(--text)}.drop{border:1.5px dashed var(--line-strong);text-align:center;color:var(--text-2);background:var(--surface);cursor:pointer;border-radius:10px;padding:36px}.drop.over{border-color:var(--accent);background:var(--accent-soft)}.login{place-items:center;min-height:100vh;display:grid}.login-card{text-align:left;width:380px;padding:32px}.login-card h1{margin:18px 0 6px;font-size:22px}.google{justify-content:center;gap:10px;width:100%;height:40px;margin-top:22px;font-size:14px}.grid2{grid-template-columns:minmax(0,2fr) minmax(300px,1fr);align-items:start;gap:16px;display:grid}.btn.danger{color:var(--bad)}.btn.danger:hover{background:var(--bad-soft);border-color:var(--bad)}.modal-back{z-index:50;background:#151a2347;place-items:start center;padding-top:10vh;display:grid;position:fixed;inset:0}.modal{max-width:calc(100vw - 32px);animation:.16s ease-out slide;box-shadow:0 18px 50px #151a232e}.modal-foot{border-top:1px solid var(--line);justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.tree td.acts{text-align:right;width:64px;padding:0 6px}.tree td.acts button{visibility:hidden;justify-content:center;width:22px;height:22px;padding:0;font-size:14px;line-height:1}.tree tr:hover td.acts button{visibility:visible}.lockbar{align-items:center;gap:10px;margin-bottom:14px;display:flex}.picklist{border:1px solid var(--line);border-radius:7px;max-height:220px;margin-top:6px;overflow:auto}.picklist button{text-align:left;cursor:pointer;width:100%;font:inherit;background:0 0;border:0;align-items:baseline;gap:8px;padding:6px 10px;font-size:12px;display:flex}.picklist button:hover,.picklist button.on{background:var(--accent-soft)}.reftable{border-collapse:collapse;width:100%;font-size:12.5px}.reftable th{text-align:left;color:var(--text-2);border-bottom:1px solid var(--line);padding:8px 10px;font-size:11px;font-weight:600}.reftable td{border-bottom:1px solid #eef0f3;height:34px;padding:4px 10px}.reftable td.num,.reftable th.num{text-align:right}.ref-input{width:100%;height:26px;font:inherit;color:inherit;background:0 0;border:1px solid #0000;border-radius:5px;padding:0 6px}.ref-input:hover{border-color:var(--line-strong);background:var(--surface)}.ref-input:focus{border-color:var(--accent);background:var(--surface);box-shadow:0 0 0 3px var(--accent-soft);outline:none}.ref-input.num{text-align:right}.settings-grid{grid-template-columns:repeat(auto-fit,minmax(460px,1fr));align-items:start;gap:16px;display:grid}.legend{color:var(--text-2);flex-wrap:wrap;gap:14px;font-size:12px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}
