.vue-flow{position:relative;width:100%;height:100%;overflow:hidden;z-index:0;direction:ltr}.vue-flow__container{position:absolute;height:100%;width:100%;left:0;top:0}.vue-flow__pane{z-index:1}.vue-flow__pane.draggable{cursor:grab}.vue-flow__pane.selection{cursor:pointer}.vue-flow__pane.dragging{cursor:grabbing}.vue-flow__transformationpane{transform-origin:0 0;z-index:2;pointer-events:none}.vue-flow__viewport{z-index:4;overflow:clip}.vue-flow__selection{z-index:6}.vue-flow__edge-labels{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible{outline:none}.vue-flow .vue-flow__edges{pointer-events:none;overflow:visible}.vue-flow__edge-path,.vue-flow__connection-path{stroke:#b1b1b7;stroke-width:1;fill:none}.vue-flow__edge{pointer-events:visibleStroke;cursor:pointer}.vue-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__edge.animated path.vue-flow__edge-interaction{stroke-dasharray:none;animation:none}.vue-flow__edge.inactive{pointer-events:none}.vue-flow__edge.selected,.vue-flow__edge:focus,.vue-flow__edge:focus-visible{outline:none}.vue-flow__edge.selected .vue-flow__edge-path,.vue-flow__edge:focus .vue-flow__edge-path,.vue-flow__edge:focus-visible .vue-flow__edge-path{stroke:#555}.vue-flow__edge-textwrapper{pointer-events:all}.vue-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vue-flow__connection{pointer-events:none}.vue-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.vue-flow__connectionline{z-index:1001}.vue-flow__nodes{pointer-events:none;transform-origin:0 0}.vue-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.vue-flow__node.draggable{cursor:grab;pointer-events:all}.vue-flow__node.draggable.dragging{cursor:grabbing}.vue-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.vue-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.vue-flow__nodesselection-rect.dragging{cursor:grabbing}.vue-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px}.vue-flow__handle.connectable{pointer-events:all;cursor:crosshair}.vue-flow__handle-bottom{left:50%;bottom:0;transform:translate(-50%,50%)}.vue-flow__handle-top{left:50%;top:0;transform:translate(-50%,-50%)}.vue-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.vue-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.vue-flow__edgeupdater{cursor:move;pointer-events:all}.vue-flow__panel{position:absolute;z-index:5;margin:15px}.vue-flow__panel.top{top:0}.vue-flow__panel.bottom{bottom:0}.vue-flow__panel.left{left:0}.vue-flow__panel.right{right:0}.vue-flow__panel.center{left:50%;transform:translate(-50%)}@keyframes dashdraw{0%{stroke-dashoffset:10}}:root{--vf-node-bg: #fff;--vf-node-text: #222;--vf-connection-path: #b1b1b7;--vf-handle: #555}.vue-flow__edge.updating .vue-flow__edge-path{stroke:#777}.vue-flow__edge-text{font-size:10px}.vue-flow__edge-textbg{fill:#fff}.vue-flow__connection-path{stroke:var(--vf-connection-path)}.vue-flow__node{cursor:grab}.vue-flow__node.selectable:focus,.vue-flow__node.selectable:focus-visible{outline:none}.vue-flow__node-default,.vue-flow__node-input,.vue-flow__node-output{padding:10px;border-radius:3px;width:150px;font-size:12px;text-align:center;border-width:1px;border-style:solid;color:var(--vf-node-text);background-color:var(--vf-node-bg);border-color:var(--vf-node-color)}.vue-flow__node-default.selected,.vue-flow__node-default.selected:hover,.vue-flow__node-input.selected,.vue-flow__node-input.selected:hover,.vue-flow__node-output.selected,.vue-flow__node-output.selected:hover{box-shadow:0 0 0 .5px var(--vf-box-shadow)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible,.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible,.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid #555}.vue-flow__node-default .vue-flow__handle,.vue-flow__node-input .vue-flow__handle,.vue-flow__node-output .vue-flow__handle{background:var(--vf-handle)}.vue-flow__node-default.selectable:hover,.vue-flow__node-input.selectable:hover,.vue-flow__node-output.selectable:hover{box-shadow:0 1px 4px 1px #00000014}.vue-flow__node-input{--vf-node-color: var(--vf-node-color, #0041d0);--vf-handle: var(--vf-node-color, #0041d0);--vf-box-shadow: var(--vf-node-color, #0041d0);background:var(--vf-node-bg);border-color:var(--vf-node-color, #0041d0)}.vue-flow__node-input.selected,.vue-flow__node-input:focus,.vue-flow__node-input:focus-visible{outline:none;border:1px solid var(--vf-node-color, #0041d0)}.vue-flow__node-default{--vf-handle: var(--vf-node-color, #1a192b);--vf-box-shadow: var(--vf-node-color, #1a192b);background:var(--vf-node-bg);border-color:var(--vf-node-color, #1a192b)}.vue-flow__node-default.selected,.vue-flow__node-default:focus,.vue-flow__node-default:focus-visible{outline:none;border:1px solid var(--vf-node-color, #1a192b)}.vue-flow__node-output{--vf-handle: var(--vf-node-color, #ff0072);--vf-box-shadow: var(--vf-node-color, #ff0072);background:var(--vf-node-bg);border-color:var(--vf-node-color, #ff0072)}.vue-flow__node-output.selected,.vue-flow__node-output:focus,.vue-flow__node-output:focus-visible{outline:none;border:1px solid var(--vf-node-color, #ff0072)}.vue-flow__nodesselection-rect,.vue-flow__selection{background:#0059dc14;border:1px dotted rgba(0,89,220,.8)}.vue-flow__nodesselection-rect:focus,.vue-flow__nodesselection-rect:focus-visible,.vue-flow__selection:focus,.vue-flow__selection:focus-visible{outline:none}.vue-flow__handle{width:6px;height:6px;background:var(--vf-handle);border:1px solid #fff;border-radius:100%}:root{--bg-main: #f4f6f8;--bg-card: #ffffff;--text-main: #2d3436;--text-muted: #636e72;--border-color: #dfe6e9;--primary: #0984e3;--primary-hover: #74b9ff;--secondary: #636e72;--success: #00b894;--danger: #d63031;--warning-bg: #fff3cd;--warning-border: #ffeeba;--warning-text: #856404;--input-bg: #ffffff;--plot-bg: #ffffff}body.dark-mode{--bg-main: #151521;--bg-card: #1e1e2d;--text-main: #e4e6eb;--text-muted: #b0b3b8;--border-color: #32324b;--primary: #1b64a6;--primary-hover: #0984e3;--secondary: #474761;--success: #00b894;--danger: #f1416c;--warning-bg: #392f28;--warning-border: #f6c000;--warning-text: #f6c000;--input-bg: #2b2b40;--plot-bg: #2b2b40}body,html{margin:0!important;padding:0!important;width:100%!important;background-color:var(--bg-main)!important;color:var(--text-main);transition:all .3s}#app{width:100%!important;max-width:100%!important;padding:0!important;margin:0!important}.tab-menu{display:flex;background:var(--bg-card);padding:0 40px;border-bottom:2px solid var(--border-color);margin-bottom:20px;overflow-x:auto}.tab-btn{background:none;border:none;color:var(--text-muted);font-size:1.1rem;font-weight:700;padding:15px 25px;cursor:pointer;border-bottom:3px solid transparent;transition:.3s;white-space:nowrap}.tab-btn:hover{color:var(--primary)}.tab-btn.active{color:var(--primary);border-bottom-color:var(--primary)}.tab-content{animation:fadeIn .4s}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.mt-15{margin-top:15px}.mt-20{margin-top:20px}.mb-20{margin-bottom:20px}.w-150{width:150px}.flex-wrap{display:flex;flex-wrap:wrap}.items-center{align-items:center}.gap-15{gap:15px}.text-center{text-align:center}.app-wrapper{min-height:100vh;background-color:var(--bg-main);transition:all .3s}.container-fluid{padding:20px 40px;box-sizing:border-box;font-family:Segoe UI,Tahoma,sans-serif;color:var(--text-main)}.header-container{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}.main-title{color:var(--primary);margin:0}.btn-theme-toggle{background:var(--bg-card);color:var(--text-main);border:2px solid var(--border-color);padding:8px 16px;border-radius:20px;cursor:pointer;font-weight:700;transition:all .3s;box-shadow:0 2px 5px #0000001a}.btn-theme-toggle:hover{border-color:var(--primary)}.card{background:var(--bg-card);padding:25px;border-radius:12px;margin-bottom:25px;box-shadow:0 4px 15px #0000000d;border:1px solid var(--border-color);width:100%;box-sizing:border-box;transition:all .3s}.card h2{font-size:1.2rem;color:var(--primary);border-bottom:2px solid var(--border-color);padding-bottom:10px;margin-top:0;margin-bottom:15px}input,select{background:var(--input-bg);color:var(--text-main);border:1px solid var(--border-color);padding:10px;border-radius:5px;box-sizing:border-box}.input-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:10px}.form-group label{display:block;font-weight:700;font-size:.85rem;margin-bottom:5px}.form-group input{width:100%}.btn-primary{width:100%;background:var(--primary);color:#fff;padding:15px;border:none;border-radius:8px;font-size:1.1rem;cursor:pointer;font-weight:700;text-transform:uppercase;transition:.2s}.btn-primary:hover{opacity:.9}.btn-primary.auto-width{width:auto;padding:10px 20px}.btn-success{background:var(--success)}.btn-secondary{background:var(--secondary);color:#fff;border:none;padding:8px 15px;border-radius:5px;cursor:pointer;transition:.2s}.btn-secondary:hover{opacity:.8}.btn-secondary:disabled{opacity:.5;cursor:not-allowed}.btn-danger{background:var(--danger);color:#fff;border:none;padding:8px 15px;border-radius:5px;cursor:pointer}.btn-upload{background:var(--primary);color:#fff;padding:8px 15px;border-radius:5px;cursor:pointer;display:inline-block;font-size:.875rem}.btn-upload:hover{background:var(--primary-hover)}.btn-warning,.btn-warning-text{background:#e1b12c!important;color:#2d3436!important;font-weight:700}.template-actions{display:flex;gap:10px;margin-top:10px}.template-actions input,.template-actions select{flex:1}.toolbar{display:flex;gap:10px;align-items:center}.divider{color:var(--border-color);font-weight:700}.file-name-display{color:var(--primary);font-weight:700}.matrix-table{width:100%;border-collapse:collapse;margin-top:15px;color:var(--text-main)}.matrix-table th,.matrix-table td{border:1px solid var(--border-color);padding:12px}.matrix-table th{background:var(--primary);color:#fff;font-size:.9rem}.highlight-cell{background-color:#0984e333!important}.highlight-header{background-color:var(--secondary)!important;color:#fff!important}.row-header{background:var(--bg-main);width:60px;font-weight:700}.cross{color:var(--border-color)}.flow-container{height:500px;border:2px dashed var(--border-color);border-radius:8px;background:var(--plot-bg);margin-top:15px}.plot-container{width:100%;height:600px;border:1px solid var(--border-color);border-radius:8px;background:var(--plot-bg)}.plot-container.large{height:750px}.placeholder-3d{width:100%;height:300px;border:2px dashed var(--border-color);border-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--text-muted);background:var(--bg-main);margin-top:15px;font-style:italic}.border-accent{border-color:var(--success)}.text-accent{color:var(--success)!important;border-bottom-color:var(--success)!important}.bg-accent{background:var(--success)!important}.card-warning{background:var(--warning-bg);border-color:var(--warning-border)}.warning-title{color:var(--warning-text)!important;margin-top:0;border-bottom-color:var(--warning-text)!important}.warning-text{color:var(--warning-text)}.ratio-flex{display:flex;gap:20px;flex-wrap:wrap}.point-control-panel{padding:15px;background:var(--bg-main);border-radius:8px;border:1px solid var(--border-color)}.loading-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#000000b3;display:flex;align-items:center;justify-content:center;font-size:1.5rem;font-weight:700;color:#fff;z-index:9999}.hint{font-size:.85rem;color:var(--text-muted);font-style:italic;margin:0}.arrow-icon{font-size:1.5rem;color:var(--text-muted)}.combobox-container{position:relative}.combobox-input-wrapper{position:relative;display:flex;align-items:center;width:100%}.combobox-input-wrapper input{padding-right:34px!important}.combobox-arrow-btn{position:absolute;right:2px;top:2px;bottom:2px;width:30px;background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--text-muted);font-size:.75rem;border-radius:0 4px 4px 0;transition:all .2s ease;z-index:2}.combobox-arrow-btn:hover{color:var(--primary);background:#0984e31a}.combobox-dropdown{position:absolute;top:calc(100% + 4px);left:0;right:0;max-height:220px;overflow-y:auto;background:var(--bg-card);border:1px solid var(--border-color);border-radius:8px;box-shadow:0 8px 24px #00000026;z-index:1000;margin:0;padding:5px 0;list-style:none}.combobox-item{padding:8px 14px;cursor:pointer;display:flex;align-items:center;justify-content:space-between;font-size:.95rem;color:var(--text-main);transition:background .15s,color .15s}.combobox-item:hover,.combobox-item.active{background:var(--primary);color:#fff}.combobox-item-title{display:flex;align-items:center;gap:6px}.combobox-empty{padding:10px 14px;font-size:.85rem;color:var(--text-muted);text-align:center}.combobox-badge{font-size:.75rem;padding:2px 8px;border-radius:12px;background:#0000000f;color:var(--text-muted);font-weight:500}body.dark-mode .combobox-badge{background:#ffffff1f;color:#d1d5db}.combobox-item:hover .combobox-badge,.combobox-item.active .combobox-badge{background:#ffffff40;color:#fff}.label-hint{font-size:.75rem;font-weight:400;color:var(--text-muted);margin-left:4px}@media(max-width:768px){.input-grid{grid-template-columns:1fr!important}.header-container{flex-direction:column;text-align:center;gap:10px}.template-actions,.ratio-flex{flex-direction:column}.tab-menu{padding:0 10px;white-space:nowrap;overflow-x:auto}.tab-btn{padding:10px 15px;font-size:1rem}.container-fluid{padding:10px}.card{padding:15px}.table-responsive{overflow-x:auto;display:block;width:100%;-webkit-overflow-scrolling:touch}.hold-name-wrapper{flex-direction:column;align-items:stretch!important}.hold-name-wrapper button{width:100%!important;margin-top:10px}.plot-container{height:400px!important}}.floating-toast{position:fixed;top:20px;right:20px;z-index:999999;min-width:280px;max-width:480px;padding:12px 18px;border-radius:8px;box-shadow:0 6px 20px #00000040;font-size:.95rem;font-weight:600;display:flex;align-items:center;justify-content:space-between;gap:12px;animation:slideInRight .3s ease;white-space:pre-wrap;line-height:1.4}.floating-toast.info{background:#2563eb;color:#fff}.floating-toast.success{background:#16a34a;color:#fff}.floating-toast.error{background:#dc2626;color:#fff}.toast-close{background:transparent;border:none;color:#ffffffd9;cursor:pointer;font-size:1rem;padding:0 4px}.toast-close:hover{color:#fff}@keyframes slideInRight{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.toast-enter-active,.toast-leave-active{transition:all .3s ease}.toast-enter-from,.toast-leave-to{transform:translate(100%);opacity:0}.header-actions{display:flex;align-items:center;gap:10px}.btn-engine-toggle{padding:8px 16px;border-radius:20px;font-size:.9rem;font-weight:700;cursor:pointer;border:1px solid transparent;transition:all .25s ease;display:inline-flex;align-items:center;gap:6px}.btn-engine-toggle.engine-cloudflare{background:linear-gradient(135deg,#f38020,#faad3f);color:#fff;box-shadow:0 3px 10px #f3802059}.btn-engine-toggle.engine-cloudflare:hover{transform:translateY(-1px);box-shadow:0 5px 14px #f3802080}.btn-engine-toggle.engine-render{background:linear-gradient(135deg,#0984e3,#74b9ff);color:#fff;box-shadow:0 3px 10px #0984e359}.btn-engine-toggle.engine-render:hover{transform:translateY(-1px);box-shadow:0 5px 14px #0984e380}.loading-box{background:var(--bg-card, #ffffff);color:var(--text-main, #2d3436);padding:30px 40px;border-radius:14px;box-shadow:0 12px 36px #00000059;border:1px solid var(--border-color, #e0e0e0);text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px;max-width:450px}.loading-spinner{width:42px;height:42px;border:4px solid rgba(37,99,235,.2);border-top-color:#2563eb;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-progress{font-size:.95rem;font-weight:600;color:#2563eb;background:#2563eb14;padding:6px 14px;border-radius:20px}
