:root{color-scheme:light;font-family:Segoe UI,system-ui,sans-serif;background:#f4f6fb;--primary: #2563eb;--primary-dark: #1e40af;--secondary: #64748b;--card: #ffffff;--border: #d1d5db;--shadow: 0 12px 30px rgba(15, 23, 42, .15)}*{box-sizing:border-box}html,body{height:100%;margin:0}body{display:flex;flex-direction:column;color:#0f172a}.canvas-toolbar-grid{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;justify-content:center}.canvas-toolbar-btn{width:40px;height:40px;min-width:40px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:0;line-height:0}.canvas-toolbar-btn .canvas-toolbar-icon{width:20px;height:20px;flex-shrink:0}.zoom-widget{display:flex;align-items:center;gap:.25rem;padding:4px;background:#f8fafc;border-radius:8px}.zoom-buttons{display:flex;flex-direction:row-reverse;gap:2px}.zoom-buttons .zoom-btn{width:36px;height:36px;min-width:36px;padding:0;display:flex;align-items:center;justify-content:center;border-radius:6px}.zoom-buttons .zoom-btn .canvas-toolbar-icon{width:18px;height:18px}.zoom-control{position:relative;display:flex;align-items:stretch;min-width:0;flex-shrink:0;height:40px}.zoom-level-input{width:56px;min-width:56px;height:40px;padding:0 8px 0 10px;border:1px solid var(--border);border-right:none;border-radius:8px 0 0 8px;font-size:.75rem;font-weight:600;color:#334155;text-align:center;background:#fff;font-family:inherit;box-sizing:border-box}.zoom-level-input:focus{outline:none;border-color:var(--primary);color:#0f1a2a}.zoom-level-input::placeholder{color:var(--secondary)}.zoom-dropdown-trigger{width:28px;min-width:28px;height:40px;padding:0;display:flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:0 8px 8px 0;background:#fff;color:var(--secondary);cursor:pointer;transition:background .15s ease,color .15s ease}.zoom-dropdown-trigger:hover{background:#f1f5f9;color:#0f1a2a}.zoom-control.open .zoom-dropdown-trigger,.zoom-level-input:focus+.zoom-dropdown-trigger{border-color:var(--primary);color:var(--primary)}.zoom-caret{width:16px;height:16px}.zoom-dropdown{position:absolute;top:100%;left:0;margin-top:4px;min-width:180px;box-sizing:border-box;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);padding:.25rem;z-index:1000;display:flex;flex-direction:column;align-items:stretch}.zoom-dropdown[hidden]{display:none}.zoom-dropdown-item{display:flex;align-items:center;justify-content:space-between;width:100%;padding:.5rem .75rem;border:none;background:transparent;color:#0f1a2a;text-align:left;cursor:pointer;border-radius:6px;font-size:.875rem;font-weight:500;font-family:inherit;transition:background .15s ease}.zoom-dropdown-item:hover{background:#2563eb1a;color:var(--primary)}.zoom-dropdown-item:active{background:#2563eb33}.zoom-dropdown-kbd{font-size:.7rem;color:var(--secondary);font-weight:500;margin-left:auto;padding-left:.5rem}.zoom-dropdown-separator{height:1px;background:var(--border);margin:.25rem 0}.pan-button.active{background:var(--primary);color:#fff}.pan-button.active:hover{background:var(--primary-dark)}.pan-button:not(.active){background:#e2e8f0;color:#0f172a}.pan-button:not(.active):hover{background:#cbd5f5}button{border:none;border-radius:999px;padding:.65rem 1.4rem;background:var(--primary);color:#fff;font-weight:600;cursor:pointer;transition:transform .2s ease,background .2s ease}button.secondary{background:#e2e8f0;color:#0f172a}button:hover{transform:translateY(-1px);background:var(--primary-dark)}button.secondary:hover{background:#cbd5f5}.app-shell{display:grid;grid-template-columns:280px 1fr auto;flex:1;min-height:0}.toolbar{padding:1.5rem;background:#f8fafc;border-right:1px solid var(--border)}.toolbar h1{margin-top:0;margin-bottom:1rem;font-size:1.75rem;font-weight:700;color:#0f172a}.toolbar-button{width:100%;margin:.4rem 0}.palette-search-container{position:relative;margin-top:1rem;width:100%}.palette-search-input{width:100%;padding:.6rem 2.5rem .6rem .75rem;border:1px solid var(--border);border-radius:8px;font-size:.9rem;font-family:inherit;background:var(--card);color:#0f172a;transition:border-color .2s ease,box-shadow .2s ease}.palette-search-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px #2563eb1a}.palette-search-input::placeholder{color:var(--secondary)}.palette-search-clear{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);width:24px;height:24px;border:none;background:transparent;color:var(--secondary);font-size:1.5rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:background-color .2s ease,color .2s ease;padding:0}.palette-search-clear:hover{background:#64748b1a;color:#0f172a;transform:translateY(-50%)}.palette-search-clear:active{background:#64748b33}.palette-menu{margin-top:1rem;max-height:calc(100vh - 300px);overflow-y:auto;overflow-x:hidden}.palette-menu::-webkit-scrollbar{width:6px}.palette-menu::-webkit-scrollbar-track{background:transparent}.palette-menu::-webkit-scrollbar-thumb{background:var(--border);border-radius:3px}.palette-menu::-webkit-scrollbar-thumb:hover{background:var(--secondary)}.palette-category-header{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:600;font-size:.9rem;color:var(--primary);border-radius:6px;transition:background-color .2s ease}.palette-category-header:hover{background-color:#2563eb1a}.palette-expand-icon{font-size:.7rem;width:12px;display:inline-block;transition:transform .2s ease}.palette-category-label{flex:1}.palette-provider-header{display:flex;align-items:center;gap:.5rem;padding:.4rem .75rem;cursor:pointer;-webkit-user-select:none;user-select:none;font-weight:500;font-size:.85rem;color:var(--secondary);border-radius:6px;transition:background-color .2s ease}.palette-provider-header:hover{background-color:#64748b1a}.palette-provider-label{flex:1}.palette-icons-container{margin-left:.5rem;margin-top:.25rem;display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-start}.palette-icon-item{display:flex;flex-direction:column;align-items:center;gap:.25rem;padding:.5rem .35rem;cursor:grab;border-radius:6px;min-width:56px;max-width:72px;flex:1 1 56px;transition:background-color .2s ease,transform .1s ease;-webkit-user-select:none;user-select:none;text-align:center}.palette-icon-item:hover{background-color:#2563eb1a;transform:translateY(-1px)}.palette-icon-item:active,.palette-icon-item.palette-dragging{cursor:grabbing}.palette-icon-thumbnail{width:24px;height:24px;flex-shrink:0;object-fit:contain}.palette-icon-label{font-size:.7rem;color:#0f172a;line-height:1.2;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word;width:100%}.palette-search-results{display:flex;flex-wrap:wrap;gap:.5rem;align-items:flex-start}.palette-search-result-item{padding:.5rem .35rem;min-width:56px;max-width:72px;flex:1 1 56px}.palette-search-result-item .palette-search-result-info{display:flex;flex-direction:column;gap:.1rem;align-items:center;min-width:0;width:100%}.palette-search-result-item .palette-icon-label{text-align:center}.palette-search-result-meta{font-size:.6rem;color:var(--secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%;text-align:center}.palette-load-more{width:100%;margin-top:.5rem;padding:.5rem .75rem;background:#e2e8f0;color:#0f172a;border:none;border-radius:6px;font-size:.85rem;font-weight:500;cursor:pointer;transition:background-color .2s ease,transform .1s ease}.palette-load-more:hover{background:#cbd5f5;transform:translateY(-1px)}.palette-load-more:active{transform:translateY(0)}.palette-no-results{padding:2rem 1rem;text-align:center;color:var(--secondary);font-size:.9rem}.hint{font-size:.85rem;color:var(--secondary)}.canvas-toolbar{display:flex;flex-direction:column;gap:1rem;padding:1rem;background:#f8fafc;border-left:1px solid var(--border);min-width:200px;width:200px}.canvas-toolbar .canvas-toolbar-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.canvas-toolbar .canvas-toolbar-btn:disabled:hover{transform:none}.properties-panel{display:flex;flex-direction:column;gap:.5rem;padding-top:.5rem;border-top:1px solid var(--border)}.properties-panel[hidden],.properties-single[hidden],.properties-multi[hidden]{display:none}.properties-single,.properties-multi{display:flex;flex-direction:column;gap:.25rem}.properties-panel label{font-size:.875rem;font-weight:500;color:var(--primary)}.properties-name-input{width:100%;padding:.375rem .5rem;font-size:.875rem;border:1px solid var(--border);border-radius:6px;background:#fff;box-sizing:border-box}.properties-name-input:focus{outline:none;border-color:var(--primary)}.properties-tooltip-input{width:100%;min-height:4.5rem;padding:.375rem .5rem;font-size:.875rem;font-family:inherit;border:1px solid var(--border);border-radius:6px;background:#fff;box-sizing:border-box;resize:vertical}.properties-tooltip-input:focus{outline:none;border-color:var(--primary)}.properties-zone-color-row[hidden]{display:none}.properties-zone-color-row{display:flex;flex-direction:column;gap:.25rem}.properties-zone-color-input{width:100%;height:2rem;padding:.125rem;font-size:.875rem;border:1px solid var(--border);border-radius:6px;background:#fff;box-sizing:border-box;cursor:pointer}.properties-zone-color-input:focus{outline:none;border-color:var(--primary)}.properties-icon-row[hidden]{display:none}.properties-icon-row{display:flex;flex-direction:column;gap:.25rem}.properties-icon-upload-btn{width:100%;padding:.375rem .5rem;font-size:.875rem;border:1px solid var(--border);border-radius:6px;background:#fff;color:var(--primary);cursor:pointer}.properties-icon-upload-btn:hover{background:var(--border)}.properties-icon-upload-btn:focus{outline:none;border-color:var(--primary)}.properties-multi{font-size:.875rem;color:var(--secondary)}.canvas-area{display:flex;padding:1.5rem;min-height:0}.canvas{position:relative;flex:1;height:100%;min-height:720px;border-radius:24px;box-shadow:var(--shadow);overflow:hidden}#canvas:focus{outline:none}.canvas.pan-mode{cursor:grab}.canvas.pan-mode.panning{cursor:grabbing}#zoom-container{position:absolute;inset:0;min-width:10000px;min-height:10000px;width:100%;height:100%;transform-origin:0 0;background:transparent;overflow:visible}#zoom-container:before{content:"";position:absolute;left:-50000px;top:-50000px;width:100000px;height:100000px;background:linear-gradient(90deg,rgba(148,163,184,.25) 1px,transparent 1px),linear-gradient(rgba(148,163,184,.25) 1px,transparent 1px);background-size:28px 28px;background-repeat:repeat;background-position:0 0;pointer-events:none;z-index:-1}#connection-layer{position:absolute;inset:0;width:50000px;height:50000px;pointer-events:none;z-index:10}#connection-layer .connection-line{pointer-events:stroke;cursor:pointer}#connection-layer .connection-delete-button{pointer-events:all;cursor:pointer}#node-layer{position:absolute;inset:0}.node,.container{position:absolute;display:flex;align-items:center;gap:.4rem;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:.6rem .8rem;min-width:140px;cursor:grab;box-shadow:0 8px 16px #0f172a1a}.node:focus,.container:focus,.node.active,.container.active{outline:2px solid var(--primary)}.node-delete-button{position:absolute;top:-8px;right:-8px;width:20px;height:20px;border-radius:50%;background:#ef4444;color:#fff;border:2px solid white;font-size:14px;font-weight:700;line-height:1;cursor:pointer;display:none;align-items:center;justify-content:center;padding:0;box-shadow:0 2px 4px #0003;transition:transform .15s ease,background .15s ease,box-shadow .15s ease;z-index:10;-webkit-user-select:none;user-select:none}.node-delete-button:hover{background:#dc2626;transform:scale(1.1);box-shadow:0 3px 6px #0000004d}.node-delete-button:active{transform:scale(.95)}.node:hover .node-delete-button,.container:hover .node-delete-button,.node:focus .node-delete-button,.container:focus .node-delete-button,.node.active .node-delete-button,.container.active .node-delete-button{display:flex}.palette-drag-skeleton .node-delete-button{display:none!important}.node-icon,.container-icon{width:24px;height:24px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;font-size:.9rem;flex-shrink:0;overflow:hidden;cursor:pointer;transition:opacity .2s ease,background-color .2s ease,border-color .2s ease}.node-icon svg,.container-icon svg{width:100%;height:100%;display:block;flex-shrink:0}.palette-drag-skeleton{background:#e2e8f0!important;border:1px dashed #94a3b8!important;opacity:.65;pointer-events:none;z-index:1000;cursor:grabbing!important}.palette-drag-skeleton .node-icon{background:#cbd5e1;opacity:.8}.palette-drag-skeleton .node-label{color:#64748b;opacity:.8}.selection-rectangle{position:absolute;border:2px dashed var(--primary);background:#2563eb1a;pointer-events:none;z-index:100;box-sizing:border-box}.node-icon img,.container-icon img{width:100%;height:100%;object-fit:contain;display:block}.node[data-type=database] .node-icon{background:#fee2e2}.node[data-type=gateway] .node-icon{background:#e0f2fe}.node[data-type=text] .node-icon.icon-placeholder{background:#f1f5f9;border:1px dashed #cbd5e1;cursor:pointer;transition:background-color .2s ease,border-color .2s ease}.node[data-type=text] .node-icon.icon-placeholder:hover{background:#e2e8f0;border-color:#94a3b8}.node-icon:hover,.container-icon:hover{opacity:.7}.node[data-type=text] .node-icon:has(svg),.node[data-type=text] .node-icon:has(img),.container-icon:has(svg),.container-icon:has(img){cursor:pointer}.node[data-type=text] .node-icon:has(svg),.node[data-type=text] .node-icon:has(img){background:transparent;border:none}.node-label{font-weight:600;-webkit-user-select:none;user-select:none}.container{padding:.8rem 1rem 2.4rem;border:2px dashed #93c5fd;background:#dbeafe66;min-width:220px;min-height:180px;flex-direction:column;align-items:flex-start;cursor:default}.container-header{display:flex;align-items:center;gap:.4rem}.container .color-picker{position:absolute;right:8px;bottom:8px;width:24px;height:24px;padding:0;border:2px solid #fff;border-radius:4px;cursor:pointer;z-index:10;box-shadow:0 2px 4px #0003;transition:transform .15s ease,box-shadow .15s ease}.container .color-picker:hover{transform:scale(1.1);box-shadow:0 4px 8px #0000004d}.container .color-picker::-webkit-color-swatch-wrapper{padding:0}.container .color-picker::-webkit-color-swatch{border:none;border-radius:2px}.container .color-picker::-moz-color-swatch{border:none;border-radius:2px}.container .node-label{font-weight:700}.connection-preview{stroke:#1e40af;stroke-width:2;fill:none;marker-end:url(#arrow)}.connection-line{stroke:#0f172a;stroke-width:2;fill:none;marker-end:url(#arrow);pointer-events:stroke;cursor:pointer}.connection-line.selected{stroke:#2563eb;stroke-width:3;stroke-dasharray:5,5}.connection-delete-button{cursor:pointer;pointer-events:all;z-index:1000}.connection-delete-button circle{transition:fill .15s ease,stroke .15s ease}.connection-delete-button:hover circle{fill:#fee2e2;stroke:#dc2626}.connection-delete-button path{transition:stroke .15s ease}.connection-delete-button:hover path{stroke:#dc2626;stroke-width:2}.connection-marker{position:absolute;width:16px;height:16px;cursor:grab;display:none;align-items:center;justify-content:center;z-index:5;pointer-events:auto;-webkit-user-select:none;user-select:none}.connection-marker:active{cursor:grabbing}.node:hover .connection-marker,.container:hover .connection-marker,.node.connection-target .connection-marker,.container.connection-target .connection-marker{display:flex}.connection-marker-x{width:12px;height:12px;position:relative;display:flex;align-items:center;justify-content:center}.connection-marker-x:before,.connection-marker-x:after{content:"";position:absolute;background:#3b82f6;border-radius:1px}.connection-marker-x:before{width:2px;height:12px;transform:rotate(45deg)}.connection-marker-x:after{width:2px;height:12px;transform:rotate(-45deg)}.connection-marker:hover .connection-marker-x:before,.connection-marker:hover .connection-marker-x:after{background:#2563eb;width:2.5px}.context-menu{position:fixed;background:var(--card);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow);padding:.25rem;min-width:160px;z-index:10000;display:none;flex-direction:column;align-items:stretch}.context-menu-item{display:block;width:100%;padding:.6rem .9rem;border:none;background:transparent;color:#0f172a;text-align:left;cursor:pointer;border-radius:6px;font-size:.9rem;font-weight:500;transition:background-color .15s ease;font-family:inherit}.context-menu-item:hover:not(:disabled){background:#2563eb1a;color:var(--primary)}.context-menu-item:disabled{opacity:.5;cursor:not-allowed}.context-menu-item:active:not(:disabled){background:#2563eb33}@media(max-width:900px){.app-shell{grid-template-columns:1fr}.toolbar{border-right:none;border-bottom:1px solid var(--border)}.canvas-toolbar{border-left:none;border-top:1px solid var(--border);min-width:auto}}.restore-prompt-overlay{position:fixed;inset:0;background:#0f172a99;display:flex;align-items:center;justify-content:center;z-index:1000;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.restore-prompt-dialog{background:var(--card);border-radius:12px;padding:2rem;max-width:400px;width:90%;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:1.5rem}.restore-prompt-title{margin:0;font-size:1.5rem;font-weight:600;color:#0f172a}.restore-prompt-message{margin:0;color:#64748b;line-height:1.6}.restore-prompt-buttons{display:flex;gap:.75rem;justify-content:flex-end;margin-top:.5rem}.restore-prompt-button{padding:.65rem 1.4rem;border:none;border-radius:8px;font-size:.9375rem;font-weight:500;cursor:pointer;transition:transform .15s ease,background-color .15s ease}.restore-prompt-button:hover{transform:translateY(-1px)}.restore-prompt-button:active{transform:translateY(0)}.restore-prompt-button-primary{background:var(--primary);color:#fff}.restore-prompt-button-primary:hover{background:var(--primary-dark)}.restore-prompt-button-secondary{background:#e2e8f0;color:#0f172a}.restore-prompt-button-secondary:hover{background:#cbd5f5}
