.toast-host[data-v-2a06cf22]{z-index:9999;flex-direction:column;gap:8px;max-width:360px;display:flex;position:fixed;top:16px;right:16px}.toast-item[data-v-2a06cf22]{color:#fff;white-space:pre-line;border-radius:6px;padding:10px 14px;font-size:13px;box-shadow:0 2px 10px #0003}.toast-info[data-v-2a06cf22]{background:#3498db}.toast-success[data-v-2a06cf22]{background:#2ecc71}.toast-error[data-v-2a06cf22]{background:#e74c3c}.toast-enter-active[data-v-2a06cf22],.toast-leave-active[data-v-2a06cf22]{transition:all .25s}.toast-enter-from[data-v-2a06cf22],.toast-leave-to[data-v-2a06cf22]{opacity:0;transform:translate(20px)}@media (width<=480px){.toast-host[data-v-2a06cf22]{top:calc(10px + env(safe-area-inset-top,0px));max-width:none;left:10px;right:10px}}:root{--prop-value-max-width:50%}body{color:#333;background-color:#f4f4f9;margin:0;padding:20px;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}.container{background:#fff;border-radius:8px;max-width:1200px;margin:0 auto;padding:20px;box-shadow:0 2px 10px #0000001a}header{border-bottom:2px solid #eee;margin-bottom:20px;padding-bottom:20px}h1{color:#2c3e50;margin:0 0 15px;font-size:24px}.controls{flex-wrap:wrap;align-items:center;gap:10px;display:flex}button{color:#fff;cursor:pointer;background-color:#3498db;border:none;border-radius:4px;padding:8px 16px;font-size:14px;transition:background-color .2s}button:hover{background-color:#2980b9}button:disabled{cursor:not-allowed;background-color:#bdc3c7}.file-input-wrapper{display:inline-block}.file-input-wrapper input[type=file]{display:none}.file-input-wrapper .btn{color:#fff;cursor:pointer;background-color:#9b59b6;border-radius:4px;padding:8px 16px;font-size:14px;transition:background-color .2s;display:inline-block}.file-input-wrapper .btn:hover{background-color:#8e44ad}select,input{border:1px solid #ddd;border-radius:4px;padding:8px}.mode-hint{color:#7f8c8d;background:#f4f6f8;border:1px solid #e1e6eb;border-radius:4px;padding:6px 10px;font-size:12px}#status-bar{color:#7f8c8d;margin-top:10px;font-size:14px}main{grid-template-columns:1fr 1fr;gap:20px;display:grid}.panel{box-sizing:border-box;background:#fff;border:1px solid #e0e0e0;border-radius:6px;min-width:0;padding:15px}#subdevice-panel{border-color:#e67e22;grid-column:1/-1;display:none}#subdevice-panel.visible{display:block}#log-panel,#slaves-panel,#groups-panel,#compare-panel{grid-column:1/-1}#properties-container,#services-container,#sub-services-container{background-color:#fafafa;border:1px solid #eee;border-radius:4px;max-height:500px;padding:10px;overflow-y:auto}h2{color:#34495e;border-bottom:1px solid #eee;margin-top:0;margin-bottom:10px;padding-bottom:10px;font-size:18px}.panel-header{border-bottom:1px solid #eee;justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:10px;display:flex}.panel-header h2{border:none;margin:0;padding:0}.panel-header button{color:#3498db;background:0 0;border:1px solid #3498db;padding:4px 8px;font-size:16px}.panel-header button:hover{color:#fff;background:#3498db}.panel-header button:disabled{color:#bdc3c7;background:0 0;border-color:#bdc3c7}.property-item{border-bottom:1px solid #f9f9f9;align-items:center;gap:12px;min-width:0;padding:8px 0;display:flex}.property-label{overflow-wrap:anywhere;cursor:pointer;-webkit-user-select:none;user-select:none;flex:1 1 0;min-width:0;font-weight:500;transition:color .2s}.property-label:hover{color:#3498db}.property-label .property-addr-hint{color:#94a3b8;margin-left:6px;font-family:monospace;font-size:11px;font-weight:400}.property-label.copied{color:#27ae60}.property-actions{flex:1 1 0;justify-content:flex-end;align-items:center;gap:8px;min-width:0;max-width:50%;display:flex}.property-value{color:#27ae60;text-align:right;text-overflow:ellipsis;white-space:nowrap;cursor:default;flex:1;min-width:0;font-family:monospace;overflow:hidden}.property-copy-btn{color:#3498db;background:#fff;border:1px solid #d0d7de;padding:4px 8px;font-size:14px;line-height:1}.property-copy-btn:hover{background:#eef6ff;border-color:#3498db}.property-copy-btn.copied{color:#27ae60;background:#eefaf2;border-color:#27ae60}.service-item{background:#f8f9fa;border:1px solid #eee;border-radius:4px;margin-bottom:10px;padding:10px}.service-header{justify-content:space-between;align-items:center;margin-bottom:10px;display:flex}.service-name{font-weight:700}.service-inputs{flex-wrap:wrap;align-items:flex-end;gap:10px;display:flex}.service-inputs input{flex:1;min-width:80px}.input-group{flex-direction:column;flex:1;gap:4px;min-width:100px;display:flex}.input-group label{color:#7f8c8d;font-size:12px}.input-group select{width:100%}.bitmap-group{flex-basis:100%}.checkbox-container{background:#fff;border:1px solid #ddd;border-radius:4px;flex-wrap:wrap;gap:10px;margin-top:5px;padding:8px;display:flex}.checkbox-label{cursor:pointer;-webkit-user-select:none;user-select:none;background:#f0f0f0;border-radius:4px;align-items:center;gap:4px;padding:4px 8px;font-size:13px;transition:background .2s;display:flex}.checkbox-label:hover{background:#e0e0e0}.checkbox-label input{margin:0}#log-container{color:#ecf0f1;background:#2c3e50;border-radius:4px;height:200px;margin-bottom:10px;padding:10px;font-family:monospace;font-size:12px;overflow-y:auto}.log-entry{border-bottom:1px solid #34495e;margin-bottom:4px}.log-tx{color:#3498db}.log-rx{color:#2ecc71}.log-err{color:#e74c3c}.placeholder{color:#95a5a6;text-align:center;padding:20px}.log-panel-actions{align-items:center;gap:8px;display:flex}.command-input-area{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;margin-bottom:12px;padding:12px;transition:padding .2s,border-color .2s}.command-input-area.collapsed{border-color:#0000;max-height:44px;padding-top:0;padding-bottom:0;overflow:hidden}.command-input-area.collapsed .cmd-panel,.command-input-area.collapsed .cmd-tabs{display:none}.cmd-tabs{border-bottom:1px solid #e2e8f0;align-items:center;gap:4px;margin-bottom:12px;padding-bottom:8px;display:flex}.cmd-tab{color:#64748b;cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 14px;font-size:14px;transition:color .2s,border-color .2s}.cmd-tab:hover{color:#3498db}.cmd-tab.active{color:#3498db;border-bottom-color:#3498db;font-weight:600}.cmd-slave-id{color:#475569;white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:13px;display:flex}.cmd-slave-id input{border:1px solid #cbd5e1;border-radius:4px;width:70px;padding:4px 8px;font-family:monospace}.cmd-panel{margin-top:4px}.cmd-row-merged{flex-wrap:nowrap;align-items:center}.cmd-row-merged>*{flex:none}.cmd-toggle-group{background:#fff;border:1px solid #cbd5e1;border-radius:4px;margin-left:8px;display:inline-flex;overflow:hidden}.cmd-toggle{color:#475569;cursor:pointer;-webkit-user-select:none;user-select:none;text-align:center;background:#fff;border:none;border-right:1px solid #cbd5e1;min-width:56px;padding:6px 16px;font-size:13px;line-height:1.2;transition:background .15s,color .15s,transform .1s}.cmd-toggle:last-child{border-right:none}.cmd-toggle:hover:not(.active){color:#3498db;background:#eef6ff}.cmd-toggle.active{color:#fff;background:#3498db;font-weight:600}.cmd-toggle:active{transform:scale(.96)}.cmd-row{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:8px;display:flex}.cmd-row label{color:#475569;flex:1;align-items:center;gap:6px;min-width:0;font-size:13px;display:flex}.cmd-row input[type=text],.cmd-row input[type=number]{background:#fff;border:1px solid #cbd5e1;border-radius:4px;flex:1;min-width:100px;padding:6px 10px;font-family:monospace}.cmd-row input[type=text]:focus,.cmd-row input[type=number]:focus{border-color:#3498db;outline:none;box-shadow:0 0 0 2px #3498db26}.cmd-row-actions{margin-top:4px}.cmd-row-actions button{flex:none}.cmd-preview{color:#a5f3fc;word-break:break-all;-webkit-user-select:text;user-select:text;box-sizing:border-box;background:#1e293b;border-radius:4px;flex:1;width:100%;min-height:18px;padding:8px 12px;font-family:monospace;font-size:12px}.cmd-preview.error{color:#fecaca;background:#7f1d1d}.cmd-hint{color:#7f8c8d;margin:8px 0 0;font-size:12px;line-height:1.5}.cmd-hint code{color:#475569;background:#e2e8f0;border-radius:3px;padding:1px 4px;font-size:11px}.ghost-btn{color:#3498db!important;background:0 0!important;border:1px solid #3498db!important;padding:6px 12px!important;font-size:13px!important}.ghost-btn:hover{color:#2980b9!important;background:#eef6ff!important}.ghost-btn:active{background:#d6eaf8!important}.log-parse{color:#95a5a6;word-break:break-all;-webkit-user-select:text;user-select:text;margin-bottom:4px;margin-left:22px;padding:2px 0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:12px}.log-parse.error{color:#e74c3c}.modal{z-index:100;background-color:#00000080;width:100%;height:100%;display:none;position:fixed;top:0;left:0;overflow:auto}.modal-content{background-color:#fefefe;border:1px solid #888;border-radius:8px;width:400px;margin:15% auto;padding:20px;box-shadow:0 4px 8px #0003}.close-btn{color:#aaa;float:right;cursor:pointer;font-size:28px;font-weight:700}.close-btn:hover,.close-btn:focus{color:#000;cursor:pointer;text-decoration:none}.form-group{margin-bottom:15px}.form-group label{margin-bottom:5px;font-weight:500;display:block}.form-group select{width:100%}.form-group input{box-sizing:border-box;width:100%}.hint{color:#7f8c8d;margin-top:0;margin-bottom:15px;font-size:13px;line-height:1.5}.modal-footer{justify-content:flex-end;gap:10px;margin-top:20px;display:flex}.modal-upgrade-content{width:min(520px,100% - 32px)}.upgrade-source-panel{margin-bottom:16px}.upgrade-progress-card{background:#f5f8fb;border:1px solid #d8e2ec;border-radius:8px;padding:16px}.upgrade-status-text{color:#2c3e50;margin-bottom:12px;font-size:14px;line-height:1.5}.upgrade-progress-bar{background:#dfe6ec;border-radius:999px;width:100%;height:14px;overflow:hidden}.upgrade-progress-fill{background:linear-gradient(90deg,#1abc9c,#3498db);width:0;height:100%;transition:width .2s}.upgrade-progress-value{text-align:right;color:#34495e;margin-top:10px;font-family:monospace}.upgrade-overlay{z-index:150;background:#0f172a8c;position:fixed;inset:0}body.upgrade-locked{overflow:hidden}body.upgrade-locked .container{pointer-events:none}body.upgrade-locked #modal-upgrade,body.upgrade-locked #modal-upgrade *{pointer-events:auto}body.upgrade-locked #modal-upgrade{z-index:200}body.upgrade-locked .modal:not(#modal-upgrade){pointer-events:none}.hidden{display:none!important}@media (width<=768px){main{grid-template-columns:1fr}.container{width:auto;max-width:100%;padding:10px;overflow-x:hidden}.controls{justify-content:space-between;gap:5px}.controls>*{margin-bottom:5px}.modal-content{width:90%;margin:20% auto}.cmd-slave-id{justify-content:flex-end;width:100%;margin-left:0}.cmd-tabs,.cmd-row-merged{flex-wrap:wrap}.cmd-toggle-group{flex:100%;margin-top:6px;margin-left:0}.cmd-toggle{flex:1}.cmd-row input[type=text],.cmd-row input[type=number]{min-width:0}}.panel-hint{color:#7f8c8d;white-space:nowrap;background:#f4f6f8;border:1px solid #e1e6eb;border-radius:12px;padding:4px 10px;font-size:13px}.panel-header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;display:flex}.panel-header h2{margin:0}.panel-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.panel-refresh{color:#fff;cursor:pointer;white-space:nowrap;background:#3498db;border:1px solid #3498db;border-radius:4px;padding:5px 12px;font-size:13px;line-height:1.2;transition:background-color .15s,transform .1s}.panel-refresh:hover{background:#2980b9}.panel-refresh:disabled{cursor:not-allowed;background:#bdc3c7;border-color:#bdc3c7}.panel-refresh:active:not(:disabled){transform:scale(.96)}.card-stack-container{box-sizing:border-box;flex-direction:column;gap:10px;min-width:0;min-height:120px;padding:4px 2px;display:flex}.slave-card,.group-card{box-sizing:border-box;background:#fff;border:1px solid #e2e8f0;border-radius:8px;flex-direction:column;gap:8px;width:100%;min-width:0;max-width:100%;min-height:88px;padding:12px 14px;transition:border-color .2s,box-shadow .2s;display:flex;overflow:hidden;box-shadow:0 1px 2px #0f172a0a}.slave-card:hover,.group-card:hover{box-shadow:0 2px 6px #0f172a14}.slave-card.is-error,.group-card.is-error{border-color:#e74c3c}.slave-card.is-stale,.group-card.is-stale{border-color:#f39c12}.card-header{border-bottom:1px solid #eef2f6;justify-content:space-between;align-items:center;gap:8px;padding-bottom:8px;display:flex}.card-title{align-items:baseline;gap:8px;min-width:0;display:flex}.card-title .card-id{color:#2c3e50;font-family:monospace;font-size:20px;font-weight:700}.card-title .card-label{color:#7f8c8d;font-size:12px}.card-badge{color:#5d6d7e;background:#ecf0f1;border-radius:10px;padding:2px 10px;font-size:12px;font-weight:500;line-height:1.4;transition:background-color .2s,color .2s;display:inline-block}.card-badge.is-normal{color:#27ae60;background:#e8f7ee}.card-badge.is-running{color:#2980b9;background:#e6f2fb}.card-badge.is-alarm{color:#c0392b;background:#fdecea}.card-badge.is-offline{color:#95a5a6;background:#f4f4f4}.card-refresh{color:#3498db;cursor:pointer;background:0 0;border:1px solid #3498db;border-radius:4px;padding:4px 10px;font-size:16px;line-height:1;transition:background-color .15s,color .15s}.card-refresh:hover{color:#fff;background:#3498db}.card-refresh:disabled{color:#bdc3c7;cursor:not-allowed;background:0 0;border-color:#bdc3c7}.card-refresh:active:not(:disabled){transform:scale(.95)}.card-grid{box-sizing:border-box;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 14px;width:100%;min-width:0;font-size:13px;display:grid}.card-grid .card-row{justify-content:space-between;align-items:baseline;gap:12px;min-width:0;display:flex}.card-grid .card-key{color:#7f8c8d;white-space:nowrap;flex-shrink:0}.card-grid .card-val{color:#27ae60;text-align:right;white-space:normal;word-break:break-all;flex:0 auto;min-width:0;font-family:monospace}.card-grid .card-val.is-alarm{color:#c0392b;font-weight:600}.card-grid .card-val.is-running{color:#2980b9}.card-grid .card-val.is-empty{color:#bdc3c7}.card-foot{color:#95a5a6;border-top:1px dashed #eef2f6;justify-content:space-between;padding-top:6px;font-size:11px;display:flex}.card-limits{border-top:1px dashed #eef2f6;flex-direction:column;gap:6px;min-width:0;margin-top:4px;padding:8px 0 4px;display:flex}.card-limit-row{flex-wrap:wrap;align-items:center;gap:8px;min-width:0;display:flex}.card-limit-label{color:#7f8c8d;flex-shrink:0;min-width:64px;font-size:12px}.card-limit-btn{color:#3498db;cursor:pointer;white-space:nowrap;background:0 0;border:1px solid #3498db;border-radius:4px;padding:3px 8px;font-size:12px;line-height:1.2;transition:background-color .15s,color .15s}.card-limit-btn:hover{color:#fff;background:#3498db}.card-limit-btn:disabled{color:#bdc3c7;cursor:not-allowed;background:0 0;border-color:#bdc3c7}.card-limit-btn:active:not(:disabled){transform:scale(.95)}.param-list{grid-template-columns:1fr auto;gap:2px 12px;max-height:320px;padding-right:4px;font-size:13px;display:grid;overflow-y:auto}.param-list .param-row{display:contents}.param-list .param-key{color:#5d6d7e;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px dotted #eef2f6;padding:3px 0;overflow:hidden}.param-list .param-val{color:#27ae60;text-align:right;text-overflow:ellipsis;white-space:nowrap;border-bottom:1px dotted #eef2f6;padding:3px 0;font-family:monospace;overflow:hidden}.param-list .param-row:hover .param-key,.param-list .param-row:hover .param-val{background:#f8fafc}.param-list .param-val.is-empty{color:#bdc3c7}.panel-header-collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}.panel-body{min-width:0}.panel-collapse-btn,.card-collapse-btn{color:#64748b;cursor:pointer;background:0 0;border:1px solid #cbd5e1;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;padding:0;font-size:14px;line-height:1;transition:background-color .15s,color .15s,border-color .15s;display:inline-flex}.panel-collapse-btn:hover,.card-collapse-btn:hover{color:#3498db;background:#f8fafc;border-color:#3498db}.panel-collapse-btn:active,.card-collapse-btn:active{transform:scale(.95)}.panel-toolbar{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;grid-column:1/-1;align-items:center;gap:8px;padding:6px 12px;display:flex}.panel-toolbar-label{color:#7f8c8d;margin-right:4px;font-size:13px}.card-strip{scroll-snap-type:x proximity;touch-action:pan-x;-webkit-overflow-scrolling:touch;flex-direction:row;align-items:stretch;gap:12px;min-width:0;min-height:88px;padding:4px 2px 10px;display:flex;overflow:auto hidden}.card-strip>.slave-card,.card-strip>.group-card{scroll-snap-align:start;flex:0 0 300px;width:auto;max-width:none}.card-strip>.placeholder{flex:1 0 100%;min-height:88px}.card-header{cursor:pointer;-webkit-user-select:none;user-select:none}.card-actions{align-items:center;gap:6px;display:flex}.slave-metrics{grid-template-columns:1fr 1fr;gap:10px 14px;min-width:0;padding:10px 0 4px;display:grid}.metric{flex-direction:column;gap:2px;min-width:0;display:flex}.metric-key{color:#7f8c8d;white-space:nowrap;font-size:11px}.metric-val{color:#27ae60;white-space:nowrap;text-overflow:ellipsis;font-family:monospace;font-size:17px;font-weight:600;overflow:hidden}.metric-val.is-empty{color:#bdc3c7;font-weight:400}.metric-val.is-alarm{color:#c0392b}.metric-val.is-running{color:#2980b9}.slave-subinfo{border-top:1px dashed #eef2f6;grid-template-columns:1fr 1fr;gap:6px 14px;min-width:0;margin-top:6px;padding-top:8px;font-size:12px;display:grid}.subinfo-row{justify-content:space-between;align-items:baseline;gap:8px;min-width:0;display:flex}.subinfo-key{color:#7f8c8d;white-space:nowrap;flex-shrink:0}.subinfo-val{color:#27ae60;text-align:right;text-overflow:ellipsis;white-space:nowrap;min-width:0;font-family:monospace;overflow:hidden}.subinfo-val.is-empty{color:#bdc3c7}.subinfo-val.is-alarm{color:#c0392b}.slave-card.is-alarm{border-color:#e74c3c}.slave-card.is-running{border-color:#2980b9}.hint-alarm{color:#c0392b;font-weight:600}.compare-summary{flex-wrap:wrap;gap:8px;margin:8px 0 4px;display:flex}.compare-chip{color:#c9d1d9;background:#2a2f3a;border-radius:12px;padding:4px 10px;font-size:12px}.compare-chip.is-normal{color:#4ade80;background:#12351f}.compare-chip.is-error{color:#f87171;background:#3b1212}.compare-chip.is-offline{color:#8b949e;background:#2a2f3a}.compare-stats{color:#8b949e;margin:0 0 12px;font-size:12px}.compare-blocks{grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));align-items:start;gap:16px;margin:12px 0 20px;display:grid}.compare-block{min-width:0}.compare-block h3{color:#2c3e50;margin:0 0 6px;font-size:14px}.compare-note{color:#5f6b7a;margin:0 0 8px;font-size:12px}.compare-table{touch-action:pan-x pan-y;background:#30363d;border:1px solid #30363d;gap:1px;max-height:420px;font-size:12px;display:grid;overflow:auto}.compare-cell{color:#c9d1d9;white-space:nowrap;background:#1c2128;padding:4px 8px}.compare-cell.compare-head{color:#e6edf3;z-index:1;background:#21262d;font-weight:600;position:sticky;top:0}.compare-cell.compare-addr{color:#8b949e}.compare-cell.compare-name{color:#e6edf3;text-overflow:ellipsis;overflow:hidden}.compare-cell.is-empty{color:#484f58}.compare-cell.is-undefined{color:#8b949e;font-style:italic}.compare-cell.is-unique{color:#a5d6ff}.compare-cell.is-diff{color:#ffa198;background:#541c1c}.compare-cell.is-diff-base{color:#c9d1d9;background:#341a1a}.compare-cell.is-natural-diff{color:#d29922;background:#3a2f12}.compare-cell.is-natural-base{color:#c9d1d9;background:#29261a}.compare-cell.is-import-diff{color:#ffa198;background:#541c1c;font-weight:600}.compare-cell.is-import-missing{color:#d29922;background:#3a2f12}.compare-block-wide{grid-column:1/-1}.compare-tool-btn{padding:4px 10px!important;font-size:12px!important}.compare-tool-btn:disabled{opacity:.45;cursor:not-allowed}#properties-container,#services-container,#sub-services-container,#log-container,.param-list{touch-action:pan-y}@media (width<=480px){.controls{grid-template-columns:1fr 1fr;gap:8px;display:grid}.controls>*{width:100%;min-height:44px;margin:0}.card-strip>.slave-card,.card-strip>.group-card{flex-basis:82vw}.panel-collapse-btn,.card-collapse-btn{width:36px;height:36px}.card-limit-btn{min-height:40px;padding:8px 12px}}
