:root{--bg:#f3f2ef;--panel:#fbfaf8;--line:#dedbd4;--ink:#1f2328;--mute:#6b7078;--accent:#2f6fed;--accent-bg:#e8effd;--bad:#b3372a;--warn:#9a6a12;--ok:#2c7a4b;color:var(--ink);font:13px/1.4 -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif}*{box-sizing:border-box}html,body,#root{background:var(--bg);height:100%;margin:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}h3,h4,h5{margin:0}code{color:var(--mute);background:#efede8;border-radius:4px;padding:1px 5px;font:11px ui-monospace,Menlo,monospace}.app{grid-template:44px 1fr/300px 1fr 300px;height:100%;display:grid}header{color:#f1efea;background:#20242a;grid-column:1/-1;align-items:center;gap:10px;padding:0 14px;display:flex}header .mark{letter-spacing:.02em;margin-right:6px;font-size:15px}header select{color:inherit;background:#2e333b;border:1px solid #434954;border-radius:6px;padding:4px 8px}header .project{max-width:260px;font-weight:600}header .kind{color:#a3a8b1;font-size:12px}header .spacer{flex:1}header .mini{color:inherit;background:#2e333b;border-color:#434954}header .mini:disabled{opacity:.35}header .save{color:#9fd3b3;text-align:right;min-width:54px;font-size:12px}header .save.saving{color:#d9c58a}header .save.error{color:#f0a399}header .remote{background:var(--accent);border-radius:10px;padding:2px 10px;font-size:12px}header .seg button{color:#c9cdd4;background:#2e333b;border-color:#434954}header .seg button.on{color:#20242a;background:#f1efea}aside{background:var(--panel);flex-direction:column;display:flex;overflow-y:auto}aside.left{border-right:1px solid var(--line)}aside.right{border-left:1px solid var(--line)}.panel{border-bottom:1px solid var(--line);padding:12px 12px 14px}.panel.grow{flex:1}.panel h3{text-transform:uppercase;letter-spacing:.07em;color:var(--mute);align-items:center;gap:8px;margin-bottom:8px;font-size:11px;display:flex}.panel h3 .mini{text-transform:none;letter-spacing:0;margin-left:auto}.quiet{color:var(--mute);margin:4px 0;font-size:12px}.quiet.ok{color:var(--ok)}.quietpanel p{color:var(--mute);margin:0;font-size:11.5px}.derived{color:#474c55;background:#f0eee9;border-radius:6px;margin:10px 0 0;padding:7px 9px;font-size:12px}.count{background:var(--bad);color:#fff;border-radius:9px;padding:0 6px;font-size:10.5px}.mini{border:1px solid var(--line);background:#fff;border-radius:5px;padding:2px 8px;font-size:12px}.ghost{color:var(--mute);background:0 0;border:0;padding:0 4px;font-size:13px;line-height:1}.ghost:hover:not(:disabled){color:var(--ink)}.ghost:disabled{opacity:.25;cursor:default}.primary{background:var(--accent);color:#fff;border:0;border-radius:6px;padding:7px 14px;font-weight:600}.seg{display:inline-flex}.seg button{border:1px solid var(--line);background:#fff;margin-left:-1px;padding:4px 11px}.seg button:first-child{border-radius:6px 0 0 6px;margin-left:0}.seg button:last-child{border-radius:0 6px 6px 0}.seg button.on{background:var(--ink);color:#fff;border-color:var(--ink)}.check{white-space:nowrap;align-items:center;gap:5px;font-size:12px;display:inline-flex}.expr{flex:1;align-items:center;gap:6px;min-width:0;display:flex}.expr input,.field>input,.field select,.var.add input,.placement select{border:1px solid var(--line);background:#fff;border-radius:5px;width:100%;min-width:0;padding:3px 6px;font:12px ui-monospace,Menlo,monospace}.field select,.placement select{font-family:inherit}.expr input:focus,.field input:focus,select:focus{outline:2px solid var(--accent-bg);border-color:var(--accent)}.expr em{color:var(--mute);white-space:nowrap;font-size:11px;font-style:normal}.expr.bad input{border-color:var(--bad)}.expr.bad em{color:var(--bad)}.vars{flex-direction:column;gap:4px;display:flex}.var{grid-template-columns:74px 1fr 16px;align-items:center;column-gap:6px;display:grid}.var label{text-overflow:ellipsis;font:12px ui-monospace,Menlo,monospace;overflow:hidden}.var small{color:var(--mute);grid-column:2/-1;margin-top:-1px;font-size:10.5px}.var.bad small{color:var(--bad)}.var .ghost{visibility:hidden}.var:hover .ghost{visibility:visible}.var.add{grid-template-columns:1fr;margin-top:4px}.var.add input{background:0 0;border-style:dashed}.addmenu{flex-wrap:wrap;gap:4px;margin-bottom:8px;display:flex}.addmenu button{border:1px solid var(--line);text-transform:capitalize;background:#fff;border-radius:12px;padding:2px 10px;font-size:12px}.addmenu button:hover{border-color:var(--accent);color:var(--accent)}.features{margin:0 -6px;padding:0;list-style:none}.features li{cursor:pointer;border-radius:6px;align-items:center;gap:8px;padding:4px 6px;display:flex}.features li:hover{background:#f0eee9}.features li.on{background:var(--accent-bg)}.features li.off{opacity:.45}.features li.bad b{color:var(--bad)}.features .what{flex-direction:column;flex:1;min-width:0;line-height:1.25;display:flex}.features b{white-space:nowrap;text-overflow:ellipsis;font-weight:550;overflow:hidden}.features small{color:var(--mute);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.features .acts{display:none}.features li:hover .acts{display:flex}.glyph{color:#fff;background:#7b8088;border-radius:4px;flex:none;place-items:center;width:24px;height:20px;font-size:9.5px;font-weight:700;display:grid}.g-grid{background:#8a8f98}.g-footing{background:#7d7d77}.g-columns,.g-beam{background:#3b5b7a}.g-section{background:#20242a}.g-level{background:#5b6068}.g-walls{background:#474c55}.g-opening{background:#4f86b3}.g-slab{background:#9a9a94}.g-roof{background:#6d5f8a}.g-room{background:#b08a3c}.g-stair{background:#8c6b4e}.fields{flex-direction:column;gap:6px;display:flex}.field{grid-template-columns:108px 1fr;align-items:center;gap:8px;display:grid}.field label{color:#474c55;font-size:12px}.field.f-bool input{justify-self:start}.field.f-points{grid-template-columns:1fr}.pair{flex-direction:column;gap:4px;min-width:0;display:flex}.points{flex-direction:column;gap:4px;display:flex}.points>div{grid-template-columns:14px 1fr 1fr 16px;align-items:center;gap:6px;display:grid}.points.segs>div{grid-template-columns:18px 1fr}.points.segs select{border:1px solid var(--line);background:#fff;border-radius:5px;width:100%;min-width:0;padding:3px 6px;font-size:12px}.points.three>div{grid-template-columns:18px 1fr 1fr 1fr 16px;gap:4px}.points b{color:var(--mute);font-size:11px;font-weight:500}.points>.mini{align-self:flex-start}.issues{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.issues li{color:var(--bad);cursor:pointer;background:#fbecea;border-radius:6px;padding:6px 8px;font-size:12px}.issues li.warn,.issues li.info{color:var(--warn);background:#fbf3df}.warnline{color:var(--warn);background:#fbf3df;border-radius:6px;margin:6px 0;padding:6px 8px;font-size:12px}main{flex-direction:column;min-width:0;min-height:0;display:flex}.tabs{border-bottom:1px solid var(--line);background:var(--panel);gap:2px;padding:6px 10px 0;display:flex}.tabs button{color:var(--mute);background:0 0;border:0;border-radius:7px 7px 0 0;padding:7px 13px;font-weight:550;position:relative}.tabs button.on{background:var(--bg);color:var(--ink);box-shadow:inset 0 2px 0 var(--accent)}.badge{background:var(--bad);color:#fff;border-radius:8px;margin-left:5px;padding:0 5px;font-size:10px;font-style:normal}.stage{flex:1;min-height:0;position:relative;overflow:auto}.viewport{background:linear-gradient(#e9edf2,#f6f5f1 70%);position:absolute;inset:0}.viewport canvas{display:block}.views{position:absolute;top:12px;left:12px}.views button:focus-visible{outline:2px solid var(--accent);outline-offset:2px;position:relative}.empty{color:var(--mute);padding:40px}.plan{flex-direction:column;display:flex;position:absolute;inset:0}.toolbar{background:var(--panel);border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:8px 12px;display:flex}.toolbar .tip{color:var(--mute);margin-left:auto;font-size:12px}.plan svg.sheet{background:#fff;flex:1;width:100%;min-height:0}.plan svg.tool-select [data-f]{cursor:pointer}.plan svg:not(.tool-select){cursor:crosshair}.fit svg{width:100%;height:100%;display:block}.grid4{background:var(--line);grid-template:1fr 1fr/1fr 1fr;gap:1px;display:grid;position:absolute;inset:0}.grid4 figure{background:#fff;flex-direction:column;min-height:0;margin:0;padding:10px;display:flex}.grid4 .fit{flex:1;min-height:0}.sections{background:var(--line);flex-direction:column;gap:1px;display:flex;position:absolute;inset:0;overflow-y:auto}.sections figure{background:#fff;margin:0;padding:14px 18px 10px}.sections figure svg{width:100%;height:auto;max-height:72vh;display:block}.sections .empty{text-align:center;color:var(--mute);flex-direction:column;align-items:center;gap:12px;max-width:360px;margin:auto;display:flex}figcaption{text-align:center;letter-spacing:.08em;text-transform:uppercase;color:var(--mute);padding-top:4px;font-size:11px}.sheets{display:flex;position:absolute;inset:0}.sheets nav{border-right:1px solid var(--line);background:var(--panel);flex-direction:column;flex:none;gap:3px;width:190px;padding:10px;display:flex;overflow-y:auto}.sheets nav button{text-align:left;background:0 0;border:0;border-radius:6px;gap:8px;padding:5px 8px;display:flex}.sheets nav button.on{background:var(--accent-bg)}.sheets nav button b{min-width:44px}.sheets nav .primary{color:#fff;background:var(--accent);justify-content:center;margin-bottom:8px}.paper{flex:1;min-width:0;padding:18px;overflow:auto}.paper svg{width:100%;height:auto;display:block;box-shadow:0 2px 14px #00000029}.tables{max-width:1100px;padding:18px 22px}.tables h4{align-items:center;gap:12px;margin:18px 0 8px;font-size:14px;display:flex}.tables h4:first-child{margin-top:0}table{border-collapse:collapse;border:1px solid var(--line);background:#fff;width:100%}th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--mute);background:#f3f1ec;font-size:10.5px}th,td{vertical-align:top;border-bottom:1px solid #ebe8e2;padding:5px 10px}td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}tr.first td{border-top:1px solid var(--line)}tr.total td{background:#f8f7f4;font-weight:600}tr.click{cursor:pointer}tr.click:hover td{background:#f6f8fe}.dot{background:var(--ok);border-radius:50%;width:9px;height:9px;display:inline-block}.dot.fail{background:var(--bad)}.dot.warn{background:#d9a520}.chips i{color:var(--ok);background:#e3f1e8;border-radius:10px;margin-right:4px;padding:2px 8px;font-size:11px;font-style:normal;font-weight:600}.chips .fail{color:var(--bad);background:#fbecea}.chips .warn{color:var(--warn);background:#fbf3df}.site{display:flex;position:absolute;inset:0}.site .fit{background:#fff;flex:1;min-width:0;padding:10px}.site aside{border-left:1px solid var(--line);flex:none;gap:6px;width:300px;padding:14px}.site h5{justify-content:space-between;align-items:center;margin:12px 0 4px;font-size:12px;display:flex}.placement{border:1px solid var(--line);background:#fff;border-radius:6px;grid-template-columns:30px 1fr 16px;align-items:center;gap:5px 6px;margin-bottom:6px;padding:8px;display:grid}.placement .turn{border:1px solid var(--line);background:#fff;border-radius:5px;grid-column:2/-1;width:100%;min-width:0;padding:3px 6px;font:12px ui-monospace,Menlo,monospace}.spots summary{color:var(--mute);cursor:pointer;margin-bottom:4px;font-size:12px}.placement label{color:var(--mute);font-size:11px}.placement .expr,.placement label+select,.placement .check{grid-column:2/-1}.splash{text-align:center;place-content:center;gap:10px;height:100%;display:grid}.splash h1{margin:0}.modal{z-index:10;background:#14161a73;place-items:center;display:grid;position:fixed;inset:0}.newproject{text-align:left;background:#fff;border-radius:12px;flex-direction:column;gap:12px;width:560px;padding:22px;display:flex;box-shadow:0 12px 40px #00000040}.newproject h2{margin:0;font-size:17px}.newproject>input{border:1px solid var(--line);border-radius:6px;padding:8px 10px;font-size:14px}.templates{grid-template-columns:1fr 1fr;gap:8px;display:grid}.templates label{border:1px solid var(--line);cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:10px 12px;display:flex}.templates label.wide{grid-column:1/-1}.templates label.on{border-color:var(--accent);background:var(--accent-bg)}.templates input{display:none}.templates small{color:var(--mute);font-size:11px}.templates span{color:#474c55;font-size:12px}.newproject .primary{align-self:flex-end}header .note{background:var(--accent);border-color:var(--accent);color:#fff;padding:3px 11px;font-weight:600}header .tasksbtn{align-items:center;gap:6px;padding:3px 10px;display:inline-flex}header .tasksbtn.on{color:#20242a;background:#f1efea}header .tasksbtn i{color:#20242a;background:#e0a43a;border-radius:9px;padding:0 6px;font-size:10.5px;font-style:normal;font-weight:700}header .rule{background:#434954;width:1px;height:18px;margin:0 2px}.tasks{grid-column:1/-1;overflow-y:auto}.tasks-col{flex-direction:column;gap:14px;max-width:780px;margin:0 auto;padding:26px 20px 60px;display:flex}.tasks-head h2{letter-spacing:-.01em;margin:14px 0 4px;font-size:22px}.tasks-head p{color:var(--mute);max-width:560px;margin:0}.tasks-filters{align-items:center;gap:8px;margin-top:8px;display:flex}.tasks-filters select,.composer .about{border:1px solid var(--line);background:#fff;border-radius:6px;max-width:220px;padding:4px 8px}.tasks-empty{color:var(--mute);text-align:center;margin:0;padding:36px 0}.composer{border:1px solid var(--line);background:#fff;border-radius:10px;flex-direction:column;gap:10px;padding:12px;display:flex}.composer textarea{border:1px solid var(--line);resize:vertical;background:#faf9f7;border-radius:7px;width:100%;padding:9px 11px;font-size:14px;line-height:1.45}.composer textarea:focus,.task textarea:focus{outline:2px solid var(--accent-bg);border-color:var(--accent);background:#fff}.composer-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.composer-row .spacer{flex:1}.composer-row .mini{padding:5px 11px}.composer .primary:disabled{opacity:.4;cursor:default}.composer .hint{color:var(--mute);margin:0;font-size:11.5px}.composer .warnline{margin:0}.kinds{gap:5px;display:inline-flex}.kchip{border:1px solid var(--line);color:var(--mute);background:#fff;border-radius:11px;padding:2px 10px;font-size:12px;font-weight:550}.kchip.on.k-bug{color:var(--bad);background:#fbecea;border-color:#eec4be}.kchip.on.k-feature{background:var(--accent-bg);color:var(--accent);border-color:#bdd0f8}.kchip.on.k-enhancement{color:var(--ok);background:#e3f1e8;border-color:#b9dcc6}.kchip.on.k-none{border-style:dashed}select.kchip{appearance:none;cursor:pointer;text-align:center}.pics{flex-wrap:wrap;gap:8px;display:flex}.pic{border:1px solid var(--line);width:64px;height:64px;color:var(--mute);background:#f0eee9;border-radius:7px;place-items:center;display:grid;position:relative}.pic img{object-fit:cover;border-radius:6px;width:100%;height:100%;display:block}.pic img.zoomable{cursor:zoom-in}.pic button{border:1px solid var(--line);width:18px;height:18px;color:var(--mute);background:#fff;border-radius:50%;padding:0;font-size:12px;line-height:1;display:none;position:absolute;top:-7px;right:-7px}.pic:hover button,.composer .pic button{display:block}.tasklist{border:1px solid var(--line);background:#fff;border-radius:10px;margin:0;padding:0;list-style:none}.task{border-bottom:1px solid #ebe8e2;gap:12px;padding:13px 14px;display:flex}.task:last-child{border-bottom:0}.task>input{width:16px;height:16px;accent-color:var(--ok);cursor:pointer;flex:none;margin:3px 0 0}.task-main{flex-direction:column;flex:1;gap:7px;min-width:0;display:flex}.task-body{white-space:pre-wrap;overflow-wrap:anywhere;font-size:14px;line-height:1.45}.task.done .task-body{color:var(--mute);-webkit-text-decoration:line-through #c9c5bc;text-decoration:line-through #c9c5bc}.editable{cursor:text;border-radius:5px;margin:-2px -5px;padding:2px 5px}.editable:hover{background:#f5f3ee}.task textarea.editing{border:1px solid var(--accent);resize:vertical;white-space:pre-wrap;border-radius:6px;width:100%;margin:-4px -1px;padding:5px 8px}.task-meta{color:var(--mute);align-items:center;gap:8px;min-width:0;font-size:12px;display:flex}.task-meta span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.task-reply{white-space:pre-wrap;color:#474c55;border-left:2px solid var(--accent);border-radius:0 5px 5px 0;font-size:13px;line-height:1.45;margin-left:0!important;padding-left:10px!important}.task-reply.blank{color:#a9a59c;border-left-color:#0000;font-size:12px}.notetask{background:#fff;border-radius:12px;width:600px;max-width:calc(100vw - 32px);padding:20px;box-shadow:0 12px 40px #00000040}.notetask h2{margin:0;font-size:17px}.notetask .where{color:var(--mute);margin:2px 0 12px;font-size:12px}.notetask .composer{border:0;padding:0}.lightbox{cursor:zoom-out;z-index:20}.lightbox img{background:#fff;border-radius:6px;max-width:92vw;max-height:92vh;box-shadow:0 12px 40px #0006}.site aside{overflow-y:auto}.seg.small button{padding:2px 9px;font-size:11px}input.text{border:1px solid var(--line);background:#fff;border-radius:5px;width:100%;min-width:0;padding:3px 6px;font:12px ui-monospace,Menlo,monospace}input.text.bad{background:#fdf3f1;border-color:#c0392b}.points.calls>div{grid-template-columns:26px 1.25fr 1fr 16px}.points.calls>p{margin:2px 0 0}.site h5 select.mini{border:1px solid var(--line);color:var(--ink);background:#fff;border-radius:5px;padding:2px 4px;font-size:11px}.sitefeature{border:1px solid var(--line);background:#fff;border-radius:6px;margin-bottom:6px;padding:0 8px}.sitefeature[open]{padding-bottom:8px}.sitefeature summary{cursor:pointer;grid-template-columns:1fr auto 16px;align-items:center;gap:6px;padding:6px 0;font-size:12px;list-style:none;display:grid}.sitefeature summary::-webkit-details-marker{display:none}.sitefeature summary small{color:var(--mute);font-variant-numeric:tabular-nums}.sitefeature .field{margin-bottom:4px}.walltypes{width:720px;max-width:92vw}.walltypes h2{justify-content:space-between;align-items:center;margin:0 0 4px;font-size:17px;display:flex}.wt-body{grid-template-columns:210px 1fr;gap:18px;min-height:300px;margin-top:12px;display:grid}.wt-body nav{border-right:1px solid var(--line);flex-direction:column;gap:4px;padding-right:14px;display:flex}.wt-body nav>button{text-align:left;background:0 0;border:1px solid #0000;border-radius:6px;justify-content:space-between;align-items:baseline;padding:5px 8px;font-size:12.5px;display:flex}.wt-body nav>button:hover{background:#f0eee9}.wt-body nav>button.on{background:var(--accent-bg);border-color:#c9d8fb}.wt-body nav small{color:var(--mute);font-size:11px}.wt-body nav small.bad{color:var(--bad)}.wt-body nav form{border-top:1px solid var(--line);flex-direction:column;gap:5px;margin-top:auto;padding-top:12px;display:flex}.wt-body nav form select{border:1px solid var(--line);background:#fff;border-radius:5px;padding:3px 6px;font-size:12px}.wt-body section{flex-direction:column;gap:8px;display:flex}.wt-body h5{justify-content:space-between;margin-top:4px;font-size:12px;display:flex}.wt-body h5 span{color:var(--mute);font-weight:400}.wt-layers{flex-direction:column;gap:4px;display:flex}.wt-layers>.mini{align-self:flex-start}.wt-layers>div{grid-template-columns:14px 1fr 70px 16px 16px;align-items:center;gap:6px;display:grid}.wt-layers b{color:var(--mute);font-size:11px;font-weight:500}.wt-layers select{border:1px solid var(--line);background:#fff;border-radius:5px;min-width:0;padding:3px 6px;font-size:12px}.wt-row{grid-template-columns:1fr 1fr;gap:10px;display:grid}.mini.danger{color:#a23b2a;align-self:flex-start}.mini.danger:disabled{color:var(--mute);opacity:.6}.perwall summary{color:var(--mute);cursor:pointer;margin:2px 0 6px;font-size:12px}.perwall .grid{grid-template-columns:14px 1fr 62px 1fr 16px;align-items:center;gap:4px 5px;font-size:11px;display:grid}.perwall .grid>i{color:var(--mute);font-size:10.5px;font-style:normal}.perwall .grid select{border:1px solid var(--line);background:#fff;border-radius:5px;width:100%;min-width:0;padding:3px 4px;font-size:11.5px}.perwall .grid b{color:var(--mute);font-weight:500}.walltypes{text-align:left;background:#fff;border-radius:12px;padding:22px;box-shadow:0 12px 40px #00000040}.perwall .grid input:not([type]){border:1px solid var(--line);background:#fff;border-radius:5px;width:100%;min-width:0;padding:3px 5px;font:11.5px ui-monospace,Menlo,monospace}.perwall .grid input:disabled{background:#f4f3f0}.field.f-perwall{display:block}.field.f-perwall>label{display:none}.wt-color{align-items:center;gap:8px;display:flex}.wt-color input[type=color]{border:1px solid var(--line,#d5d8dd);cursor:pointer;background:0 0;border-radius:4px;width:34px;height:24px;padding:0}
