/* IF 分支节点样式 - 自定义布局 */ .Blueprint-if-node { min-width: 200px; min-height: 120px; background: linear-gradient(180deg, #3d3d40 0%, #2a2a2d 100%); border: 1px solid rgba(255, 255, 255, 0.15); border-radius: 12px; box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.2) inset, 0 4px 12px rgba(0, 0, 0, 0.5), 0 0 20px rgba(156, 39, 176, 0.3); display: flex; flex-direction: column; position: relative; overflow: visible; } .Blueprint-if-node.selected { border-color: rgba(255, 165, 0, 0.6); box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.2) inset, 0 0 0 2px rgba(255, 165, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.5), 0 0 20px rgba(255, 165, 0, 0.4); } /* 内部发光效果 */ .Blueprint-if-node::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(circle at 20% 50%, rgba(156, 39, 176, 0.2) 0%, transparent 60%); border-radius: 12px; pointer-events: none; } /* 顶部光泽效果(类似图像中的光泽头部) */ .Blueprint-if-node-header { background: linear-gradient(180deg, rgba(156, 39, 176, 0.3) 0%, rgba(156, 39, 176, 0.1) 50%, transparent 100%); color: #fff; padding: 8px 16px; font-size: 13px; font-weight: 600; text-align: left; letter-spacing: 0.5px; position: relative; z-index: 1; border-radius: 12px 12px 0 0; } /* 自定义布局容器 - 使用 flex */ .Blueprint-if-node-body { position: relative; flex: 1; display: flex; flex-direction: column; padding: 12px 16px; z-index: 1; min-height: 100px; justify-content: space-between; } /* 第一行:执行输入和 True 输出 */ .Blueprint-if-node-top-row { display: flex; justify-content: space-between; align-items: flex-start; min-height: 30px; } /* 第二行:条件输入区域 */ .Blueprint-if-node-middle-row { display: flex; align-items: center; flex: 1; padding: 8px 0; } /* 第三行:False 输出 */ .Blueprint-if-node-bottom-row { display: flex; justify-content: flex-end; align-items: flex-end; min-height: 30px; } /* 左上:执行输入 */ .Blueprint-if-node-execution-input { display: flex; align-items: flex-start; justify-content: flex-start; } .Blueprint-if-node-execution-input .Blueprint-node-port { position: relative; left: 0; } /* 右上:true 输出 */ .Blueprint-if-node-true-output { display: flex; align-items: flex-start; justify-content: flex-end; } .Blueprint-if-node-true-output .Blueprint-node-port { position: relative; right: 0; } /* 左中:条件输入 */ .Blueprint-if-node-condition { display: flex; align-items: center; width: 100%; } /* 空条件提示 */ .Blueprint-if-condition-empty { color: #888; font-size: 11px; font-style: italic; } /* 右下:false 输出 */ .Blueprint-if-node-false-output { display: flex; align-items: flex-end; justify-content: flex-end; } .Blueprint-if-node-false-output .Blueprint-node-port { position: relative; right: 0; } /* 条件端口样式:让 bool 类型使用红色 */ .Blueprint-if-node .Blueprint-node-port.port-bool .Blueprint-node-port-dot { background: #f44336; border: none; width: 12px; height: 12px; border-radius: 50%; box-shadow: 0 0 6px rgba(244, 67, 54, 0.5); } .Blueprint-if-node .Blueprint-node-port.port-bool.connected .Blueprint-node-port-dot { background: #ef5350; box-shadow: 0 0 10px rgba(244, 67, 54, 0.7); } /* 条件标签样式 */ .Blueprint-if-node .Blueprint-node-port[data-port-type="data"] .Blueprint-node-port-label { color: #e0e0e0; font-size: 12px; font-weight: 500; margin-left: 6px; } /* true/false 输出端口标签样式 */ .Blueprint-if-node .Blueprint-node-port.output.port-execution .Blueprint-node-port-label { color: #ffffff !important; font-size: 12px; font-weight: 600; margin-right: 6px; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); display: inline-block; opacity: 1; visibility: visible; } /* 执行端口箭头样式 */ .Blueprint-if-node .Blueprint-node-port-arrow { filter: drop-shadow(0 0 4px rgba(255, 255, 255, 0.3)); } /* 确保端口可见且可交互 */ .Blueprint-if-node .Blueprint-node-port { pointer-events: auto; position: relative; display: flex; align-items: center; gap: 4px; z-index: 2; } .Blueprint-if-node .Blueprint-node-port.output { flex-direction: row; } .Blueprint-if-node .Blueprint-node-port.input { flex-direction: row; }