vortx-gl 1.0.2 → 1.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +485 -35
  2. package/dist/components/DatasetSelector.d.ts +19 -0
  3. package/dist/components/FPSMonitor.d.ts +2 -0
  4. package/dist/components/GraphCanvas.d.ts +109 -0
  5. package/dist/components/LayoutControls.d.ts +18 -0
  6. package/dist/components/LucideIcon.d.ts +10 -0
  7. package/dist/components/PropertyPanel.d.ts +28 -0
  8. package/dist/components/RadialMenu.d.ts +33 -0
  9. package/dist/components/SearchBar.d.ts +12 -0
  10. package/dist/components/ViewControls.d.ts +18 -0
  11. package/dist/engine/Minimap.d.ts +25 -0
  12. package/dist/engine/api/adapter.d.ts +35 -0
  13. package/dist/engine/api/index.d.ts +2 -0
  14. package/dist/engine/api/types.d.ts +86 -0
  15. package/dist/engine/config.d.ts +117 -0
  16. package/dist/engine/core/Camera.d.ts +34 -0
  17. package/dist/engine/core/ComboStore.d.ts +23 -0
  18. package/dist/engine/core/EdgeStore.d.ts +37 -0
  19. package/dist/engine/core/NodeStore.d.ts +34 -0
  20. package/dist/engine/core/context.d.ts +20 -0
  21. package/dist/engine/events.d.ts +19 -0
  22. package/dist/engine/gpu/GpuBufferManager.d.ts +39 -0
  23. package/dist/engine/interaction/GroupInteraction.d.ts +40 -0
  24. package/dist/engine/interaction.d.ts +31 -0
  25. package/dist/engine/overlay/ComboRenderer.d.ts +25 -0
  26. package/dist/engine/overlay/EdgeRenderer.d.ts +32 -0
  27. package/dist/engine/overlay/NodeRenderer.d.ts +52 -0
  28. package/dist/engine/overlay/OverlayManager.d.ts +38 -0
  29. package/dist/engine/overlay/SharedOverlayState.d.ts +47 -0
  30. package/dist/engine/overlay/effects.d.ts +15 -0
  31. package/dist/engine/overlay/index.d.ts +2 -0
  32. package/dist/engine/overlay/shapes.d.ts +7 -0
  33. package/dist/engine/overlay/text.d.ts +15 -0
  34. package/dist/engine/picking.d.ts +51 -0
  35. package/dist/engine/renderConstants.d.ts +13 -0
  36. package/dist/engine/renderer.d.ts +222 -0
  37. package/dist/engine/shaders/edge.glsl.d.ts +2 -0
  38. package/dist/engine/shaders/node.glsl.d.ts +2 -0
  39. package/dist/engine/shaders.d.ts +2 -0
  40. package/dist/engine/spatialIndex.d.ts +32 -0
  41. package/dist/engine/types.d.ts +688 -0
  42. package/dist/engine/utils/pointSize.d.ts +23 -0
  43. package/dist/engine/utils/styleResolver.d.ts +163 -0
  44. package/dist/index.d.ts +14 -1
  45. package/dist/vortx-gl.css +1206 -1
  46. package/dist/vortx-gl.es.js +3718 -1
  47. package/dist/vortx-gl.umd.js +3706 -1
  48. package/package.json +7 -6
  49. package/dist/assets/layout.worker-CBxeMMC3.js +0 -1
  50. package/dist/favicon.ico +0 -0
  51. package/dist/logo.png +0 -0
  52. package/dist/vite.svg +0 -1
  53. package/dist/webgl-graph-library.css +0 -1
  54. package/dist/webgl-graph.es.js +0 -1
  55. package/dist/webgl-graph.umd.js +0 -1
