.wkf-toolbox-item { cursor: grab; color: var(--color-neutral); } .wkf-toolbox-item:active { cursor: grabbing; } .wkf-canvas { position: relative; min-height: 230px; background-image: linear-gradient(rgba(0,0,0,.1) 1px, transparent 1px), linear-gradient(90deg, rgba(0,0,0,.1) 1px, transparent 1px); background-size: 20px 20px; } .wkf-workflow-component { position: absolute; cursor: move; border: 2px solid transparent; transition: all 0.2s; height: 64px; color: var(--color-neutral); } .wkf-workflow-component:hover { border-color: #3b82f6; transform: scale(1.02); } .wkf-workflow-component.selected { border-color: #ef4444; box-shadow: 0 0 10px rgba(239, 68, 68, 0.3); } .wkf-workflow-component.dragging { transition: none; } .wkf-connection-line { position: absolute; pointer-events: none; z-index: 1; } .wkf-connection-point { position: absolute; width: 12px; height: 12px; background: #3b82f6; border-radius: 50%; cursor: crosshair; border: 2px solid white; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: background-color 0.2s, transform 0.2s; } .wkf-connection-point.potential-connection { box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5); animation: pulse 0.7s infinite; } .wkf-connection-point.potential-start { background: #ef4444; } .wkf-output-point { right: -6px; top: 50%; transform: translateY(-50%); } .wkf-input-point { left: -6px; top: 50%; transform: translateY(-50%); } .wkf-connection-point:hover { background: #ef4444; transform: translateY(-50%) scale(1.2); } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.7); } 70% { box-shadow: 0 0 0 6px rgba(59, 130, 246, 0); } 100% { box-shadow: 0 0 0 0 rgba(59, 130, 246, 0); } }