:root{--bg:#f3f4f6;--panel:#fff;--border:#e5e7eb;--text:#111827;--muted:#6b7280;--accent:#2563eb;--danger:#dc2626;--rail:#d1d5db;color:var(--text);background:var(--bg);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}button,.button,input,select,textarea{font:inherit;color:inherit}button,.button{background:var(--panel);border:1px solid var(--border);cursor:pointer;border-radius:6px;padding:4px 10px;line-height:1.4}button:hover:not(:disabled),.button:hover{border-color:#9ca3af}button:disabled{opacity:.4;cursor:default}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.danger{color:var(--danger)}button.link{color:var(--accent);background:0 0;border:none;padding:0;text-decoration:underline}input,select,textarea{border:1px solid var(--border);background:#fff;border-radius:6px;width:100%;padding:5px 8px}label{color:var(--muted);flex-direction:column;gap:3px;font-size:12px;display:flex}label input,label select,label textarea{color:var(--text);font-size:14px}label.check{color:var(--text);cursor:pointer;flex-direction:row;align-items:center;gap:6px;font-size:13px}label.check input{width:auto;margin:0}.spacer{flex:1}.muted{color:var(--muted)}.hint{color:var(--muted);margin:4px 0 8px;font-size:12px}.app{flex-direction:column;height:100%;display:flex}.topbar{background:var(--panel);border-bottom:1px solid var(--border);align-items:center;gap:8px;padding:8px 12px;display:flex}.topbar .title{border-color:#0000;width:auto;min-width:280px;font-size:16px;font-weight:600}.topbar .title:hover,.topbar .title:focus{border-color:var(--border)}.split{flex:1;grid-template-columns:minmax(360px,2fr) 3fr;min-height:0;display:grid}.pane{flex-direction:column;min-height:0;display:flex;overflow:hidden}.pane.left{border-right:1px solid var(--border);background:var(--bg);padding:12px;overflow-y:auto}.pane.right{background:#e5e7eb}.pane-header{align-items:baseline;gap:12px;display:flex}.pane-header h2{margin:0;font-size:16px}.box{flex-direction:column;gap:12px;display:flex}.row{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px}.row-header{align-items:center;gap:6px;margin-bottom:8px;display:flex}.row-name{border-color:#0000;flex:1;width:auto;padding:2px 6px;font-weight:600}.row-name:hover,.row-name:focus{border-color:var(--border)}.row-actions{gap:4px;display:flex}.row-actions button,.add-breaker{width:auto;padding:2px 8px;font-size:12px}.din-rail{background:repeating-linear-gradient(90deg, var(--rail) 0 2px, #e5e7eb 2px 8px);border-radius:4px;flex-wrap:wrap;align-items:stretch;gap:4px;min-height:96px;padding:8px 6px;display:flex}.rail-empty{color:var(--muted);align-self:center;padding:0 6px;font-size:12px}.breaker{width:calc(var(--poles,1) * 44px + (var(--poles,1) - 1) * 4px);border:1px solid #9ca3af;border-top:4px solid var(--c,#999);cursor:pointer;text-align:center;-webkit-user-select:none;user-select:none;background:#fafafa;border-radius:4px;flex-direction:column;align-items:center;gap:3px;padding:6px 3px 4px;font-size:10px;display:flex;position:relative}.breaker:hover{background:#fff;border-color:#6b7280}.breaker.selected{outline:3px solid var(--c);outline-offset:1px;background:#fff}.breaker.kind-blank{cursor:default;background:#e5e7eb;border-style:dashed}.breaker .toggle{width:14px;height:22px;box-shadow:inset 0 -8px 0 var(--c);background:linear-gradient(#374151,#111827);border-radius:3px}.breaker.kind-main .toggle,.breaker.kind-rcd .toggle{width:22px}.breaker-label{word-break:break-word;width:100%;font-weight:600;line-height:1.15}.breaker-rating,.breaker-count{color:var(--muted);font-size:9px}.breaker .edit{opacity:0;border-radius:3px;padding:0 3px;font-size:10px;line-height:1.3;position:absolute;top:2px;right:2px}.breaker:hover .edit,.breaker.selected .edit{opacity:1}.add-row{align-self:flex-start}.floor-toolbar{background:var(--panel);border-bottom:1px solid var(--border)}.tabs{border-bottom:1px solid var(--border);gap:2px;padding:6px 8px 0;display:flex}.tab{background:var(--bg);border-bottom:none;border-radius:6px 6px 0 0}.tab.active{background:var(--panel);font-weight:600;position:relative;top:1px}.tab.add{padding:4px 10px}.tools{flex-wrap:wrap;align-items:center;gap:6px;padding:6px 8px;display:flex}.tools button,.tool-group{white-space:nowrap}.tool{align-items:center;gap:4px;display:inline-flex}.tool.active{background:var(--accent);border-color:var(--accent);color:#fff}.plan-area{flex:1;min-height:0;padding:16px;display:flex;position:relative;overflow:auto}.plan{background:#fff;max-width:100%;margin:auto;line-height:0;display:inline-block;position:relative;box-shadow:0 1px 4px #0003}.plan img{-webkit-user-select:none;user-select:none;max-width:100%;max-height:calc(100vh - 160px);display:block}.plan.placing{cursor:crosshair}.board-tabs{margin:8px 0 6px}.board-header{flex-wrap:wrap;align-items:flex-end;gap:8px;margin-bottom:8px;display:flex}.board-name{flex:140px;font-weight:600}.board-feed{color:var(--muted);flex:160px;font-size:12px}.report-board+.report-board{margin-top:24px}.plan-viewport{cursor:grab;flex:1;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.plan-viewport .plan:not(.placing){cursor:grab}.plan-viewport.panning,.plan-viewport.panning .plan{cursor:grabbing}.zoom-controls{z-index:3;background:var(--panel);border:1px solid var(--border);border-radius:8px;align-items:center;gap:2px;padding:2px;font-size:12px;display:flex;position:absolute;bottom:24px;left:24px;box-shadow:0 1px 4px #00000026}.zoom-controls button{background:0 0;border:none;padding:2px 8px}.zoom-controls span{text-align:center;min-width:40px;color:var(--muted);font-variant-numeric:tabular-nums}.plan-empty{background:var(--panel);text-align:center;max-width:420px;color:var(--muted);border:1px dashed #9ca3af;border-radius:8px;margin:auto;padding:24px;line-height:1.5}.plan-empty code{background:var(--bg);border-radius:3px;padding:1px 4px}.placing-hint{color:#fff;pointer-events:none;white-space:nowrap;z-index:3;background:#111827d9;border-radius:999px;padding:4px 10px;font-size:12px;line-height:1.4;position:absolute;bottom:60px;left:50%;transform:translate(-50%)}.marker{background:var(--c);color:#fff;cursor:grab;touch-action:none;border:2px solid #fff;border-radius:50%;justify-content:center;align-items:center;width:26px;height:26px;padding:0;line-height:0;display:inline-flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 1px 3px #0006}.marker.type-switch{border-radius:4px}.marker.switch-block{border-radius:5px;width:auto;height:auto;padding:2px}.marker.type-light{border-radius:50% 50% 50% 0}.marker.unassigned{color:#6b7280;background:#fff;border-style:dashed;border-color:#6b7280}.marker.dim{opacity:.25}.marker.selected{outline:3px solid var(--accent);outline-offset:2px;z-index:2}.marker:active{cursor:grabbing}.marker-label{white-space:nowrap;color:var(--text);pointer-events:none;opacity:0;background:#ffffffd9;border-radius:3px;margin-top:3px;padding:1px 4px;font-size:10px;line-height:1.2;position:absolute;top:100%;left:50%;transform:translate(-50%)}.marker:hover .marker-label,.marker.selected .marker-label{opacity:1}.marker-num{color:#fff;text-align:center;background:#111827;border-radius:999px;min-width:14px;padding:2px 4px;font-size:9px;line-height:1;position:absolute;top:-6px;right:-8px}.inspector{background:var(--panel);border:1px solid var(--border);border-radius:8px;flex-direction:column;flex:0 0 260px;align-self:flex-start;gap:10px;margin-left:16px;padding:12px;display:flex;position:sticky;top:0;box-shadow:0 4px 16px #00000026}.inspector header{justify-content:space-between;align-items:center;display:flex}.inspector header button{padding:0 6px}.modal-backdrop{z-index:10;cursor:default;text-align:left;-webkit-user-select:text;user-select:text;background:#00000059;justify-content:center;align-items:center;font-size:14px;display:flex;position:fixed;inset:0}.modal{background:var(--panel);border-radius:10px;flex-direction:column;gap:10px;width:380px;max-width:95vw;padding:16px;display:flex;box-shadow:0 8px 32px #00000040}.modal h3{margin:0 0 4px}.modal-actions{gap:6px;margin-top:6px;display:flex}.grid-3{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.modal input[type=color]{height:32px;padding:2px}.report{background:#fff;max-width:960px;min-height:100%;margin:0 auto;padding:24px}.report h1{margin:0 0 4px}.report h2{border-bottom:1px solid var(--border);margin:28px 0 8px;padding-bottom:4px;font-size:18px}.report-toolbar{gap:8px;margin-bottom:16px;display:flex}.report-table{border-collapse:collapse;width:100%;margin-bottom:16px;font-size:13px}.report-table caption{text-align:left;padding:6px 0;font-weight:600}.report-table th,.report-table td{border:1px solid var(--border);text-align:left;vertical-align:top;padding:4px 8px}.report-table th{background:var(--bg)}.swatch{vertical-align:middle;border-radius:3px;width:12px;height:12px;display:inline-block}ul.compact{margin:0;padding-left:16px}.report-plan{width:100%;box-shadow:none;border:1px solid var(--border);margin-bottom:12px;display:block}.report-plan img{width:100%;max-height:none}.report-plan .marker{cursor:default}.report-floor{break-inside:avoid}@media print{.no-print{display:none!important}.report{max-width:none;padding:0}body{background:#fff}.report-table{break-inside:auto}.report-floor{break-before:page}}.plan svg.links{pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.links line{stroke:#f59e0b;stroke-width:2.5px;opacity:.8}.links line.button-1{stroke:#0d9488}.links line.button-2{stroke:#9333ea;stroke-dasharray:7 4}.links line.button-3{stroke:#db2777;stroke-dasharray:2 4}.links line.button-4{stroke:#2563eb;stroke-dasharray:10 3 2 3}.marker.link-source{outline:3px dashed var(--accent);outline-offset:4px;z-index:3}.marker.link-target{cursor:copy}.marker.link-target:hover{outline:3px solid var(--accent);outline-offset:3px;z-index:3}.marker.link-off{opacity:.3}.toast{z-index:5;color:#fff;pointer-events:none;white-space:nowrap;background:#111827;border-radius:8px;padding:6px 12px;font-size:13px;position:absolute;top:16px;left:50%;transform:translate(-50%);box-shadow:0 4px 12px #00000040}.snap-guide{pointer-events:none;z-index:1;position:absolute}.snap-guide.vertical{border-left:1px dashed var(--accent);top:0;bottom:0}.snap-guide.horizontal{border-top:1px dashed var(--accent);left:0;right:0}.links line.plug{stroke:#475569;stroke-dasharray:2 4;stroke-linecap:round}.links line.active{stroke-width:4px;opacity:1}.links line.dim{opacity:.15}.link-badge{color:#111827;text-align:center;pointer-events:none;opacity:.9;z-index:1;background:#fff;border:2px solid #f59e0b;border-radius:999px;min-width:18px;height:18px;padding:0 4px;font-size:11px;font-weight:700;line-height:14px;position:absolute;transform:translate(-50%,-50%)}.link-badge.button-1{color:#0d9488;border-color:#0d9488}.link-badge.button-2{color:#9333ea;border-color:#9333ea}.link-badge.button-3{color:#db2777;border-color:#db2777}.link-badge.button-4{color:#2563eb;border-color:#2563eb}.link-badge.active{opacity:1;transform:translate(-50%,-50%)scale(1.15)}.link-badge.dim{opacity:.15}.link-picker{flex-direction:column;gap:4px;max-height:220px;display:flex;overflow-y:auto}.link-title{color:var(--muted);font-size:12px}.link-row{align-items:center;gap:6px;font-size:13px;display:flex}.link-row svg{flex:none}.link-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.link-check{cursor:pointer;flex-direction:row;align-items:center;gap:2px;font-size:11px}.link-check input{cursor:pointer;width:auto;margin:0}.marker.multi{border-radius:6px;gap:1px;width:auto;height:auto;min-height:26px;padding:2px 3px}.marker.multi.vertical{flex-direction:column;width:26px;padding:3px 2px}.marker.multi .marker-num{top:-8px;right:-8px}.marker.usage-empty{--usage:#22c55e}.marker.usage-partial{--usage:#f59e0b}.marker.usage-full{--usage:#334155}.marker.usage-over{--usage:#dc2626}.usage-badge{white-space:nowrap;pointer-events:none;background:#ffffffe6;border:1px solid;border-radius:3px;margin-top:5px;padding:0 4px;font-size:9px;font-weight:700;line-height:1.2;position:absolute;top:100%;left:50%;transform:translate(-50%)}.usage-badge.empty{color:#15803d}.usage-badge.partial{color:#b45309}.usage-badge.over{color:#b91c1c;background:#fef2f2}.marker:hover .usage-badge,.marker.selected .usage-badge{opacity:0}.marker.usage-plugged{--usage:#22c55e}.marker.usage-unplugged{--usage:#f59e0b}.inspector select.needs-attention{background:#fffbeb;border-color:#f59e0b}.marker[class*=usage-]{box-shadow:0 0 0 3px var(--usage), 0 1px 3px #0006}.marker.selected[class*=usage-]{outline-offset:5px}.usage-text{font-weight:600}.usage-text.empty{color:#15803d}.usage-text.partial{color:#b45309}.usage-text.full{color:#334155}.usage-text.over{color:#b91c1c}.marker.issue{box-shadow:0 0 0 3px #f97316,0 1px 3px #0006}.marker.issue[class*=usage-]{box-shadow:0 0 0 3px var(--usage), 0 0 0 5px #fff, 0 0 0 8px #f97316, 0 1px 3px #0006}.marker.issue.selected[class*=usage-]{outline-offset:10px}.issue-badge{color:#fff;text-align:center;pointer-events:auto;background:#f97316;border:1px solid #fff;border-radius:50%;width:13px;height:13px;font-size:9px;font-weight:800;line-height:11px;position:absolute;top:-7px;left:-7px}.breaker.issue{background:#fff7ed;border-color:#f97316;box-shadow:0 0 0 2px #f97316}.breaker .issue-badge{top:2px;left:2px}.issue-field{color:#c2410c;font-weight:600}.issue-field textarea{font-weight:400}.issue-field.active textarea{background:#fff7ed;border-color:#f97316}.issue-text{color:#c2410c;font-weight:600}.issue-row td:first-child{box-shadow:inset 3px 0 #f97316}.feature-badge{color:#111827;background:#fff;border:1px solid #111827;border-radius:999px;align-items:center;gap:2px;padding:1px 2px;line-height:1;display:inline-flex;position:absolute;bottom:-7px;left:-9px}.feature-badge svg{width:10px;height:5px}.remote-badge{color:var(--accent);border:1px solid var(--accent);pointer-events:auto;background:#fff;border-radius:999px;padding:1px 3px;font-size:9px;font-weight:700;line-height:1;position:absolute;top:-8px;right:-10px}.remote-callout{z-index:4;background:var(--panel);border:1px solid var(--accent);white-space:nowrap;cursor:default;border-radius:8px;flex-direction:column;gap:2px;max-width:calc(100% - 24px);padding:6px;font-size:12px;line-height:1.3;display:flex;position:absolute;top:12px;left:12px;overflow:hidden;box-shadow:0 4px 12px #0003}.remote-callout button{text-align:left;text-overflow:ellipsis;color:var(--text);background:0 0;border:none;border-radius:4px;padding:2px 4px;overflow:hidden}.remote-callout button:hover{background:var(--bg);color:var(--accent)}.marker.photo-spot{color:#fff;background:#0f172a;border-radius:6px}.photo-count{color:#0f172a;background:#fff;border:1px solid #0f172a;border-radius:999px;padding:1px 4px;font-size:9px;font-weight:700;line-height:1;position:absolute;top:-8px;right:-10px}.report-plan .marker.photo-spot .marker-label{opacity:1}.photo-grid{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.photo-grid .hint{grid-column:1/-1;margin:0}.photo-cell{position:relative}.photo-thumb{aspect-ratio:1;object-fit:cover;background:var(--bg);cursor:zoom-in;border-radius:6px;width:100%;display:block}.photo-thumb.loading{cursor:default}.photo-cell .remove{color:#fff;opacity:0;background:#111827b3;border:none;border-radius:999px;padding:0 5px;font-size:11px;line-height:16px;position:absolute;top:3px;right:3px}.photo-cell:hover .remove{opacity:1}.add-photos{text-align:center;cursor:pointer;justify-content:center}.photo-viewer{z-index:50;cursor:zoom-out;background:#000000e0;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.photo-viewer img{cursor:default;border-radius:4px;max-width:92vw;max-height:90vh}.photo-viewer .prev,.photo-viewer .next{color:#fff;background:#ffffff26;border:none;border-radius:8px;padding:8px 14px;font-size:32px;line-height:1;position:absolute;top:50%;transform:translateY(-50%)}.photo-viewer .prev{left:16px}.photo-viewer .next{right:16px}.photo-viewer .count{color:#fff;font-size:13px;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.report-photos{break-inside:avoid;margin-top:16px}.report-photos h3{align-items:center;gap:6px;margin:0 0 6px;font-size:14px;display:flex}.report-photo-grid{grid-template-columns:repeat(3,1fr);gap:8px;display:grid}.report-photo-grid .photo-thumb{aspect-ratio:4/3;cursor:default}.outlet-kinds{flex-direction:column;gap:4px;display:flex}.outlet-kind-row{grid-template-columns:repeat(2,1fr);gap:4px;display:grid}.outlet-kind-row select{padding:3px 4px;font-size:12px}.strip-editor{flex-direction:column;align-items:flex-start;gap:4px;display:flex}.strip-row{gap:4px;width:100%;display:flex}.strip-row button{padding:2px 8px}.strip-badge{color:#111827;background:#fff;border:1px solid #111827;border-radius:999px;align-items:center;gap:1px;padding:1px 3px 1px 2px;font-size:8px;font-weight:700;line-height:1;display:inline-flex;position:absolute;bottom:-7px;right:-10px}.strip-badge svg{width:10px;height:5px}.strip-badge .usb{opacity:.8;margin-left:2px}.strip-row select{flex:1 1 0;min-width:0}.tool-group{align-items:stretch;display:inline-flex}:is(.tool-group .tool:has(+.socket-count),.tool-group .tool:has(+.appliance-kind)){border-top-right-radius:0;border-bottom-right-radius:0}.socket-count,.appliance-kind{border-left:none;border-radius:0;width:auto;padding:2px 4px;font-size:12px}.appliance-kind{border-radius:0 6px 6px 0;max-width:130px}.inspector header strong{align-items:center;gap:6px;display:inline-flex}.socket-orient{border-left:none;border-radius:0 6px 6px 0;padding:2px 7px}.grid-2{grid-template-columns:1fr 1fr;gap:8px;display:grid}.sync-button{align-items:center;gap:5px;display:inline-flex}.sync-button.synced{color:#15803d}.sync-button.syncing{color:var(--accent)}.sync-button.offline{color:var(--muted)}.sync-button.conflict,.sync-button.error{color:#c2410c;border-color:#f97316}.sync-panel header{justify-content:space-between;align-items:center;display:flex}.sync-panel header strong{align-items:center;gap:6px;display:inline-flex}.sync-panel header button{padding:0 6px}.sync-panel p{margin:0;line-height:1.45}.sync-panel .row{background:0 0;border:none;flex-wrap:wrap;gap:6px;padding:0;display:flex}.sync-panel hr{border:none;border-top:1px solid var(--border);width:100%;margin:4px 0}.sync-state{font-weight:600}.sync-state.synced{color:#15803d}.sync-state.conflict,.sync-state.error,.hint.error{color:#c2410c}.sync-conflict{color:#9a3412;background:#fff7ed;border-bottom:1px solid #f97316;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;font-size:13px;display:flex}.sync-conflict .actions{gap:6px;margin-left:auto;display:flex}.topbar-actions{display:contents}.menu-toggle,.mobile-nav{display:none}.plan-viewport{touch-action:none}.marker{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}@media (pointer:coarse){.marker:after{content:"";position:absolute;inset:-8px}.zoom-controls button{padding:6px 12px}}@media (width<=760px){input,select,textarea,label input,label select,label textarea{font-size:16px}button,.button{padding:6px 12px}.topbar{gap:6px;padding:6px 8px;position:relative}.topbar .title{flex:1;min-width:0;padding:4px 6px}.topbar .spacer{display:none}.sync-button{padding:6px 10px}.sync-button .sync-label{display:none}.menu-toggle{padding:6px 12px;font-size:18px;line-height:1;display:inline-flex}.topbar-actions{z-index:20;background:var(--panel);border:1px solid var(--border);border-radius:10px;flex-direction:column;gap:4px;min-width:200px;padding:6px;display:none;position:absolute;top:calc(100% + 4px);right:8px;box-shadow:0 8px 24px #0000002e}.topbar-actions.open{display:flex}.topbar-actions>*{text-align:left;padding:10px 12px}.split{flex-direction:column;display:flex}.split .pane{flex:1}.split.show-plan .pane.left,.split.show-breakers .pane.right{display:none}.pane.left{border-right:none}.mobile-nav{background:var(--panel);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom);display:flex}.mobile-nav button{color:var(--muted);background:0 0;border:none;border-radius:0;flex:1;padding:12px;font-weight:600}.mobile-nav button.active{color:var(--accent);box-shadow:inset 0 3px 0 var(--accent)}.tabs,.tools{scrollbar-width:none;flex-wrap:nowrap;overflow-x:auto}.tabs::-webkit-scrollbar{display:none}.tools::-webkit-scrollbar{display:none}.tab,.tools>*{flex:none}.tools .spacer{display:none}.plan-area{padding:0}.zoom-controls{bottom:8px;left:8px}.placing-hint{white-space:normal;text-align:center;max-width:calc(100% - 24px);bottom:52px}.toast{white-space:normal;text-align:center;max-width:calc(100% - 24px)}.remote-callout{max-width:calc(100% - 16px);top:8px;left:8px}.plan-area{flex-direction:column}.inspector{z-index:4;border-bottom:none;border-radius:14px 14px 0 0;flex:0 auto;align-self:stretch;max-height:50%;margin:0;position:relative;top:auto;overflow-y:auto;box-shadow:0 -6px 24px #00000026}.inspector header{background:var(--panel);z-index:1;margin:-12px -12px 0;padding:12px;position:sticky;top:0}.inspector header button{padding:4px 12px}.link-picker{max-height:none}.modal-backdrop{align-items:flex-end}.modal{width:100%;max-width:none;padding-bottom:calc(16px + env(safe-area-inset-bottom));border-radius:14px 14px 0 0;max-height:90vh;overflow-y:auto}.sync-conflict .actions{width:100%;margin-left:0}.sync-conflict .actions button{flex:1}.breaker .edit{opacity:1}.row-header{flex-wrap:wrap}.photo-cell .remove{opacity:1}.report{padding:12px}.report-table{display:block;overflow-x:auto}.report-photo-grid{grid-template-columns:repeat(2,1fr)}.photo-viewer .prev{left:4px}.photo-viewer .next{right:4px}}
