:root{font-family:IBM Plex Sans,system-ui,sans-serif;color:#1a1a1a;background:#f6f4f1}*{box-sizing:border-box}body{margin:0}.app-root,.app-main,#root,html,body{height:100%}.app-root{display:flex;flex-direction:column;height:100%;min-height:0}.app-main{display:block;flex:1 1 auto;min-height:0;overflow:hidden}.app-main-module{height:auto;overflow:auto;padding:12px}.app-module-nav{height:56px;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:8px;border-bottom:1px solid #d6d2c6;background:#fff}.app-module-nav.dev-build{background:#e8f2e4}.app-module-nav-tabs{display:inline-flex;align-items:center;gap:8px}.app-module-build{font-size:11px;color:#4b4b4b;letter-spacing:.02em;white-space:nowrap;background:#f2f2f2;border:1px solid #d9d9d9;border-radius:999px;padding:4px 10px}.module-root{display:grid;gap:12px}.module-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.module-tabs{display:inline-flex;gap:6px;flex-wrap:wrap}.module-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.module-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.module-card{border:1px solid #e2dfd8;border-radius:10px;background:#fff;padding:10px;display:grid;gap:8px}.module-card-inline{border:1px dashed #d9d4c9;border-radius:8px;background:#faf9f6;padding:8px;display:grid;gap:4px}.module-form-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.module-field{display:grid;gap:4px;min-width:220px;flex:1}.module-list{display:grid;gap:4px;max-height:320px;overflow:auto}.module-list-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px;align-items:center;border:1px solid #efece6;border-radius:8px;background:#faf9f6;padding:6px 8px}.module-list-row.active{border-color:#1f2a44;background:#eef2ff}.crm-project-row{grid-template-columns:minmax(0,1fr) auto;gap:6px}.crm-project-name{min-width:0;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.crm-project-status{width:44px;text-align:left;white-space:nowrap}.crm-project-empty-action{width:80px;height:28px;display:inline-block}.crm-project-actions{display:grid;width:170px;grid-template-columns:44px 80px 38px;align-items:center;justify-items:start;gap:2px}.crm-projects-shell{max-width:1240px;width:100%}.crm-project-header-grid{display:grid;gap:4px 10px;grid-template-columns:repeat(2,minmax(0,1fr));font-size:13px}.crm-table{border:1px solid #e6e1d7;border-radius:8px;overflow:hidden;background:#fff}.crm-table-projects .crm-table-row{grid-template-columns:minmax(0,1fr) 72px 112px 84px 104px 64px 90px 56px}.crm-table-projects .crm-workorder-nested-row{grid-template-columns:minmax(0,1fr) 72px 112px 84px minmax(0,1fr) 64px 90px 56px}.crm-workorder-nested-row{background:#fcfbf8;cursor:pointer}.crm-workorder-nested-row .crm-workorder-nested-title{font-size:12px;line-height:1.25}.crm-quicktodo-nested-row{background:#fff8ea}.crm-quicktodo-nested-row .crm-workorder-nested-title{font-size:12px;line-height:1.25}.crm-workorder-nested-title{padding-left:18px}.crm-kind-badge{display:inline-flex;align-items:center;border-radius:999px;padding:1px 8px;margin-right:8px;font-size:10px;letter-spacing:.05em;font-weight:700;text-transform:uppercase;border:1px solid #c8c2b7;color:#3a372f;background:#f2eee5}.crm-kind-badge-workorder{background:#e8eef9;border-color:#b4c2df;color:#243659}.crm-kind-badge-todo{background:#fff1cf;border-color:#d7c594;color:#5f4a16}.crm-quicktodo-title{word-break:break-word}.crm-quicktodo-meta{color:#5d5749;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block}.crm-status-pill{display:inline-flex;align-items:center;justify-content:center;min-width:52px;border-radius:999px;padding:1px 8px;font-size:10px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;border:1px solid #cfc7b8}.crm-status-pill-open{background:#fff1cf;border-color:#d7c594;color:#5f4a16}.crm-status-pill-done{background:#e6f4e8;border-color:#b8d7bd;color:#2f5e3a}.crm-status-pill-overdue{background:#fdeceb;border-color:#e0b6b4;color:#7a2b27}.crm-workorder-nested-assignees{grid-column:5 / 6}.crm-workorder-summary-row{background:#f7f5ef;cursor:pointer}.crm-workorder-summary-content{grid-column:1 / 9;padding-left:26px;display:grid;gap:6px;padding-top:4px;padding-bottom:4px}.crm-workorder-summary-hint{font-size:11px;color:#6d675d}.crm-workorder-summary-block{display:grid;gap:4px}.crm-workorder-summary-mini-table{display:grid;gap:2px}.crm-workorder-summary-mini-row{display:grid;grid-template-columns:minmax(0,1fr) 80px 140px;gap:8px;align-items:center;font-size:12px}.crm-table-row{display:grid;grid-template-columns:minmax(0,1fr) 84px 90px 56px;gap:4px;align-items:center;padding:6px 8px;border-top:1px solid #efebe2}.crm-table-row:first-child{border-top:0}.crm-table-head{background:#f3f0ea;font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:#6d675d;font-weight:700}.crm-sort-head{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;color:inherit;font:inherit;font-weight:inherit;letter-spacing:inherit;text-transform:inherit;padding:0;cursor:pointer}.crm-table-button{width:100%;border:0;background:#fff;text-align:left;cursor:pointer}.crm-table-button.active{background:#eef2ff}.crm-table-button:hover{background:#f8f6f1}.crm-table-workorders .crm-table-row{grid-template-columns:minmax(0,1fr) 84px minmax(0,1fr)}.crm-table-project-todos .crm-table-row{grid-template-columns:minmax(0,1fr) 84px minmax(0,1fr) 70px 70px}.crm-users-table .crm-table-row{grid-template-columns:minmax(0,1fr) 140px 120px 110px}.invite-policy-table .crm-table-row>*{min-width:0}.invite-policy-table .panel-help{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.invite-policy-select{width:100%;min-width:0;max-width:100%}.invite-policy-select.policy-disabled{background:#f8e3e2;border-color:#ddb3b0;color:#742b27}.invite-policy-select.policy-read-only{background:#fff4d6;border-color:#e2c98b;color:#6a4f0f}.invite-policy-select.policy-enabled{background:#e7f4e8;border-color:#b4d8b8;color:#245835}.invite-policy-select.policy-neutral{background:#f1efe9;border-color:#d8d2c6;color:#3c3a34}.invite-policy-group-row{background:#ece7dc;color:#4c463b}.crm-table-actions{display:inline-flex;justify-content:flex-end;align-items:center;gap:6px}.crm-modal-wide{width:min(92vw,980px);max-width:980px}.crm-modal-workspace{width:min(94vw,1280px);max-width:1280px}.crm-workspace-grid{display:grid;grid-template-columns:340px minmax(0,1fr);gap:12px}.crm-workspace-grid details{border:1px solid #e8e3d8;border-radius:8px;background:#fff;padding:8px;margin-top:8px}.crm-workspace-grid summary{cursor:pointer;font-weight:600;color:#2c364f}.crm-workorder-card{gap:12px}.crm-workorder-section{display:grid;gap:8px;margin-top:2px}.crm-workorder-section .panel-subtitle{margin:0 0 2px}.crm-workorder-meta-row{margin-bottom:4px}.crm-basic-meta{display:grid;gap:4px;margin-bottom:2px}.crm-workorder-form-row{margin-bottom:8px}.crm-section-action{margin:6px 0 10px}.crm-project-create-actions{margin-top:10px}.crm-asset-master-form{margin-bottom:12px}.custom-prop-editor{display:grid;gap:8px;margin-top:8px}.custom-prop-quick-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}.custom-prop-table{display:grid;gap:6px}.custom-prop-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) 110px 38px;gap:6px;align-items:center}.module-list-button{border:1px solid #efece6;border-radius:8px;background:#faf9f6;padding:8px;text-align:left;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px}.module-list-button.active{border-color:#1f2a44;background:#eef2ff}.module-actions{display:flex;align-items:center;gap:8px}.module-textarea{min-height:80px}.stock-foldable-table{border:1px solid #e2dfd8;border-radius:10px;background:#fff;overflow:hidden;display:block;margin-top:0}.stock-table-group+.stock-table-group{border-top:1px solid #eee9df}.stock-table-row{display:grid;grid-template-columns:minmax(0,1fr) 120px 28px;gap:8px;align-items:center;width:100%;padding:8px 10px;text-align:left;font-size:14px}.stock-table-header{background:#f2eee5;border-bottom:1px solid #dfd8ca;font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#5f584c}.stock-table-main{border:0;background:#fbfaf7;cursor:pointer;font-size:15px;font-weight:600}.stock-table-main.active{background:#eef2ff}.stock-table-children{border-top:1px solid #e7e1d4}.stock-table-child{background:#f1ede4;padding-left:20px;font-size:13px;font-weight:500}.stock-col-product{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stock-col-qty{text-align:right;font-variant-numeric:tabular-nums}.stock-col-toggle{text-align:center;color:#686052}@media(max-width:1100px){.module-grid-2,.module-grid-3{grid-template-columns:1fr}}.app-loading-screen{display:grid;place-items:center;font-size:14px;color:#4f4a3f}.user-gate-root{min-height:100%;display:grid;place-items:center;padding:24px}.user-gate-card{width:min(440px,100%);background:#fff;border:1px solid #e2dfd8;border-radius:12px;box-shadow:0 10px 24px #0f172a14;padding:16px;display:grid;gap:10px}.user-gate-brand{display:flex;align-items:center;gap:10px;padding-bottom:4px;border-bottom:1px solid #ece8df}.user-gate-logo{width:44px;height:44px;object-fit:contain}.user-gate-entry{font-size:12px;letter-spacing:.08em;color:#6a6459;text-transform:uppercase;font-weight:700}.user-gate-title{font-size:18px;font-weight:700;color:#1f2a44}.user-gate-subtitle{font-size:13px;color:#605a50}.user-gate-label{font-size:12px;font-weight:600;color:#4f4a3f}.user-gate-select{width:100%;min-height:32px}.user-gate-row{display:flex;align-items:center;gap:8px}.user-gate-input{flex:1;min-height:32px}.user-gate-divider{height:1px;background:#e2dfd8;margin:6px 0 2px}.user-gate-error{font-size:12px;color:#b42318}.user-gate-info{font-size:12px;color:#0f5132}.editor-root{display:flex;flex-direction:column;height:100%;min-height:0}.editor-header{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid #e2dfd8;background:#fff}.header-left{display:flex;align-items:center;position:relative}.header-title{font-size:15px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:#1f2a44;text-align:center}.project-switcher{border:1px solid #e2dfd8;background:#fff;border-radius:8px;padding:6px 10px;display:inline-flex;align-items:center;gap:10px;font-size:12px;color:#1f2a44;cursor:pointer;box-shadow:0 1px #0f172a0a;transition:border-color .15s ease,background .15s ease;width:430px;justify-content:space-between}.project-switcher-name{max-width:calc(100% - 24px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.project-switcher-date{font-weight:400;color:#6b6b6b}.project-switcher-caret{font-size:16px;transition:transform .15s ease;color:#6b6b6b}.project-switcher-caret.open{transform:rotate(180deg)}.project-switcher:hover{border-color:#c9c4b8;background:#f8f6f1}.project-menu{position:absolute;top:calc(100% + 8px);left:0;width:430px;background:#fff;border:1px solid #e2dfd8;border-radius:10px;box-shadow:0 12px 24px #0f172a1f;z-index:20;padding:10px;display:grid;gap:8px}.project-menu-header{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6b6b6b}.project-menu-list{display:grid;gap:6px;max-height:260px;overflow:auto}.project-menu-item{border:1px solid #e2dfd8;background:#f9f7f2;border-radius:8px;padding:7px 8px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:8px;text-align:left;cursor:pointer}.project-menu-item>.panel-help{align-self:start;margin-top:0;white-space:nowrap}.project-menu-item-main{display:grid;grid-template-rows:auto auto;gap:4px;min-width:0}.project-menu-item-title{display:block;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-menu-item-subline{min-height:20px;display:inline-flex;align-items:center}.project-menu-item:hover{border-color:#c9c4b8;background:#f1ede5}.project-menu-actions{display:flex;justify-content:flex-end}.header-right{display:flex;justify-content:flex-end;gap:10px;align-items:center}.header-group{display:inline-flex;align-items:center;gap:6px;padding:4px 6px;border-radius:999px;background:#f1eee8}.header-history-button,.header-history-button-label{white-space:nowrap}.header-separator{width:1px;height:22px;background:#d8d3c8;display:inline-block}.modal-eventlog{max-width:880px;width:min(90vw,880px)}.modal-history{max-width:1040px;width:min(94vw,1040px)}.history-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.history-column-title{font-size:13px;font-weight:700;color:#1f2a44;margin-bottom:8px}.history-item{width:100%;border:1px solid #e2dfd8;border-radius:8px;background:#fff;padding:10px;margin-bottom:8px;display:grid;gap:6px;text-align:left}.history-item.redo{background:#fbfaf6}.history-item-header{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:13px;font-weight:600;color:#1f2a44}.history-jump{font-size:12px;font-weight:700;color:#7a6f61;background:#f2ede3;border-radius:999px;padding:2px 8px}.history-item-meta{display:flex;align-items:center;justify-content:space-between;gap:8px;color:#6d665c;font-size:12px}.event-log-item{border:1px solid #e2dfd8;border-radius:8px;padding:10px;background:#fff;display:grid;gap:6px;margin-bottom:10px}.event-log-meta{display:flex;justify-content:space-between;font-size:12px;color:#6b6b6b}.event-log-body{margin:0;font-size:12px;background:#f7f4ef;border-radius:6px;padding:8px;max-height:240px;overflow:auto;white-space:pre-wrap}.event-log-search{margin-bottom:8px}.event-log-search input{width:100%;padding:8px 10px;border-radius:8px;border:1px solid #e2dfd8;font-size:12px}.header-user{width:28px;height:28px;border-radius:999px;border:1px solid transparent;background:#1f2a44;color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;letter-spacing:.04em;cursor:pointer}.header-user.mode-integrator{box-shadow:0 0 0 4px #bc2929f2,0 0 10px #bc2929d9,0 0 24px #bc2929b3}.header-user.mode-client{box-shadow:0 0 0 4px #1e9c5efa,0 0 10px #1e9c5ee0,0 0 24px #1e9c5eb8}.header-user-menu{position:relative}.header-user-dropdown{position:absolute;top:calc(100% + 8px);right:0;min-width:180px;max-height:300px;overflow:auto;background:#fff;border:1px solid #d9d3c7;border-radius:10px;box-shadow:0 10px 20px #0f172a1f;padding:8px;display:grid;gap:6px;z-index:40}.header-user-dropdown-title{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#756e61;margin-bottom:2px}.header-user-mode-toggle{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:#1f2a44;padding:5px 6px 7px;border-bottom:1px solid #e6dfd3;margin-bottom:2px}.header-user-mode-toggle input{margin:0}.header-user-empty{font-size:12px;color:#8a8478;padding:6px 8px}.header-user-option{width:100%;border:1px solid transparent;border-radius:8px;background:#f5f2eb;color:#1f2a44;font-size:12px;text-align:left;padding:7px 9px;cursor:pointer}.header-user-option:hover{background:#ece7de}.header-user-option.active{border-color:#1f2a44;background:#e8e3d7;font-weight:600}.header-user-option-manage{margin-top:4px;border-top:1px solid #dfd8cb;border-radius:0 0 8px 8px;padding-top:9px}.editor-shell{display:grid;grid-template-columns:280px 1fr 320px;grid-template-rows:minmax(0,1fr);gap:12px;flex:1 1 auto;min-height:0;overflow:hidden;padding:12px;box-sizing:border-box}.editor-shell.zen-mode{grid-template-columns:1fr}.zen-status-bar{display:flex;align-items:center;gap:8px;padding:8px 16px;border-bottom:1px solid #e2dfd8;background:#f8f6f2;overflow-x:auto}.zen-status-item{font-size:12px;color:#605a50;background:#fff;border:1px solid #dfd9cd;border-radius:999px;padding:4px 10px;white-space:nowrap}.zen-status-item strong{color:#1f2a44}.zen-status-item.save.pending,.zen-status-item.save.saving{border-color:#efb26e;background:#fff5e9}.zen-status-item.save.error{border-color:#ef4444;background:#fee2e2}.routing-toolbar{display:flex;align-items:center;gap:12px;padding:8px 16px;border-bottom:1px solid #e2dfd8;background:#fcfaf6;flex-wrap:wrap}.routing-item{display:inline-flex;align-items:center;gap:8px}.routing-item label{font-size:12px;color:#485066;font-weight:600}.routing-item .tool-select{min-width:200px}.routing-item-cabinet .tool-select{min-width:280px}.routing-item-checkbox .panel-inline{margin:0}.editor-root.no-project .editor-shell{grid-template-columns:1fr}.editor-empty{display:flex;align-items:center;justify-content:center;min-height:0;background:#f7f4ef;border-radius:12px;border:1px dashed #d6d0c6}.editor-empty-card{background:#fff;border:1px solid #e2dfd8;border-radius:12px;padding:20px 24px;max-width:420px;text-align:center;display:grid;gap:12px}.editor-empty-title{font-weight:600;font-size:16px;color:#1f2a44}.editor-empty-body{font-size:13px;color:#5a6478;line-height:1.4}.panel-left,.panel-right{background:#fff;border:1px solid #e2dfd8;border-radius:10px;padding:12px;display:grid;gap:12px;align-content:start;min-height:0;max-height:none;overflow:auto;overscroll-behavior:contain}.panel-right{display:flex;flex-direction:column;align-content:stretch;overflow-y:auto;overflow-x:hidden;padding-bottom:36px;scroll-padding-bottom:36px}.panel-right .accordion-section{flex:0 0 auto}.panel-right .accordion-section:last-child{margin-bottom:18px}.accordion-section{border:1px solid #e2dfd8;border-radius:10px;background:#fff;overflow:hidden}.accordion-header{width:100%;border:0;background:#f7f4ef;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#1f2a44;cursor:pointer}.panel-right .accordion-header{background:#7d8478;color:#f5f2ea;border-bottom:1px solid #70776b}.panel-right .accordion-header:hover{background:#848c7f}.panel-right .accordion-section.open .accordion-header{background:#8a9285}.accordion-summary{font-size:11px;font-weight:500;text-transform:none;color:#6b6b6b}.panel-right .accordion-summary{color:#f0ede4}.panel-right .accordion-summary .tool-button{opacity:1;color:#1f2a44;background:#f7f4ef;border-color:#d9d4c9;cursor:pointer}.panel-right .accordion-summary .tool-button:hover{background:#ece7dd}.panel-right .accordion-summary{display:inline-flex;align-items:center;gap:6px}.device-properties-summary-pill{display:inline-flex;align-items:center;max-width:260px;border-radius:999px;background:#000;color:#fff;font-size:11px;font-weight:700;letter-spacing:.01em;line-height:1.2;padding:3px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.knx-accordion-summary{display:inline-flex;align-items:center;gap:6px}.accordion-body{padding:10px 12px}.panel-left{display:flex;flex-direction:column;overflow:hidden;padding-bottom:20px;scroll-padding-bottom:20px;border-bottom:1px solid #d9d4c9}.panel-left>*{flex:0 0 auto}.tool-status{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#1f2a44;background:#f3f1eb;border:1px solid #e2dfd8;border-radius:8px;padding:6px 8px;text-align:left}.tool-status-label{flex:1}.tool-status-help{border:none;background:#1f2a44;color:#fff;padding:4px 8px;border-radius:999px;font-size:10px;text-transform:none;letter-spacing:0;cursor:pointer}.tool-status-help:hover{background:#243359}.save-status{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#1f2a44;background:#f7f4ef;border:1px solid #e2dfd8;border-radius:8px;padding:6px 8px;text-align:center}.save-status.saving,.save-status.pending{background:#fff7ed;border-color:#f2c185;color:#9a3412}.save-status.error{background:#fee2e2;border-color:#ef4444;color:#991b1b}.modal-projects{width:min(720px,92vw);min-height:min(88vh,900px);height:min(88vh,900px);grid-template-rows:auto minmax(0,1fr) auto}.project-list{display:grid;gap:8px}.project-row{display:flex;justify-content:space-between;align-items:center;gap:12px;border:1px solid #e2dfd8;border-radius:8px;padding:10px;background:#fff}.project-name{font-size:14px;font-weight:600;color:#1f2a44;display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}.project-todo-pill{display:inline-flex;align-items:center;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}.project-status-pill{display:inline-flex;align-items:center;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.project-status-init{background:#e5e7eb;color:#374151;border:1px solid #d1d5db}.project-status-in_progress{background:#fef3c7;color:#92400e;border:1px solid #fcd34d}.project-status-done{background:#dcfce7;color:#166534;border:1px solid #86efac}.project-actions{display:flex;gap:6px}.project-list-controls{display:flex;align-items:center;justify-content:space-between;gap:10px}.project-manager-footer{border-top:1px solid #e6e2da;padding-top:10px;background:#fff}.cabinet-hw-editor-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:10px;padding-top:10px;border-top:1px solid #e2dfd8;background:#fffdf9}.cabinet-hw-editor-body{display:grid;gap:10px}.cabinet-hw-editor-controls{display:grid;gap:8px;position:relative;z-index:3;background:#fff}.cabinet-hw-editor-line-row{display:grid;grid-template-columns:minmax(0,1fr) 120px;gap:8px;align-items:end}.cabinet-hw-editor-line-row .property-cell{display:grid;gap:6px;min-width:0}.cabinet-hw-editor-controls .searchable-select{z-index:4}.cabinet-hw-editor-controls .searchable-select-popover{z-index:40}.cabinet-hw-editor-list{align-content:start}.cabinet-only-table{border:1px solid #e2dfd8;border-radius:8px;overflow-x:auto;overflow-y:hidden;background:#fff}.cabinet-only-head,.cabinet-only-row{display:grid;grid-template-columns:92px minmax(160px,1.2fr) minmax(90px,1fr) minmax(100px,1fr) minmax(220px,2fr) 28px;align-items:center;gap:3px;padding:5px 6px;font-size:12px}.cabinet-only-head{background:#f7f4ef;font-weight:700;color:#1f2a44;border-bottom:1px solid #e2dfd8}.cabinet-only-row+.cabinet-only-row{border-top:1px solid #f0ece5}.cabinet-only-row>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cabinet-only-row .property-remove{justify-self:end;width:22px;min-width:22px;height:22px;font-size:14px;padding:0}.cabinet-only-addr{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:700;color:#1f2a44}.modal-card.modal-wide.cabinet-hw-modal-card{width:calc(100vw - 8px);max-width:calc(100vw - 8px);height:90vh;max-height:90vh;display:grid;grid-template-rows:auto minmax(0,1fr)}.cabinet-hw-modal-grid{display:grid;grid-template-columns:1.2fr 1fr;gap:12px;height:100%;min-height:0}.cabinet-hw-panel{border:1px solid #e2dfd8;border-radius:10px;padding:10px;background:#fff;min-width:0;display:grid;gap:8px;overflow:hidden;min-height:0}.cabinet-hw-panel-left{grid-template-rows:auto auto auto minmax(0,1fr)}.cabinet-hw-panel-left.manual-only{grid-template-rows:auto minmax(0,1fr) auto}.cabinet-hw-panel-right{grid-template-rows:auto auto minmax(0,1fr)}.cabinet-hw-table{border:1px solid #e8e3d7;border-radius:8px;overflow-x:auto;overflow-y:auto;background:#fffdfa;height:100%;max-height:none;min-width:0}.cabinet-hw-head,.cabinet-hw-row{display:grid;grid-template-columns:78px minmax(90px,1fr) minmax(120px,1.2fr) minmax(220px,2fr) 92px 120px;gap:6px;align-items:center;padding:6px 8px;font-size:12px;min-width:780px}.cabinet-hw-table-5 .cabinet-hw-head,.cabinet-hw-table-5 .cabinet-hw-row{grid-template-columns:78px minmax(72px,.65fr) minmax(96px,.85fr) minmax(300px,3.2fr) 52px 52px 44px;min-width:760px}.cabinet-hw-table-6 .cabinet-hw-head,.cabinet-hw-table-6 .cabinet-hw-row{grid-template-columns:112px minmax(72px,.65fr) minmax(96px,.85fr) minmax(320px,3.3fr) 52px 44px;min-width:760px}.cabinet-hw-table-catalog .cabinet-hw-head,.cabinet-hw-table-catalog .cabinet-hw-row{grid-template-columns:64px minmax(90px,1fr) minmax(120px,1.05fr) minmax(320px,3fr) 42px 42px;min-width:700px}.cabinet-hw-head{font-weight:700;color:#1f2a44;background:#ece4d6;border-bottom:1px solid #d8ccbb;position:sticky;top:0;z-index:2}.cabinet-hw-row+.cabinet-hw-row{border-top:1px solid #efebe3}.cabinet-hw-row-expandable{cursor:pointer}.cabinet-hw-instance-row{background:#f6f3ee;font-weight:700}.cabinet-hw-row-expandable:hover{background:#f8f5ef}.cabinet-hw-row.search-match{box-shadow:inset 0 0 0 1px #2b4f7a;background:#eaf2ff}.cabinet-hw-instance-row:hover{background:#efebe4}.cabinet-hw-expand-indicator{justify-self:end;color:#6b6b6b;font-size:12px}.cabinet-hw-row>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cabinet-hw-ports{font-variant-numeric:tabular-nums;color:#344054;font-weight:600}.cabinet-hw-num{font-variant-numeric:tabular-nums;text-align:right;justify-self:end}.cabinet-hw-ports.ok{color:#067647}.cabinet-hw-allocation-list{display:grid;gap:4px;padding:6px 10px 8px;border-top:1px dashed #ddd4c7;background:#fffcf7}.cabinet-hw-allocation-item{display:grid;grid-template-columns:72px 118px minmax(0,.9fr) minmax(0,.9fr) minmax(0,.9fr) minmax(0,1.2fr) 70px;gap:8px;align-items:center;font-size:12px;padding:2px 6px;border-radius:6px}.cabinet-hw-allocation-item.selectable{cursor:pointer}.cabinet-hw-allocation-item.disabled{opacity:.62}.cabinet-hw-allocation-item.selected{box-shadow:inset 0 0 0 1px #1f2a44;background:#e8efff}.cabinet-hw-allocation-item.free{background:#ecf9ef}.cabinet-hw-allocation-item.used{background:#f8f5ef}.cabinet-hw-allocation-item.search-match{box-shadow:inset 0 0 0 1px #2b4f7a;background:#eaf2ff}.cabinet-hw-allocation-port{font-variant-numeric:tabular-nums;font-weight:600;color:#1f2a44;text-align:right;justify-self:end}.cabinet-hw-allocation-device{font-variant-numeric:tabular-nums;color:#1f2a44}.cabinet-hw-allocation-name,.cabinet-hw-allocation-building,.cabinet-hw-allocation-floor,.cabinet-hw-allocation-room{color:#4d4d4d;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cabinet-hw-allocation-lock{justify-self:end}.cabinet-hw-editor-body{display:grid;height:100%;min-height:0;max-height:none}.modal-scroll.cabinet-hw-editor-body{max-height:none}.cabinet-hw-table-manual .cabinet-hw-head>span:last-child,.cabinet-hw-table-manual .cabinet-hw-row>button{position:sticky;right:0;z-index:3;background:#fffdfa;justify-self:end;width:auto}.cabinet-hw-table-manual .cabinet-hw-row>.property-remove{background:#b42318;color:#fff;border:none;width:28px;min-width:28px;height:24px;z-index:4}.cabinet-hw-table-manual .cabinet-hw-head>span:last-child{background:#f7f4ef}.cabinet-hw-table-catalog .cabinet-hw-head>span:first-child,.cabinet-hw-table-catalog .cabinet-hw-row>button:first-child{position:sticky;left:0;z-index:3;background:#fffdfa;justify-self:start;width:auto}.cabinet-hw-table-catalog .cabinet-hw-head>span:first-child{background:#f7f4ef}.cabinet-hw-section-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.cabinet-hw-add-btn{min-width:40px;padding:3px 6px;text-align:center;justify-self:start}.project-edit-actions{display:flex;justify-content:flex-end;gap:8px}.panel-divider{height:1px;background:#e6e2da;margin:4px 0}.tab-header.segmented{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border:1px solid #d9d4c9;border-radius:8px;overflow:hidden}.tab-body{display:block;overflow-y:auto;overflow-x:hidden;min-height:0;flex:1 1 auto;padding-bottom:16px}.panel-left .tab-body{padding-bottom:28px}.editor-canvas{background:#f1eee6;border:1px solid #e2dfd8;border-radius:10px;display:block;overflow:hidden;position:relative;height:100%;min-height:0;align-self:stretch}.canvas-reference-scale{position:absolute;left:14px;bottom:12px;z-index:50;display:grid;gap:3px;pointer-events:none}.canvas-reference-label{font-size:11px;font-weight:700;color:#111827;background:#fff3b0f2;border:1px solid rgba(166,120,4,.8);border-radius:4px;padding:1px 6px;width:fit-content}.canvas-reference-line{position:relative;height:0;border-top:3px solid #1e293b;filter:drop-shadow(0 0 2px rgba(0,0,0,.28))}.canvas-reference-line:before,.canvas-reference-line:after{content:"";position:absolute;top:-6px;width:0;height:12px;border-left:2px solid #12203c}.canvas-reference-line:before{left:0}.canvas-reference-line:after{right:0}.canvas-status{position:absolute;right:16px;bottom:12px;background:#1f2a44;color:#fff;font-size:12px;padding:6px 10px;border-radius:6px;letter-spacing:.02em;box-shadow:0 6px 16px #0003;pointer-events:auto;z-index:5}.zen-command-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a3d;display:flex;align-items:flex-start;justify-content:center;padding-top:14vh;z-index:2700}.zen-command-card{width:min(640px,92vw);border:1px solid #ddd7ca;border-radius:12px;background:#fffdf9;box-shadow:0 24px 50px #0f172a3d;padding:14px;display:grid;gap:10px}.zen-command-card-commands{max-height:min(76vh,700px);overflow:hidden}.device-picker-card{width:min(760px,94vw)}.line-picker-card{width:min(700px,94vw)}.zen-command-title{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6f675a}.zen-command-input{font-size:13px}.zen-command-list{max-height:min(52vh,420px);overflow:auto;display:grid;gap:6px}.zen-command-row{width:100%;border:1px solid #e2dfd8;border-radius:8px;background:#fff;padding:8px 10px;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;min-width:0}.zen-command-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.zen-command-row.active,.zen-command-row:hover{border-color:#1f2a44;background:#f4f6fb}.device-picker-favorites{display:flex;flex-wrap:wrap;gap:6px}.device-picker-favorite-chip{border:1px solid #d9d2c4;border-radius:999px;background:#f8f4ea;padding:3px 8px;display:inline-flex;align-items:center;gap:6px;font-size:12px;cursor:grab}.device-picker-favorite-chip:active{cursor:grabbing}.device-picker-row{width:100%;border:1px solid #e2dfd8;border-radius:8px;background:#fff;padding:6px 8px;display:flex;align-items:center;justify-content:space-between;gap:10px;text-align:left}.device-picker-row.active,.device-picker-row:hover{border-color:#1f2a44;background:#f4f6fb}.device-picker-main{display:inline-flex;align-items:center;gap:8px;min-width:0}.device-picker-icon{min-width:26px;width:26px;height:26px;border-width:1px;border-radius:8px;font-size:13px;flex:0 0 auto}.device-picker-icon-mini{width:20px;height:20px;border-radius:6px;border-width:1px;font-size:11px;flex:0 0 auto}.device-picker-actions{display:inline-flex;align-items:center;gap:6px}.device-picker-favorite-key{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;border-radius:999px;border:1px solid #d8d0c0;background:#f3ede1;color:#5b5449;font-size:11px;font-weight:700}.line-picker-preview{width:28px;height:6px;border-radius:999px;border:1px solid rgba(31,42,68,.28);flex:0 0 auto}.line-picker-chip-preview{width:18px;height:6px;border-radius:999px;border:1px solid rgba(31,42,68,.28);flex:0 0 auto}.zen-command-hint{font-size:11px;color:#7a7366;background:#f4efe5;border:1px solid #e2dbc9;border-radius:999px;padding:2px 8px}.zen-quickmenu-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2650;pointer-events:none}.zen-quickmenu{position:absolute;width:0;height:0;pointer-events:none}.zen-quickmenu-item{position:absolute;left:50%;top:50%;min-width:92px;border:1px solid #dad3c5;border-radius:10px;background:#fffcf6f5;color:#3d3a33;padding:6px 8px;display:grid;justify-items:center;gap:2px;pointer-events:auto;box-shadow:0 10px 28px #0f172a33}.zen-quickmenu-item small{font-size:10px;color:#7c7469}.zen-quickmenu-item.active{border-color:#1f2a44;background:#eef2ff;color:#1f2a44}.zen-quickmenu-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:50px;height:50px;border-radius:999px;border:1px solid #1f2a44;background:#1f2a44eb;color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;pointer-events:none;box-shadow:0 12px 28px #0f172a59}.quote-modal{width:min(98vw,1800px);max-width:none;max-height:calc(100vh - 24px)}.quote-modal-body{display:grid;gap:12px;max-height:calc(100vh - 170px)}.quote-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}.quote-card{border:1px solid #e2dfd8;border-radius:10px;background:#fff;padding:10px;display:grid;gap:8px}.quote-rate-grid{display:grid;gap:6px}.quote-rate-row{display:grid;grid-template-columns:1fr 120px;gap:10px;align-items:center}.quote-rate-row input{border:1px solid #d9d4c9;border-radius:8px;padding:5px 7px;font-size:12px}.quote-summary{align-content:start}.quote-summary-row{display:flex;justify-content:space-between;gap:10px;font-size:13px}.quote-summary-row.total{padding-top:8px;border-top:1px solid #e7e2d9;font-weight:700;color:#1f2a44}.quote-table-wrap{overflow:auto}.quote-table{width:100%;border-collapse:collapse;font-size:12px}.quote-table th,.quote-table td{border:1px solid #e2dfd8;padding:6px 8px;text-align:left;vertical-align:top}.quote-table th{background:#f7f4ef;color:#514d46;font-weight:600}.quote-missing-price{color:#a94400;font-weight:700}.quote-markdown-preview{margin:0;border:1px solid #e2dfd8;border-radius:8px;padding:10px;background:#f9f7f2;font-size:12px;line-height:1.45;white-space:pre-wrap;overflow:auto;max-height:320px}.quote-num{text-align:right!important;font-variant-numeric:tabular-nums}.tool-list{display:grid;gap:8px}.note-tool-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.panel-title{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:#6b6b6b;margin-bottom:4px}.panel-subtitle{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#6b6b6b;margin:8px 0 4px}.panel-right .panel-subtitle{display:inline-flex;align-items:center;width:fit-content;border-radius:6px;padding:3px 8px;margin:8px 0 6px;background:#7a8275;color:#f5f2ea}.topology-launch-pill{display:inline-flex;align-items:center;justify-content:center;border:1px solid #cfc9bb;background:#f7f4ef;color:#1f2a44;border-radius:8px;padding:3px 7px;font-size:12px;line-height:1;cursor:pointer;opacity:1}.topology-launch-pill:hover{background:#ece7dd}.topology-launch-pill:focus-visible{outline:2px solid #1f2a44;outline-offset:1px}.panel-title-row{display:flex;align-items:center;justify-content:space-between;gap:8px}.panel-title-actions{display:flex;gap:6px}.panel-actions-row{display:flex;flex-wrap:wrap;gap:6px}.project-tools-actions{width:100%;display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:6px;margin:0}.project-tools-actions .tool-button{width:100%;min-width:0;text-align:center}.project-tools-body{display:grid;gap:8px;align-content:start}.icon-button{display:inline-flex;align-items:center;gap:6px}.icon-button .icon{font-size:13px;line-height:1}.tool-button.compact{padding:4px 8px;font-size:12px}.tool-button.tiny{padding:3px 6px;font-size:12px;align-self:flex-start}.tool-button{border:1px solid #d9d4c9;background:#f7f4ef;border-radius:8px;padding:8px 10px;text-align:left;font-size:14px;cursor:pointer}.tool-button.centered{text-align:center}button:active:not(:disabled){transform:translateY(1px);filter:brightness(.98)}.tool-button.danger{background:#b42318;border-color:#b42318;color:#fff}.tool-button.todo-alert-done{background:#1f7a3f;border-color:#1f7a3f;color:#fff}.project-todo-pill.todo-alert-done{background:#1f7a3f;color:#fff}.tool-button.todo-alert-open-other{background:#c46a16;border-color:#c46a16;color:#fff}.project-todo-pill.todo-alert-open-other{background:#c46a16;color:#fff}.tool-button.todo-alert-open-mine{background:#b42318;border-color:#b42318;color:#fff}.project-todo-pill.todo-alert-open-mine{background:#b42318;color:#fff}.tool-button.tool-button-export-ets{background:#2f8f46;border-color:#2f8f46;color:#fff}.tool-button.tool-button-export-ets:hover:not(:disabled){background:#26763a;border-color:#26763a}.tool-button.tool-button-export-ha{background:#1e64c8;border-color:#1e64c8;color:#fff}.tool-button.tool-button-export-ha:hover:not(:disabled){background:#1953a6;border-color:#1953a6}.link-button{background:none;border:none;padding:0;margin:0;font:inherit;color:#1f2a44;cursor:pointer;text-align:left}.link-button.topology-name{color:#b45309}.tool-button.active{background:#1f2a44;color:#fff;border-color:#1f2a44}.tool-button.locked{background:#f1ede5;color:#8a8174;border-color:#d4cec4;cursor:not-allowed}.tool-select{border:1px solid #d9d4c9;border-radius:8px;padding:6px 8px;background:#fff;font-size:13px}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#14141466;display:flex;align-items:center;justify-content:center;z-index:50;overscroll-behavior:contain}.modal-card{background:#fff;border-radius:12px;border:1px solid #e2dfd8;padding:16px;width:min(820px,92vw);max-height:90vh;overflow:hidden;display:grid;gap:12px;box-sizing:border-box}.toast-stack{position:fixed;right:16px;bottom:16px;display:grid;gap:8px;z-index:4000}.toast{background:#1f2a44;color:#fff;padding:10px 12px;border-radius:10px;font-size:12px;box-shadow:0 8px 20px #0003;max-width:280px}.toast.success{background:#2a6f4f}.toast.error{background:#a94442}.modal-card.modal-wide{width:min(980px,94vw)}.modal-card.modal-todos,.modal-card.search-modal{min-height:min(88vh,900px);height:min(88vh,900px);grid-template-rows:auto minmax(0,1fr)}.modal-card.modal-hardware-instances{min-height:min(95vh,1040px);height:min(95vh,1040px);max-height:min(95vh,1040px);grid-template-rows:auto minmax(0,1fr)}.modal-card.modal-hardware-instances.hardware-instances-move-open{grid-template-rows:auto minmax(0,1fr) auto}.modal-card.modal-hardware-instances .modal-scroll{min-height:0}.modal-card.modal-stats{min-height:min(88vh,900px);height:min(88vh,900px);grid-template-rows:auto auto minmax(0,1fr)}.modal-card.modal-stats .modal-scroll{min-height:0}.modal-card.modal-testlog{width:min(1300px,96vw);min-height:min(86vh,900px);height:min(86vh,900px);display:flex;flex-direction:column}.modal-card.modal-testlog .modal-scroll{flex:1;min-height:0;max-height:none}.modal-card.modal-wide.hardware-instances-move-open{width:min(1760px,98vw)}.modal-card.device-editor{width:90vw;max-width:1800px;min-height:86vh;max-height:86vh;display:flex;flex-direction:column;position:relative}.help-modal-body{display:grid;gap:16px}.help-search{display:flex;align-items:center;gap:12px}.help-search .tool-input{flex:1}.help-tabs{display:flex;gap:6px;align-items:center}.help-content{display:grid;gap:12px}.help-heading{margin:8px 0 4px;font-size:16px;color:#1b2b3f}.help-paragraph{margin:0;color:#2b2b2b;line-height:1.5}.help-list{margin:0;padding-left:18px;display:grid;gap:6px;color:#2b2b2b}.help-list-ordered{list-style:decimal;padding-left:34px}.help-link{color:#1d4ed8;text-decoration:underline;text-underline-offset:2px;cursor:pointer}.help-link:hover{color:#1e40af}.help-table-wrap{overflow-x:auto}.help-table{width:100%;border-collapse:collapse;font-size:13px;color:#2b2b2b}.help-table th,.help-table td{border:1px solid #ddd7cb;padding:6px 8px;text-align:left;vertical-align:top}.help-table th{background:#f3efe6;color:#1f2a44;font-weight:600}.help-code{background:#f4f1ec;padding:2px 6px;border-radius:6px;font-size:12px}.help-code-block{margin:0;background:#f4f1ec;padding:12px;border-radius:8px;font-size:12px;overflow-x:auto}.help-highlight{background:#ffe1a6;border-radius:4px;padding:0 2px}.help-strong{font-weight:700;color:#1b2b3f}.modal-card.modal-preview{width:min(1200px,96vw);max-height:92vh}.modal-card.modal-overview{width:min(96vw,2200px);height:min(94vh,1400px);display:flex;flex-direction:column}.overview-scroll{flex:1;max-height:none}.overview-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px;padding:4px}.overview-card{border:1px solid #ddd8cb;border-radius:10px;background:#fbfaf7;padding:8px;display:grid;gap:8px;text-align:left;cursor:pointer}.overview-card.active{border-color:#1f2a44;box-shadow:0 0 0 1px #1f2a44;background:#eef3ff}.overview-card-header{display:flex;justify-content:space-between;gap:8px;font-size:12px;font-weight:600;color:#1f2a44}.overview-minimap{border:1px solid #ddd8cb;border-radius:8px;background:#efebe3;overflow:hidden;min-height:160px}.overview-minimap svg{width:100%;height:100%;display:block}.modal-header{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:nowrap;background:#fff;border-bottom:1px solid #e6e2da;padding-bottom:8px}.draggable-modal-header{cursor:grab;-webkit-user-select:none;user-select:none}.draggable-modal-header:active{cursor:grabbing}.modal-header-actions{display:flex;flex-direction:row;flex-wrap:nowrap;gap:6px;align-items:center}.modal-header-actions .tool-select{max-width:130px}.modal-header-checkbox{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#3b362f;white-space:nowrap}.modal-scroll{overflow:auto;max-height:calc(90vh - 120px);padding-right:2px;overscroll-behavior:contain}.modal-scroll.device-editor-body{flex:1;max-height:none}.testlog-grid{display:grid;grid-template-columns:100px minmax(0,1.4fr) 110px 110px 110px minmax(0,1fr) 120px 170px;align-items:center;gap:8px;padding:8px 10px;border:1px solid #e8e3d9;border-radius:10px;background:#fcfbf8;margin-bottom:8px}.testlog-add-row{display:grid;grid-template-columns:110px minmax(0,1.6fr) 120px 120px 120px minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px 0 2px}.testlog-note-input{min-height:84px;resize:vertical}.testlog-grid-header{position:sticky;top:0;z-index:1;background:#f2ede4;border-color:#ddd6c7;font-size:12px;font-weight:700;color:#4c463b;text-transform:uppercase;letter-spacing:.04em}.testlog-header-button{border:0;background:transparent;padding:0;margin:0;text-align:left;font:inherit;color:inherit;cursor:pointer}.testlog-header-button.active{color:#1f2a44}.testlog-area{font-size:11px;font-weight:700;letter-spacing:.05em;color:#5b5345}.testlog-title{font-size:13px;color:#232323}.planned-locked{background:#f6f3ec;border-color:#ddd6c7}.planned-locked .testlog-title,.planned-locked .testlog-area,.planned-locked .panel-help{color:#8e887d}.search-modal-body{display:flex;flex-direction:column;gap:16px;min-height:0}.search-modal-controls{display:flex;flex-direction:column;gap:10px}.search-input{width:100%}.search-toggle{display:flex;align-items:center;gap:8px;font-size:12px;color:#3d3d3d}.search-results{display:flex;flex-direction:column;gap:8px;flex:1 1 auto;min-height:0;overflow:auto}.search-minimap{display:flex;flex-direction:column;gap:8px}.search-minimap-canvas{position:relative;width:260px;height:140px;border:1px solid #e2dfd8;border-radius:10px;background:#f5f1ea;background-repeat:no-repeat;overflow:hidden}.search-minimap-image{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.search-minimap-image img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:contain}.search-minimap-overlay{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.search-minimap-dot{position:absolute;width:10px;height:10px;border-radius:999px;background:#ef444499;border:2px solid #ef4444;transform:translate(-50%,-50%)}.search-minimap-dot.active{background:#ef4444e6;box-shadow:0 0 0 4px #ef444433}.search-result-row{display:flex;gap:12px;align-items:flex-start;width:100%;text-align:left;background:#f6f1ea;border:1px solid #e2dfd8;border-radius:10px;padding:10px 12px}.search-result-row:hover{background:#efe6da}.search-result-row.active{border-color:#ef4444;box-shadow:0 0 0 2px #ef444433}.search-result-kind{font-size:10px;text-transform:uppercase;letter-spacing:.6px;padding:4px 6px;border-radius:8px;background:#1f2a44;color:#fff}.search-result-kind.note{background:#c9a140;color:#1f2a44}.search-result-kind.device{background:#1f2a44;color:#fff}.search-result-title{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:#1f2a44}.device-icon-pill{display:inline-flex;align-items:center;justify-content:center;min-width:38px;height:22px;padding:0 7px;border-radius:6px;border:2px solid #353535;font-size:11px;font-weight:700;line-height:1}.search-result-device-icon{flex:0 0 auto}.note-modal-body{display:flex;flex-direction:column;gap:18px;min-height:0;height:100%}.modal-card.note-modal{min-height:min(88vh,900px);height:min(88vh,900px);grid-template-rows:auto minmax(0,1fr)}.modal-card.note-modal .modal-scroll{min-height:0;max-height:none;overflow:hidden}.note-compose{display:flex;flex-direction:column;gap:10px}.tool-textarea{width:100%;border:1px solid #d8d3c9;border-radius:10px;padding:10px 12px;font-family:inherit;font-size:13px;background:#fff}.note-checkbox{display:flex;gap:8px;align-items:center;font-size:12px;color:#3d3d3d}.note-thread{display:flex;flex-direction:column;gap:12px;min-height:0;overflow:auto;padding-right:2px}.note-entry{border:1px solid #e2dfd8;border-radius:10px;padding:10px 12px;background:#fbfaf8}.note-entry-header{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.note-entry-user{font-weight:600;color:#1f2a44}.note-entry-meta{display:inline-flex;align-items:center;gap:8px}.note-entry-text{margin:8px 0;white-space:pre-wrap;color:#2f2f2f}.note-entry-actions{display:flex;gap:8px;margin-bottom:6px}.note-entry-edit{display:grid;gap:8px;margin-bottom:8px}.hardware-port-lock-chip{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:1px 8px;border:1px solid #d9d4c9;border-radius:999px;font-size:11px;color:#5b4630;background:#f7f3ea;cursor:pointer}.hardware-port-lock-chip input{margin:0}.note-tag{background:#facc1540;color:#7c5700;padding:2px 6px;border-radius:6px;font-weight:600;margin:0 2px;display:inline-block}.note-tag-suggestions{display:flex;flex-wrap:wrap;gap:6px}.tag-suggestion{background:#f0ebe2;border:1px solid #d9d3c7;border-radius:999px;padding:4px 10px;font-size:12px}.note-tag-filter{display:flex;flex-direction:column;gap:6px}.tag-chip-row{display:flex;flex-wrap:wrap;gap:6px}.tag-chip{background:#f0ebe2;border:1px solid #d9d3c7;border-radius:999px;padding:4px 10px;font-size:12px}.tag-chip.active{background:#1f2a44;color:#fff;border-color:#1f2a44}.notes-modal-body{display:flex;flex-direction:column;gap:16px}.notes-modal-controls{display:flex;flex-direction:column;gap:10px}.notes-row-meta{display:inline-flex;align-items:center;gap:8px;margin-top:2px}.notes-status-badge{display:inline-flex;align-items:center;border-radius:999px;padding:1px 8px;font-size:11px;font-weight:700;line-height:1.5}.notes-status-badge.open{background:#fee2e2;color:#991b1b;border:1px solid #fecaca}.notes-status-badge.resolved{background:#dcfce7;color:#166534;border:1px solid #bbf7d0}.notes-status-badge.stateless{background:#eef2f7;color:#334155;border:1px solid #cbd5e1}.line-type-editor-body{display:grid;gap:8px}.line-type-editor-grid{display:grid;grid-template-columns:1.7fr 84px 100px 1.1fr 110px 90px 1fr auto;gap:8px;align-items:center}.line-type-editor-head{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#6f675a}.line-type-color-cell{min-height:36px;height:36px;display:flex;align-items:center}.line-type-color-input{width:36px;height:36px;padding:2px;border:1px solid #d9d4c9;border-radius:8px;background:#fff;cursor:pointer}.line-type-export-cell{display:inline-flex;align-items:center;gap:6px;min-height:36px;color:#3b362f;font-size:12px}.line-type-preview-shell{border:1px solid #d9d4c9;border-radius:8px;background:#faf8f5;min-height:36px;height:36px;padding:0 8px;display:flex;align-items:center}.line-type-preview-svg{width:100%;height:100%;display:block}.notes-list{display:flex;flex-direction:column;gap:8px}.note-tag-row{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.modal-card.modal-preview .modal-scroll{max-height:calc(92vh - 120px)}.floorplan-lightbox{width:100%;height:70vh;background:#f7f4ef;border-radius:10px;padding:12px;box-sizing:border-box}.floorplan-lightbox svg{width:100%;height:100%}.modal-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.modal-inline-help{font-size:11px;color:#6b6b6b}.todo-modal-table{display:grid;gap:6px;min-height:0}.todo-modal-controls{display:grid;gap:6px;margin-bottom:10px}.todo-modal-row{display:grid;grid-template-columns:72px minmax(0,1.6fr) 120px minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:center;border:1px solid #e2dfd8;border-radius:8px;padding:8px 10px;background:#fbfaf7;text-align:left;font-size:12px;color:#2f2f2f}.todo-modal-device-cell{display:inline-flex;align-items:center;gap:8px;min-width:0}.todo-modal-device-icon.device-button{width:34px;height:22px;min-height:22px;font-size:11px;border-radius:5px;cursor:default;box-shadow:none;padding:0 2px;flex:0 0 auto}button.todo-modal-row{cursor:pointer}button.todo-modal-row:hover{border-color:#c9c2b2;background:#f6f3eb}button.todo-modal-row.active{border-color:#1f2a44;box-shadow:0 0 0 2px #1f2a4433;background:#f2efe8}.todo-modal-row.todo-modal-header{border:none;background:transparent;padding:0 4px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#6b6b6b;font-weight:600;cursor:default}.todo-sort-button{border:none;background:transparent;padding:0;margin:0;font:inherit;text-transform:inherit;letter-spacing:inherit;color:inherit;font-weight:inherit;cursor:pointer}.tool-input{width:100%;border:1px solid #d9d4c9;border-radius:8px;padding:8px 10px;font-size:13px;background:#fff;color:#2f2b27}.dialog-card{max-width:460px}.dialog-overlay{z-index:3000}.dialog-body{padding:0 20px 12px;display:grid;gap:6px}.dialog-label{font-size:12px;color:#4b4742}.dialog-actions{justify-content:flex-end;gap:8px}.dialog-shortcut-hint{margin-right:auto;font-size:11px;color:#7a7468;white-space:nowrap}.dialog-message{margin-top:4px}.ui-tooltip-overlay{position:fixed;left:0;top:0;z-index:4000;pointer-events:none;opacity:0;transform:translateY(4px);transition:opacity .13s ease,transform .13s ease;background:#121822f5;color:#f8fafc;border-radius:8px;padding:7px 10px;box-shadow:0 8px 24px #00000047;max-width:280px}.ui-tooltip-overlay.visible{opacity:1;transform:translateY(0)}.ui-tooltip-label{font-size:12px;line-height:1.3;font-weight:600}.ui-tooltip-shortcut{margin-top:2px;font-size:11px;line-height:1.25;color:#cbd5e1}.topology-table{display:grid;gap:0;width:100%}.topology-table-header{display:grid;grid-template-columns:52px 74px 64px minmax(220px,1.85fr) 74px 56px 56px 56px 56px;gap:2px;padding:6px 2px 6px 8px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#6b6b6b;border-bottom:1px solid rgba(205,198,185,.75)}.topology-table-row{display:grid;grid-template-columns:52px 74px 64px minmax(220px,1.85fr) 74px 56px 56px 56px 56px;gap:2px;align-items:center;padding:5px 2px 5px 8px;border-bottom:1px solid rgba(205,198,185,.75)}.topology-muted{color:#6b6b6b;font-size:11px}.topology-table-row.backbone-row{background:#e0e8f5}.topology-table-row.area-row{background:#efe2c4}.topology-table-row.line-row{background:#f8f6f1}.topology-type-cell{font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:#5f5a4f}.topology-tree{position:relative;height:22px;--tree-x: 10px;--tree-prev: 10px;--tree-color: rgba(49, 67, 102, .9)}.topology-tree:after{content:"";position:absolute;top:-7px;bottom:-7px;left:8px;width:4px;background:#7871638f}.topology-tree.level-1{--tree-x: 26px;--tree-prev: 10px;--tree-color: rgba(121, 88, 22, .9)}.topology-tree.level-2{--tree-x: 42px;--tree-prev: 26px;--tree-color: rgba(82, 78, 70, .9)}.topology-tree-dot{position:absolute;top:50%;left:calc(var(--tree-x) - 5px);width:10px;height:10px;border-radius:999px;transform:translateY(-50%);background:var(--tree-color);box-shadow:0 0 0 2px #fffc}.topology-tree.variant-area:before,.topology-tree.variant-line:before{content:"";position:absolute;top:-7px;bottom:-7px;left:calc(var(--tree-prev) - 2px);width:4px;background:color-mix(in srgb,var(--tree-color) 82%,transparent)}.topology-action-cell{display:flex;justify-content:flex-end}.topology-action-cell .tool-button{white-space:nowrap;font-size:10px;padding:3px 5px}.topology-medium-stack{display:grid;gap:6px}.topology-medium-row{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center}.line-preview{border:1px dashed #d9d4c9;border-radius:8px;padding:4px 1px;background:#faf8f5}.line-preview-bar{width:100%}.device-palette{display:grid;gap:10px}.device-category{display:grid;gap:6px}.device-category-title{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#6b6b6b;background:none;border:none;padding:0;text-align:left;cursor:pointer}.device-category-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(36px,1fr));gap:6px}.device-button{color:#000;background-color:#ccc;border-radius:4px;border:2px solid #353535;font-size:var(--device-icon-font);width:var(--device-icon-width);height:var(--device-icon-height);display:flex;align-items:center;justify-content:center;text-align:center;line-height:1;cursor:pointer;padding:0;font-family:inherit;position:relative}.device-button.active{outline:2px solid #1f2a44;outline-offset:2px}.device-button.device-hidden{opacity:.25}.device-button.device-disabled{opacity:.35;cursor:not-allowed;filter:grayscale(.4)}.device-shortcut-pill{position:absolute;right:0;top:0;transform:translate(50%,-50%);min-width:14px;height:14px;padding:0 4px;border-radius:999px;background:#1f2a44;color:#fff;border:1px solid #ffffff;font-size:9px;font-weight:700;line-height:12px;display:inline-flex;align-items:center;justify-content:center;pointer-events:none}.device-filter-controls{display:grid;gap:6px}.device-palette-hint{margin-top:6px;margin-bottom:4px;display:inline-flex;align-items:center;width:fit-content;border-radius:999px;padding:3px 9px;background:#b42318;color:#fff;font-weight:700;letter-spacing:.01em;border:1px solid #8f1e15}.panel-help.device-palette-hint{color:#fff}.device-filter-row{display:flex;gap:6px}.panel-inline{display:flex;align-items:center;gap:8px;font-size:12px;color:#3c4356}.panel-inline.is-disabled{opacity:.4;color:#9a9589;cursor:not-allowed;transition:opacity .14s ease}.panel-inline.is-disabled input[type=checkbox]{cursor:not-allowed}.tool-row{display:flex;gap:6px}.tool-row.segmented,.device-filter-row.segmented{width:100%;gap:0;border:1px solid #d9d4c9;border-radius:8px;overflow:hidden}.seg-button{flex:1;border:none;background:#f7f4ef;padding:6px 8px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:#1f2a44;cursor:pointer}.seg-button.active{background:#1f2a44;color:#fff}.seg-button+.seg-button{border-left:1px solid #d9d4c9}.seg-button:disabled,.tool-button:disabled{opacity:.45;cursor:not-allowed}.seg-button:disabled{background:#f5f3ed;color:#756f63}.seg-button.active:disabled{background:#f5f3ed;color:#756f63}.device-filter-row .tool-button{flex:1;font-size:12px;padding:6px 8px;text-align:center}.device-button.lamp{color:#000;background-color:#fff8a0}.device-button.dimmer{color:#000;background-color:#f5ec7a}.device-button.dimmerlv{color:#000;background-color:#ece165}.device-button.dimmer110{color:#000;background-color:#efb84a}.device-button.tw{color:#000;background-color:#fca739}.device-button.rgb{color:#000;background-color:#fb8500}.device-button.rgbw{color:#000;background-color:#f77d00}.device-button.rgbcct{color:#000;background-color:#f27200}.device-button.da{color:#fff;background-color:#d95a02}.device-button.zig{color:#fff;background-color:#ec6c00}.device-button.lum{color:#000;background-color:#caca15}.device-button.output{color:#fff;background-color:#404040}.device-button.shutter{color:#fff;background-color:#2a9d8f}.device-button.thermostat{color:#000;background-color:#ade8f4}.device-button.valve{color:#000;background-color:#90e0ef}.device-button.fc2,.device-button.fc4{color:#000;background-color:#48caf4}.device-button.fan{color:#000;background-color:#00b4d8}.device-button.temp,.device-button.hum,.device-button.wea{color:#fff;background-color:#023e8a}.device-button.button1,.device-button.button2,.device-button.button3,.device-button.button4,.device-button.button6,.device-button.button8,.device-button.button10,.device-button.button12{color:#fff;background-color:#a020f0}.device-button.lcd,.device-button.lcd1,.device-button.lcd2{color:#fff;background-color:#de002b}.device-button.pwr{color:#fff;background-color:#342e2e}.device-button.usb{color:#fff;background-color:#202020}.device-button.pir{color:#000;background-color:#52b69a}.device-button.pre,.device-button.prew{color:#000;background-color:#76c893}.device-button.reed{color:#000;background-color:#99d98c}.device-button.gw,.device-button.di,.device-button.DI{color:#fc1;background-color:#35784d}.device-button.knx{color:#fff;background-color:#35784d}.device-button.smk{color:#fff;background-color:#666}.device-button.leak{color:#fff;background-color:#777}.device-button.tank{color:#000;background-color:#00dcfe}.device-button.eth{color:#fff;background-color:#00f}.device-button.hdmi{color:#fff;background-color:#4040e0}.device-button.tv{color:#fff;background-color:#6060f0}.device-button.cabinet{color:#fff;background-color:#995841}.device-button.dummy{color:#000;background-color:#aaa}.device-button.outlet{color:#000;background-color:#ced4da}.panel-section{display:grid;gap:10px}.panel-field{display:grid;gap:6px;font-size:13px}.panel-field>label{font-weight:700;color:#1f2a44;letter-spacing:.01em}.panel-field-label-with-icon{display:inline-flex;align-items:center;gap:6px}.panel-type-icon-pill{display:inline-flex;align-items:center;justify-content:center;min-width:24px;height:20px;padding:0 6px;border-radius:999px;border:1px solid #d8d0c1;background:#f7f2e6;color:#1f2a44;font-size:12px;line-height:1;font-weight:700}.panel-type-icon-button{min-width:30px;height:30px;padding:0 8px;border-radius:6px;border:2px solid #353535;font-weight:700;font-size:13px;line-height:1;display:inline-flex;align-items:center;justify-content:center}.section-order-meta{order:20}.section-order-hardware{order:30}.section-order-sensor-data{order:40}.section-order-wall-placement{order:60}.section-order-ga{order:50}.section-order-todo{order:70}.section-order-props{order:80}.panel-field.section-block{border:1px solid #ddd7cb;border-radius:10px;padding:8px;background:#f8f5ee}.panel-field.section-block>label{display:block;width:auto;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:#2c374d;background:#f1ede4;border:1px solid #ddd4c2;border-radius:8px;padding:5px 8px;margin-bottom:2px;border-left-width:3px;border-left-color:#8c9bb3}.panel-field.section-block.section-accent-wall>label{border-left-color:#7f90aa}.panel-field.section-block.section-accent-ga>label{border-left-color:#8f7cae}.panel-field.section-block.section-accent-sensor>label{border-left-color:#6f9a8f}.panel-field.section-block.section-accent-todo>label{border-left-color:#b08d68}.panel-field.section-block.section-accent-props>label{border-left-color:#7b8b9e}.panel-field.section-block.section-accent-meta{background:#faf8f3;border-color:#e5e0d4}.panel-field.section-block.section-accent-meta>label{background:#f4f1e9;color:#4f596d;border-color:#e1dbcc;border-left-color:#9aa5b7}.panel-field.section-block.section-accent-hardware{gap:4px;padding:7px}.panel-field.section-block.section-accent-hardware .property-list{gap:6px}.panel-field.section-block.section-accent-hardware .property-row{gap:5px;padding:4px 6px}.panel-field.section-block.section-accent-hardware .options-checkbox-row{margin-top:0;padding:4px 6px}.wall-placement-subgroup{border:1px solid #d9d4c9;border-radius:8px;background:#fbfaf7;padding:4px}.panel-field input[type=file],.panel-field input[type=text],.panel-field input[type=number],.panel-field input[type=email],.panel-field select{border:1px solid #d9d4c9;padding:6px;border-radius:6px;background:#fff;width:100%;box-sizing:border-box}.panel-field input[type=range]{width:100%}.device-meta-grid{display:grid;grid-template-columns:minmax(56px,.4fr) minmax(0,1.6fr);gap:8px}.device-meta-cell{min-width:0}.device-meta-cell .panel-help{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.options-checkbox-row{display:flex;align-items:center;gap:8px;margin-top:4px;padding:5px 8px;border:1px solid #ddd7cb;border-radius:8px;background:#f8f5ee;color:#5a544a;font-size:12px;font-weight:500}.options-checkbox-row input[type=checkbox]{width:14px;height:14px;accent-color:#1f2a44;cursor:pointer}.dedicated-accent-label{color:#b0198f;font-weight:700}.options-checkbox-row.dedicated-accent-row{border-color:#d96cc4;background:#fff3fc;color:#7a255f}.options-list{display:grid;gap:4px;margin-top:4px}.options-inline-controls{margin:6px 0}.options-line-type-name{flex:1;min-width:0}.options-line-type-preview{width:64px;min-width:64px;border-top-style:solid;border-top-width:2px;transform:translateY(1px)}.dedicated-accent-dot{width:8px;height:8px;border-radius:999px;display:inline-block;margin-right:6px;background:#d322a2;box-shadow:0 0 0 1px #7a255f33}.floorplan-preview-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.floorplan-preview-grid.single{grid-template-columns:1fr}.floorplan-preview{border:1px solid #e2dfd8;border-radius:8px;padding:6px;background:#fff;display:grid;gap:6px;text-align:left;cursor:zoom-in}.floorplan-preview.floorplan-preview-secondary{cursor:default;align-content:start}.floorplan-preview svg{width:100%;height:220px;background:#f7f4ef;border-radius:6px}.allocation-list{display:grid;gap:8px}.cabinet-mini-preview{width:100%;height:120px;border:1px solid #d5cfbe;border-radius:8px;background:#fff}.allocation-row{border:1px solid #e2dfd8;border-radius:8px;padding:6px 8px;background:#fbfaf7;display:grid;gap:2px}.allocation-title{font-weight:600;font-size:12px}.property-list{display:grid;gap:8px}.todo-table{display:grid;gap:6px}.todo-row{display:grid;grid-template-columns:48px minmax(0,1fr) 28px;gap:6px;align-items:center;border:1px solid #e2dfd8;border-radius:8px;padding:6px;background:#fbfaf7}.todo-row.todo-row-header{border:none;background:transparent;padding:0 4px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#6b6b6b;font-weight:600}.todo-row.is-active{border-color:#1f2a44;box-shadow:0 0 0 1px #1f2a442e}.todo-actions{display:flex;justify-content:flex-start}.panel-field-properties{order:90}.panel-field-todos{order:100}.device-delete-button{order:110}.property-row{display:grid;grid-template-columns:1.2fr .7fr 1fr auto;gap:6px;align-items:center;border:1px solid #e2dfd8;border-radius:8px;padding:6px;background:#fbfaf7}.property-row.ga-row{grid-template-columns:.7fr .7fr .8fr 1fr 1.3fr auto}.property-label-row{display:grid;grid-template-columns:1.2fr .7fr 1fr auto;gap:6px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:#6b6b6b;padding:0 4px}.property-label-row.ga-label-row{grid-template-columns:.7fr .7fr .8fr 1fr 1.3fr auto}.property-label{font-weight:600;text-align:left}.property-remove{border:none;background:#b42318;color:#fff;width:28px;height:24px;border-radius:6px;cursor:pointer;font-size:16px;line-height:1}.property-cell input,.property-cell select{width:100%;border:1px solid #d9d4c9;border-radius:6px;padding:4px 6px;font-size:12px}.hardware-instance-list{display:grid;gap:12px}.hardware-instances-controls{top:2px;align-items:center;justify-content:space-between;gap:8px}.hardware-instances-controls-actions{display:flex;align-items:center;gap:6px;margin-left:auto}.hardware-instances-search-input{min-width:220px;max-width:420px;width:100%;flex:1 1 260px}.hardware-instance-group{display:grid;gap:8px}.hardware-instance-group.hardware-instance-group-card{border:1px solid #d5cfbe;border-radius:10px;padding:10px;background:#fffdf8}.hardware-instance-group.hardware-instance-group-card.hardware-instance-group-field{background:#f7f4ef}.hardware-instance-group-header{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid #cfd8ea;border-radius:8px;background:#eef2ff}.hardware-instance-card{border:1px solid #e2dfd8;border-radius:10px;padding:10px;background:#fff;display:grid;gap:6px}.hardware-instance-card.hardware-instance-card-dummy{background:#fff4e5;border-color:#f2b266;box-shadow:inset 0 0 0 1px #d3842440}.hardware-instance-title{display:flex;align-items:center;gap:8px;font-weight:600;font-size:13px}.hardware-instance-address{font-weight:600;font-size:12px;color:#1f2a44}.hardware-instance-address-pill{background:#1f2a44;color:#fff;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.02em;display:inline-flex;align-items:center;min-height:24px;gap:4px;width:fit-content;max-width:fit-content;justify-self:start}.hardware-instance-address-pill-editable{padding:2px 6px;gap:6px}.hardware-instance-label{font-size:13px}.hardware-instance-cabinet{margin-left:auto;font-size:11px;color:#5a6478;font-weight:600}.hardware-free-ports{color:#2a6f4f;font-weight:700}.hardware-dedicated-ports{color:#8a5a00;font-weight:700}.hardware-instance-address-prefix{font-weight:600;color:#1f2a44}.hardware-instance-address-pill-editable .hardware-instance-address-prefix{color:#e8eefc;font-weight:700}.hardware-address-input{width:56px;margin-left:6px;border:1px solid #d9d4c9;border-radius:6px;padding:2px 6px;font-size:12px}.hardware-address-input.hardware-address-input-inline{width:46px;height:20px;margin-left:0;border:1px solid #a7b3cb;background:#fff;color:#1f2a44;-webkit-text-fill-color:#1f2a44;font-weight:700;text-align:right;padding:1px 4px;border-radius:5px;font-size:12px}.hardware-address-input.hardware-address-input-inline:focus{outline:none;border-color:#1f2a44;box-shadow:0 0 0 1px #1f2a4447}.hardware-instance-address-cell{display:grid;gap:2px;min-width:0;justify-items:start;overflow:visible!important;text-overflow:clip!important;white-space:nowrap!important}.hardware-address-input.error{border-color:#b42318;box-shadow:0 0 0 1px #b423184d}.hardware-address-error{color:#b42318;font-weight:600}.hardware-address-error-inline{margin-left:8px;color:#b42318;font-weight:600;font-size:12px}.hardware-port-list{display:grid;gap:4px}.hardware-port-row{display:grid;grid-template-columns:36px 1fr;align-items:center;gap:8px;border-radius:8px;padding:6px 8px}.hardware-port-row.hardware-port-free{background:#e6f6ea;border:1px solid #c6e7cf}.hardware-port-row.hardware-port-dedicated-locked{background:#f7f0dc;border:1px solid #e4d2a2}.hardware-port-row.hardware-port-used{background:#fbfaf7;border:1px solid #e2dfd8;cursor:pointer}.hardware-port-row.hardware-port-disabled{opacity:.5;cursor:not-allowed}.hardware-port-row.hardware-port-selected{border-color:#1f2a44;box-shadow:0 0 0 1px #1f2a44}.hardware-port-index{font-weight:600;font-size:12px;color:#1f2a44;background:#fff;border:1px solid #e2dfd8;border-radius:999px;text-align:center;padding:2px 0}.hardware-port-meta{display:grid;gap:2px}.hardware-port-ga-list{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}.hardware-port-ga-chip{font-size:10px;border:1px solid #d3d9e5;background:#f4f7ff;color:#2e3c5c;border-radius:999px;padding:1px 6px}.ga-editor-list{display:grid;gap:8px}.modal-card.modal-wide.modal-ga-editor{width:min(82vw,1540px);max-width:1540px}.ga-editor-row{display:grid;grid-template-columns:minmax(0,1fr) 90px auto;gap:8px;align-items:center;border:1px solid #e2dfd8;border-radius:8px;padding:6px;background:#fbfaf7}.ga-editor-address{display:grid;grid-template-columns:minmax(115px,.48fr) auto minmax(310px,1.34fr) auto 44px minmax(90px,.35fr) minmax(220px,.7fr) minmax(72px,.2fr);gap:4px;align-items:center;min-width:0}.ga-editor-address input{width:100%;border:1px solid #d9d4c9;border-radius:6px;padding:4px 6px;font-size:12px}.ga-editor-address span{font-size:12px;color:#616161}.ga-editor-addr-readonly{border:1px solid #d9d4c9;border-radius:6px;padding:4px 6px;background:#f6f4ef;color:#1f2a44!important;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-align:center}.ga-editor-id-readonly{border:1px solid #d9d4c9;border-radius:6px;padding:4px 6px;background:#eef2fb;color:#1f2a44!important;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;text-align:center;white-space:nowrap}.ga-editor-name{width:100%;border:1px solid #d9d4c9;border-radius:6px;padding:4px 6px;font-size:12px}.ga-editor-prefix-readonly{width:100%;border:1px solid #d9d4c9;border-radius:6px;padding:4px 6px;font-size:12px;background:#f6f4ef;color:#2f2f2f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}.ga-editor-main-select .searchable-select-label-main{white-space:nowrap}.ga-editor-main-select .searchable-select-label-desc{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ga-editor-dpt-select .searchable-select-label-main{white-space:nowrap}.ga-editor-dpt-select .searchable-select-label-desc{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ga-editor-actions{display:inline-flex;gap:4px;flex-wrap:nowrap}.ga-summary-table{display:grid;border:1px solid #e2dfd8;border-radius:8px;overflow:hidden;background:#fff}.ga-summary-head,.ga-summary-row{display:grid;grid-template-columns:110px minmax(0,1fr);gap:8px;align-items:center;padding:6px 8px}.ga-summary-head{background:#f6f4ef;border-bottom:1px solid #e2dfd8;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b6b6b;font-weight:600}.ga-summary-row+.ga-summary-row{border-top:1px solid #efece6}.ga-summary-address{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:#1f2a44}.ga-summary-name{font-size:12px;color:#2f2f2f}.ga-ets-tree{display:grid;gap:8px;border:1px solid #e2dfd8;border-radius:8px;background:#fff;padding:10px}.ga-ets-main{display:grid;gap:4px}.ga-ets-main-row{font-weight:600;color:#1f2a44;font-size:13px;background:#eef3ff;border:1px solid #d7e2ff;border-radius:6px;padding:6px 8px}.ga-ets-toggle{width:100%;border:0;background:transparent;padding:0;display:flex;align-items:center;justify-content:space-between;gap:10px;text-align:left;cursor:pointer}.ga-ets-main-left{display:inline-flex;align-items:center;gap:6px;min-width:0}.ga-ets-main-left>span:first-child{min-width:14px;font-size:15px;line-height:1;font-weight:700;color:#2a3d69}.ga-ets-count-pill{font-size:11px;color:#374151;background:#f5f7fb;border:1px solid #d8dfef;border-radius:999px;padding:1px 8px;white-space:nowrap}.stats-scroll{max-height:none}.stats-tree-controls{display:flex;justify-content:flex-end;gap:6px}.stats-tree-controls-sticky{position:sticky;top:0;z-index:3;background:#f7f5ef;border:1px solid #e2dfd8;border-radius:8px;padding:6px;margin-bottom:10px;box-shadow:0 2px #0000000a}.stats-project-total{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;padding:9px 10px;border:1px solid #d7e2ff;border-radius:8px;background:#f3f7ff;font-size:13px;font-weight:700;color:#1f2a44}.stats-project-total>span:last-child{text-align:right;justify-self:end;font-variant-numeric:tabular-nums}.stats-block{border:1px solid #e2dfd8;border-radius:8px;background:#fff;padding:8px;display:grid;gap:8px}.stats-block-header{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.stats-table{display:grid;gap:4px}.stats-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;padding:4px 6px;border:1px solid #efede8;border-radius:6px;background:#faf9f6}.stats-label{min-width:0;font-size:12px;color:#2f2f2f}.stats-value{font-size:12px;font-weight:700;color:#1f2a44;font-variant-numeric:tabular-nums}.stats-tree{display:grid;gap:8px}.stats-tree-node{border:1px solid #e2dfd8;border-radius:8px;background:#fff}.stats-tree-header{width:100%;border:0;background:#f7f5ef;border-radius:8px;padding:6px 8px;display:flex;align-items:center;justify-content:space-between;gap:8px;text-align:left;cursor:pointer}.stats-tree-title{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:#1f2a44;min-width:0}.stats-tree-content{display:grid;gap:8px;padding:8px}.stats-tree-content>.stats-tree-node{margin-left:10px;border-left:2px solid #ece8df;padding-left:8px;border-radius:0}.stats-building-group{display:grid;gap:8px}.stats-building-title{font-size:12px;font-weight:700;color:#1f2a44;text-transform:uppercase;letter-spacing:.05em;padding:2px 4px}.stats-device-rows{display:grid;gap:4px}.stats-device-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;border:1px solid #efede8;border-radius:6px;padding:4px 6px;background:#faf9f6}.stats-device-icon.device-button{width:34px;height:22px;min-height:22px;font-size:11px;border-radius:5px;cursor:default;box-shadow:none;padding:0 2px}.stats-device-label{font-size:12px;color:#2f2f2f;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stats-hardware-table{display:grid;gap:2px}.stats-hw-group-box{border:1px solid #e6e0d4;border-radius:8px;background:#fcfbf8;padding:8px;display:grid;gap:6px}.stats-hw-group-field{border-style:dashed}.stats-hw-group-title{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:12px;font-weight:700;color:#2e2e2e}.stats-hw-group-meta{font-size:11px;font-weight:600;color:#3f5d84}.stats-hw-group-meta.warning{color:#b42318}.stats-hw-header,.stats-hw-row{display:grid;grid-template-columns:minmax(90px,.8fr) minmax(90px,.8fr) minmax(120px,1fr) minmax(180px,1.6fr) 64px 110px 110px;gap:6px;align-items:center}.stats-hw-header{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b6b6b;font-weight:600;padding:2px 6px}.stats-hw-row{font-size:12px;color:#2f2f2f;border:1px solid #efede8;border-radius:6px;background:#faf9f6;padding:4px 6px}.stats-hw-row-total{background:#eef3f9;border-color:#d4deea;font-weight:700}.stats-hw-header>span:nth-child(5),.stats-hw-header>span:nth-child(6),.stats-hw-header>span:nth-child(7),.stats-hw-row>span:nth-child(5),.stats-hw-row>span:nth-child(6),.stats-hw-row>span:nth-child(7){text-align:right;justify-self:end}.stats-lines-header,.stats-lines-row{grid-template-columns:minmax(140px,1fr) 120px 90px 130px}.stats-lines-header-all,.stats-lines-row-all{grid-template-columns:minmax(180px,1.2fr) 100px minmax(120px,1fr) 120px}.stats-lines-header>span:last-child,.stats-lines-row>span:last-child,.stats-lines-header-all>span:last-child,.stats-lines-row-all>span:last-child{text-align:right;justify-self:end}.stats-line-pattern{display:inline-block;width:96px;height:16px;vertical-align:middle;overflow:visible}.ga-ets-count-number{min-width:88px;text-align:right;justify-self:end;font-size:12px;font-weight:700;color:#1f2a44;font-variant-numeric:tabular-nums}.ga-ets-middle{display:grid;gap:4px;padding-left:16px}.ga-ets-middle-row{display:flex;align-items:center;justify-content:space-between;font-weight:600;color:#27513a;font-size:12px;background:#eefaf2;border:1px solid #cdebd8;border-radius:6px;gap:10px;padding:6px 8px}.ga-ets-leaf-row{display:grid;grid-template-columns:60px minmax(0,1fr) auto;gap:6px;align-items:center;padding-left:14px;padding-top:1px;padding-bottom:1px;font-size:12px}.ga-ets-address{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:#8f1d1d;background:#fff1f1;border:1px solid #f5c9c9;border-radius:999px;padding:0 6px;justify-self:start}.ga-ets-address-external{color:#62430f;background:#fff8df;border-color:#e9d79d}.ga-ets-desc{color:#2f2f2f;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ga-ets-gaid{justify-self:end;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:#1f2a44;background:#eef2fb;border:1px solid #ced7f0;border-radius:999px;padding:0 6px;white-space:nowrap}.hardware-port-title{font-weight:600;font-size:12px;display:inline-flex;align-items:center;gap:6px;width:100%}.hardware-port-device-icon{min-width:24px;width:auto;height:18px;padding:0 4px;border-radius:3px;border:1px solid #353535;display:inline-flex;align-items:center;justify-content:center;font-size:9px;font-weight:700;letter-spacing:.01em;line-height:1;box-shadow:none}.hardware-port-location{color:#5f6b82;font-weight:500}.hardware-port-type{color:#8a95aa;font-weight:500}.hardware-port-human-id{margin-left:auto;padding:1px 8px;border:1px solid #d0d6e2;border-radius:999px;background:#f5f7fb;color:#455169;font-size:11px;font-weight:600;letter-spacing:.01em}.hardware-move-panel{border-radius:12px;padding:12px;display:grid;gap:8px;align-content:start;margin-bottom:12px;border:1px solid #c9a227;background:#fff4d6;box-shadow:0 0 0 2px #c9a2272e}.hardware-move-source{border:1px solid rgba(31,42,68,.2);background:#fff9;border-radius:8px;padding:8px 10px;display:grid;gap:3px}.hardware-move-source-title{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#1f2a44}.modal-scroll.hardware-move-open{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;align-items:start;overflow:hidden;height:100%;min-height:0}.modal-scroll.hardware-move-open>.hardware-instance-list,.modal-scroll.hardware-move-open>.panel-help{grid-column:1;max-height:none;height:100%;overflow:auto;overscroll-behavior:contain;padding:12px;box-sizing:border-box;border:1px solid #d5cfbe;border-radius:12px;background:#fffdf8}.modal-scroll.hardware-move-open>.hardware-move-panel{grid-column:2;grid-row:1;margin-bottom:0;max-height:none;height:100%;overflow:auto;overscroll-behavior:contain;padding-bottom:12px;box-sizing:border-box}.hardware-move-targets{display:grid;gap:10px;align-content:start}.hardware-move-device{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:#223047}.hardware-move-device-text{line-height:1.3}.hardware-move-panel-callout{border:1px solid #c9a227;background:#fff4d6;box-shadow:0 0 0 2px #c9a2272e;position:relative}.cabinet-editor-modal{width:min(1880px,99vw);height:min(97vh,calc(300px + var(--cabinet-row-count, 8) * 76px));max-width:none;display:flex;flex-direction:column}.cabinet-editor-body{display:grid;grid-template-columns:minmax(0,1fr) minmax(230px,280px);gap:10px;max-height:none;height:auto;flex:1 1 auto;min-height:0}.cabinet-grid-wrap{display:grid;gap:8px}.cabinet-grid{position:relative;border:1px solid #cfd8ea;border-radius:10px;background:#f8fbff;display:grid;grid-auto-rows:minmax(60px,1fr);overflow:hidden}.cabinet-cell{border-right:1px solid #e7edf7;border-bottom:1px solid #e7edf7;min-height:60px}.cabinet-block{position:absolute;border-radius:8px;border:1px solid #d4dce9;background:#fff;padding:6px 8px;display:grid;align-content:center;gap:4px;overflow:hidden;cursor:grab}.cabinet-block.cabinet-block-knx{background:#edf4ff;border-color:#b6cdf5}.cabinet-block.cabinet-block-custom{background:#fff5ea;border-color:#f0c491;padding:3px 5px}.cabinet-block.is-locked{border-color:#c81e1e;box-shadow:inset 0 0 0 1px #c81e1e47}.cabinet-block.is-selected{box-shadow:0 0 0 2px #2563eba6,inset 0 0 0 1px #2563eb59}.cabinet-block-title{font-size:12px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cabinet-block-custom .cabinet-block-title{font-size:10px}.cabinet-block-head{display:flex;align-items:center;justify-content:space-between;gap:8px}.cabinet-block-custom{display:grid;grid-template-rows:auto 1fr;gap:1px;min-height:0;height:100%;align-content:stretch}.cabinet-block-custom-note{font-size:11px;line-height:1.1;color:#3c4963;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;overflow-wrap:anywhere}.cabinet-block-custom-note-input{width:100%;min-width:0;height:100%;min-height:0;border:1px solid #cfd8ea;border-radius:4px;background:#fff;color:#1f2a44;font-size:10px;line-height:1.15;padding:2px 3px;resize:none}.cabinet-block-indaddr{font-size:12px;font-weight:700;color:#1f2a44;white-space:nowrap;flex-shrink:0}.cabinet-side-panel{display:grid;gap:8px;align-content:start;max-height:calc(97vh - 140px);overflow:auto;padding-right:2px}.cabinet-side-section{border:1px solid #dfd9cd;border-radius:10px;padding:8px;background:#fffdf8;display:grid;gap:6px}.cabinet-unplaced-list,.cabinet-custom-list{display:grid;gap:6px}.cabinet-unplaced-table{display:grid;gap:4px}.cabinet-unplaced-table-header,.cabinet-unplaced-table-row{display:grid;grid-template-columns:minmax(0,1fr) 24px;align-items:center;gap:3px}.cabinet-unplaced-table-header{font-size:11px;font-weight:700;color:#6b768e;text-transform:uppercase;letter-spacing:.03em;padding:0 6px}.cabinet-unplaced-table-row{cursor:grab;font-size:11px;font-weight:600}.cabinet-unplaced-inner{border:1px dashed #c8d1df;border-radius:8px;padding:2px 5px;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:6px}.cabinet-unplaced-table-row .cabinet-unplaced-hw{min-width:0;display:grid;grid-template-rows:16px 16px;gap:0;align-items:center}.cabinet-unplaced-table-row .cabinet-unplaced-line1{display:flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0}.cabinet-unplaced-table-row .cabinet-unplaced-manu{font-size:10px;color:#5b6885;font-weight:600;letter-spacing:.02em;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cabinet-unplaced-table-row .cabinet-unplaced-sku{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-variant-numeric:tabular-nums;color:#1f2a44}.cabinet-custom-note-input{width:100%;min-width:0;height:18px;border:1px solid #cfd8ea;border-radius:4px;background:#fff;color:#1f2a44;font-size:10px;padding:0 4px}.cabinet-unplaced-table-row .cabinet-unplaced-line2{display:flex;align-items:center;justify-content:flex-start;gap:6px;min-width:0}.cabinet-custom-line2-layout{display:flex;align-items:center;justify-content:space-between;gap:6px;width:100%;min-width:0}.cabinet-unplaced-table-row .cabinet-unplaced-side{display:inline-grid;grid-template-rows:16px 16px;justify-items:end;align-items:center;gap:0;min-width:max-content}.cabinet-unplaced-table-row .cabinet-unplaced-mu-grid{display:inline-flex;flex-wrap:nowrap;justify-content:flex-end;align-items:center;gap:1px;flex-shrink:0;opacity:.7;align-self:center}.cabinet-unplaced-table-row .cabinet-unplaced-mu-cell{width:5px;height:5px;border-radius:1px;background:#7cc2ff;border:1px solid #5ea7e6;box-sizing:border-box}.cabinet-unplaced-table-row .cabinet-unplaced-addr{font-size:10px;color:#425171;font-variant-numeric:tabular-nums;white-space:nowrap}.cabinet-unplaced-action-col{display:inline-flex;justify-content:center;align-items:center;justify-self:center;padding-left:4px}.cabinet-remove-x{min-width:18px;height:18px;line-height:1;padding:0;border-radius:5px;font-size:10px;font-weight:800}.is-right{text-align:right}.cabinet-unplaced-item{border:1px dashed #c8d1df;border-radius:8px;padding:8px;display:flex;align-items:center;justify-content:space-between;gap:8px;cursor:grab;font-size:12px;font-weight:600}.cabinet-unplaced-item-missing{border-style:solid;border-color:#d46b08;background:#fff4e5;color:#8a2f00}.cabinet-item-width{color:#6b768e;font-weight:700;font-size:11px}.cabinet-custom-row{border:1px solid #e2dfd8;border-radius:8px;padding:3px 6px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;min-height:38px;position:relative}.cabinet-custom-card{border:none;background:transparent;padding:0;margin:0;display:grid;grid-template-rows:16px 16px;gap:0;align-items:center;text-align:left;cursor:pointer;min-width:0}.cabinet-custom-name{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11px;font-weight:600;color:#1f2a44}.cabinet-custom-note{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:10px;color:#5b6885}.cabinet-custom-mu-grid{position:absolute;right:6px;bottom:4px;display:inline-flex;flex-wrap:nowrap;justify-content:flex-end;align-items:center;gap:1px;opacity:.7}.cabinet-custom-actions{display:inline-flex;align-items:center;gap:6px}.cabinet-custom-actions.centered{justify-self:center}.cabinet-template-modal{width:min(420px,92vw);display:grid;gap:10px}.modal-overlay.inner{position:absolute;top:0;right:0;bottom:0;left:0;z-index:30}.cabinet-template-header{display:flex;align-items:center;justify-content:space-between;gap:8px}.cabinet-template-header-actions{display:inline-flex;align-items:center;gap:6px}.cabinet-template-form{display:grid;gap:6px}.cabinet-template-add-controls{display:grid;grid-template-columns:96px minmax(0,1fr);gap:8px}.cabinet-editor-modal .modal-header{gap:16px;align-items:center;flex-wrap:nowrap;flex:0 0 auto;position:sticky;top:0;z-index:3;background:#fff}.cabinet-editor-modal .modal-actions-inline{display:inline-flex;align-items:center;gap:10px;margin-left:auto;flex-shrink:0}.cabinet-editor-modal .modal-actions-inline .tool-button{padding:8px 14px}.cabinet-grid-help{color:#57627a}.cabinet-grid-frame{display:grid;grid-template-columns:24px minmax(0,1fr);grid-template-rows:18px minmax(0,1fr);align-items:stretch;min-height:0}.cabinet-grid-axis{position:relative;pointer-events:none;font-size:11px;color:#5f6a82;font-weight:700}.cabinet-grid-axis-top{grid-column:2;grid-row:1;height:16px;display:grid;align-items:center}.cabinet-grid-axis-top>span{justify-self:center}.cabinet-grid-axis-left{grid-column:1;grid-row:2;width:20px;display:grid;align-items:center}.cabinet-grid-axis-left>span{justify-self:end;padding-right:2px}.cabinet-grid-frame .cabinet-grid{grid-column:2;grid-row:2}.cabinet-block{align-content:start}.cabinet-block-meta{display:grid;gap:2px;margin-top:2px}.cabinet-block-meta-line{font-size:11px;line-height:1.15;color:#3c4963;white-space:normal;overflow-wrap:anywhere}.device-editor{max-width:1800px;width:90vw}.device-editor-tabs{display:flex;gap:6px;padding:8px 12px 0}.device-editor-tabs.header-tabs{margin-left:auto;margin-right:12px;padding:0}.device-editor-body{display:grid;grid-template-columns:220px 1fr;gap:16px;height:100%;min-height:0}.sensor-editor-body{grid-template-columns:minmax(560px,680px) minmax(0,1fr)}.sensor-editor-list,.sensor-editor-form{min-width:0}.sensor-list-head{display:grid;grid-template-columns:minmax(180px,1fr) minmax(220px,1.2fr) minmax(220px,1.4fr);gap:10px;align-items:center;padding:0 8px;font-size:12px;font-weight:700;color:#6d675a}.sensor-list-row{display:grid;grid-template-columns:minmax(180px,1fr) minmax(220px,1.2fr) minmax(220px,1.4fr);gap:10px;align-items:center;padding:6px 8px;border-radius:8px;border:1px solid #e2dfd8;background:#fbfaf7;text-align:left}.sensor-list-row.active{border-color:#1f2a44;box-shadow:0 0 0 1px #1f2a44}.sensor-list-cell-short,.sensor-list-cell-name,.sensor-list-cell-ga{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sensor-list-cell-short{font-weight:600}.hardware-editor-body{grid-template-columns:4fr 1fr;align-items:stretch;min-height:70vh;height:100%;min-height:0;width:100%;box-sizing:border-box;overflow:hidden}.device-editor-list{display:grid;gap:6px;align-content:start;height:100%;min-height:0;overflow-y:auto;padding-right:4px}.hardware-editor-list{display:flex;flex-direction:column;gap:8px;overflow:hidden;max-height:none;padding-right:0;flex:1;min-height:0;min-width:0}.hardware-list-controls{display:grid;gap:6px;grid-template-columns:1fr auto auto;align-items:center}.hardware-table-scroll{flex:1;overflow:hidden;padding-right:4px;min-height:0;display:flex;flex-direction:column;gap:6px}.hardware-editor-form{overflow-y:auto;max-height:100%;padding-right:6px;min-width:0;align-self:stretch;box-sizing:border-box}.hardware-table{display:flex;flex-direction:column;gap:4px;align-items:stretch;overflow-y:auto;flex:1;min-height:0}.hardware-row{display:grid;grid-template-columns:12px 22px 1fr 1fr 2fr .7fr .4fr .7fr .7fr;gap:6px;align-items:center;padding:2px 8px;border-radius:8px;border:1px solid #e2dfd8;background:#fbfaf7;text-align:left;font-size:12px;line-height:1.05;min-height:28px}.hardware-row span{line-height:1.05}.hardware-header{background:#f1eee7;font-weight:600;border-color:#ded8cd}.hardware-header-sort{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background:transparent;font:inherit;color:inherit;text-align:left;padding:0;cursor:pointer}.hardware-item{cursor:pointer}.hardware-item,.hardware-row{flex:0 0 auto}.hardware-item.active{border-color:#1f2a44;box-shadow:0 0 0 1px #1f2a44}.hardware-item.selected{border-color:#1f2a44;background:#e9eef8;box-shadow:0 0 0 1px #1f2a44}.hardware-cell-id{font-weight:600}.price-cell{text-align:right}.hardware-link{font-size:11px;color:#1f2a44;text-decoration:underline;justify-self:start}.hardware-link-button{width:18px;height:18px;border-radius:999px;border:1px solid #d9d4c9;background:#f6f3ec;color:#8a8174;display:inline-flex;align-items:center;justify-content:center;font-size:11px;padding:0;cursor:default}.hardware-link-button.has-link{background:#7fc37a;border-color:#66b462;color:#0e2a1b;cursor:pointer}.hardware-status-dot{width:10px;height:10px;border-radius:999px;border:1px solid #d9d4c9;display:inline-block}.hardware-status-dot.ok{background:#8fc87a;border-color:#76b965}.hardware-status-dot.missing{background:#e36a6a;border-color:#d45858}.hardware-search{height:28px;border:1px solid #d9d4c9;border-radius:8px;padding:4px 8px;font-size:13px}.device-editor-item{display:grid;grid-template-columns:36px 1fr auto;gap:8px;align-items:center;padding:6px 8px;border-radius:8px;border:1px solid #e2dfd8;background:#fbfaf7;text-align:left}.hardware-editor-item{grid-template-columns:1fr;gap:2px}.device-list-actions{display:flex;justify-content:flex-start;margin-bottom:6px}.device-list-actions .tool-button{width:100%}.device-editor-item.active{border-color:#1f2a44;box-shadow:0 0 0 1px #1f2a44}.device-editor-icon{justify-self:start}.device-editor-label{font-weight:600;font-size:13px}.device-editor-ga-dot{width:9px;height:9px;border-radius:999px;border:1px solid #cfc9be;justify-self:end}.device-editor-ga-dot.nonknx{background:#b0b0b0;border-color:#9a9a9a}.device-editor-ga-dot.missing{background:#d45858;border-color:#bb4242}.device-editor-ga-dot.ok{background:#3f9f57;border-color:#318046}.hardware-editor-label{font-size:12px}.device-editor-form{display:grid;gap:10px;align-content:start}.device-editor-form.compact-device-form{gap:8px}.device-editor-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px}.form-row{display:grid;gap:2px;font-size:12px;color:#3d3d3d;align-content:start}.form-row span{line-height:1}.form-row input{border:1px solid #d9d4c9;border-radius:8px;padding:2px 8px;font-size:13px;line-height:1.1;height:26px}.form-readonly-value{border:1px solid #ded8cd;border-radius:8px;background:#f3f0e9;color:#5f584c;padding:4px 8px;min-height:26px;display:inline-flex;align-items:center;font-size:13px;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.color-edit-row{display:grid;grid-template-columns:42px 1fr;gap:6px;align-items:center}.color-edit-row input[type=color]{width:42px;height:26px;border:1px solid #d9d4c9;border-radius:6px;padding:0}.device-icon-sample-row{display:inline-flex;align-items:center;gap:8px}.icon-visual-row{gap:4px}.icon-visual-inline{display:inline-flex;gap:10px;align-items:center;flex-wrap:wrap}.compact-color-field{display:inline-flex;gap:6px;align-items:center}.compact-color-field>span{font-size:11px;color:#6d675a;line-height:1}.compact-color-field .color-edit-row input[type=text]{width:90px;min-width:90px}.compact-color-field .color-edit-row{grid-template-columns:42px 90px}.inline-checkbox-row{grid-template-columns:auto 1fr;align-items:center;gap:10px}.inline-checkbox-row>span{line-height:1.2}.default-placement-row{gap:4px}.default-placement-inline{display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}.compact-inline-field{display:inline-flex;align-items:center;gap:6px}.compact-inline-field>span{font-size:11px;color:#6d675a;line-height:1}.compact-inline-field input[type=number]{width:112px}.form-row.required-missing>span{color:#b03a2e}.form-row.required-missing input,.tool-select.required-missing{border-color:#d46a5a;background:#fff7f5}.device-editor-filter,.device-hardware-types{display:grid;gap:6px}.device-hardware-type-chip{display:inline-flex;align-items:center;gap:6px;cursor:pointer}.device-editor-filter .filter-row{display:grid;grid-template-columns:1fr 1fr auto;gap:6px;align-items:center}.device-editor-filter .filter-row.ga-template-row{grid-template-columns:1fr 1.4fr .8fr auto auto auto}.device-editor-filter .filter-row.ga-template-row.sensor-ga-template-row{grid-template-columns:minmax(180px,1fr) minmax(260px,1.4fr) minmax(220px,1fr) auto auto auto}.device-editor-filter .filter-row.ga-template-row.sensor-ga-template-row .tool-button{align-self:center;justify-self:center;display:inline-flex;align-items:center;justify-content:center;min-height:28px}.device-editor-filter .tool-button.compact,.device-editor-filter .tool-button.tiny{padding:3px 6px;font-size:12px}.device-editor-filter>.tool-button.compact{justify-self:start;width:auto}.hardware-editor-properties .filter-row{align-items:center}.hardware-editor-actions{border-top:1px solid #e2dfd8;padding-top:12px;margin-top:8px;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;position:sticky;bottom:0;background:#fff;padding-bottom:8px}.hardware-editor-properties{padding-bottom:52px}.hardware-bulk-fields{display:grid;gap:8px;margin-bottom:6px}.hardware-bulk-panel .bulk-apply{border-top:1px solid #e2dfd8;padding-top:10px;margin-top:6px;display:grid;gap:8px}.hardware-bulk-fields .bulk-row{display:grid;grid-template-columns:130px 1fr;gap:8px;align-items:center}.hardware-bulk-fields .bulk-label{display:grid;grid-template-columns:16px 1fr;gap:6px;align-items:center;font-size:12px;color:#3d3d3d}.hardware-bulk-fields .tool-input,.hardware-bulk-fields .tool-select{height:30px;padding:0 8px;box-sizing:border-box;line-height:28px;width:100%;max-width:100%;display:block}.hardware-bulk-sensor-grid .bulk-label{grid-template-columns:1fr;gap:2px}.hardware-editor-properties .filter-row .tool-button.tiny{align-self:center;height:32px;line-height:1}.tool-button.icon-only{padding:0;width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1}.hardware-editor-properties .filter-row.missing .tool-select{border-color:#e36a6a;box-shadow:0 0 0 1px #e36a6a33}.property-name{font-size:12px;color:#1f2a44;padding:0 4px}.property-name-input{height:30px;font-size:12px;padding:2px 8px}.pricelist-import{display:grid;gap:10px;height:100%;min-height:0}.pricelist-actions{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.pricelist-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.pricelist-pagination{display:flex;gap:6px}.pricelist-table{display:grid;gap:6px}.pricelist-row{display:grid;grid-template-columns:40px 140px 140px 4.6fr 140px 140px 220px 1.4fr;gap:6px;align-items:center;padding:6px 8px;border:1px solid #e2dfd8;border-radius:8px;background:#fbfaf7}.pricelist-row input[type=text]{border:1px solid #d9d4c9;border-radius:6px;padding:4px 6px;font-size:12px}.pricelist-property-inputs{display:grid;grid-template-columns:1fr 1fr;gap:6px}.admin-overlay{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.admin-progress-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#0f172a2e;display:flex;align-items:center;justify-content:center;z-index:25}.admin-progress-modal{width:min(520px,90vw);border:1px solid #d6d0c2;background:#fff;border-radius:12px;box-shadow:0 20px 50px #0003;padding:16px;display:grid;gap:8px}.admin-progress-actions{margin-top:8px;display:flex;justify-content:flex-end;gap:8px}.pricelist-description textarea{width:100%;min-height:32px;border:1px solid #d9d4c9;border-radius:6px;padding:6px 8px;font-size:12px;resize:vertical}.pricelist-header{font-weight:600;background:#f1ede6}.pricelist-properties{display:grid;gap:6px}.pricelist-property-row{display:grid;grid-template-columns:1fr 1fr auto;gap:6px;align-items:center}.validation-list{display:grid;gap:8px}.validation-row{display:grid;grid-template-columns:90px 1fr;gap:10px;align-items:start;border:1px solid #e2dfd8;border-radius:8px;padding:8px 10px;background:#fbfaf7}.validation-row.error{border-color:#b42318}.validation-row.warning{border-color:#c9a227}.validation-level{font-weight:700;font-size:12px}.validation-message{font-weight:600}.hardware-move-panel-callout:before{content:"";position:absolute;left:0;top:0;bottom:0;width:6px;background:#c9a227;border-radius:12px 0 0 12px}.hardware-move-panel-section{border:1px solid #1f2a44;background:#eef1f8;box-shadow:inset 0 0 0 1px #1f2a441f}.hardware-move-panel-section .panel-help:first-of-type{font-weight:700;color:#1f2a44}.hardware-move-style-toggle{display:flex;gap:6px}.hardware-move-row{display:grid;grid-template-columns:auto auto;gap:8px;align-items:center}.hardware-move-footer{border-top:1px solid #d9d5ca;padding:10px 12px 12px;background:#f6f3eb;display:grid;gap:6px;position:relative;z-index:1}.hardware-free-pill{display:inline-flex;align-items:center;justify-content:center;min-width:1.6em;height:1.4em;padding:0 6px;border-radius:999px;background:#dcfce7;border:1px solid #86efac;color:#14532d;font-weight:700;font-size:11px;line-height:1;font-variant-numeric:tabular-nums}.hardware-move-targets{display:grid;gap:10px}.hardware-move-target-card{border:1px solid #e2dfd8;border-radius:10px;padding:10px;background:#fff;display:grid;gap:6px}.hardware-move-error{color:#b42318;font-weight:600}.mapping-profile-row{display:flex;gap:6px;align-items:center}.mapping-table{display:grid;gap:8px}.mapping-row{display:grid;grid-template-columns:minmax(180px,.7fr) minmax(0,1.3fr);gap:8px;align-items:center;border:1px solid #e2dfd8;border-radius:8px;padding:6px 8px;background:#fbfaf7}.mapping-row.mapping-row-dummy{background:#f3f4f6;border-color:#c4c9d1}.mapping-row.mapping-row-missing{background:#fff1f2;border-color:#f3a5ab}.mapping-select.mapping-select-dummy{background:#e3e3e3;border-color:#b8b8b8;color:#555}.mapping-select.mapping-select-missing{background:#ffe4e6;border-color:#ef4444;color:#7f1d1d}.mapping-device{display:flex;align-items:center;gap:8px}.mapping-icon{width:32px;height:24px;border-radius:4px;border:1px solid #d9d4c9;background:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:10px}.mapping-category{display:grid;gap:6px}.mapping-label{font-size:13px}.mapping-select{width:100%;min-width:0}.mapping-select.readonly{border:1px solid #d9d4c9;border-radius:8px;padding:7px 10px;background:#f7f5ef;color:#3b3b3b;font-size:12px;line-height:1.25}.searchable-select{position:relative;width:100%}.searchable-select-trigger{width:100%;border:1px solid #d9d4c9;border-radius:8px;padding:6px 10px;display:flex;justify-content:space-between;align-items:center;background:#fff;cursor:pointer;font-size:12px}.searchable-select-label{text-align:left;flex:1;margin-right:8px;display:grid;gap:2px}.searchable-select-label-main{font-weight:600}.searchable-select-label-desc{font-size:11px;color:#6b6b6b;text-transform:none}.searchable-select-caret{font-size:10px;color:#6b6b6b}.searchable-select-popover{position:absolute;top:calc(100% + 6px);left:0;right:0;background:#fff;border:1px solid #d9d4c9;border-radius:10px;box-shadow:0 8px 20px #0000001f;padding:8px;z-index:20}.searchable-select-popover.open-up{top:auto;bottom:calc(100% + 6px)}.searchable-select-input{width:100%;border:1px solid #d9d4c9;border-radius:8px;padding:6px 8px;font-size:12px}.searchable-select-list{margin-top:6px;max-height:200px;overflow:auto;display:grid;gap:4px}.searchable-select-option{border:none;background:#f7f4ef;border-radius:6px;padding:6px 8px;text-align:left;cursor:pointer;font-size:12px;display:grid;gap:2px}.searchable-select-option-main{font-weight:600}.searchable-select-option-desc{font-size:11px;color:#6b6b6b}.searchable-select-option.active{background:#1f2a44;color:#fff}.cabinet-target-select .searchable-select-option.active{background:#d9e7ff;color:#1f2a44}.cabinet-target-select .searchable-select-option.active .searchable-select-option-desc{color:#314767}.searchable-select-empty{font-size:12px;color:#6b6b6b;padding:6px 8px}.panel-help{font-size:12px;color:#6b6b6b}.panel-help.error{color:#b03a2e}.hierarchy-actions{display:grid;gap:6px;margin:8px 0}.hierarchy-row{display:grid;grid-template-columns:minmax(0,1fr) 52px auto;gap:6px;align-items:center}.hierarchy-line-label{display:flex;justify-content:flex-end;width:52px}.hierarchy-line-pill{font-size:12px;color:#1f2a44;background:#f0efeb;border-radius:999px;padding:2px 4px;display:block;width:52px;text-align:center}.hierarchy-line-panel{margin:6px 0 10px;border:1px solid #e2dfd8;background:#fff;border-radius:8px;padding:8px;display:grid;gap:6px}.hierarchy-block{display:grid;gap:6px}.hierarchy-line-actions{display:flex;justify-content:flex-end;gap:6px}.hierarchy-reorder-actions{display:inline-flex;justify-content:flex-end;gap:0;align-items:center}.hierarchy-reorder-actions .tool-button.compact{width:22px;height:22px;min-width:22px;min-height:22px;padding:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1}.hierarchy-more-button{color:#4a4a4a}.hierarchy-action-menu{margin:4px 0 8px;border:1px solid #e2dfd8;background:#fff;border-radius:8px;padding:8px;display:grid;gap:6px}.hierarchy-action-menu .tool-button.compact{width:100%;min-height:30px;height:30px;justify-content:flex-start;text-align:left;padding:0 10px;border-radius:6px;display:inline-flex;align-items:center}.hierarchy-field{display:grid;gap:4px}.hierarchy-field-label{font-size:11px;color:#5f5a4f}.hierarchy-field-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px;align-items:center}.hierarchy-collapse-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;gap:4px}.hierarchy-collapse-button{width:100%;justify-content:center;text-align:center}.hierarchy-order-toggle{display:inline-flex;align-items:center;gap:4px;padding:2px 4px;border:1px solid #ded9cd;border-radius:999px;background:#f6f3ec}.hierarchy-order-label{font-size:10px;color:#fff;background:#6f6758;border-radius:999px;padding:2px 7px;letter-spacing:.02em}.hierarchy-order-button{border:1px solid transparent;border-radius:999px;background:transparent;color:#5f5a4f;font-size:11px;padding:2px 8px;line-height:1.2;cursor:pointer}.hierarchy-order-button:hover{background:#ece6da}.hierarchy-order-button.is-active{background:#ebe5d7;border-color:#d3c9b6;color:#3f3a30;font-weight:600}.hierarchy-list{display:grid;gap:8px;max-height:320px;overflow:auto;border:1px solid #e2dfd8;border-radius:8px;padding:6px;background:#fff}.hierarchy-group{display:grid;gap:6px}.hierarchy-sublist{display:grid;gap:6px;padding-left:10px}.hierarchy-sublist.rooms{padding-left:16px;font-size:12px;color:#6b6b6b}.hierarchy-item{padding:6px 8px;border-radius:6px;cursor:pointer;background:#f7f4ef;font-size:14px;line-height:1.25;font-weight:600;overflow-wrap:anywhere;min-height:34px;display:flex;align-items:center}.hierarchy-item.active{background:#1f2a44;color:#fff}.hierarchy-item.room{background:#f0efeb}html,body{margin:0;padding:0;height:100%;overflow:hidden}:root{--device-icon-width: 36px;--device-icon-height: 28px;--device-icon-font: 10px}
