*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;background:#f5f5f5;color:#333}#app{display:flex;flex-direction:column;height:100vh;width:100vw}.app-header{background:#fff;border-bottom:1px solid #ddd;padding:12px 16px;display:flex;align-items:center;gap:24px;box-shadow:0 1px 2px #0000000d}.app-header-title{display:flex;align-items:baseline;gap:8px;flex-shrink:0;margin-right:auto}.app-header h1{font-size:24px;font-weight:600;margin:0;display:flex;align-items:baseline;gap:12px}.branding-inline{font-size:11px;color:#999;font-weight:400;letter-spacing:0px;text-transform:none}.layout-name{font-size:12px;color:#666;font-weight:400;margin:2px 0 0}.app-branding{font-size:11px;color:#999;font-weight:500;letter-spacing:.5px;text-transform:uppercase;margin:2px 0 0}.toolbar-group{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding:4px 8px;border-right:1px solid #e0e0e0;position:relative;width:fit-content}.toolbar-group:first-of-type{border-right:1px solid #e0e0e0;margin-left:0}.toolbar-group:last-of-type{border-right:none;margin-right:0}.toolbar-group.toolbar-center{flex:none;justify-content:center;border-left:none;border-right:1px solid #e0e0e0;padding:4px 12px}.toolbar-group.toolbar-right{border-left:none;border-right:none;padding:4px 12px;margin-left:0}.toolbar-label{font-size:11px;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.3px;white-space:nowrap;width:100%;text-align:center;order:-1;flex-basis:100%}.icon-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid #d0d0d0;border-radius:5px;background:#fff;color:#333;cursor:pointer;transition:all .15s ease;flex-shrink:0}.icon-btn .icon{width:18px;height:18px;display:flex;align-items:center;justify-content:center}.icon-btn:hover{background:#f5f5f5;border-color:#999;box-shadow:0 1px 2px #00000014}.icon-btn:active{background:#efefef}.icon-btn.active{background:#e3f2fd;border-color:#60a5fa;color:#06c}.app-container{display:flex;flex:1;overflow:hidden}.sidebar{width:280px;background:#fff;border-right:1px solid #ddd;overflow-y:auto;padding:12px}.canvas-container{flex:1;background:#fafafa;position:relative}.cards-panel{width:300px;background:var(--u2-bg);border-left:1px solid var(--u2-border);overflow-y:auto;display:flex;flex-direction:column;flex:0 0 auto;min-height:0}.info-panel{width:280px;background:#fff;border-left:1px solid #ddd;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:16px}.info-section{display:flex;flex-direction:column;gap:8px}.info-section h3{font-size:13px;font-weight:600;color:#666;text-transform:uppercase;letter-spacing:.5px}.info-items{display:flex;flex-direction:column;gap:4px}.info-item{display:flex;justify-content:space-between;font-size:12px;padding:4px 8px;background:#f9f9f9;border-radius:3px;border:1px solid #efefef}.info-item-label{color:#666}.info-item-value{font-weight:600;color:#06c}.info-category{margin-bottom:12px;padding:8px;background:#f9f9f9;border-left:3px solid #0066cc;border-radius:3px}.info-category-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:12px;font-weight:600;color:#333;text-transform:uppercase;letter-spacing:.5px}.info-category-name{color:#06c}.info-category-total{background:#e8f0ff;color:#06c;padding:2px 6px;border-radius:2px;font-size:11px}.info-category-items{display:flex;flex-direction:column;gap:4px}.dx-canvas{display:block}.dx-overlay-host{position:absolute;top:0;left:0;right:0;bottom:0}.library-header{margin-bottom:16px;display:flex;flex-direction:column;gap:8px}.library-header h3{font-size:14px;font-weight:600}.library-search{padding:8px 10px;border:1px solid #ddd;border-radius:4px;font-size:13px;font-family:inherit;width:100%}.library-search:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 2px #60a5fa1a}.library-empty{grid-column:1 / -1;text-align:center;color:#999;font-size:13px;padding:20px}.library-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:12px}.library-card{background:#f9f9f9;border:1px solid #ddd;border-radius:4px;padding:8px;cursor:grab;transition:all .2s;display:flex;flex-direction:column;gap:8px}.library-card:hover{border-color:#06c;background:#f0f7ff}.library-card:active{cursor:grabbing}.library-card img{width:100%;height:120px;object-fit:contain;background:#fff;border:1px solid #e0e0e0;border-radius:2px}.card-info{font-size:11px}.card-info h4{font-size:12px;font-weight:600;margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-info p{color:#999;font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.dialog-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0000004d;display:flex;align-items:center;justify-content:center;z-index:1000}.dialog{background:#fff;border-radius:6px;box-shadow:0 4px 16px #00000026;padding:24px;max-width:400px;width:90%}.dialog h2{font-size:16px;font-weight:600;margin-bottom:16px}.form-group{margin-bottom:16px}.form-group label{display:block;font-size:12px;font-weight:600;margin-bottom:6px;color:#333}.form-group input,.form-group select{width:100%;padding:8px 10px;border:1px solid #ddd;border-radius:4px;font-size:13px;font-family:inherit}.form-group input:focus,.form-group select:focus{outline:none;border-color:#06c;box-shadow:0 0 0 2px #0066cc1a}.dialog-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:24px}.dialog-actions button{padding:8px 16px}.notification{position:fixed;bottom:20px;right:20px;background:#333;color:#fff;padding:12px 16px;border-radius:4px;font-size:13px;z-index:2000;animation:slideIn .3s ease-out}@keyframes slideIn{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.notification.success{background:#22c55e}.notification.error{background:#ef4444}.text-editor-panel{display:flex;align-items:center;gap:8px;margin-left:0;border-left:1px solid #e0e0e0;padding:0 0 0 12px;position:relative;width:auto}.text-editor-panel label{font-size:12px;font-weight:500;color:#666;white-space:nowrap}.text-editor-input{padding:6px 10px;border:1px solid #ccc;border-radius:4px;font-family:inherit;font-size:14px;width:140px;min-width:140px}.text-editor-input:focus{outline:none;border-color:#60a5fa;box-shadow:0 0 0 2px #60a5fa1a}.load-layouts-modal{background:#fff;border-radius:8px;box-shadow:0 20px 25px #00000026;padding:0;max-width:500px;width:90%;max-height:80vh;display:flex;flex-direction:column}.load-layouts-modal-header{padding:20px 24px;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between}.load-layouts-modal-header h2{font-size:18px;font-weight:600;margin:0;color:#111}.load-layouts-modal-header button{background:none;border:none;font-size:24px;cursor:pointer;color:#666;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:background .2s}.load-layouts-modal-header button:hover{background:#f3f4f6}.load-layouts-modal-content{flex:1;overflow-y:auto;padding:16px}.layouts-empty{text-align:center;padding:40px 20px;color:#999}.layouts-empty p{margin:0;font-size:14px}.layout-item{display:flex;align-items:center;justify-content:space-between;padding:12px;border:1px solid #e5e7eb;border-radius:6px;margin-bottom:8px;transition:all .2s}.layout-item:hover{background:#f9fafb;border-color:#d1d5db}.layout-item-info{flex:1;min-width:0;cursor:pointer;padding-right:12px}.layout-item-name{font-size:14px;font-weight:500;color:#111;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:4px}.layout-item-date{font-size:12px;color:#999}.layout-item-actions{display:flex;gap:6px}.layout-item-btn{padding:6px 8px;border:1px solid #d1d5db;background:#fff;border-radius:4px;cursor:pointer;font-size:12px;transition:all .2s;white-space:nowrap}.layout-item-btn:hover{background:#f3f4f6;border-color:#9ca3af}.layout-item-btn.load{background:#06c;color:#fff;border-color:#06c}.layout-item-btn.load:hover{background:#0052a3;border-color:#0052a3}.layout-item-btn.rename:hover{background:#eff6ff;border-color:#60a5fa;color:#06c}.layout-item-btn.delete:hover{background:#fef2f2;border-color:#fca5a5;color:#dc2626}.modal-input-group{display:flex;gap:8px;margin-bottom:8px}.modal-input-group input{flex:1;padding:8px 10px;border:1px solid #d1d5db;border-radius:4px;font-size:13px;font-family:inherit}.modal-input-group input:focus{outline:none;border-color:#06c;box-shadow:0 0 0 2px #0066cc1a}.modal-input-group button{padding:8px 12px;border:1px solid #d1d5db;background:#f3f4f6;border-radius:4px;cursor:pointer;font-size:12px;font-weight:500;transition:all .2s}.modal-input-group button:hover{background:#e5e7eb;border-color:#9ca3af}.modal-input-group button.confirm{background:#06c;color:#fff;border-color:#06c}.modal-input-group button.confirm:hover{background:#0052a3;border-color:#0052a3}.modal-input-group button.cancel{background:#e5e7eb;color:#666;border-color:#d1d5db}.modal-input-group button.cancel:hover{background:#d1d5db;border-color:#9ca3af}.cable-properties-panel{position:fixed;bottom:20px;right:20px;background:#fff;border:1px solid #ddd;border-radius:8px;padding:16px;box-shadow:0 4px 12px #00000026;max-width:300px;max-height:70vh;overflow-y:auto;z-index:1000;display:none}.cable-properties{display:flex;flex-direction:column;gap:12px}.cable-properties h3{font-size:16px;font-weight:600;margin:0;padding-bottom:8px;border-bottom:1px solid #eee}.cable-properties .property-group{display:flex;flex-direction:column;gap:4px}.cable-properties .property-group label{font-size:12px;font-weight:500;color:#666;text-transform:uppercase;letter-spacing:.5px}.cable-properties .form-input{padding:6px 8px;border:1px solid #ccc;border-radius:4px;font-size:13px;font-family:inherit}.cable-properties .form-input:focus{outline:none;border-color:#06c;box-shadow:0 0 0 2px #0066cc1a}.cable-properties textarea{resize:vertical;min-height:50px;font-family:inherit}.cable-properties input[type=checkbox]{width:16px;height:16px;cursor:pointer}.cable-properties input[type=range]{cursor:pointer}#tension-value{text-align:right;font-size:12px}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:#fff;border-radius:8px;box-shadow:0 10px 40px #0003;max-width:500px;width:90%;max-height:80vh;overflow-y:auto}.modal-header{padding:20px;border-bottom:1px solid #eee}.modal-header h2{margin:0;font-size:18px;font-weight:600;color:#333}.modal-body{padding:20px;display:flex;flex-direction:column;gap:16px}.form-group{display:flex;flex-direction:column;gap:6px}.form-group label{font-size:12px;font-weight:500;color:#666;text-transform:uppercase;letter-spacing:.5px}.form-input{padding:8px 12px;border:1px solid #ccc;border-radius:4px;font-size:13px;font-family:inherit}.form-input:focus{outline:none;border-color:#06c;box-shadow:0 0 0 2px #0066cc1a}.modal-body textarea{resize:vertical;font-family:inherit}.modal-footer{padding:16px 20px;border-top:1px solid #eee;display:flex;gap:8px;justify-content:flex-end}.btn{padding:8px 16px;border:none;border-radius:4px;font-size:13px;font-weight:500;cursor:pointer;transition:all .2s}.btn-primary{background-color:#06c;color:#fff}.btn-primary:hover{background-color:#0052a3}.btn-secondary{background-color:#f0f0f0;color:#333}.btn-secondary:hover{background-color:#e0e0e0}:root{--u2-bg: #f8f9fa;--u2-surface: #ffffff;--u2-surface-alt: #f3f4f6;--u2-border: #e5e7eb;--u2-border-strong: #d1d5db;--u2-text: #111827;--u2-text-muted: #6b7280;--u2-accent: #2563eb;--u2-accent-hover: #1d4ed8;--u2-accent-light: rgba(37, 99, 235, .1);--u2-gap: 6px;--u2-gap-lg: 8px;--u2-pad: 8px;--u2-pad-lg: 12px;--u2-radius: 6px;--u2-radius-lg: 8px;--u2-control-height: 32px;--u2-font-size-sm: 10px;--u2-font-size-base: 11px;--u2-font-size-lg: 12px;--u2-font-weight-normal: 400;--u2-font-weight-medium: 500;--u2-font-weight-bold: 600}.u2-cards-panel{display:flex;flex-direction:column;gap:var(--u2-gap-lg);padding:var(--u2-pad-lg);background:var(--u2-bg);overflow-y:auto;flex:1;min-height:0}.u2-cards-search-wrapper{position:sticky;top:0;background:var(--u2-bg);padding-bottom:var(--u2-gap-lg);z-index:10}.u2-cards-search-input{width:100%;padding:var(--u2-pad) var(--u2-pad-lg);font-size:var(--u2-font-size-base);border:1px solid var(--u2-border);border-radius:var(--u2-radius);background:var(--u2-surface);color:var(--u2-text);outline:none;transition:all .15s ease}.u2-cards-search-input:focus{border-color:var(--u2-accent);box-shadow:0 0 0 2px var(--u2-accent-light)}.u2-cards-search-input::placeholder{color:var(--u2-text-muted)}.u2-cards-container{display:flex;flex-direction:column;gap:var(--u2-gap-lg)}.u2-card{background:var(--u2-surface);border:1px solid var(--u2-border);border-radius:var(--u2-radius-lg);overflow:hidden;box-shadow:0 1px 2px #0000000d;transition:box-shadow .2s ease;flex-shrink:0}.u2-card:hover{box-shadow:0 2px 4px #00000014}.u2-card-header{padding:var(--u2-pad);border-bottom:1px solid var(--u2-border);background:var(--u2-surface-alt)}.u2-card-collapsible .u2-card-header{cursor:pointer;-webkit-user-select:none;user-select:none}.u2-card-collapsible .u2-card-header:hover{background:#eef2ff}.u2-card-title{margin:0;font-size:var(--u2-font-size-lg);font-weight:var(--u2-font-weight-bold);color:var(--u2-text)}.u2-card-body{padding:var(--u2-pad);display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--u2-gap-lg)}.u2-card-collapsed .u2-card-body{display:none}.u2-control-row{display:flex;flex-direction:column;gap:var(--u2-gap)}.u2-button-row{flex-direction:row;gap:var(--u2-gap)}.u2-btn{flex:1;min-width:65px;padding:5px 3px;height:auto;border:none;border-radius:var(--u2-radius);background:transparent;color:var(--u2-text);font-size:10px;font-weight:var(--u2-font-weight-medium);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;transition:all .15s ease;text-align:center;letter-spacing:.5px}.u2-btn:hover:not(:disabled){background:var(--u2-accent-light);color:var(--u2-accent)}.u2-btn:active:not(:disabled){transform:scale(.95)}.u2-btn:disabled{opacity:.4;cursor:not-allowed}.u2-btn:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--u2-accent)}.u2-toggle-btn--on{background:var(--u2-accent-light);color:var(--u2-accent)}.u2-toggle-btn--on:hover:not(:disabled){background:#2563eb33;color:var(--u2-accent-hover)}.u2-btn-icon{width:20px;height:20px;stroke:currentColor;stroke-width:2;fill:none}.u2-btn svg{width:20px;height:20px;stroke:currentColor;stroke-width:2;fill:none}.u2-btn-text{font-size:9px;line-height:1.1;word-break:break-word;max-width:50px}.u2-pill-row{flex-direction:row;align-items:center;justify-content:space-between;padding:var(--u2-gap);background:var(--u2-surface-alt);border-radius:var(--u2-radius);border:1px solid var(--u2-border)}.u2-pill-label{font-size:var(--u2-font-size-sm);font-weight:var(--u2-font-weight-medium);color:var(--u2-text-muted);text-transform:uppercase;letter-spacing:.5px}.u2-pill{font-size:var(--u2-font-size-lg);font-weight:var(--u2-font-weight-bold);color:var(--u2-text);white-space:nowrap}.u2-number-row{align-items:flex-start}.u2-number-label,.u2-range-label{font-size:var(--u2-font-size-sm);font-weight:var(--u2-font-weight-medium);color:var(--u2-text-muted);text-transform:uppercase;letter-spacing:.5px}.u2-input{width:100%;padding:6px 10px;height:var(--u2-control-height);border:1px solid var(--u2-border);border-radius:var(--u2-radius);background:var(--u2-surface);color:var(--u2-text);font-size:var(--u2-font-size-base);transition:border-color .15s ease,box-shadow .15s ease}.u2-input:focus{outline:none;border-color:var(--u2-accent);box-shadow:0 0 0 3px var(--u2-accent-light)}.u2-input:disabled{background:var(--u2-surface-alt);color:var(--u2-text-muted);cursor:not-allowed}.u2-select-row{flex-direction:column;gap:var(--u2-gap)}.u2-select-label{font-size:var(--u2-font-size-sm);font-weight:var(--u2-font-weight-medium);color:var(--u2-text-muted);text-transform:uppercase;letter-spacing:.5px}.u2-select{width:100%;padding:6px 10px;height:var(--u2-control-height);border:1px solid var(--u2-border);border-radius:var(--u2-radius);background:var(--u2-surface);color:var(--u2-text);font-size:var(--u2-font-size-base);transition:border-color .15s ease,box-shadow .15s ease;cursor:pointer}.u2-select:focus{outline:none;border-color:var(--u2-accent);box-shadow:0 0 0 3px var(--u2-accent-light)}.u2-select:disabled{background:var(--u2-surface-alt);color:var(--u2-text-muted);cursor:not-allowed}.u2-range-row{flex-direction:row;align-items:center;gap:var(--u2-gap-lg)}.u2-slider{flex:1;height:4px;border-radius:2px;background:var(--u2-border);outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.u2-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:16px;height:16px;border-radius:50%;background:var(--u2-accent);cursor:pointer;box-shadow:0 2px 4px #0000001a;transition:all .15s ease}.u2-slider::-webkit-slider-thumb:hover{background:var(--u2-accent-hover);box-shadow:0 2px 8px #2563eb4d}.u2-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;border:none;background:var(--u2-accent);cursor:pointer;box-shadow:0 2px 4px #0000001a;transition:all .15s ease}.u2-slider::-moz-range-thumb:hover{background:var(--u2-accent-hover);box-shadow:0 2px 8px #2563eb4d}.u2-range-value{min-width:40px;text-align:right;font-size:var(--u2-font-size-base);font-weight:var(--u2-font-weight-bold);color:var(--u2-text)}#cables .u2-card-body .u2-btn{flex:0 0 100%}.u2-list-wrapper{display:flex;flex-direction:column;gap:var(--u2-gap-lg)}.u2-list-label{font-size:var(--u2-font-size-base);font-weight:var(--u2-font-weight-medium);color:var(--u2-text);text-transform:uppercase;letter-spacing:.5px}.u2-list{display:flex;flex-direction:column;gap:var(--u2-gap)}.u2-list-item{display:flex;align-items:center;gap:var(--u2-gap-lg);padding:var(--u2-pad) var(--u2-pad-lg);background:var(--u2-surface);border:1px solid var(--u2-border);border-radius:var(--u2-radius);cursor:pointer;font-size:var(--u2-font-size-base);color:var(--u2-text);transition:all .15s ease}.u2-list-item-icon{flex:0 0 20px;width:20px;height:20px;opacity:.7;fill:currentColor}.u2-list-item-text{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.u2-list-item:hover{background:var(--u2-accent-light);border-color:var(--u2-accent);color:var(--u2-accent)}.u2-list-item:hover .u2-list-item-icon{opacity:1}.u2-list-item.active{background:var(--u2-accent);border-color:var(--u2-accent);color:var(--u2-surface);font-weight:var(--u2-font-weight-medium)}
