:root{--ink:#111;--faint:#8a8a8a;--paper:#fff;--desk:#eef0f2;--accent:#0a66c2;--accent-wash:#dcebfa;color:var(--ink);background:var(--desk);font:14px/1.4 system-ui,sans-serif}body{margin:0}h1{margin:0;font-size:16px}h2{margin:0 0 8px;font-size:14px}button{font:inherit;padding:4px 10px}.masthead{z-index:1;position:sticky;top:0}.masthead .error{margin:0}.bar{background:var(--paper);border-bottom:1px solid #ccc;align-items:center;gap:12px;padding:8px 16px;display:flex}.bar .trail{margin-right:auto}.who{color:var(--faint);background:var(--desk);justify-content:flex-end;align-items:center;gap:12px;padding:4px 16px;font-size:12px;display:flex}.who>a:first-child{color:var(--ink);margin-right:auto;font-weight:600;text-decoration:none}.who .company{color:var(--ink)}.who button{padding:2px 8px;font-size:12px}.trail{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.trail h1{display:inline}a{color:var(--accent)}.page{max-width:760px;margin:16px auto;padding:0 16px}.page>h1,.page>.heading{margin-bottom:12px}.heading{align-items:baseline;gap:12px;display:flex}.rows{background:var(--paper);border:1px solid #ccc;margin:0 0 16px;padding:0;list-style:none}.rows li{border-top:1px solid #eee;flex-wrap:wrap;align-items:baseline;gap:12px;padding:8px 12px;display:flex}.rows li:first-child{border-top:none}.rows li>a{margin-right:auto;font-weight:600}.add-row,.rename{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:12px;display:flex}.add-row input,.rename input,.login input{font:inherit;padding:4px 6px}.add-row input{flex:200px}.add-row .failed,.rename .failed{flex-basis:100%}button.quiet{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0}.failed{background:#fdecea;border:1px solid #c0392b;margin:8px 0;padding:6px 10px}.failed small{color:#555}.login{background:var(--paper);border:1px solid #ccc;flex-direction:column;gap:10px;max-width:320px;margin:48px auto;padding:20px;display:flex}.login label{flex-direction:column;gap:4px;display:flex}.login .hint{margin:0}.cover{z-index:3;background:#eef0f2d9;position:fixed;inset:0;overflow:auto}.cover>.failed{max-width:32em;margin:16px auto;padding:0 16px}.save-bar{background:var(--paper);border-bottom:1px solid #ccc;flex-wrap:wrap;align-items:center;gap:10px;padding:4px 16px;font-size:12px;display:flex}.save-bar button{padding:2px 8px;font-size:12px}.save-bar .failed{flex-basis:100%;margin:4px 0}.save-line{color:var(--faint);margin:0 auto 0 0}.save-line.not-saved{color:#c0392b}.feedback{background:var(--paper);border:1px solid #ccc;flex-direction:column;gap:10px;max-width:480px;margin:64px auto;padding:20px;display:flex}.feedback label{flex-direction:column;gap:6px;display:flex}.feedback textarea{font:inherit;resize:vertical;padding:6px}.feedback button{align-self:flex-start}.layout{grid-template-columns:minmax(0,1fr) 340px;gap:16px;padding:16px;display:grid}.layout.frozen{opacity:.55}aside{flex-direction:column;align-self:start;gap:16px;max-height:calc(100vh - 80px);display:flex;position:sticky;top:64px;overflow:auto}.view,.panel{background:var(--paper);border:1px solid #ccc;margin-bottom:16px;padding:12px}.view{scroll-margin-top:64px}.view.focused{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)}.panel{margin:0}.hint{color:var(--faint);margin:0 0 8px}.error{background:#fdecea;border:1px solid #c0392b;margin:16px;padding:8px 12px}.field{grid-template-columns:1fr 90px auto;align-items:center;gap:6px;margin:4px 0;display:grid}.field input{font:inherit;box-sizing:border-box;width:100%}.issues{margin:0;padding:0;list-style:none}.issues li{border-top:1px solid #eee;padding:4px 0}.issues .error strong{color:#c0392b}.issues .warning strong{color:#b9770e}.issues .info strong{color:var(--faint)}.build{color:var(--faint);padding:0 16px 12px;font-size:11px}.actions{flex-direction:column;align-items:flex-start;gap:6px;margin-top:10px;display:flex}.add{align-items:center;gap:6px;display:flex}.add select{font:inherit}.drag-why{z-index:2;pointer-events:none;background:#fff8e1;border:1px solid #b9770e;max-width:320px;padding:4px 8px;font-size:12px;position:fixed;box-shadow:0 2px 6px #0003}.drag-why.refused{background:#fdecea;border-color:#c0392b}.drag-why p{margin:2px 0}.start{max-width:760px;margin:32px auto;padding:0 16px}.start h1{margin-bottom:16px}.picker{background:var(--paper);border:1px solid var(--accent);margin-bottom:16px;padding:12px}.cards{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin-bottom:8px;display:grid}.card{text-align:left;background:var(--paper);cursor:pointer;border:1px solid #ccc;flex-direction:column;gap:6px;padding:10px;display:flex}.card:hover,.card:focus-visible{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-wash)}.card .sheet{pointer-events:none;height:140px}.hint.empty{background:var(--paper);border:1px dashed var(--faint);margin-bottom:16px;padding:8px 12px}pre{background:#f7f7f7;max-height:320px;padding:8px;font-size:12px;overflow:auto}.sheet{background:var(--paper);width:100%;max-height:75vh;display:block}.sheet *{vector-effect:non-scaling-stroke;stroke:var(--ink);stroke-width:1px;fill:none}.sheet text,.sheet .label{stroke:none;fill:var(--ink);font-family:system-ui,sans-serif}.sheet .wall{fill:#d6d6d6}.sheet line.wall,.sheet .floor{stroke-width:2px}.sheet .ceiling{stroke-dasharray:6 4}.sheet .run{fill:#f6f6f6;stroke:var(--faint);stroke-dasharray:4 3}.sheet .module{fill:var(--paper)}.sheet .plinth{fill:#ececec}.sheet .corner{fill:#e4e4e4;stroke-dasharray:2 2}.sheet .beam,.sheet .column,.sheet .pipe,.sheet .niche{fill:#0000000a;stroke-dasharray:8 4}.sheet .beam,.sheet .beam.sel{fill:none}.sheet .window,.sheet .door{fill:var(--paper);stroke-width:1.5px}.sheet circle.marker{stroke-width:1.5px;pointer-events:all}.sheet polygon.marker{fill:var(--ink)}.sheet text.marker{font-weight:600}.sheet .dimension line{stroke:#444;stroke-width:.75px}.sheet .dimension text{fill:#444}.sheet .key-plan{stroke:var(--faint)}.sheet rect.key-plan{fill:var(--paper)}.sheet polygon.key-plan{fill:#cfcfcf}.sheet text.key-plan{fill:var(--faint);stroke:none}.sheet .link{cursor:pointer}.sheet [tabindex]:focus-visible{outline:2px solid var(--accent)}.sheet.front .module{cursor:ew-resize}.sheet.top .module,.sheet.top .beam,.sheet.top .column,.sheet.top .window,.sheet.top .door,.sheet.top .pipe,.sheet.top .niche{cursor:move}.sheet .hl:not(text),.sheet .hl line{stroke:var(--accent);stroke-width:2px}.sheet text.hl,.sheet .hl text{fill:var(--accent)}.sheet .sel:not(text):not(g){fill:var(--accent-wash);stroke:var(--accent);stroke-width:2px}.sheet text.sel,.sheet .sel text{fill:var(--accent);font-weight:600}.stamp{border:2px solid var(--ink);letter-spacing:.02em;padding:2px 8px;font-weight:600}.read-only .sheet *{cursor:default}.read-only .sheet .link{cursor:pointer}.revision-bar code,.record code{font-size:12px}.page.wide{max-width:1040px}.stage{margin:0 0 12px;font-weight:600}.buttons{flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0 16px;display:flex}.record{border-collapse:collapse;background:var(--paper);border:1px solid #ccc;width:100%;margin-bottom:16px}.record th,.record td{text-align:left;vertical-align:top;border-top:1px solid #eee;padding:6px 10px}.record th{background:#f7f7f7;font-weight:600}.record tr.superseded,.record tr.rejected{color:var(--faint)}.finish{background:var(--paper);border-bottom:1px solid #ccc;flex-wrap:wrap;align-items:center;gap:10px;padding:4px 16px;font-size:12px;display:flex}.finish button{padding:2px 8px;font-size:12px}.change-note{margin-right:auto}.confirm{background:#fffdf3;border:1px solid #b9770e;flex-basis:100%;max-height:45vh;margin:4px 0;padding:8px 12px;overflow:auto}.confirm p{margin:4px 0 8px}.confirm button{margin-right:8px}.hash{word-break:break-all}.ask{background:var(--paper);border:1px solid #ccc;flex-direction:column;flex-basis:100%;gap:6px;max-width:520px;padding:10px;display:flex}.ask label{flex-direction:column;gap:4px;display:flex}.ask label.check{flex-direction:row;align-items:flex-start;gap:6px}.ask textarea{font:inherit;resize:vertical;padding:6px}.ask .buttons{margin:0}.changes h3{margin:8px 0 4px;font-size:13px}.changes ul{margin:0;padding-left:18px}.change-group.added h3{color:#1e7e34}.change-group.removed h3{color:#c0392b}.facts{grid-template-columns:auto 1fr;gap:2px 10px;margin:8px 0;display:grid}.facts dt{color:var(--faint)}.facts dd{margin:0}.reason{margin:4px 0;font-style:italic}.rejected-because{color:#c0392b}.decide{margin-top:10px}button[aria-pressed=true]{background:var(--accent-wash);border-color:var(--accent)}