package/dist/vortx-gl.css CHANGED
@@ -1 +1,1206 @@
1
- .vortx-gl-root{--vortx-primary: hsl(190, 100%, 50%);--vortx-primary-glow: hsla(190, 100%, 50%, .3);--vortx-primary-hover: hsl(190, 100%, 40%);--vortx-secondary: hsl(260, 100%, 65%);--vortx-secondary-glow: hsla(260, 100%, 65%, .3);--vortx-success: hsl(145, 80%, 45%);--vortx-warning: hsl(35, 100%, 55%);--vortx-danger: hsl(0, 85%, 60%);--vortx-bg-dark: hsl(230, 20%, 5%);--vortx-surface-dark: hsla(230, 15%, 15%, .6);--vortx-border-dark: hsla(0, 0%, 100%, .12);--vortx-text-dark: hsl(0, 0%, 98%);--vortx-text-dim-dark: hsl(230, 10%, 75%);--vortx-bg-light: hsl(220, 20%, 97%);--vortx-surface-light: hsla(0, 0%, 100%, .7);--vortx-border-light: hsla(230, 20%, 0%, .08);--vortx-text-light: hsl(230, 20%, 10%);--vortx-text-dim-light: hsl(230, 15%, 45%);--vortx-bg: var(--vortx-bg-dark);--vortx-surface: var(--vortx-surface-dark);--vortx-border: var(--vortx-border-dark);--vortx-text: var(--vortx-text-dark);--vortx-text-dim: var(--vortx-text-dim-dark);--vortx-glass-blur: 24px;--vortx-glass-border: 1px solid var(--vortx-border);--vortx-glass-shadow: 0 4px 12px 0 rgba(0, 0, 0, .4), 0 1px 3px 0 rgba(0, 0, 0, .2);--vortx-radius-sm: 8px;--vortx-radius-md: 12px;--vortx-radius-lg: 24px;--vortx-radius-full: 9999px;--vortx-space-xs: 4px;--vortx-space-sm: 8px;--vortx-space-md: 16px;--vortx-space-lg: 32px;--vortx-space-xl: 48px;font-family:Outfit,Inter,system-ui,-apple-system,sans-serif;line-height:1.6;font-weight:400;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.vortx-gl-root.light{--vortx-bg: var(--vortx-bg-light);--vortx-surface: var(--vortx-surface-light);--vortx-border: var(--vortx-border-light);--vortx-text: var(--vortx-text-light);--vortx-text-dim: var(--vortx-text-dim-light);--vortx-glass-shadow: 0 4px 12px 0 rgba(0, 0, 0, .1), 0 1px 3px 0 rgba(0, 0, 0, .05)}.vortx-gl-root *{box-sizing:border-box;-webkit-tap-highlight-color:transparent}.vortx-gl-root .glass{background:var(--vortx-surface);backdrop-filter:blur(var(--vortx-glass-blur));-webkit-backdrop-filter:blur(var(--vortx-glass-blur));border:var(--vortx-glass-border);box-shadow:var(--vortx-glass-shadow);color:var(--vortx-text)}.vortx-gl-root .glass-interactive{background:var(--vortx-surface);backdrop-filter:blur(var(--vortx-glass-blur));-webkit-backdrop-filter:blur(var(--vortx-glass-blur));border:var(--vortx-glass-border);box-shadow:var(--vortx-glass-shadow);transition:all .3s cubic-bezier(.4,0,.2,1);color:var(--vortx-text)}.vortx-gl-root .glass-interactive:hover{background:#3d425c4d;border-color:#00d4ff66;transform:translateY(-2px);box-shadow:0 8px 24px #00000080}.vortx-gl-root.light .glass-interactive:hover{background:#fffc;border-color:#00d4ff66;box-shadow:0 8px 24px #0000001a}.vortx-gl-root ::-webkit-scrollbar{width:8px;height:8px}.vortx-gl-root ::-webkit-scrollbar-track{background:transparent}.vortx-gl-root ::-webkit-scrollbar-thumb{background:var(--vortx-border);border-radius:var(--vortx-radius-full)}.vortx-gl-root ::-webkit-scrollbar-thumb:hover{background:var(--vortx-text-dim)}@keyframes vortxFadeIn{0%{opacity:0}to{opacity:1}}@keyframes vortxSlideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes vortxScaleIn{0%{transform:scale(.95);opacity:0}to{transform:scale(1);opacity:1}}@media(max-width:768px){.vortx-gl-root{--vortx-space-md: 12px;--vortx-space-lg: 24px;--vortx-glass-blur: 16px}}.lucide-icon[data-v-6aa14fad]{display:inline-block;vertical-align:middle}.radial-menu[data-v-9d75fdc7]{position:fixed;width:0;height:0;z-index:2000;pointer-events:none}.radial-center[data-v-9d75fdc7]{position:absolute;width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;transform:translate(-50%,-50%);animation:popIn-9d75fdc7 .4s cubic-bezier(.34,1.56,.64,1);pointer-events:auto;font-size:24px;border-color:var(--vortx-primary);box-shadow:0 0 20px #00ffd533}.radial-item[data-v-9d75fdc7]{position:absolute;width:64px;height:64px;pointer-events:none;animation:itemIn-9d75fdc7 .5s cubic-bezier(.34,1.56,.64,1) backwards;z-index:2001}.radial-item-inner[data-v-9d75fdc7]{width:100%;height:100%;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;pointer-events:auto;transition:all .3s cubic-bezier(.175,.885,.32,1.275);border:1px solid var(--vortx-border);color:var(--vortx-text);outline:none;padding:0}.radial-item-inner[data-v-9d75fdc7]:hover{background:var(--vortx-primary);color:#fff;transform:scale(1.15);border-color:#fff;box-shadow:0 0 25px #00ffd580}.radial-icon[data-v-9d75fdc7]{font-size:20px}.radial-label[data-v-9d75fdc7]{font-size:9px;text-transform:uppercase;margin-top:2px;font-weight:700;letter-spacing:.5px}@keyframes popIn-9d75fdc7{0%{transform:translate(-50%,-50%) scale(0);opacity:0}to{transform:translate(-50%,-50%) scale(1);opacity:1}}@keyframes itemIn-9d75fdc7{0%{opacity:0;transform:translate(-50%,-50%) scale(0)}to{opacity:1}}@media(max-width:768px){.radial-item[data-v-9d75fdc7]{width:72px;height:72px}.radial-icon[data-v-9d75fdc7]{font-size:24px}.radial-label[data-v-9d75fdc7]{font-size:10px}}.top-right-controls[data-v-f90ff709]{position:absolute;top:var(--vortx-space-md);right:var(--vortx-space-md);display:flex;flex-direction:column;gap:var(--vortx-space-xs);padding:var(--vortx-space-xs);border-radius:var(--vortx-radius-md);z-index:1000;transition:transform .3s cubic-bezier(.34,1.56,.64,1)}.control-btn[data-v-f90ff709]{width:44px;height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:var(--vortx-radius-sm);transition:all .2s cubic-bezier(.4,0,.2,1);font-size:20px;background:transparent;border:none;color:var(--vortx-text);outline:none;position:relative;overflow:hidden}.control-btn[data-v-f90ff709]:hover{background:var(--vortx-border);transform:translateY(-2px)}.control-btn[data-v-f90ff709]:active{transform:scale(.9)}.stress-btn[data-v-f90ff709]{color:var(--vortx-warning)}.divider[data-v-f90ff709]{width:24px;height:1px;background:var(--vortx-border);align-self:center;margin:4px 0}@media(max-width:768px){.top-right-controls[data-v-f90ff709]{flex-direction:row;top:auto;bottom:var(--vortx-space-xl);right:50%;transform:translate(50%);gap:var(--vortx-space-sm);padding:var(--vortx-space-sm)}.divider[data-v-f90ff709]{width:1px;height:24px;margin:0 4px}.control-btn[data-v-f90ff709]{width:48px;height:48px;font-size:22px}}.layout-controls[data-v-2650a643]{position:absolute;bottom:var(--vortx-space-lg);left:50%;transform:translate(-50%);width:auto;max-width:90vw;padding:6px;border-radius:var(--vortx-radius-lg);z-index:1000;overflow:hidden}.scroll-container[data-v-2650a643]{display:flex;gap:var(--vortx-space-xs);overflow-x:auto;padding:2px;scrollbar-width:none;-ms-overflow-style:none}.scroll-container[data-v-2650a643]::-webkit-scrollbar{display:none}.layout-btn[data-v-2650a643]{padding:10px 18px;border-radius:var(--vortx-radius-md);cursor:pointer;font-size:14px;font-weight:500;transition:all .3s cubic-bezier(.4,0,.2,1);background:transparent;border:none;display:flex;align-items:center;gap:8px;color:var(--vortx-text-dim);white-space:nowrap;outline:none}.layout-btn[data-v-2650a643]:hover{background:var(--vortx-border);color:var(--vortx-text);transform:translateY(-2px)}.layout-btn.active[data-v-2650a643]{background:var(--vortx-primary);color:#fff;box-shadow:0 4px 15px var(--vortx-primary-glow);border-color:var(--vortx-primary)}.btn-icon[data-v-2650a643]{font-size:18px}@media(max-width:768px){.layout-controls[data-v-2650a643]{bottom:calc(var(--vortx-space-xl) + 80px);max-width:95vw;border-radius:var(--vortx-radius-md)}.layout-btn[data-v-2650a643]{padding:12px 20px;font-size:15px}}.property-panel[data-v-205cc0b7]{position:absolute;top:var(--vortx-space-md);left:var(--vortx-space-md);width:320px;max-height:calc(100vh - var(--vortx-space-xl) * 2);border-radius:var(--vortx-radius-lg);z-index:1100;display:flex;flex-direction:column;animation:slideIn-205cc0b7 .4s cubic-bezier(.16,1,.3,1);overflow:hidden}@keyframes slideIn-205cc0b7{0%{transform:translate(-100%);opacity:0}to{transform:translate(0);opacity:1}}.panel-header[data-v-205cc0b7]{padding:var(--vortx-space-md);border-bottom:1px solid var(--vortx-border);display:flex;justify-content:space-between;align-items:center}.panel-header h3[data-v-205cc0b7]{margin:0;font-size:16px;font-weight:600;color:var(--vortx-primary);text-transform:uppercase;letter-spacing:.5px}.close-btn[data-v-205cc0b7]{background:transparent;border:none;color:var(--vortx-text-dim);cursor:pointer;padding:4px;font-size:18px;display:flex;align-items:center;justify-content:center;transition:color .2s}.close-btn[data-v-205cc0b7]:hover{color:var(--vortx-text)}.panel-content[data-v-205cc0b7]{padding:var(--vortx-space-md);overflow-y:auto;flex:1}.prop-group[data-v-205cc0b7]{margin-bottom:var(--vortx-space-md)}.prop-row[data-v-205cc0b7]{display:grid;grid-template-columns:1fr 1fr;gap:var(--vortx-space-sm)}.prop-group label[data-v-205cc0b7]{display:block;font-size:11px;font-weight:600;color:var(--vortx-text-dim);text-transform:uppercase;margin-bottom:var(--vortx-space-xs)}.id-badge[data-v-205cc0b7]{display:inline-block;background:var(--vortx-border);padding:4px 8px;border-radius:var(--vortx-radius-sm);font-family:monospace;font-size:13px}.val-container[data-v-205cc0b7]{font-size:14px}input[data-v-205cc0b7]{width:100%;background:var(--vortx-border);border:1px solid transparent;padding:8px 12px;border-radius:var(--vortx-radius-sm);color:var(--vortx-text);font-family:monospace;font-size:14px;transition:all .2s}input[data-v-205cc0b7]:focus{outline:none;border-color:var(--vortx-primary);background:transparent}.json-prop[data-v-205cc0b7]{font-size:11px;background:#0003;padding:8px;border-radius:var(--vortx-radius-sm);margin:0;max-height:150px;overflow:auto;white-space:pre-wrap;word-break:break-all;border:1px solid var(--vortx-border)}.member-list[data-v-205cc0b7]{background:var(--vortx-border);border-radius:var(--vortx-radius-sm);padding:var(--vortx-space-xs);max-height:200px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.member-item[data-v-205cc0b7]{display:flex;justify-content:space-between;align-items:center;padding:4px 8px;font-size:12px;border-radius:4px}.member-item[data-v-205cc0b7]:hover{background:var(--vortx-border)}.remove-btn[data-v-205cc0b7]{background:#ff00001a;border:none;color:var(--vortx-danger);width:20px;height:20px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:10px}.prop-image[data-v-205cc0b7]{width:64px;height:64px;object-fit:contain;padding:8px;background:var(--vortx-surface);border-radius:50%;border:1px solid var(--vortx-border);margin-top:4px;box-shadow:0 2px 8px #0003}.edge-panel .panel-header h3[data-v-205cc0b7]{color:var(--vortx-secondary)}.combo-panel .panel-header h3[data-v-205cc0b7]{color:var(--vortx-success)}@media(max-width:768px){.property-panel[data-v-205cc0b7]{inset:auto 0 0;width:100%;height:50vh;border-radius:var(--vortx-radius-lg) var(--vortx-radius-lg) 0 0;animation:vortxSlideUp .4s cubic-bezier(.16,1,.3,1)}}.search-wrapper[data-v-283de02c]{position:absolute;top:var(--vortx-space-md);left:50%;transform:translate(-50%);z-index:1200;transition:all .3s ease}.search-container[data-v-283de02c]{width:240px;max-width:90vw;border-radius:var(--vortx-radius-full);transition:all .3s cubic-bezier(.4,0,.2,1);padding:4px}.search-container.expanded[data-v-283de02c]{width:320px;border-radius:var(--vortx-radius-md)}.search-input-wrapper[data-v-283de02c]{display:flex;align-items:center;gap:8px;padding:4px 12px}.search-icon[data-v-283de02c]{opacity:.6}input[data-v-283de02c]{flex:1;background:transparent;border:none;border-radius:999px;padding:8px 4px;font-size:14px;color:var(--vortx-text);outline:none}.clear-btn[data-v-283de02c]{cursor:pointer;opacity:.5;padding:4px;display:flex;align-items:center}.results-panel[data-v-283de02c]{margin-top:4px;border-top:1px solid var(--vortx-border);padding:4px;max-height:250px;overflow-y:auto}.result-item[data-v-283de02c]{display:flex;align-items:center;gap:12px;padding:10px 12px;cursor:pointer;border-radius:var(--vortx-radius-sm);transition:background .2s}.result-item[data-v-283de02c]:hover{background:var(--vortx-border)}.node-icon[data-v-283de02c]{color:var(--vortx-primary)}.node-info[data-v-283de02c]{display:flex;flex-direction:column}.node-label[data-v-283de02c]{font-size:13px;font-weight:500}.node-id[data-v-283de02c]{font-size:11px;opacity:.6}.no-results[data-v-283de02c]{padding:12px;text-align:center;font-size:13px;color:var(--vortx-text-dim);border-top:1px solid var(--vortx-border)}.search-wrapper.is-mobile[data-v-283de02c]{top:auto;bottom:var(--vortx-space-md);left:var(--vortx-space-md);transform:none}.is-mobile .search-container[data-v-283de02c]{width:52px;height:52px;overflow:hidden;padding:0;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 20px #0000004d;border-color:var(--vortx-primary)}.is-mobile .search-input-wrapper[data-v-283de02c]{padding:0;width:100%;height:100%;justify-content:center}.is-mobile .search-icon[data-v-283de02c]{margin:0}.is-mobile input[data-v-283de02c]{display:none}.is-mobile .search-container.expanded[data-v-283de02c]{position:fixed;bottom:0;left:0;width:100vw;height:auto;max-width:none;border-radius:var(--vortx-radius-lg) var(--vortx-radius-lg) 0 0;transform:none;padding:var(--vortx-space-md);display:block}.is-mobile .search-wrapper.mobile-expanded[data-v-283de02c]{left:0;bottom:0;width:100%}.is-mobile .search-container.expanded .search-input-wrapper[data-v-283de02c]{height:auto;padding:4px 0;margin-bottom:var(--vortx-space-md);border-bottom:1px solid var(--vortx-border)}.is-mobile .search-container.expanded input[data-v-283de02c]{display:block;font-size:16px}.is-mobile .search-container.expanded .results-panel[data-v-283de02c]{max-height:60vh}.mobile-backdrop[data-v-283de02c]{position:fixed;inset:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:-1}.container[data-v-d6f5f92c]{position:relative;width:100%;height:100%;transition:background-color .4s cubic-bezier(.4,0,.2,1);background:var(--vortx-bg);color:var(--vortx-text);overflow:hidden}.main-canvas[data-v-d6f5f92c],.overlay-canvas[data-v-d6f5f92c]{position:absolute;top:0;left:0;width:100%;height:100%;display:block}.overlay-canvas[data-v-d6f5f92c]{pointer-events:none}.mobile-menu[data-v-d6f5f92c]{position:fixed;bottom:var(--vortx-space-md);left:50%;transform:translate(-50%);display:flex;align-items:center;padding:6px;border-radius:var(--vortx-radius-full);z-index:1000;gap:4px}.menu-btn[data-v-d6f5f92c]{background:transparent;border:none;color:var(--vortx-text-dim);display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 16px;border-radius:var(--vortx-radius-full);cursor:pointer;transition:all .2s;min-width:70px}.menu-btn span[data-v-d6f5f92c]{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.5px}.menu-btn.active[data-v-d6f5f92c]{background:var(--vortx-primary);color:#fff;box-shadow:0 4px 12px var(--vortx-primary-glow)}.menu-divider[data-v-d6f5f92c]{width:1px;height:24px;background:var(--vortx-border);margin:0 4px}.drawer-overlay[data-v-d6f5f92c]{position:fixed;inset:0;background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:1300}.mobile-drawer[data-v-d6f5f92c]{position:absolute;bottom:0;left:0;width:100%;border-radius:var(--vortx-radius-lg) var(--vortx-radius-lg) 0 0;padding:var(--vortx-space-md);padding-bottom:env(safe-area-inset-bottom,var(--vortx-space-lg));animation:vortxSlideUp .3s cubic-bezier(.16,1,.3,1)}.drawer-handle[data-v-d6f5f92c]{width:40px;height:4px;background:var(--vortx-border);border-radius:2px;margin:0 auto var(--vortx-space-md)}.drawer-header[data-v-d6f5f92c]{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--vortx-space-md)}.drawer-header h3[data-v-d6f5f92c]{margin:0;font-size:16px;font-weight:700}.drawer-close[data-v-d6f5f92c]{background:transparent;border:none;color:var(--vortx-text-dim);cursor:pointer}.drawer-content[data-v-d6f5f92c]{padding:var(--vortx-space-sm) 0}.drawer-content[data-v-d6f5f92c] .layout-controls,.drawer-content[data-v-d6f5f92c] .top-right-controls{position:static;transform:none;width:100%;max-width:none;padding:0;background:transparent;box-shadow:none;border:none;flex-direction:row;flex-wrap:wrap;justify-content:center}.drawer-content[data-v-d6f5f92c] .divider{display:none}.help-trigger[data-v-d6f5f92c]{position:absolute;bottom:var(--vortx-space-md);right:var(--vortx-space-md);width:32px;height:32px;background:var(--vortx-surface);border:1px solid var(--vortx-border);border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;font-weight:700;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);z-index:1000;transition:all .2s;color:var(--vortx-text-dim)}.help-trigger[data-v-d6f5f92c]:hover{background:var(--vortx-primary);color:#fff;border-color:#fff;transform:scale(1.1)}.help-modal-overlay[data-v-d6f5f92c]{position:fixed;inset:0;background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:2000;display:flex;align-items:center;justify-content:center}.help-modal[data-v-d6f5f92c]{width:340px;border-radius:var(--vortx-radius-lg);overflow:hidden;animation:vortxScaleIn .3s cubic-bezier(.34,1.56,.64,1)}.help-header[data-v-d6f5f92c]{padding:var(--vortx-space-md);border-bottom:1px solid var(--vortx-border);display:flex;justify-content:space-between;align-items:center}.help-header h3[data-v-d6f5f92c]{margin:0;font-size:16px}.shortcut-row[data-v-d6f5f92c]{display:flex;justify-content:space-between;align-items:center;padding:12px var(--vortx-space-md);border-bottom:1px solid var(--vortx-border)}.shortcut-row[data-v-d6f5f92c]:last-child{border-bottom:none}.key-badge[data-v-d6f5f92c]{background:var(--vortx-border);padding:4px 10px;border-radius:var(--vortx-radius-sm);font-family:monospace;font-size:12px}.action-desc[data-v-d6f5f92c]{font-size:13px;color:var(--vortx-text-dim)}.close-btn[data-v-d6f5f92c]{background:transparent;border:none;color:var(--vortx-text-dim);font-size:20px;cursor:pointer}@media(max-width:768px){.help-trigger[data-v-d6f5f92c]{display:none}}
1
+ @import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap');
2
+
3
+ /* VortxGL Bubblemaps Theme */
4
+ :root {
5
+ --vortx-primary: #8b5cf6;
6
+ --vortx-primary-glow: rgba(139, 92, 246, 0.3);
7
+ --vortx-secondary: #f97316;
8
+ --vortx-accent: #ec4899;
9
+ --vortx-success: #22c55e;
10
+ --vortx-warning: #eab308;
11
+ --vortx-danger: #ef4444;
12
+
13
+ --vortx-bg: #000000;
14
+ --vortx-bg-gradient: radial-gradient(circle at center, #0a0b1e 0%, #000000 100%);
15
+ --vortx-surface: rgba(15, 15, 20, 0.7);
16
+ --vortx-border: rgba(255, 255, 255, 0.1);
17
+ --vortx-text: #ffffff;
18
+ --vortx-text-dim: #94a3b8;
19
+
20
+ --vortx-glass-blur: 16px;
21
+ --vortx-glass-border: 1px solid var(--vortx-border);
22
+ --vortx-glass-shadow:
23
+ 0 10px 25px -5px rgba(0, 0, 0, 0.5),
24
+ 0 8px 10px -6px rgba(0, 0, 0, 0.5);
25
+
26
+ --vortx-radius-sm: 8px;
27
+ --vortx-radius-md: 14px;
28
+ --vortx-radius-lg: 24px;
29
+ --vortx-radius-full: 9999px;
30
+
31
+ --vortx-space-xs: 4px;
32
+ --vortx-space-sm: 8px;
33
+ --vortx-space-md: 16px;
34
+ --vortx-space-lg: 32px;
35
+ --vortx-space-xl: 48px;
36
+ }
37
+ .vortx-gl-root {
38
+ width: 100%;
39
+ height: 100%;
40
+ position: relative;
41
+ background: var(--vortx-bg-gradient);
42
+ }
43
+ .vortx-gl-root * {
44
+ box-sizing: border-box;
45
+ }
46
+ /* Glassmorphism Utilities */
47
+ .glass {
48
+ background: var(--vortx-surface);
49
+ backdrop-filter: blur(var(--vortx-glass-blur)) saturate(180%);
50
+ -webkit-backdrop-filter: blur(var(--vortx-glass-blur)) saturate(180%);
51
+ border: var(--vortx-glass-border);
52
+ box-shadow: var(--vortx-glass-shadow);
53
+ }
54
+ .glass-interactive {
55
+ background: var(--vortx-surface);
56
+ backdrop-filter: blur(var(--vortx-glass-blur)) saturate(180%);
57
+ -webkit-backdrop-filter: blur(var(--vortx-glass-blur)) saturate(180%);
58
+ border: var(--vortx-glass-border);
59
+ box-shadow: var(--vortx-glass-shadow);
60
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
61
+ cursor: pointer;
62
+ }
63
+ .glass-interactive:hover {
64
+ background: rgba(255, 255, 255, 0.05);
65
+ border-color: rgba(255, 255, 255, 0.2);
66
+ transform: translateY(-1px);
67
+ }
68
+ /* Scrollbar Styling */
69
+ ::-webkit-scrollbar {
70
+ width: 5px;
71
+ height: 5px;
72
+ }
73
+ ::-webkit-scrollbar-track {
74
+ background: transparent;
75
+ }
76
+ ::-webkit-scrollbar-thumb {
77
+ background: var(--vortx-border);
78
+ border-radius: var(--vortx-radius-full);
79
+ }
80
+ /* Animations */
81
+ @keyframes vortxFadeIn {
82
+ from { opacity: 0; }
83
+ to { opacity: 1; }
84
+ }
85
+ @keyframes vortxSlideUp {
86
+ from { transform: translateY(20px); opacity: 0; }
87
+ to { transform: translateY(0); opacity: 1; }
88
+ }
89
+ @keyframes vortxPulse {
90
+ 0% { transform: scale(1); opacity: 1; }
91
+ 50% { transform: scale(1.05); opacity: 0.8; }
92
+ 100% { transform: scale(1); opacity: 1; }
93
+ }
94
+
95
+ .lucide-icon[data-v-803475da] {
96
+ display: inline-block;
97
+ vertical-align: middle;
98
+ }
99
+
100
+ .radial-menu[data-v-31b4eac1] {
101
+ position: fixed;
102
+ width: 0;
103
+ height: 0;
104
+ z-index: 2000;
105
+ pointer-events: none;
106
+ }
107
+ .radial-center[data-v-31b4eac1] {
108
+ position: absolute;
109
+ width: 52px;
110
+ height: 52px;
111
+ border-radius: 50%;
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ transform: translate(-50%, -50%);
116
+ animation: popIn-31b4eac1 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
117
+ pointer-events: auto;
118
+ font-size: 24px;
119
+ border-color: var(--vortx-primary);
120
+ box-shadow: 0 0 20px hsla(170, 100%, 50%, 0.2);
121
+ }
122
+ .radial-item[data-v-31b4eac1] {
123
+ position: absolute;
124
+ width: 58px;
125
+ height: 58px;
126
+ pointer-events: none;
127
+ animation: itemIn-31b4eac1 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) backwards;
128
+ z-index: 2001;
129
+ }
130
+ .radial-item-inner[data-v-31b4eac1] {
131
+ width: 100%;
132
+ height: 100%;
133
+ border-radius: 50%;
134
+ display: flex;
135
+ flex-direction: column;
136
+ align-items: center;
137
+ justify-content: center;
138
+ cursor: pointer;
139
+ pointer-events: auto;
140
+ transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
141
+ border: 1px solid var(--vortx-border);
142
+ color: var(--vortx-text);
143
+ outline: none;
144
+ padding: 0;
145
+ }
146
+ .radial-item-inner[data-v-31b4eac1]:hover {
147
+ background: var(--vortx-primary);
148
+ color: white;
149
+ transform: scale(1.15);
150
+ border-color: white;
151
+ box-shadow: 0 0 25px hsla(170, 100%, 50%, 0.5);
152
+ }
153
+ .radial-icon[data-v-31b4eac1] {
154
+ font-size: 20px;
155
+ }
156
+ .radial-label[data-v-31b4eac1] {
157
+ font-size: 9px;
158
+ text-transform: uppercase;
159
+ margin-top: 2px;
160
+ font-weight: 700;
161
+ letter-spacing: 0.5px;
162
+ }
163
+ @keyframes popIn-31b4eac1 {
164
+ from {
165
+ transform: translate(-50%, -50%) scale(0);
166
+ opacity: 0;
167
+ }
168
+ to {
169
+ transform: translate(-50%, -50%) scale(1);
170
+ opacity: 1;
171
+ }
172
+ }
173
+ @keyframes itemIn-31b4eac1 {
174
+ from {
175
+ opacity: 0;
176
+ transform: translate(-50%, -50%) scale(0);
177
+ }
178
+ to {
179
+ opacity: 1;
180
+ }
181
+ }
182
+ @media (max-width: 768px) {
183
+ .radial-item[data-v-31b4eac1] {
184
+ width: 72px;
185
+ height: 72px;
186
+ }
187
+ .radial-icon[data-v-31b4eac1] {
188
+ font-size: 24px;
189
+ }
190
+ .radial-label[data-v-31b4eac1] {
191
+ font-size: 10px;
192
+ }
193
+ }
194
+
195
+ .top-right-controls[data-v-63487796] {
196
+ position: absolute;
197
+ top: var(--vortx-space-md);
198
+ right: var(--vortx-space-md);
199
+ display: flex;
200
+ flex-direction: column;
201
+ gap: var(--vortx-space-xs);
202
+ padding: var(--vortx-space-xs);
203
+ border-radius: var(--vortx-radius-md);
204
+ z-index: 1000;
205
+ transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
206
+ }
207
+ .control-btn[data-v-63487796] {
208
+ width: 44px;
209
+ height: 44px;
210
+ display: flex;
211
+ align-items: center;
212
+ justify-content: center;
213
+ cursor: pointer;
214
+ border-radius: var(--vortx-radius-sm);
215
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
216
+ font-size: 20px;
217
+ background: transparent;
218
+ border: none;
219
+ color: var(--vortx-text);
220
+ outline: none;
221
+ position: relative;
222
+ overflow: hidden;
223
+ }
224
+ .control-btn[data-v-63487796]:hover {
225
+ background: var(--vortx-border);
226
+ transform: translateY(-2px);
227
+ }
228
+ .control-btn[data-v-63487796]:active {
229
+ transform: scale(0.9);
230
+ }
231
+ .stress-btn[data-v-63487796] {
232
+ color: var(--vortx-warning);
233
+ }
234
+ .flow-active[data-v-63487796] {
235
+ color: var(--vortx-primary);
236
+ background: var(--vortx-primary-glow) !important;
237
+ box-shadow: 0 0 15px var(--vortx-primary-glow);
238
+ }
239
+ .divider[data-v-63487796] {
240
+ width: 24px;
241
+ height: 1px;
242
+ background: var(--vortx-border);
243
+ align-self: center;
244
+ margin: 4px 0;
245
+ }
246
+ @media (max-width: 768px) {
247
+ .top-right-controls[data-v-63487796] {
248
+ flex-direction: row;
249
+ top: auto;
250
+ bottom: var(--vortx-space-xl);
251
+ right: 50%;
252
+ transform: translateX(50%);
253
+ gap: var(--vortx-space-sm);
254
+ padding: var(--vortx-space-sm);
255
+ }
256
+ .divider[data-v-63487796] {
257
+ width: 1px;
258
+ height: 24px;
259
+ margin: 0 4px;
260
+ }
261
+ .control-btn[data-v-63487796] {
262
+ width: 48px;
263
+ height: 48px;
264
+ font-size: 22px;
265
+ }
266
+ }
267
+
268
+ .layout-controls[data-v-55573eb2] {
269
+ position: absolute;
270
+ bottom: var(--vortx-space-lg);
271
+ left: 50%;
272
+ transform: translateX(-50%);
273
+ width: auto;
274
+ max-width: 90vw;
275
+ padding: 6px;
276
+ border-radius: var(--vortx-radius-lg);
277
+ z-index: 1000;
278
+ overflow: hidden;
279
+ }
280
+ .scroll-container[data-v-55573eb2] {
281
+ display: flex;
282
+ gap: var(--vortx-space-xs);
283
+ overflow-x: auto;
284
+ padding: 2px;
285
+ scrollbar-width: none; /* Firefox */
286
+ -ms-overflow-style: none; /* IE/Edge */
287
+ }
288
+ .scroll-container[data-v-55573eb2]::-webkit-scrollbar {
289
+ display: none; /* Chrome/Safari */
290
+ }
291
+ .layout-btn[data-v-55573eb2] {
292
+ padding: 8px 14px;
293
+ border-radius: var(--vortx-radius-md);
294
+ cursor: pointer;
295
+ font-size: 13px;
296
+ font-weight: 500;
297
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
298
+ background: transparent;
299
+ border: none;
300
+ display: flex;
301
+ align-items: center;
302
+ gap: 6px;
303
+ color: var(--vortx-text-dim);
304
+ white-space: nowrap;
305
+ outline: none;
306
+ }
307
+ .layout-btn[data-v-55573eb2]:hover {
308
+ background: var(--vortx-border);
309
+ color: var(--vortx-text);
310
+ transform: translateY(-2px);
311
+ }
312
+ .layout-btn.active[data-v-55573eb2] {
313
+ background: var(--vortx-primary);
314
+ color: white;
315
+ box-shadow: 0 4px 15px var(--vortx-primary-glow);
316
+ border-color: var(--vortx-primary);
317
+ }
318
+ .btn-icon[data-v-55573eb2] {
319
+ font-size: 18px;
320
+ }
321
+ @media (max-width: 768px) {
322
+ .layout-controls[data-v-55573eb2] {
323
+ bottom: calc(var(--vortx-space-xl) + 80px); /* Position above ViewControls */
324
+ max-width: 95vw;
325
+ border-radius: var(--vortx-radius-md);
326
+ }
327
+ .layout-btn[data-v-55573eb2] {
328
+ padding: 10px 16px;
329
+ }
330
+ .layout-btn .btn-name[data-v-55573eb2] {
331
+ display: inline;
332
+ }
333
+ }
334
+
335
+ .property-panel[data-v-0040e73e] {
336
+ position: absolute;
337
+ top: var(--vortx-space-md);
338
+ right: var(--vortx-space-md);
339
+ width: 320px;
340
+ max-height: calc(100vh - var(--vortx-space-xl) * 2);
341
+ border-radius: var(--vortx-radius-lg);
342
+ z-index: 1100;
343
+ display: flex;
344
+ flex-direction: column;
345
+ animation: slideIn-0040e73e 0.4s cubic-bezier(0.16, 1, 0.3, 1);
346
+ overflow: hidden;
347
+ }
348
+ @keyframes slideIn-0040e73e {
349
+ from {
350
+ transform: translateX(100%);
351
+ opacity: 0;
352
+ }
353
+ to {
354
+ transform: translateX(0);
355
+ opacity: 1;
356
+ }
357
+ }
358
+ .panel-header[data-v-0040e73e] {
359
+ padding: var(--vortx-space-md);
360
+ border-bottom: 1px solid var(--vortx-border);
361
+ display: flex;
362
+ justify-content: space-between;
363
+ align-items: center;
364
+ }
365
+ .panel-header h3[data-v-0040e73e] {
366
+ margin: 0;
367
+ font-size: 16px;
368
+ font-weight: 600;
369
+ color: var(--vortx-primary);
370
+ text-transform: uppercase;
371
+ letter-spacing: 0.5px;
372
+ }
373
+ .close-btn[data-v-0040e73e] {
374
+ background: transparent;
375
+ border: none;
376
+ color: var(--vortx-text-dim);
377
+ cursor: pointer;
378
+ padding: 4px;
379
+ font-size: 18px;
380
+ display: flex;
381
+ align-items: center;
382
+ justify-content: center;
383
+ transition: color 0.2s;
384
+ }
385
+ .close-btn[data-v-0040e73e]:hover {
386
+ color: var(--vortx-text);
387
+ }
388
+ .panel-content[data-v-0040e73e] {
389
+ padding: var(--vortx-space-md);
390
+ overflow-y: auto;
391
+ flex: 1;
392
+ }
393
+ .prop-group[data-v-0040e73e] {
394
+ margin-bottom: var(--vortx-space-md);
395
+ }
396
+ .prop-row[data-v-0040e73e] {
397
+ display: grid;
398
+ grid-template-columns: 1fr 1fr;
399
+ gap: var(--vortx-space-sm);
400
+ }
401
+ .prop-group label[data-v-0040e73e] {
402
+ display: block;
403
+ font-size: 11px;
404
+ font-weight: 600;
405
+ color: var(--vortx-text-dim);
406
+ text-transform: uppercase;
407
+ margin-bottom: var(--vortx-space-xs);
408
+ }
409
+ .id-badge[data-v-0040e73e] {
410
+ display: inline-block;
411
+ background: var(--vortx-border);
412
+ padding: 4px 8px;
413
+ border-radius: var(--vortx-radius-sm);
414
+ font-family: monospace;
415
+ font-size: 13px;
416
+ }
417
+ .val-container[data-v-0040e73e] {
418
+ font-size: 14px;
419
+ }
420
+ input[data-v-0040e73e] {
421
+ width: 100%;
422
+ background: var(--vortx-border);
423
+ border: 1px solid transparent;
424
+ padding: 8px 12px;
425
+ border-radius: var(--vortx-radius-sm);
426
+ color: var(--vortx-text);
427
+ font-family: monospace;
428
+ font-size: 14px;
429
+ transition: all 0.2s;
430
+ }
431
+ input[data-v-0040e73e]:focus {
432
+ outline: none;
433
+ border-color: var(--vortx-primary);
434
+ background: transparent;
435
+ }
436
+ .json-prop[data-v-0040e73e] {
437
+ font-size: 11px;
438
+ background: hsla(0, 0%, 0%, 0.2);
439
+ padding: 8px;
440
+ border-radius: var(--vortx-radius-sm);
441
+ margin: 0;
442
+ max-height: 150px;
443
+ overflow: auto;
444
+ white-space: pre-wrap;
445
+ word-break: break-all;
446
+ border: 1px solid var(--vortx-border);
447
+ }
448
+ .member-list[data-v-0040e73e] {
449
+ background: var(--vortx-border);
450
+ border-radius: var(--vortx-radius-sm);
451
+ padding: var(--vortx-space-xs);
452
+ max-height: 200px;
453
+ overflow-y: auto;
454
+ display: flex;
455
+ flex-direction: column;
456
+ gap: 2px;
457
+ }
458
+ .member-item[data-v-0040e73e] {
459
+ display: flex;
460
+ justify-content: space-between;
461
+ align-items: center;
462
+ padding: 4px 8px;
463
+ font-size: 12px;
464
+ border-radius: 4px;
465
+ }
466
+ .member-item[data-v-0040e73e]:hover {
467
+ background: var(--vortx-border);
468
+ }
469
+ .remove-btn[data-v-0040e73e] {
470
+ background: hsla(0, 100%, 50%, 0.1);
471
+ border: none;
472
+ color: var(--vortx-danger);
473
+ width: 20px;
474
+ height: 20px;
475
+ border-radius: 4px;
476
+ cursor: pointer;
477
+ display: flex;
478
+ align-items: center;
479
+ justify-content: center;
480
+ font-size: 10px;
481
+ }
482
+ .prop-image[data-v-0040e73e] {
483
+ width: 64px;
484
+ height: 64px;
485
+ object-fit: contain;
486
+ padding: 8px;
487
+ background: var(--vortx-surface);
488
+ border-radius: 50%;
489
+ border: 1px solid var(--vortx-border);
490
+ margin-top: 4px;
491
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
492
+ }
493
+ .edge-panel .panel-header h3[data-v-0040e73e] {
494
+ color: var(--vortx-secondary);
495
+ }
496
+ .combo-panel .panel-header h3[data-v-0040e73e] {
497
+ color: var(--vortx-success);
498
+ }
499
+ @media (max-width: 768px) {
500
+ .property-panel[data-v-0040e73e] {
501
+ top: auto;
502
+ left: 0;
503
+ right: 0;
504
+ bottom: 0;
505
+ width: 100%;
506
+ height: 50vh;
507
+ border-radius: var(--vortx-radius-lg) var(--vortx-radius-lg) 0 0;
508
+ animation: vortxSlideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1);
509
+ }
510
+ }
511
+
512
+ .search-wrapper[data-v-bf144eba] {
513
+ position: absolute;
514
+ top: var(--vortx-space-md);
515
+ left: 50%;
516
+ transform: translateX(-50%);
517
+ z-index: 1200;
518
+ transition: all 0.3s ease;
519
+ }
520
+ .search-container[data-v-bf144eba] {
521
+ width: 240px;
522
+ max-width: 90vw;
523
+ border-radius: var(--vortx-radius-full);
524
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
525
+ padding: 4px;
526
+ }
527
+ .search-container.expanded[data-v-bf144eba] {
528
+ width: 320px;
529
+ border-radius: var(--vortx-radius-md);
530
+ }
531
+ .search-input-wrapper[data-v-bf144eba] {
532
+ display: flex;
533
+ align-items: center;
534
+ gap: 8px;
535
+ padding: 4px 12px;
536
+ }
537
+ .search-icon[data-v-bf144eba] {
538
+ opacity: 0.6;
539
+ }
540
+ input[data-v-bf144eba] {
541
+ flex: 1;
542
+ background: transparent;
543
+ border: none;
544
+ border-radius: 999px;
545
+ padding: 8px 4px;
546
+ font-size: 14px;
547
+ color: var(--vortx-text);
548
+ outline: none;
549
+ }
550
+ .clear-btn[data-v-bf144eba] {
551
+ cursor: pointer;
552
+ opacity: 0.5;
553
+ padding: 4px;
554
+ display: flex;
555
+ align-items: center;
556
+ }
557
+ .results-panel[data-v-bf144eba] {
558
+ margin-top: 4px;
559
+ border-top: 1px solid var(--vortx-border);
560
+ padding: 4px;
561
+ max-height: 250px;
562
+ overflow-y: auto;
563
+ }
564
+ .result-item[data-v-bf144eba] {
565
+ display: flex;
566
+ align-items: center;
567
+ gap: 12px;
568
+ padding: 10px 12px;
569
+ cursor: pointer;
570
+ border-radius: var(--vortx-radius-sm);
571
+ transition: background 0.2s;
572
+ }
573
+ .result-item[data-v-bf144eba]:hover {
574
+ background: var(--vortx-border);
575
+ }
576
+ .node-icon[data-v-bf144eba] {
577
+ color: var(--vortx-primary);
578
+ }
579
+ .node-info[data-v-bf144eba] {
580
+ display: flex;
581
+ flex-direction: column;
582
+ }
583
+ .node-label[data-v-bf144eba] {
584
+ font-size: 13px;
585
+ font-weight: 500;
586
+ }
587
+ .node-id[data-v-bf144eba] {
588
+ font-size: 11px;
589
+ opacity: 0.6;
590
+ }
591
+ .no-results[data-v-bf144eba] {
592
+ padding: 12px;
593
+ text-align: center;
594
+ font-size: 13px;
595
+ color: var(--vortx-text-dim);
596
+ border-top: 1px solid var(--vortx-border);
597
+ }
598
+
599
+ /* Mobile Overrides */
600
+ .search-wrapper.is-mobile[data-v-bf144eba] {
601
+ top: auto;
602
+ bottom: var(--vortx-space-md);
603
+ left: var(--vortx-space-md);
604
+ transform: none;
605
+ }
606
+ .is-mobile .search-container[data-v-bf144eba] {
607
+ width: 52px;
608
+ height: 52px;
609
+ overflow: hidden;
610
+ padding: 0;
611
+ display: flex;
612
+ align-items: center;
613
+ justify-content: center;
614
+ box-shadow: 0 4px 20px rgba(0,0,0,0.3);
615
+ border-color: var(--vortx-primary);
616
+ }
617
+ .is-mobile .search-input-wrapper[data-v-bf144eba] {
618
+ padding: 0;
619
+ width: 100%;
620
+ height: 100%;
621
+ justify-content: center;
622
+ }
623
+ .is-mobile .search-icon[data-v-bf144eba] {
624
+ margin: 0;
625
+ }
626
+ .is-mobile input[data-v-bf144eba] {
627
+ display: none;
628
+ }
629
+ .is-mobile .search-container.expanded[data-v-bf144eba] {
630
+ position: fixed;
631
+ bottom: 0;
632
+ left: 0;
633
+ width: 100vw;
634
+ height: auto;
635
+ max-width: none;
636
+ border-radius: var(--vortx-radius-lg) var(--vortx-radius-lg) 0 0;
637
+ transform: none;
638
+ padding: var(--vortx-space-md);
639
+ display: block;
640
+ }
641
+ .is-mobile .search-wrapper.mobile-expanded[data-v-bf144eba] {
642
+ left: 0;
643
+ bottom: 0;
644
+ width: 100%;
645
+ }
646
+ .is-mobile .search-container.expanded .search-input-wrapper[data-v-bf144eba] {
647
+ height: auto;
648
+ padding: 4px 0;
649
+ margin-bottom: var(--vortx-space-md);
650
+ border-bottom: 1px solid var(--vortx-border);
651
+ }
652
+ .is-mobile .search-container.expanded input[data-v-bf144eba] {
653
+ display: block;
654
+ font-size: 16px; /* Prevent zoom on iOS */
655
+ }
656
+ .is-mobile .search-container.expanded .results-panel[data-v-bf144eba] {
657
+ max-height: 60vh;
658
+ }
659
+ .mobile-backdrop[data-v-bf144eba] {
660
+ position: fixed;
661
+ inset: 0;
662
+ background: rgba(0,0,0,0.5);
663
+ backdrop-filter: blur(4px);
664
+ z-index: -1;
665
+ }
666
+
667
+ .dataset-selector[data-v-22ac507e] {
668
+ position: relative;
669
+ min-width: 180px;
670
+ max-width: 240px;
671
+ border-radius: var(--vortx-radius-md);
672
+ user-select: none;
673
+ z-index: 1100;
674
+ }
675
+ .selector-header[data-v-22ac507e] {
676
+ display: flex;
677
+ align-items: center;
678
+ padding: 10px 14px;
679
+ gap: 12px;
680
+ cursor: pointer;
681
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
682
+ border-radius: var(--vortx-radius-md);
683
+ }
684
+ .selector-header[data-v-22ac507e]:hover {
685
+ background: rgba(255, 255, 255, 0.05);
686
+ }
687
+ .selector-header.open[data-v-22ac507e] {
688
+ background: rgba(255, 255, 255, 0.08);
689
+ }
690
+ .icon-group[data-v-22ac507e] {
691
+ display: flex;
692
+ align-items: center;
693
+ justify-content: center;
694
+ width: 32px;
695
+ height: 32px;
696
+ background: var(--vortx-primary-glow);
697
+ border-radius: var(--vortx-radius-sm);
698
+ color: var(--vortx-primary);
699
+ }
700
+ .label-group[data-v-22ac507e] {
701
+ display: flex;
702
+ flex-direction: column;
703
+ flex: 1;
704
+ min-width: 0;
705
+ }
706
+ .dataset-label[data-v-22ac507e] {
707
+ font-size: 10px;
708
+ text-transform: uppercase;
709
+ letter-spacing: 0.05em;
710
+ color: var(--vortx-text-dim);
711
+ font-weight: 600;
712
+ }
713
+ .selected-name[data-v-22ac507e] {
714
+ font-size: 14px;
715
+ font-weight: 500;
716
+ color: var(--vortx-text);
717
+ }
718
+ .chevron[data-v-22ac507e] {
719
+ color: var(--vortx-text-dim);
720
+ transition: transform 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
721
+ }
722
+ .chevron.rotated[data-v-22ac507e] {
723
+ transform: rotate(180deg);
724
+ }
725
+ .dropdown-menu[data-v-22ac507e] {
726
+ position: absolute;
727
+ top: calc(100% + 8px);
728
+ right: 0;
729
+ border-radius: var(--vortx-radius-md);
730
+ overflow: hidden;
731
+ display: flex;
732
+ flex-direction: column;
733
+ min-width: 280px;
734
+ background: rgba(15, 15, 20, 0.95);
735
+ backdrop-filter: blur(24px);
736
+ border: 1px solid rgba(255, 255, 255, 0.15);
737
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.6);
738
+ z-index: 2000;
739
+ }
740
+ .dropdown-header[data-v-22ac507e] {
741
+ padding: 12px 16px;
742
+ border-bottom: 1px solid var(--vortx-border);
743
+ display: flex;
744
+ justify-content: space-between;
745
+ align-items: center;
746
+ font-size: 12px;
747
+ font-weight: 600;
748
+ color: var(--vortx-text-dim);
749
+ background: rgba(0, 0, 0, 0.2);
750
+ }
751
+ .count-badge[data-v-22ac507e] {
752
+ background: var(--vortx-border);
753
+ padding: 2px 6px;
754
+ border-radius: 4px;
755
+ font-size: 10px;
756
+ }
757
+ .dropdown-content[data-v-22ac507e] {
758
+ max-height: 280px;
759
+ overflow-y: auto;
760
+ padding: 6px;
761
+ }
762
+ .dropdown-item[data-v-22ac507e] {
763
+ display: flex;
764
+ align-items: center;
765
+ padding: 10px 12px;
766
+ gap: 12px;
767
+ cursor: pointer;
768
+ border-radius: var(--vortx-radius-sm);
769
+ transition: all 0.2s;
770
+ position: relative;
771
+ }
772
+ .dropdown-item[data-v-22ac507e]:hover {
773
+ background: rgba(255, 255, 255, 0.08);
774
+ }
775
+ .dropdown-item.active[data-v-22ac507e] {
776
+ background: var(--vortx-primary-glow);
777
+ }
778
+ .item-icon[data-v-22ac507e] {
779
+ color: var(--vortx-text-dim);
780
+ }
781
+ .dropdown-item.active .item-icon[data-v-22ac507e] {
782
+ color: var(--vortx-primary);
783
+ }
784
+ .item-info[data-v-22ac507e] {
785
+ display: flex;
786
+ flex-direction: column;
787
+ flex: 1;
788
+ }
789
+ .ds-name[data-v-22ac507e] {
790
+ font-size: 14px;
791
+ font-weight: 500;
792
+ }
793
+ .ds-meta[data-v-22ac507e] {
794
+ font-size: 11px;
795
+ color: var(--vortx-text-dim);
796
+ }
797
+ .active-indicator[data-v-22ac507e] {
798
+ width: 4px;
799
+ height: 4px;
800
+ background: var(--vortx-primary);
801
+ border-radius: 50%;
802
+ box-shadow: 0 0 8px var(--vortx-primary);
803
+ }
804
+
805
+ /* Transitions */
806
+ .vortx-dropdown-enter-active[data-v-22ac507e],
807
+ .vortx-dropdown-leave-active[data-v-22ac507e] {
808
+ transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
809
+ }
810
+ .vortx-dropdown-enter-from[data-v-22ac507e],
811
+ .vortx-dropdown-leave-to[data-v-22ac507e] {
812
+ opacity: 0;
813
+ transform: translateY(-10px) scale(0.98);
814
+ }
815
+ .text-truncate[data-v-22ac507e] {
816
+ white-space: nowrap;
817
+ overflow: hidden;
818
+ text-overflow: ellipsis;
819
+ }
820
+ .no-scrollbar[data-v-22ac507e]::-webkit-scrollbar {
821
+ display: none;
822
+ }
823
+ .no-scrollbar[data-v-22ac507e] {
824
+ -ms-overflow-style: none;
825
+ scrollbar-width: none;
826
+ }
827
+
828
+ .fps-monitor[data-v-5c9d2349] {
829
+ position: fixed;
830
+ top: 20px;
831
+ left: 20px;
832
+ padding: 8px 12px;
833
+ border-radius: 12px;
834
+ display: flex;
835
+ flex-direction: column;
836
+ gap: 4px;
837
+ min-width: 80px;
838
+ z-index: 9999;
839
+ pointer-events: none;
840
+ font-family: 'Inter', sans-serif;
841
+ border: 1px solid rgba(255, 255, 255, 0.1);
842
+ }
843
+ .stat[data-v-5c9d2349] {
844
+ display: flex;
845
+ justify-content: space-between;
846
+ align-items: baseline;
847
+ gap: 8px;
848
+ }
849
+ .label[data-v-5c9d2349] {
850
+ font-size: 10px;
851
+ font-weight: 700;
852
+ color: rgba(255, 255, 255, 0.5);
853
+ text-transform: uppercase;
854
+ }
855
+ .value[data-v-5c9d2349] {
856
+ font-size: 16px;
857
+ font-weight: 800;
858
+ font-variant-numeric: tabular-nums;
859
+ }
860
+ .excellent[data-v-5c9d2349] { color: #00ffcc; text-shadow: 0 0 10px rgba(0, 255, 204, 0.5);
861
+ }
862
+ .good[data-v-5c9d2349] { color: #f7dc6f;
863
+ }
864
+ .poor[data-v-5c9d2349] { color: #ff6b6b;
865
+ }
866
+ .fps-bar[data-v-5c9d2349] {
867
+ height: 3px;
868
+ background: rgba(255, 255, 255, 0.1);
869
+ border-radius: 2px;
870
+ overflow: hidden;
871
+ }
872
+ .fps-fill[data-v-5c9d2349] {
873
+ height: 100%;
874
+ transition: width 0.3s ease, background-color 0.3s ease;
875
+ }
876
+
877
+ .vortx-gl-container[data-v-f948bcd9] {
878
+ position: relative;
879
+ width: 100%;
880
+ height: 100%;
881
+ transition: background-color 0.4s cubic-bezier(0.4, 0, 0.2, 1);
882
+ background: var(--vortx-bg);
883
+ color: var(--vortx-text);
884
+ overflow: hidden;
885
+ user-select: none;
886
+ }
887
+
888
+ /* Top Right Controls */
889
+ .top-right-controls-container[data-v-f948bcd9] {
890
+ position: absolute;
891
+ top: var(--vortx-space-md);
892
+ right: var(--vortx-space-md);
893
+ z-index: 1100;
894
+ }
895
+ .bottom-right-controls-container[data-v-f948bcd9] {
896
+ position: absolute;
897
+ bottom: var(--vortx-space-md);
898
+ right: var(--vortx-space-md);
899
+ display: flex;
900
+ flex-direction: column;
901
+ align-items: center;
902
+ gap: var(--vortx-space-sm);
903
+ z-index: 1100;
904
+ }
905
+ .bottom-right-controls-container[data-v-f948bcd9] .top-right-controls {
906
+ position: static;
907
+ transform: none;
908
+ }
909
+ .controls-stack[data-v-f948bcd9] {
910
+ display: flex;
911
+ gap: var(--vortx-space-sm);
912
+ align-items: flex-start;
913
+ }
914
+ .controls-stack[data-v-f948bcd9] .top-right-controls {
915
+ position: static;
916
+ transform: none;
917
+ }
918
+ .main-canvas[data-v-f948bcd9],
919
+ .overlay-canvas[data-v-f948bcd9] {
920
+ position: absolute;
921
+ top: 0;
922
+ left: 0;
923
+ width: 100%;
924
+ height: 100%;
925
+ display: block;
926
+ }
927
+ .overlay-canvas[data-v-f948bcd9] {
928
+ pointer-events: none;
929
+ }
930
+
931
+ /* Mobile Menu */
932
+ .mobile-menu[data-v-f948bcd9] {
933
+ position: fixed;
934
+ bottom: var(--vortx-space-md);
935
+ left: 50%;
936
+ transform: translateX(-50%);
937
+ display: flex;
938
+ align-items: center;
939
+ padding: 6px;
940
+ border-radius: var(--vortx-radius-full);
941
+ z-index: 1000;
942
+ gap: 4px;
943
+ }
944
+ .menu-btn[data-v-f948bcd9] {
945
+ background: transparent;
946
+ border: none;
947
+ color: var(--vortx-text-dim);
948
+ display: flex;
949
+ flex-direction: column;
950
+ align-items: center;
951
+ gap: 4px;
952
+ padding: 8px 16px;
953
+ border-radius: var(--vortx-radius-full);
954
+ cursor: pointer;
955
+ transition: all 0.2s;
956
+ min-width: 70px;
957
+ }
958
+ .menu-btn span[data-v-f948bcd9] {
959
+ font-size: 10px;
960
+ font-weight: 600;
961
+ text-transform: uppercase;
962
+ letter-spacing: 0.5px;
963
+ }
964
+ .menu-btn.active[data-v-f948bcd9] {
965
+ background: var(--vortx-primary);
966
+ color: white;
967
+ box-shadow: 0 4px 12px var(--vortx-primary-glow);
968
+ }
969
+ .menu-divider[data-v-f948bcd9] {
970
+ width: 1px;
971
+ height: 24px;
972
+ background: var(--vortx-border);
973
+ margin: 0 4px;
974
+ }
975
+
976
+ /* Mobile Drawers */
977
+ .drawer-overlay[data-v-f948bcd9] {
978
+ position: fixed;
979
+ inset: 0;
980
+ background: rgba(0, 0, 0, 0.4);
981
+ backdrop-filter: blur(4px);
982
+ z-index: 1300;
983
+ }
984
+ .mobile-drawer[data-v-f948bcd9] {
985
+ position: absolute;
986
+ bottom: 0;
987
+ left: 0;
988
+ width: 100%;
989
+ border-radius: var(--vortx-radius-lg) var(--vortx-radius-lg) 0 0;
990
+ padding: var(--vortx-space-md);
991
+ padding-bottom: env(safe-area-inset-bottom, var(--vortx-space-lg));
992
+ animation: vortxSlideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1);
993
+ }
994
+ .drawer-handle[data-v-f948bcd9] {
995
+ width: 40px;
996
+ height: 4px;
997
+ background: var(--vortx-border);
998
+ border-radius: 2px;
999
+ margin: 0 auto var(--vortx-space-md);
1000
+ }
1001
+ .drawer-header[data-v-f948bcd9] {
1002
+ display: flex;
1003
+ justify-content: space-between;
1004
+ align-items: center;
1005
+ margin-bottom: var(--vortx-space-md);
1006
+ }
1007
+ .drawer-header h3[data-v-f948bcd9] {
1008
+ margin: 0;
1009
+ font-size: 16px;
1010
+ font-weight: 700;
1011
+ }
1012
+ .drawer-close[data-v-f948bcd9] {
1013
+ background: transparent;
1014
+ border: none;
1015
+ color: var(--vortx-text-dim);
1016
+ cursor: pointer;
1017
+ }
1018
+ .drawer-content[data-v-f948bcd9] {
1019
+ padding: var(--vortx-space-sm) 0;
1020
+ }
1021
+
1022
+ /* Fix desktop components inside drawer */
1023
+ .drawer-content[data-v-f948bcd9] .layout-controls,
1024
+ .drawer-content[data-v-f948bcd9] .top-right-controls {
1025
+ position: static;
1026
+ transform: none;
1027
+ width: 100%;
1028
+ max-width: none;
1029
+ padding: 0;
1030
+ background: transparent;
1031
+ box-shadow: none;
1032
+ border: none;
1033
+ flex-direction: row;
1034
+ flex-wrap: wrap;
1035
+ justify-content: center;
1036
+ }
1037
+ .drawer-content[data-v-f948bcd9] .divider {
1038
+ display: none;
1039
+ }
1040
+
1041
+ /* Help Trigger */
1042
+ .help-trigger[data-v-f948bcd9] {
1043
+ position: absolute;
1044
+ bottom: var(--vortx-space-md);
1045
+ right: var(--vortx-space-md);
1046
+ width: 32px;
1047
+ height: 32px;
1048
+ background: var(--vortx-surface);
1049
+ border: 1px solid var(--vortx-border);
1050
+ border-radius: 50%;
1051
+ display: flex;
1052
+ align-items: center;
1053
+ justify-content: center;
1054
+ cursor: pointer;
1055
+ font-size: 14px;
1056
+ font-weight: bold;
1057
+ backdrop-filter: blur(10px);
1058
+ z-index: 1000;
1059
+ transition: all 0.2s;
1060
+ color: var(--vortx-text-dim);
1061
+ }
1062
+ .help-trigger[data-v-f948bcd9]:hover {
1063
+ background: var(--vortx-primary);
1064
+ color: white;
1065
+ border-color: white;
1066
+ transform: scale(1.1);
1067
+ }
1068
+
1069
+ /* Help Modal */
1070
+ .help-modal-overlay[data-v-f948bcd9] {
1071
+ position: fixed;
1072
+ inset: 0;
1073
+ background: rgba(0, 0, 0, 0.4);
1074
+ backdrop-filter: blur(4px);
1075
+ z-index: 2000;
1076
+ display: flex;
1077
+ align-items: center;
1078
+ justify-content: center;
1079
+ }
1080
+ .help-modal[data-v-f948bcd9] {
1081
+ width: 340px;
1082
+ border-radius: var(--vortx-radius-lg);
1083
+ overflow: hidden;
1084
+ animation: vortxScaleIn 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
1085
+ }
1086
+ .help-header[data-v-f948bcd9] {
1087
+ padding: var(--vortx-space-md);
1088
+ border-bottom: 1px solid var(--vortx-border);
1089
+ display: flex;
1090
+ justify-content: space-between;
1091
+ align-items: center;
1092
+ }
1093
+ .help-header h3[data-v-f948bcd9] {
1094
+ margin: 0;
1095
+ font-size: 16px;
1096
+ }
1097
+ .shortcut-row[data-v-f948bcd9] {
1098
+ display: flex;
1099
+ justify-content: space-between;
1100
+ align-items: center;
1101
+ padding: 12px var(--vortx-space-md);
1102
+ border-bottom: 1px solid var(--vortx-border);
1103
+ }
1104
+ .shortcut-row[data-v-f948bcd9]:last-child {
1105
+ border-bottom: none;
1106
+ }
1107
+ .key-badge[data-v-f948bcd9] {
1108
+ background: var(--vortx-border);
1109
+ padding: 4px 10px;
1110
+ border-radius: var(--vortx-radius-sm);
1111
+ font-family: monospace;
1112
+ font-size: 12px;
1113
+ }
1114
+ .action-desc[data-v-f948bcd9] {
1115
+ font-size: 13px;
1116
+ color: var(--vortx-text-dim);
1117
+ }
1118
+ .close-btn[data-v-f948bcd9] {
1119
+ background: transparent;
1120
+ border: none;
1121
+ color: var(--vortx-text-dim);
1122
+ font-size: 20px;
1123
+ cursor: pointer;
1124
+ }
1125
+ @media (max-width: 768px) {
1126
+ .help-trigger[data-v-f948bcd9] {
1127
+ display: none;
1128
+ }
1129
+ }
1130
+
1131
+ /* Connecting Toast */
1132
+ .connecting-toast[data-v-f948bcd9] {
1133
+ position: fixed;
1134
+ top: var(--vortx-space-lg);
1135
+ left: 50%;
1136
+ transform: translateX(-50%);
1137
+ z-index: 2000;
1138
+ padding: 8px 16px;
1139
+ border-radius: var(--vortx-radius-full);
1140
+ display: flex;
1141
+ align-items: center;
1142
+ gap: 16px;
1143
+ animation: vortxSlideDown-f948bcd9 0.3s cubic-bezier(0.16, 1, 0.3, 1);
1144
+ }
1145
+ .toast-content[data-v-f948bcd9] {
1146
+ display: flex;
1147
+ align-items: center;
1148
+ gap: 16px;
1149
+ flex: 1;
1150
+ }
1151
+ .edge-config-group[data-v-f948bcd9] {
1152
+ display: flex;
1153
+ align-items: center;
1154
+ gap: 12px;
1155
+ }
1156
+ .vortx-input-sm[data-v-f948bcd9] {
1157
+ background: rgba(255, 255, 255, 0.05);
1158
+ border: 1px solid var(--vortx-border);
1159
+ border-radius: var(--vortx-radius-sm);
1160
+ padding: 6px 12px;
1161
+ color: white;
1162
+ font-size: 13px;
1163
+ width: 140px;
1164
+ height: 32px;
1165
+ }
1166
+ .vortx-input-sm.narrow[data-v-f948bcd9] {
1167
+ width: 60px;
1168
+ }
1169
+ .color-presets[data-v-f948bcd9] {
1170
+ display: flex;
1171
+ gap: 6px;
1172
+ }
1173
+ .color-dot[data-v-f948bcd9] {
1174
+ width: 18px;
1175
+ height: 18px;
1176
+ border-radius: 50%;
1177
+ cursor: pointer;
1178
+ transition: transform 0.2s;
1179
+ }
1180
+ .color-dot[data-v-f948bcd9]:hover {
1181
+ transform: scale(1.2);
1182
+ }
1183
+ @keyframes vortxPulse-f948bcd9 {
1184
+ 0% {
1185
+ transform: scale(1);
1186
+ opacity: 1;
1187
+ }
1188
+ 50% {
1189
+ transform: scale(1.2);
1190
+ opacity: 0.7;
1191
+ }
1192
+ 100% {
1193
+ transform: scale(1);
1194
+ opacity: 1;
1195
+ }
1196
+ }
1197
+ @keyframes vortxSlideDown-f948bcd9 {
1198
+ from {
1199
+ transform: translate(-50%, -20px);
1200
+ opacity: 0;
1201
+ }
1202
+ to {
1203
+ transform: translate(-50%, 0);
1204
+ opacity: 1;
1205
+ }
1206
+ }