:root{--bg:#f4f5f7;--panel:#fff;--line:#e2e5ea;--text:#1f2328;--muted:#6b7280;--accent:#1f6feb;--accent-soft:#e8f0fe;--danger:#d1242f;--radius:7px;color:var(--text);background:var(--bg);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:13px}*{box-sizing:border-box}html,body,#app{height:100%;margin:0;overflow:hidden}button{font:inherit;color:inherit;border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;background:#fff;padding:5px 10px}button:hover:not(:disabled){background:#fafbfc;border-color:#c4c9d2}button:disabled{opacity:.4;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.primary:hover:not(:disabled){background:#1a5fd0}button.danger{color:var(--danger)}button.link{color:var(--accent);background:0 0;border:none;padding:0 4px}button.link.danger{color:var(--danger)}button.icon{min-width:30px;padding:4px 8px}button.icon.tiny{background:0 0;border:none;min-width:0;padding:0 4px;font-size:11px}input[type=text],select,textarea{font:inherit;border:1px solid var(--line);width:100%;color:inherit;background:#fff;border-radius:6px;padding:5px 7px}input[type=text]:focus,select:focus,textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}input[type=color]{border:1px solid var(--line);background:#fff;border-radius:6px;width:100%;height:29px;padding:2px}.muted{color:var(--muted)}.small{font-size:11.5px}.spacer{flex:1}.mono{font-variant-numeric:tabular-nums}.app{flex-direction:column;height:100%;display:flex}.topbar{background:var(--panel);border-bottom:1px solid var(--line);align-items:center;gap:12px;height:56px;padding:0 12px;display:flex}.brand{align-items:center;gap:8px;width:228px;display:flex}.logo{background:var(--accent);color:#fff;border-radius:8px;place-items:center;width:30px;height:30px;font-size:18px;display:grid}.project-name{font-size:14px;font-weight:600;background:0 0!important;border:1px solid #0000!important}.project-name:hover{border-color:var(--line)!important}.modes{flex:1;justify-content:center;gap:4px;display:flex}.mode{text-align:left;background:0 0;border:1px solid #0000;align-items:center;gap:8px;padding:6px 12px;display:flex}.mode .step{background:#eceef2;border-radius:50%;place-items:center;width:22px;height:22px;font-size:12px;font-weight:700;display:grid}.mode-text{flex-direction:column;line-height:1.2;display:flex}.mode small{color:var(--muted);font-size:11px}.mode.active{background:var(--accent-soft);border-color:#c9dbfd}.mode.active .step{background:var(--accent);color:#fff}.top-actions{align-items:center;gap:6px;display:flex}.menu{position:relative}.menu-pop{z-index:50;border:1px solid var(--line);background:#fff;border-radius:9px;flex-direction:column;min-width:240px;padding:6px;display:flex;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 10px 30px #0002}.menu-pop button{text-align:left;border:none}.menu-pop hr{border:none;border-top:1px solid var(--line);margin:4px 0}.pad{padding:4px 10px}.main{flex:1;min-height:0;display:flex}.left{background:var(--panel);border-right:1px solid var(--line);width:240px;padding:8px;overflow-y:auto}.right{background:var(--panel);border-left:1px solid var(--line);width:320px;overflow-y:auto}.center{flex:1;min-width:0;position:relative}.group-title{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);align-items:center;margin:12px 4px 4px;font-size:11px;font-weight:700;display:flex}.floors{border-bottom:1px solid var(--line);margin-bottom:4px;padding-bottom:8px}.floors .group-title{margin-top:2px}.floor{cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:6px 8px;display:flex}.floor:hover{background:#f3f4f6}.floor.active{background:var(--accent-soft);font-weight:600}.floor-menu{flex-direction:column;gap:4px;margin:4px 0 8px;display:flex}.floor-menu button{text-align:left;font-size:12px}.toolbox{flex-direction:column;gap:2px;display:flex}.tool{text-align:left;background:0 0;border:1px solid #0000;align-items:center;gap:8px;padding:6px 8px;display:flex}.tool .ti{text-align:center;width:18px}.tool.active{background:var(--accent);color:#fff;border-color:var(--accent)}.tool.active:hover{background:var(--accent)!important}.tool.subtle{color:var(--muted)}.cat-head{background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:7px 8px;font-weight:600;display:flex}.cat-head.open{background:#f3f4f6}.cat-body{border-left:2px solid #eef0f3;flex-direction:column;margin-left:12px;padding:2px 0 8px 10px;display:flex}.cat-body .tool{padding:4px 8px;font-size:12.5px}.dot{border-radius:50%;flex-shrink:0;width:9px;height:9px;display:inline-block}.count{color:var(--muted);font-size:11px;font-weight:400}.plan-wrap{background:#fbfbfc;position:absolute;inset:0;overflow:hidden}svg.plan{-webkit-user-select:none;user-select:none;touch-action:none;display:block}svg.plan.crosshair{cursor:crosshair}svg.plan text{font-family:Inter,system-ui,sans-serif}.statusbar{border-top:1px solid var(--line);color:var(--muted);background:#ffffffe6;align-items:center;gap:14px;padding:5px 12px;font-size:12px;display:flex;position:absolute;bottom:0;left:0;right:0}.statusbar .hint{color:var(--text)}.section{border-bottom:1px solid var(--line)}.section>header{cursor:pointer;align-items:center;gap:6px;padding:10px 12px;font-weight:600;display:flex}.section .caret{color:var(--muted);width:10px}.section-body{flex-direction:column;gap:8px;padding:0 12px 12px;display:flex}.field{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.lbl{color:var(--muted);font-size:11px}.num{border:1px solid var(--line);background:#fff;border-radius:6px;align-items:center;display:flex}.num:focus-within{border-color:var(--accent);outline:2px solid var(--accent-soft)}.num input{text-align:right;min-width:0;border:none!important;outline:none!important}.num .unit{color:var(--muted);padding:0 7px 0 2px;font-size:11px}.ro{padding:5px 0}.row{align-items:flex-end;gap:8px;display:flex}.row>button{flex:1}.check{cursor:pointer;align-items:center;gap:6px;display:flex}.list{margin:0;padding:0;list-style:none}.list li{cursor:pointer;border-radius:5px;align-items:center;gap:8px;padding:5px 6px;display:flex}.list li:hover{background:#f3f4f6}.swatch{border:1px solid #0002;border-radius:3px;flex-shrink:0;width:14px;height:14px}.total{border-top:1px dashed var(--line);padding-top:6px}.stats{color:var(--muted);flex-wrap:wrap;gap:4px 14px;display:flex}.stats b{color:var(--text)}.rect-edit{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:6px;padding:8px;display:flex}.rect-edit.active{background:#f7faff;border-color:#9ec0fb}.rect-head{align-items:center;font-size:12px;font-weight:600;display:flex}.subtitle{margin-top:4px;font-size:12px;font-weight:600}.chips{flex-wrap:wrap;gap:4px;display:flex}.chip{border-radius:20px;padding:2px 8px;font-size:11.5px}.chip.active{background:var(--accent-soft);border-color:#9ec0fb}.empty{background:#f7faff;border:1px dashed #b8cff8;border-radius:8px;padding:4px 12px}.steps{flex-direction:column;gap:4px;margin:0;padding-left:18px;display:flex}.height-group{flex-direction:column;gap:3px;display:flex}.height-row{align-items:center;gap:8px;display:flex}.height-row .name{cursor:pointer;text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.height-row .field{flex:0 0 90px}.tbl{border-collapse:collapse;width:100%}.tbl td{border-bottom:1px solid #f0f1f3;padding:4px}.tbl td.r{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.tbl tr.head td{padding-top:10px;font-weight:700}.legend{flex-wrap:wrap;align-items:center;gap:6px;font-size:11px;display:flex}.legend span{align-items:center;gap:3px;display:flex}.legend i{border-radius:2px;width:14px;height:10px;display:inline-block}.warnings{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.warnings li{cursor:pointer;border-radius:6px;padding:6px 8px;font-size:12px}.warnings li.warn{color:#8a4b00;background:#fff4e5}.warnings li.info{background:#eef4ff}textarea{resize:vertical}.modal-back{z-index:100;background:#0f172a55;place-items:center;display:grid;position:fixed;inset:0}.modal{background:#fff;border-radius:12px;width:min(480px,100vw - 32px);max-height:calc(100vh - 40px);overflow:auto;box-shadow:0 20px 60px #0004}.modal.wide{width:min(820px,100vw - 32px)}.modal>header{align-items:center;padding:14px 18px 4px;display:flex}.modal h2{flex:1;margin:0;font-size:17px}.modal h3{margin:8px 0 6px;font-size:13px}.modal-body{flex-direction:column;gap:10px;padding:8px 18px 18px;display:flex}.modal-body p{margin:0}.actions{align-items:center;gap:8px;margin-top:6px;display:flex}.type-pick{grid-template-columns:1fr 1fr;gap:10px;display:grid}.type-pick button{border-width:2px;flex-direction:column;align-items:center;gap:4px;padding:16px 10px;display:flex}.type-pick button.active{border-color:var(--accent);background:var(--accent-soft)}.big{font-size:30px}.warn-box{color:#8a4b00;background:#fff4e5;border-radius:6px;padding:8px 10px!important}.result{background:#f6f8fa;border-radius:8px;padding:10px}.result .warn{color:#b35900}code{background:#f1f3f5;border-radius:4px;padding:1px 5px;font-size:12px}.bom,.help{grid-template-columns:1fr 1fr;gap:24px;display:grid}.help ol{flex-direction:column;gap:8px;margin:0;padding-left:18px;display:flex}kbd{font:inherit;background:#f1f3f5;border:1px solid #dde1e6;border-bottom-width:2px;border-radius:4px;padding:0 5px;font-size:11.5px}@media print{.topbar,.left,.right,.statusbar,.no-export{display:none!important}.plan-wrap{background:#fff}}.tool-banner{color:#fff;z-index:5;background:#1f2328;border-radius:999px;align-items:center;gap:10px;max-width:calc(100% - 32px);padding:8px 14px;font-size:12.5px;display:flex;position:absolute;top:12px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0003}.tool-banner b{white-space:nowrap}.tool-banner span{color:#d0d7de}.tool-banner .link{color:#8cb4ff;white-space:nowrap}.tool-note{color:var(--muted);margin:2px 8px 4px 34px;font-size:11px;line-height:1.35}.wb{grid-template-columns:240px 1fr;gap:18px;display:grid}.wb-list{flex-direction:column;gap:6px;display:flex}.wb-item{text-align:left;align-items:center;gap:8px;display:flex}.wb-item.active{border-color:var(--accent);background:var(--accent-soft)}.wb-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.wb-edit{flex-direction:column;gap:10px;min-width:0;display:flex}.wall-swatch{border:1px solid #0003;border-radius:2px;flex-shrink:0;width:34px;height:14px;display:inline-flex;overflow:hidden}.wall-swatch.big{border-radius:4px;width:100%;height:34px;display:flex}.wall-swatch i{border-right:1px solid #0002;min-width:2px}.wb-axis{justify-content:space-between;margin-top:2px;display:flex}.wb-layers td{vertical-align:middle}.wb-btns{white-space:nowrap}.wb-result{background:#f6f8fa;border-radius:8px;flex-direction:column;gap:5px;padding:10px;display:flex}.wb-band{grid-template-columns:60px 1fr 72px 120px;align-items:center;gap:8px;display:grid}.wb-band .bar{background:#e3e6ea;border-radius:4px;height:8px;overflow:hidden}.wb-band .bar i{background:linear-gradient(90deg,#f0b429,#d1242f);height:100%;display:block}.actions.wrap{flex-wrap:wrap}.band-chips{flex-wrap:wrap;gap:4px;display:flex}.radio-row{grid-template-columns:100px 1fr;align-items:end;gap:8px;display:grid}.wall-type-row{align-items:center;gap:6px;display:flex}.stack-view{align-items:flex-start;gap:10px;display:flex}.stack-list{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.stack-row{border-radius:6px;grid-template-columns:1fr 78px auto;align-items:center;gap:4px;padding:1px 3px;display:grid}.stack-row.active{background:var(--accent-soft)}.stack-row .link{text-align:left;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.pdf-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:4px 12px;margin-bottom:6px;display:grid}.pdf-grid label{align-items:center;gap:6px;display:flex}button.logo{cursor:pointer;border:none;padding:0}button.logo:hover{filter:brightness(1.1)}.dash{flex-direction:column;height:100%;display:flex}.dash-body{flex:1;padding:24px 28px 40px;overflow:auto}.dash-body>section{max-width:1240px;margin:0 auto}.dash-hero{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;padding-bottom:8px;display:flex}.dash-hero h1{margin:0 0 4px;font-size:22px}.dash-hero p{margin:0}.dash-floors{flex-wrap:wrap;gap:6px;display:flex}.dash-floors .chip{padding:4px 10px;font-size:12px}.dash-group{margin-top:22px!important}.dash-group-head{align-items:baseline;gap:10px;margin-bottom:10px;display:flex}.dash-group-head h2{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0;font-size:13px}.dash-grid{grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px;display:grid}.mod-card{background:var(--panel);border:1px solid var(--line);border-top:3px solid var(--mod);border-radius:10px;flex-direction:column;gap:8px;min-height:150px;padding:14px 14px 12px;display:flex;position:relative}.mod-card.clickable{cursor:pointer;transition:box-shadow .12s,transform .12s}.mod-card.clickable:hover{transform:translateY(-1px);box-shadow:0 6px 18px #141e321a}.mod-card.planned{background:#fbfbfc;border-style:solid dashed dashed}.mod-card.locked{opacity:.75}.mod-head{align-items:flex-start;gap:10px;display:flex}.mod-icon{background:color-mix(in srgb, var(--mod) 14%, white);width:34px;height:34px;color:var(--mod);border-radius:9px;flex:none;place-items:center;font-size:18px;display:grid}.mod-title{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.mod-title strong{font-size:14px}.badge{color:var(--muted);white-space:nowrap;background:#eef0f3;border-radius:20px;flex:none;padding:2px 7px;font-size:10.5px}.badge.lock{color:#9a5b00;background:#fff3e0}.mod-facts,.mod-needs{flex-direction:column;gap:2px;margin:0;padding:0;list-style:none;display:flex}.mod-facts li:before{content:"·";color:var(--mod);margin-right:6px;font-weight:700}.mod-needs li{color:var(--muted);font-size:12px}.mod-needs li span{width:14px;display:inline-block}.mod-needs li.ok{color:var(--text)}.mod-needs li.ok span{color:#2b9348;font-weight:700}.mod-warn{color:#9a5b00;font-size:12px}.mod-actions{flex-wrap:wrap;gap:6px;margin-top:auto;display:flex}.mod-open{color:var(--mod);margin-top:auto;font-size:12px;font-weight:600}.lic-chip{background:var(--accent-soft);color:var(--accent);border-radius:20px;padding:3px 10px;font-size:12px}.dash-dev{border-top:1px dashed var(--line);align-items:center;gap:6px;padding-top:12px;display:flex;margin-top:28px!important}@media (width<=640px){.dash-body{padding:16px}.lic-chip{display:none}}.module-title{align-items:center;gap:8px;font-size:15px;display:flex}.module-title .mod-icon{width:28px;height:28px;font-size:15px}.cab-layout{flex:1;grid-template-columns:290px 1fr 380px;min-height:0;display:grid}.cab-side{background:var(--panel);border-right:1px solid var(--line);overflow:auto}.cab-side.right{border-right:none;border-left:1px solid var(--line)}.cab-center{flex-direction:column;align-items:center;gap:10px;padding:24px 12px;display:flex;overflow:auto}.rack{-webkit-user-select:none;user-select:none;flex:none}.rack-part,.rack-port{cursor:pointer}.rack-port:hover{stroke:#ffd166;stroke-width:1.5px}.rack-port.armed{stroke:#ffd166;stroke-width:1.2px}.cab-armed{background:#fff7d6;border:1px solid #f0d27a;border-radius:20px;padding:6px 12px;position:sticky;bottom:0}.cab-stats{margin:0 0 6px;padding:0;list-style:none}.cab-stats li{padding:2px 0;display:flex}.cab-stats li.bad b{color:var(--danger)}.cab-stats li.warnish b{color:#9a5b00}.ep-list{flex-direction:column;gap:2px;display:flex}.ep-floor{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:8px 0 2px;font-size:11px;font-weight:600}.ep-row{border-radius:5px;grid-template-columns:10px 1fr auto 18px;align-items:center;gap:6px;padding:3px 4px;font-size:12px;display:grid}.ep-row:hover{background:#f4f6f9}.ep-row.armed{background:#fff7d6}.ep-room{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ep-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ep-port{font-variant-numeric:tabular-nums;color:var(--muted)}.ep-row.linked .ep-port{color:#2b9348;font-weight:600}.cab-sum{border:1px solid var(--line);cursor:pointer;border-radius:6px;flex-direction:column;gap:1px;margin-bottom:6px;padding:6px 8px;display:flex}.cab-sum:hover{background:#f7f9fc}.warn-text{color:#9a5b00}@media (width<=1100px){.cab-layout{grid-template-columns:1fr}}.sb-hero{flex-wrap:wrap;align-items:stretch;gap:12px;display:flex}.sb-kpi{background:var(--panel);border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:2px;min-width:150px;padding:12px 16px;display:flex}.sb-kpi b{font-size:22px}.sb-price{align-self:flex-end;width:200px;margin-left:auto}.sb-bar{background:#eef0f3;border-radius:7px;height:14px;margin-top:18px;display:flex;overflow:hidden}.sb-bar span+span{border-left:2px solid #fff}.sb-legend{flex-wrap:wrap;gap:4px 14px;margin-top:6px;font-size:12px;display:flex}.sb-legend i,.sb-group-head i{border-radius:3px;width:10px;height:10px;margin-right:5px;display:inline-block}.sb-groups{grid-template-columns:repeat(auto-fill,minmax(460px,1fr));gap:12px;display:grid;margin-top:18px!important}.sb-group{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px}.sb-group-head{align-items:center;gap:8px;margin-bottom:6px;display:flex}.sb-table{border-collapse:collapse;width:100%;font-size:12px}.sb-table th{text-align:left;color:var(--muted);border-bottom:1px solid var(--line);padding:3px 4px;font-weight:500}.sb-table td{border-bottom:1px solid #f1f3f5;padding:3px 4px}.sb-table .sb-n{text-align:right;font-variant-numeric:tabular-nums}.sb-table input{text-align:right;width:64px}.sb-add{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.sb-add input[type=number]{width:64px}.sb-add input:not([type]){flex:1;min-width:180px}@media (width<=640px){.sb-groups{grid-template-columns:1fr}}.rack-legend{gap:14px;display:flex}.lg{vertical-align:-1px;background:#fff;border:1px solid #7a828e;border-radius:2px;width:11px;height:11px;margin-right:4px;display:inline-block}.lg.patched{background:#2b9348}.lg.cabled{box-shadow:inset 0 -3px #1f6feb}.lg.lit{border:2px solid #ffb703}.cab-auto{gap:4px;display:flex}.ep-dot{background:#ced4da;border-radius:50%;width:8px;height:8px}.ep-row.st-open .ep-dot{background:#f4a261}.ep-row.st-active .ep-dot{background:#2b9348}.ep-main{flex-direction:column;min-width:0;display:flex}.ep-route{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;font-size:11px;overflow:hidden}.ep-row.st-active .ep-route{color:#2b6a3f}.port-side{margin-top:8px}.port-conn{border:1px solid var(--line);border-radius:6px;align-items:center;gap:6px;padding:4px 6px;display:flex}.port-chain{background:#fff8e6;border-radius:6px;margin-top:10px;padding:6px 8px;font-size:12px;line-height:1.5}.rack-tabs{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.rack-tabs .chip{padding:4px 12px;font-size:12px}.trunk-box{border-top:1px dashed var(--line);flex-direction:column;gap:6px;margin-top:10px;padding-top:8px;display:flex}.center{flex-direction:column;display:flex}.plan-area{flex:1;min-height:0;position:relative}.plan-toolbar{background:var(--panel);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:2px;min-height:38px;padding:4px 8px;display:flex}.tb-btn{color:var(--text);white-space:nowrap;background:0 0;border:1px solid #0000;border-radius:6px;align-items:center;gap:5px;padding:4px 9px;font-size:12.5px;display:flex}.tb-btn:hover{background:#f1f3f6}.tb-btn.on{background:var(--accent-soft);color:var(--accent);border-color:#b8cff8}.tb-ico{text-align:center;width:14px;font-size:12px}.tb-split{align-items:center;gap:2px;display:flex}.tb-select{height:26px;padding:0 4px;font-size:12px}.tb-sep{background:var(--line);width:1px;height:22px;margin:0 8px}.tb-label{color:var(--muted);padding:0 4px;font-size:11px}.bd-tabs{background:var(--panel);border-bottom:1px solid var(--line);gap:2px;padding:0 16px;display:flex}.bd-tab{color:var(--muted);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;padding:9px 14px;font-size:13px}.bd-tab.on{color:var(--accent);border-bottom-color:var(--accent)}.bd-layout{flex:1;grid-template-columns:minmax(320px,42%) 1fr;min-height:0;display:grid}.bd-tree{background:var(--panel);border-right:1px solid var(--line);padding-bottom:24px;overflow:auto}.bd-tree-tools{background:var(--panel);border-bottom:1px solid var(--line);z-index:1;gap:4px;padding:8px;display:flex;position:sticky;top:0}.bd-tree-tools select{flex:1}.bd-node{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;border-left:3px solid #0000;padding:4px 10px;font-size:12.5px;overflow:hidden}.bd-node:hover{background:#f4f6f9}.bd-node.on{background:var(--accent-soft);border-left-color:var(--accent)}.bd-node.root{padding:8px 10px;font-weight:600}.bd-node.k-circuit{color:#444}.bd-code{font-variant-numeric:tabular-nums;min-width:34px;font-weight:600;display:inline-block}.bd-group{text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin:14px 10px 4px;font-size:11px;font-weight:700}.bd-editor{max-width:760px;overflow:auto}.bd-phases div{grid-template-columns:28px 1fr 70px;align-items:center;gap:8px;margin:3px 0;display:grid}.bd-bar{background:#eef0f3;border-radius:4px;height:8px;overflow:hidden}.bd-bar i{background:#f77f00;height:100%;display:block}.bd-pick{border:1px solid var(--line);border-radius:6px;max-height:260px;margin-top:8px;padding:6px;overflow:auto}.bd-pick .check{padding:2px 0;display:block}.bd-ch td{padding:3px 6px}.bd-list{width:100%;font-size:12.5px}.bd-list th{text-align:left;color:var(--muted);font-weight:500}.bd-list tr.clickable{cursor:pointer}.bd-list tr.clickable:hover{background:#f4f6f9}.bd-layout-head{flex-wrap:wrap;align-items:flex-end;gap:12px;margin-bottom:14px;display:flex}.bd-layout-head .field{flex:0 0 160px;width:160px}.bd-rail{max-width:100%;height:auto}.bd-sheet{border:1px solid var(--line);background:#fff;box-shadow:0 2px 10px #0000000f}.bd-sheet svg{width:100%;height:auto;display:block}.circuit-pick{margin-top:6px}.bd-ico{color:#8a6d00;vertical-align:-2px;background:#fbf3d5;border:1px solid #c9a227;border-radius:2px;place-items:center;width:16px;height:14px;margin-right:5px;font-size:9px;font-weight:700;display:inline-grid}.bd-node.k-circuit .bd-ico{color:#555;background:#f1f3f5;border-color:#b0b6bf}.bd-node.drop{outline-offset:-2px;background:#e3f6e8;outline:2px dashed #2b9348}.bd-node.dragging{opacity:.45}.bd-node[draggable=true]{cursor:grab}.bd-encl{flex:1;grid-template-columns:330px 1fr;min-height:0;display:grid}.bd-encl-list{background:var(--panel);border-right:1px solid var(--line);padding:10px 12px 24px;overflow:auto}.bd-encl-head{gap:8px;display:flex}.bd-encl-actions{flex-wrap:wrap;gap:6px;margin:6px 0;display:flex}.bd-encl-item{cursor:grab;border-radius:5px;grid-template-columns:18px 46px 1fr auto;align-items:center;gap:4px;padding:4px 6px;font-size:12.5px;display:grid}.bd-encl-item:hover{background:#f4f6f9}.bd-encl-item.on{background:var(--accent-soft)}.bd-encl-item.placed{color:var(--muted)}.bd-encl-chk{color:#2b9348;font-weight:700}.bd-encl-item:not(.placed) .bd-encl-chk{color:#adb5bd}.bd-encl-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.bd-encl-main{padding:18px;overflow:auto}.bd-encl-svg{touch-action:none;-webkit-user-select:none;user-select:none;max-width:100%;height:auto;display:block}.bd-layout-head select{width:auto;min-width:140px}.bd-qty{width:46px;flex:none!important}.bd-twisty{width:14px;color:var(--muted);cursor:pointer;font-size:10px;display:inline-block}.bd-tree-sub{gap:12px;padding:2px 12px 4px;font-size:11.5px;display:flex}.bd-tree-keys{outline:none;min-height:100%}.knx-bar{background:var(--panel);flex-wrap:wrap;align-items:flex-end;gap:12px;padding:10px 16px 4px;display:flex}.knx-bar .field{width:220px}.knx-bar .field:nth-child(2){width:120px}.knx-stats{padding-bottom:8px}.knx-hint{background:var(--panel);margin:0;padding:0 16px 6px}.knx-layout{border-top:1px solid var(--line);flex:1;grid-template-columns:260px 1fr 300px;min-height:0;display:grid}.knx-groups,.knx-side{background:var(--panel);padding:8px 0 24px;overflow:auto}.knx-groups{border-right:1px solid var(--line)}.knx-side{border-left:1px solid var(--line)}.knx-g{cursor:pointer;white-space:nowrap;text-overflow:ellipsis;padding:4px 12px;font-size:12.5px;overflow:hidden}.knx-g.main{margin-top:6px;font-weight:600}.knx-g.mid{padding-left:26px}.knx-g:hover{background:#f4f6f9}.knx-g.on{background:var(--accent-soft);color:var(--accent)}.knx-addr{font-variant-numeric:tabular-nums;min-width:46px;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:12px;display:inline-block}.knx-main{padding:10px 14px 24px;overflow:auto}.knx-filter{width:100%;max-width:420px;margin-bottom:8px}.knx-table{width:100%;font-size:12.5px}.knx-table th{text-align:left;color:var(--muted);font-weight:500}.knx-table td{border-bottom:1px solid #f1f3f5;padding:2px 6px}.knx-table tr.off td{opacity:.45}.knx-name{background:0 0;border:1px solid #0000;width:100%;min-width:220px;padding:2px 4px}.knx-name:hover,.knx-name:focus{border-color:var(--line);background:#fff}.knx-locked{background:#fff3cd}.knx-add{flex-wrap:wrap;gap:6px;display:flex}.knx-add input{flex:1;min-width:220px}.knx-add select{width:auto}.knx-if{padding:2px 0;display:block}.knx-src{padding-left:16px}@media (width<=1100px){.knx-layout{grid-template-columns:1fr}}.bd-outputs{border-bottom:1px solid var(--line);background:#fafbfc;flex-wrap:wrap;align-items:center;gap:10px;padding:8px 12px;display:flex}.lamp-ctl{border-top:1px dashed var(--line);margin-top:8px;padding-top:6px}.dali-group{border-bottom:1px solid #f1f3f5;padding:4px 0}.dali-ghead{align-items:center;gap:6px;display:flex}.dali-lamps{padding-left:40px}.sol-body{flex:1;padding:16px 20px 32px;overflow:auto}.sol-hero{max-width:1400px;margin:0 auto 14px}.sol-grid{grid-template-columns:minmax(340px,440px) minmax(0,1fr);align-items:start;gap:16px;max-width:1400px;margin:0 auto;display:grid}.sol-left,.sol-right{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);min-width:0}.sol-face{border:1px solid var(--line);border-radius:var(--radius);margin:8px 0;padding:8px}.sol-face-head{align-items:center;gap:6px;display:flex}.sol-face-head .field{flex:1}.sol-roof{width:100%;margin:6px 0 2px;display:block}.sol-roof-face{fill:#8d6e63;fill-opacity:.25;stroke:#6d4c41;stroke-width:.6px}.sol-roof-margin{fill:none;stroke:#6d4c41;stroke-width:.4px;stroke-dasharray:2 1.5}.sol-mod{fill:#1d3557;stroke:#a8dadc;stroke-width:.5px;cursor:pointer}.sol-mod:hover{fill:#457b9d}.sol-mod.off{fill:#0000;stroke:#adb5bd;stroke-dasharray:2 1.5}.sol-eaves{text-anchor:middle;fill:var(--muted);font-size:3.2px}.sol-chart{width:100%;display:block}.sol-axis{fill:var(--muted);font-size:9px}.sol-grid-line{stroke:var(--line);stroke-width:.8px}.sol-days{grid-template-columns:1fr 1fr;gap:10px;display:grid}.sol-flow{gap:4px;margin-bottom:8px;display:grid}.sol-dot{vertical-align:-1px;border-radius:2px;width:9px;height:9px;display:inline-block}.tbl th{text-align:left;color:var(--muted);padding:4px;font-size:12px;font-weight:600}.tbl th.r{text-align:right}.tbl tr.sol-cur td{background:var(--accent-soft);font-weight:600}@media (width<=900px){.sol-grid,.sol-days{grid-template-columns:1fr}}.sol-flow .sb-bar,.sol-flowbar{margin-top:0}.heat-row{cursor:pointer}.heat-row:hover td{background:#f6f8fa}.heat-temp{padding:1px 2px;font-size:12px}.heat-detail>td{background:#fafbfc;padding:2px 8px 8px 22px}.heat-rooms .caret{color:var(--muted);font-size:10px}.sol-builder{border:1px dashed var(--line);border-radius:var(--radius);margin-bottom:8px;padding:8px}.sol-mod.blocked{fill:none;stroke:#e5989b;stroke-width:.4px;stroke-dasharray:1.5 1.5;cursor:default}.sol-obs{cursor:move}.sol-obs-clear{fill:#e5989b22;stroke:#c1121f;stroke-width:.6px;stroke-dasharray:3 2}.sol-obs-body{stroke:#343a40;stroke-width:.6px}.sol-obs-label{text-anchor:middle;fill:#212529;pointer-events:none;font-size:7px}.sol-obs-list{gap:4px;margin:4px 0;display:grid}.sol-obs-row{grid-template-columns:1.4fr repeat(5,1fr) auto;align-items:end;gap:4px;display:grid}.sol-obs-row .field .lbl{font-size:10.5px}.sol-obs-name{padding-bottom:6px;font-size:12px}.inv-top{flex-wrap:wrap;align-items:end;gap:8px;max-width:1400px;margin:0 auto 6px;display:flex}.inv-add{align-items:end;gap:6px;display:flex}.inv-hint{max-width:1400px;margin:0 auto 10px}.inv-tbl .field{margin:0}.inv-tbl td.r .field input{text-align:right;width:64px}.inv-name{width:100%;min-width:220px}.inv-star{color:var(--muted)}.inv-star.on{color:#e9b500}.inv-badge{background:#eef0f3;border-radius:8px;padding:0 6px;font-size:11px;display:inline-block}.inv-badge.proj{background:var(--accent-soft)}.sol-body>section.inv-top+p,.sol-body>.section{max-width:1400px;margin-left:auto;margin-right:auto}.inv-tbl{table-layout:fixed}.inv-tbl th:first-child{width:150px}.inv-tbl th:nth-child(3),.inv-tbl th:nth-child(4),.inv-tbl th:nth-child(5),.inv-tbl th:nth-child(6){width:86px}.inv-tbl th:nth-child(7),.inv-tbl th:nth-child(8){width:52px}.inv-tbl th:nth-child(9){width:220px}.inv-tbl th:nth-child(10){width:40px}.inv-name{min-width:0}.ha-yaml{white-space:pre;tab-size:2;background:#f8f9fa;border:1px solid #dee2e6;border-radius:8px;max-height:55vh;margin:0;padding:10px 12px;font-size:11.5px;line-height:1.45;overflow:auto}.en-src{margin:0;padding-left:18px}.en-src a,.sol-right a{color:var(--accent);cursor:pointer}.cab-views{margin-right:8px}.cplan{flex-direction:column;flex:1;min-height:0;padding:12px 16px 0;display:flex}.cplan-bar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.cplan-bar .chip .muted{margin-left:2px;font-size:11px}.cplan-search{width:180px}.cplan-sum{margin:8px 0}.cplan-scroll{border:1px solid var(--line);background:var(--panel);border-radius:6px;flex:1;min-height:0;margin-bottom:12px;overflow:auto}.cplan-table{border-collapse:collapse;min-width:100%;font-size:12.5px}.cplan-table th{background:var(--panel);text-align:left;color:var(--muted);white-space:nowrap;border-bottom:1px solid var(--line);cursor:pointer;-webkit-user-select:none;user-select:none;padding:6px 8px;font-weight:500;position:sticky;top:0}.cplan-table th:hover{color:var(--accent)}.cplan-table td{white-space:nowrap;border-bottom:1px solid #f1f3f5;padding:3px 8px}.cplan-table .num{text-align:right}.cplan-table td.est{color:var(--muted);font-style:italic}.cplan-table td.bad{color:#d1242f;font-weight:600}.cplan-table tr.trunk td{background:#f7f2fc}.cplan-status{font-weight:500}.cplan-table tr.st-active .cplan-status{color:#2b9348}.cplan-table tr.st-open .cplan-status{color:#e85d04}.cplan-table tr.st-routed .cplan-status,.cplan-table tr.st-none .cplan-status{color:#d1242f}.cplan-table tr.st-trunk .cplan-status{color:#7b2cbf}.cplan-empty{padding:16px}.bd-label-page{max-width:1100px;margin-bottom:16px}.bd-label-page.portrait{max-width:778px}.bd-layout-head .check select{min-width:0;margin-left:4px}.lux-ok{color:#2b9348;font-weight:600}.lux-dark{color:var(--danger);font-weight:600}.lux-bright{color:#e07a00;font-weight:600}.lux-total td{border-top:1px solid var(--line);font-weight:600}.lux-lamps .field{margin:0}.lux-lamps td{padding:2px 4px}.lux-detail{gap:6px;display:grid}.lux-detail p{margin:0}.lux-detail button.link{justify-self:start}.rad-row{border-bottom:1px dashed var(--line);padding:4px 0 6px}.heat-big{color:#3a86ff}.vent-warn{margin:0;padding-left:18px}.vent-warn li{margin:2px 0}.vent-role{padding:1px 2px;font-size:12px}.vent-role.vent-supply{color:#1d6fa5}.vent-role.vent-extract{color:#b5541a}.vent-rooms tr.vent-off td{color:var(--muted)}.vent-pers{text-align:right;width:44px;padding:1px 2px;font-size:12px}.site .topbar .brand{width:auto}.site-body{-webkit-overflow-scrolling:touch;flex:1;padding:12px 12px 48px;overflow:auto}.site-body>*{max-width:760px;margin-left:auto;margin-right:auto}.site-body h1{margin:0;font-size:20px}.site-body h2{justify-content:space-between;align-items:baseline;gap:8px;margin:18px 0 8px;font-size:15px;display:flex}.site button{touch-action:manipulation}.site input[type=text],.site textarea{font:inherit;border:1px solid var(--line);width:100%;color:inherit;background:#fff;border-radius:8px;padding:10px 12px;font-size:16px}.site-pad{padding:8px 4px;display:block}.site-empty{text-align:center;padding:40px 8px}.site-prob{color:var(--danger)}.site-bar{background:#e9ecef;border-radius:999px;height:8px;margin:6px 0;display:flex;overflow:hidden}.site-bar .ok{background:#2b9348}.site-bar .bad{background:var(--danger)}.site-total{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px}.site-total-head{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.site-total-head b{font-size:26px}.site-rooms{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;display:grid}.site-room{text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:12px;flex-direction:column;align-items:stretch;gap:2px;min-height:84px;padding:12px;display:flex}.site-room:active{background:var(--accent-soft)}.site-room.complete{border-color:#2b9348}.site-room-name{font-size:16px;font-weight:600}.site-tick{color:#2b9348}.site-room-head{align-items:center;gap:10px;display:flex}.site-room-title{flex-direction:column;min-width:0;display:flex}.site-back{white-space:nowrap;border-radius:10px;min-height:44px;padding:0 14px;font-size:15px}.site-plan{border:1px solid var(--line);background:#fff;border-radius:12px;width:100%;height:200px;margin:8px 0;display:block}.site-plan-dot{cursor:pointer}.site-filter{z-index:2;background:var(--bg);gap:6px;padding:8px 0;display:flex;position:sticky;top:-12px}.site-filter button{border-radius:999px;flex:1;min-height:40px;font-size:14px}.site-filter button.active{background:var(--text);border-color:var(--text);color:#fff}.site-group h2 .muted{font-weight:400}.site-item{background:var(--panel);border:1px solid var(--line);border-left:5px solid #adb5bd;border-radius:10px;margin-bottom:8px;padding:10px}.site-item.st-done{border-left-color:#2b9348}.site-item.st-problem{border-left-color:var(--danger);background:#fff7f7}.site-item.sel{box-shadow:0 0 0 2px var(--accent)}.site-item-head{cursor:pointer;align-items:flex-start;gap:10px;display:flex}.site-item-text{flex-direction:column;flex:1;gap:1px;min-width:0;display:flex}.site-item-text b{font-size:15px}.site-model{color:#495057}.site-note-line{color:#6a4c00;overflow-wrap:anywhere}.site-caret{color:var(--muted);padding:2px 4px}.site-code{border:2px solid var(--c,#6c757d);min-width:34px;height:34px;color:var(--c,#6c757d);border-radius:8px;flex:none;place-items:center;padding:0 4px;font-size:12px;font-weight:700;display:grid}.site-code.check{color:#868e96;border-color:#adb5bd;font-size:16px}.site-status{grid-template-columns:1fr 1.3fr 1.2fr;gap:6px;margin-top:8px;display:grid}.site-status button{white-space:nowrap;border-radius:8px;min-height:44px;padding:0 4px;font-size:14px}.site-status .st-open.active{color:#fff;background:#495057;border-color:#495057}.site-status .st-done.active{color:#fff;background:#2b9348;border-color:#2b9348}.site-status .st-problem.active{background:var(--danger);border-color:var(--danger);color:#fff}.site-item-more{gap:8px;margin-top:10px;display:grid}.site-item-more>button.link{justify-self:start;padding:6px 0}.site-facts{grid-template-columns:auto 1fr;gap:4px 12px;margin:0;display:grid}.site-facts dt{color:var(--muted)}.site-facts dd{overflow-wrap:anywhere;margin:0}.site-note{resize:vertical;min-height:64px}.site-add{gap:6px;margin-top:4px;display:flex}.site-add button{border-radius:8px;min-height:44px;padding:0 16px}.site-photos{grid-template-columns:repeat(auto-fill,minmax(88px,1fr));gap:8px;margin-top:8px;display:grid}.site-thumb{aspect-ratio:1;border:1px solid var(--line);background:#f1f3f5;border-radius:10px;place-items:center;padding:0;display:grid;position:relative;overflow:hidden}.site-thumb img{object-fit:cover;width:100%;height:100%}.site-thumb-tag{color:#fff;white-space:nowrap;text-overflow:ellipsis;background:#000a;border-radius:4px;max-width:calc(100% - 8px);padding:1px 5px;font-size:10px;position:absolute;bottom:4px;left:4px;overflow:hidden}.site-add-photo{cursor:pointer;color:var(--accent);border-style:dashed;align-content:center;gap:2px;font-size:22px}.site-add-photo .small{font-size:11px}.site-add-photo input{display:none}.site-add-photo.busy{opacity:.6;pointer-events:none}.site-viewer{z-index:50;color:#fff;background:#000e;flex-direction:column;gap:8px;padding:8px;display:flex;position:fixed;inset:0}.site-viewer-bar{align-items:center;gap:8px;display:flex}.site-viewer-bar button{border-radius:8px;min-width:44px;min-height:44px}.site-viewer-img{flex:1;place-items:center;min-height:0;display:grid}.site-viewer-img img{object-fit:contain;max-width:100%;max-height:100%}.site .site-viewer .site-caption{color:#fff;background:#222;border-color:#444}.site-report-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:10px;margin-bottom:12px;display:flex}.site-report-actions{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.site-report-actions button{min-height:40px;padding:0 16px}.site-report-room{background:var(--panel);border:1px solid var(--line);break-inside:avoid;border-radius:10px;margin-bottom:12px;padding:12px 14px}.site-report-room header{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.site-report-room h2{margin:0}.site-report-room h2 a{cursor:pointer}.site-report-room h3{margin:10px 0 4px;font-size:13px}.site-report-room ul{margin:0;padding-left:18px}.site-report-pct{white-space:nowrap;font-weight:600}.site-report-pct.complete{color:#2b9348}.site-report-note{white-space:pre-wrap;margin:6px 0}.site-report-photos{grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin-top:10px;display:grid}.site-report-photos figure{cursor:pointer;break-inside:avoid;margin:0}.site-report-photos img{aspect-ratio:4/3;object-fit:cover;border-radius:6px;width:100%;display:block}.site-report-photos figcaption{color:var(--muted);margin-top:2px}@media (width<=480px){.site .topbar{gap:6px;padding:0 8px}.site .topbar .brand .muted,.site .module-title .mod-icon{display:none}.site-status button{font-size:13px}}@media (width>=768px){.site-body{padding:20px 24px 48px}.site-plan{height:260px}}@media print{html.site-print,html.site-print body,html.site-print #app,html.site-print .app,html.site-print .dash{background:#fff;height:auto;overflow:visible}html.site-print .site-body{padding:0;overflow:visible}html.site-print .site-noprint,html.site-print .site-viewer{display:none!important}html.site-print .site-report-room{border-color:#ccc}html.site-print .site-report-photos{grid-template-columns:repeat(4,1fr)}html.site-print *{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.pl-warn{gap:3px;margin:0;padding-left:4px;list-style:none;display:grid}.pl-fix .field{margin:0}.pl-fix td{padding:2px 4px}.pl-fix tr.muted td:first-child{font-style:italic}.pl-pipes,.pl-fittings{margin-top:8px}.pl-floors td,.pl-rooms td{vertical-align:top}.pl-detail tr.muted td{color:var(--muted)}.auth-page{background:var(--bg);justify-content:center;align-items:center;height:100%;padding:24px 16px;display:flex;overflow:auto}.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;flex-direction:column;gap:12px;width:100%;max-width:380px;padding:28px 28px 22px;display:flex;box-shadow:0 6px 24px #0000000d}.auth-card h1{margin:4px 0;font-size:20px}.auth-brand{color:var(--muted);align-items:center;gap:8px;font-weight:600;display:flex}.auth-brand .logo{background:var(--accent);color:#fff;border-radius:7px;place-items:center;width:28px;height:28px;display:inline-grid}.auth-card .field input{width:100%}.auth-submit{padding:9px 12px;font-weight:600}.auth-error{color:var(--danger);margin:0}.auth-switch{text-align:center;margin:0}.auth-oidc{text-align:center;border:1px solid var(--line);border-radius:var(--radius);color:inherit;padding:9px 12px;font-weight:600;text-decoration:none;display:block}.auth-oidc:hover{background:var(--accent-soft)}.auth-or{text-align:center;color:var(--muted);font-size:12px}.auth-note{margin:0}.auth-card input[type=email],.auth-card input[type=password],.acct-body input[type=email],.acct-body input[type=password]{font:inherit;border:1px solid var(--line);width:100%;color:inherit;background:#fff;border-radius:6px;padding:5px 7px}.auth-card input:focus,.acct-body input[type=email]:focus,.acct-body input[type=password]:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.acct-body input[readonly]{background:var(--bg);color:var(--muted)}.totp-input{letter-spacing:.15em;font-variant-numeric:tabular-nums;font-size:18px!important}.auth-card.totp-setup-card{max-width:520px}.acct-body{flex-direction:column;flex:1;align-items:center;gap:16px;padding:20px 16px 40px;display:flex;overflow:auto}.acct-body>*{width:100%;max-width:760px}.acct-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:12px;padding:16px 18px;display:flex}.acct-card>header{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.acct-card h2{margin:0;font-size:15px}.acct-card h3{margin:0;font-size:14px}.acct-card p{margin:0}.acct-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;display:grid}.acct-inline{align-items:center;gap:6px;min-width:0;display:flex}.acct-inline input{flex:1;min-width:0}.acct-inline code{overflow-wrap:anywhere;flex:1;min-width:0}.acct-sub{border-top:1px solid var(--line);flex-direction:column;gap:10px;padding-top:12px;display:flex}.acct-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.acct-form{flex-direction:column;gap:10px;max-width:460px;display:flex}.acct-form.oidc-form{max-width:none}.acct-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.acct-ok{color:#1a7f37;margin:0}.acct-notice{border-radius:8px;align-items:center;gap:8px;margin:0;padding:10px 14px;display:flex}.acct-notice.ok{color:#1a7f37;background:#e6f4ea}.acct-notice.err{color:var(--danger);background:#fde8e8}.acct-notice button{margin-left:auto}.badge.acct-on{color:#1a7f37;background:#e6f4ea;border-color:#b7dfc2}.acct-list{margin:0;padding:0;list-style:none}.acct-list li{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:10px 0;display:flex}.acct-list li:first-child{border-top:none;padding-top:0}.acct-list li .badge{margin-left:6px}.oidc-main{min-width:0}.oidc-url,.oidc-redirect code,.acct-ok{overflow-wrap:anywhere}.oidc-redirect{background:var(--bg);border-radius:8px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.totp-steps{flex-direction:column;gap:12px;margin:0;padding-left:20px;display:flex}.totp-steps li{padding-left:4px}.totp-qr{margin:8px 0 4px}.totp-qr img,.totp-qr-empty{border:1px solid var(--line);background:#fff;border-radius:8px;place-items:center;width:200px;height:200px;display:grid}.totp-key{-webkit-user-select:all;user-select:all;font-size:13px}.totp-confirm{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.totp-confirm .totp-input{width:140px}.totp-codes{flex-direction:column;gap:12px;display:flex}.totp-code-list{background:var(--bg);border-radius:8px;grid-template-columns:repeat(2,max-content);gap:6px 32px;margin:0;padding:12px 16px;list-style:none;display:grid}.totp-code-list code{font-size:15px}.acct-top button{white-space:nowrap}.acct-top .brand{width:auto}.projects .proj-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:16px;display:flex}.proj-head h1{margin:0 0 4px;font-size:22px}.proj-head p{margin:0}.proj-actions{gap:8px;display:flex}.projects .dash-body>section+section{margin-top:14px}.org-switch{font:inherit;border:1px solid var(--line);border-radius:var(--radius);background:#fff;max-width:220px;padding:4px 8px}.proj-tabs{gap:6px;display:flex;margin-top:20px!important}.proj-note,.proj-empty{max-width:1240px;margin:10px auto 0}.proj-grid{grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;display:grid}.proj-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;flex-direction:column;display:flex;position:relative;overflow:visible}.proj-card.trashed .proj-thumb{opacity:.5}.proj-thumb{border:none;border-bottom:1px solid var(--line);background:#f8f9fb;border-radius:10px 10px 0 0;place-items:center;height:150px;padding:0;display:grid;overflow:hidden}.proj-thumb img{object-fit:contain;width:100%;height:100%}.proj-icon{opacity:.6;font-size:40px}.proj-info{flex-direction:column;align-items:flex-start;gap:3px;min-width:0;padding:10px 40px 12px 12px;display:flex}.proj-name{color:var(--text);text-align:left;overflow-wrap:anywhere;padding:0;font-size:14px;font-weight:600}.proj-card>.menu{position:absolute;bottom:10px;right:6px}.proj-card .menu-pop{min-width:200px;top:auto;bottom:calc(100% + 4px)}.legacy-card{background:var(--accent-soft);border:1px solid #c9dbfd;border-radius:10px;flex-direction:column;gap:8px;padding:12px 14px;display:flex}.legacy-card p{margin:4px 0 0}.legacy-card>.link{align-self:flex-start}.legacy-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.legacy-row>span{flex:1;min-width:180px}.sync-banner{z-index:60;border-radius:9px;flex-wrap:wrap;align-items:center;gap:10px;max-width:min(760px,100vw - 32px);padding:8px 12px;display:flex;position:fixed;top:64px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0002}.sync-banner>span{flex:1;min-width:220px}.sync-banner.readonly{color:#8a4b00;background:#fff4e5;border:1px solid #f5d3a3}.sync-banner.conflict{color:#8c1d18;background:#fdecec;border:1px solid #f3b8b4}.sync-error{font-weight:600}.sync-pill{z-index:40;border:1px solid var(--line);pointer-events:none;white-space:nowrap;text-overflow:ellipsis;background:#fffffff0;border-radius:20px;align-items:center;gap:6px;max-width:calc(100vw - 24px);padding:4px 10px;font-size:12px;display:flex;position:fixed;bottom:12px;left:12px;overflow:hidden}.sync-dot{background:#2da44e;border-radius:50%;flex:none;width:8px;height:8px}.sync-pill.pending .sync-dot,.sync-pill.saving .sync-dot{background:#d4a72c}.sync-pill.offline .sync-dot{background:#8c959f}.sync-pill.conflict .sync-dot,.sync-pill.error .sync-dot{background:var(--danger)}table.versions{border-collapse:collapse;width:100%}table.versions td{border-top:1px solid var(--line);padding:5px 4px}table.versions td:last-child{text-align:right}@media (width<=640px){.sync-banner{top:auto;bottom:44px}.proj-actions{width:100%}.proj-actions button{flex:1}}.auth-card input[type=email],.auth-card input[type=password],.adm input[type=email],.adm input[type=password],.adm input[type=number],.adm input[type=date],.adm input[type=url],.adm input[type=search]{font:inherit;border:1px solid var(--line);color:inherit;background:#fff;border-radius:6px;min-width:0;padding:5px 7px}.auth-card input[type=email],.auth-card input[type=password]{padding:7px 8px}.auth-card input:focus,.adm input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.auth-card input:disabled{background:var(--bg);color:var(--muted)}.auth-card p{margin:0}.auth-pw-label{justify-content:space-between;display:flex}.auth-pw-label button.link{padding:0;font-size:11px}.auth-card .check{align-items:flex-start}.auth-card .check input{margin-top:2px}.auth-card a{color:var(--accent)}.auth-legal{border-top:1px solid var(--line);justify-content:center;gap:14px;padding-top:4px;font-size:11.5px;display:flex}.auth-legal a{color:var(--muted);text-decoration:none}.auth-legal a:hover{color:var(--accent)}.verify-banner{z-index:50;background:#fff8e6;border:1px solid #f1d38a;border-radius:8px;align-items:center;gap:10px;max-width:calc(100vw - 24px);padding:8px 10px 8px 14px;display:flex;position:fixed;bottom:14px;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #0000001a}.adm{flex-direction:column;height:100%;display:flex}.adm-loading{text-align:center;padding:40px}.adm-pad{padding:20px}.adm-tabs{background:var(--panel);border-bottom:1px solid var(--line);flex:none;gap:2px;padding:0 16px;display:flex;overflow-x:auto}.adm-tab{white-space:nowrap;color:var(--muted);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;padding:10px 12px 8px}.adm-tab:hover:not(:disabled){color:var(--text);background:0 0}.adm-tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.adm-body{flex-direction:column;flex:1;gap:14px;padding:16px;display:flex;overflow:auto}.adm-narrow-body>*{width:100%;max-width:860px;margin:0 auto}.adm-card{background:var(--panel);border:1px solid var(--line);border-radius:10px;min-width:0;padding:14px 16px}.adm-card h2{margin:0 0 10px;font-size:15px}.adm-card h3{margin:18px 0 6px;font-size:13px}.adm-card h4{color:var(--muted);margin:12px 0 4px;font-size:12px}.adm-split{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:start;gap:14px;min-height:0;display:grid}.adm-detail{max-height:calc(100vh - 140px);position:sticky;top:0;overflow:auto}.adm-cols{grid-template-columns:1fr 1fr;align-items:start;gap:14px;display:grid}.adm-toolbar{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;display:flex}.adm-toolbar select{width:auto}.adm-search{flex:1;min-width:160px}.adm-inline{align-items:center;gap:4px;display:flex}.adm-tbl td{vertical-align:top;padding:6px 4px}.adm-tbl select{width:auto;padding:2px 4px}.adm-click{cursor:pointer}tr.adm-click:hover td,td.adm-click:hover{background:#f7f9fc}tr.sel td{background:var(--accent-soft)!important}tr.adm-retired td{color:var(--muted)}.adm-tbl .nowrap,.adm-audit td.nowrap{white-space:nowrap}.adm-ellipsis{text-overflow:ellipsis;white-space:nowrap;max-width:260px;overflow:hidden}.adm-pager{justify-content:flex-end;align-items:center;gap:10px;padding-top:8px;display:flex}.adm-badge.ok{color:#1a7f37;background:#e6f6ea}.adm-badge.warn{color:#9a5b00;background:#fff3e0}.adm-badge.bad{color:var(--danger);background:#fde8e8}.adm-badge.info{background:var(--accent-soft);color:var(--accent)}.adm-form{flex-direction:column;gap:10px;display:flex}.adm-form h2{margin:0}.adm-row{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.adm-row>.field{min-width:160px}.adm-row>.field.adm-narrow{flex:0 0 110px;min-width:0}.adm-actions{align-items:center;gap:8px;display:flex}.adm-actions.wrap{flex-wrap:wrap}.adm-error,.adm-ok,.adm-warn{border-radius:6px;margin:0;padding:6px 10px}.adm-error{color:var(--danger);background:#fdeeee}.adm-ok{color:#1a7f37;background:#e9f7ee}.adm-warn{color:#7a4a00;background:#fff3e0}.adm-dl{grid-template-columns:130px 1fr;gap:4px 10px;margin:0;display:grid}.adm-dl dt{color:var(--muted)}.adm-dl dd{margin:0}.adm-sub{border:1px solid var(--line);background:#fbfcfd;border-radius:8px;flex-direction:column;gap:8px;padding:10px 12px;display:flex}.adm-history summary{cursor:pointer;color:var(--muted);margin-top:8px}.adm-facts{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:6px 0;display:grid}.adm-facts>div{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:2px;padding:8px 10px;display:flex}.adm-facts>div.adm-over{background:#fdf3f3;border-color:#f1b0b0}.adm-stats{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;display:grid}.adm-stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;flex-direction:column;gap:3px;padding:12px 14px;display:flex}.adm-stat strong{font-size:22px}.adm-modules{border:1px solid var(--line);border-radius:8px;margin:0;padding:8px 10px}.adm-module-grid{grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:4px 10px;margin-top:6px;display:grid}.adm-settings{flex-direction:column;gap:14px;width:100%;max-width:960px;margin:0 auto;display:flex}.adm-settings .adm-card{flex-direction:column;gap:10px;display:flex}.adm-settings .adm-card h2{margin:0}.adm-savebar{background:var(--bg);justify-content:flex-end;align-items:center;gap:8px;padding:10px 0;display:flex;position:sticky;bottom:0}.adm-savebar .adm-error,.adm-savebar .adm-ok{margin-right:auto}@media (width<=1000px){.adm-split,.adm-cols{grid-template-columns:1fr}.adm-detail{max-height:none;position:static}}.adm-facts>div>.badge{align-self:flex-start}.adm-settings .adm-row{align-items:flex-start}@media print{html.trial-print body:after{content:"Forgestead · Trial    Forgestead · Trial    Forgestead · Trial";text-align:center;color:#d62828;opacity:.15;pointer-events:none;z-index:2147483647;white-space:nowrap;font:700 42pt system-ui,sans-serif;position:fixed;inset:40% -20% auto;transform:rotate(-30deg)}}.lazy-locked p,.lazy-failed p{margin:0 0 12px}.lazy-failed{text-align:center;background:var(--panel);border-radius:var(--radius);max-width:420px;margin:15vh auto 0;padding:24px;box-shadow:0 2px 12px #0000001f}.trace-marker{margin-top:16px}.trace-row{gap:8px;display:flex}.trace-row input{flex:1;font-family:monospace}.export-btn{align-items:center;gap:6px;max-width:100%;display:inline-flex}.export-error{text-overflow:ellipsis;white-space:nowrap;color:#b42318;cursor:pointer;max-width:320px;font-size:12px;overflow:hidden}.calc-status{align-self:center;padding:4px 0;font-size:12px}.calc-status.busy:before{content:"";border:2px solid var(--accent);vertical-align:-1px;border-right-color:#0000;border-radius:50%;width:8px;height:8px;margin-right:6px;animation:.8s linear infinite calc-spin;display:inline-block}@keyframes calc-spin{to{transform:rotate(360deg)}}.calc-status.inline{padding:0 0 0 8px;display:inline-block}.calc-stale{opacity:.6;transition:opacity .2s}.calc-svg svg{max-width:100%;height:auto;display:block}.field.adm-wide{flex-direction:column;margin-top:8px;display:flex}.field.adm-wide textarea{width:100%;font:inherit;resize:vertical}.adm-legal-pages{margin:4px 0 8px;font-size:13px}.app-legal{justify-content:center;gap:14px;padding:18px 0 8px;font-size:11.5px;display:flex}.app-legal a{color:var(--muted);text-decoration:none}.app-legal a:hover{text-decoration:underline}
