.node-card{border-radius:var(--node-radius);box-shadow:var(--node-shadow);background:#fffffff7;border:1px solid #d2dcfa73;min-width:230px;max-width:290px;transition:box-shadow .22s,transform .22s cubic-bezier(.34,1.4,.64,1),border-color .22s;position:relative;overflow:hidden}.node-card:hover{box-shadow:var(--node-shadow-hover);border-color:#b4c8ff8c;transform:translateY(-2px)}.node-card:before{content:"";pointer-events:none;z-index:0;border-radius:var(--node-radius) var(--node-radius) 0 0;height:60px;position:absolute;top:0;left:0;right:0}.node-card.cat-input:before{background:linear-gradient(#3a67f017 0%,#0000 100%)}.node-card.cat-process:before{background:linear-gradient(#7c5cf517 0%,#0000 100%)}.node-card.cat-gen:before{background:linear-gradient(#0ea87a17 0%,#0000 100%)}.node-card.cat-output:before{background:linear-gradient(#f07a3a17 0%,#0000 100%)}.node-card:after{content:"";pointer-events:none;z-index:1;opacity:.7;border-radius:0 3px 3px 0;width:3px;position:absolute;top:14px;bottom:14px;left:0}.node-card.cat-input:after{background:var(--color-input)}.node-card.cat-process:after{background:var(--color-process)}.node-card.cat-gen:after{background:var(--color-gen)}.node-card.cat-output:after{background:var(--color-output)}.node-card.selected{box-shadow:0 0 0 3px #5b84f52e, var(--node-shadow-hover);border-color:#5b84f599;transform:translateY(-2px)}.node-card.cat-process.selected{box-shadow:0 0 0 3px #7c5cf526, var(--node-shadow-hover);border-color:#7c5cf599}.node-card.cat-gen.selected{box-shadow:0 0 0 3px #0ea87a26, var(--node-shadow-hover);border-color:#0ea87a99}.node-card.cat-output.selected{box-shadow:0 0 0 3px #f07a3a26, var(--node-shadow-hover);border-color:#f07a3a99}.node-card.type-campaignNode,.node-card.type-channelNode{width:max-content;min-width:180px;max-width:none}.node-card.type-bannerComposerNode{min-width:340px;max-width:400px}.node-card.type-batchExportNode{min-width:300px;max-width:360px}.node-card.type-imageGenNode{min-width:280px;max-width:320px}.node-card.type-copyVariantsNode{min-width:260px;max-width:300px}.node-card.type-creativeNode{min-width:240px;max-width:260px}.node-card.type-bannerGridNode,.node-card.type-bannerMasterNode,.node-card.type-bannerSlaveNode,.node-card.type-bannerPreviewAllNode{width:max-content;min-width:300px;max-width:none;overflow:visible}.node-card.type-bannerGroupNode{box-shadow:none;background:0 0;border:none;border-radius:0;width:100%;min-width:300px;max-width:none;height:100%;overflow:visible;z-index:-1!important}.node-card.type-bannerGroupNode:hover{box-shadow:none;border-color:#0000;transform:none}.node-card.type-bannerGroupNode:before,.node-card.type-bannerGroupNode:after{display:none}.node-step-badge{background:var(--color-input);color:#fff;letter-spacing:0;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;font-size:9px;font-weight:700;display:inline-flex}.node-header{z-index:1;align-items:center;gap:8px;padding:12px 14px 10px 16px;display:flex;position:relative}.node-header:after{content:"";background:linear-gradient(90deg,#0000,#b4c3f073 20% 80%,#0000);height:1px;position:absolute;bottom:0;left:14px;right:14px}.node-icon{border-radius:9px;flex-shrink:0;justify-content:center;align-items:center;width:30px;height:30px;display:flex}.node-icon.cat-input{color:#2a52cc;background:linear-gradient(135deg,#dce4ff 0%,#b3c5ff 100%)}.node-icon.cat-process{color:#5e35d4;background:linear-gradient(135deg,#ede8ff 0%,#cbb8ff 100%)}.node-icon.cat-gen{color:#0a8a62;background:linear-gradient(135deg,#d4f5e8 0%,#9de8c8 100%)}.node-icon.cat-output{color:#c05a1a;background:linear-gradient(135deg,#ffe8d6 0%,#ffbd96 100%)}.node-title{font-family:var(--font-ui);font-size:var(--text-md);font-weight:var(--fw-semi);letter-spacing:-.01em;color:var(--color-text);flex:1}.node-badge{letter-spacing:.06em;text-transform:uppercase;border-radius:20px;padding:2px 7px;font-size:9px;font-weight:600}.badge-input{color:var(--color-input);background:#3a67f01a}.badge-process{color:var(--color-process);background:#7c5cf51a}.badge-gen{color:var(--color-gen);background:#0ea87a1a}.badge-output{color:var(--color-output);background:#f07a3a1a}.node-body{z-index:1;flex-direction:column;gap:8px;padding:10px 12px 12px;display:flex;position:relative}.node-error-banner{color:#dc2626;background:#fff5f5;border:1px solid #fecaca;border-radius:10px;align-items:flex-start;gap:6px;margin:0 12px 6px;padding:6px 8px;font-size:11px;display:flex}.field-label{font-family:var(--font-ui);font-size:var(--text-micro);font-weight:var(--fw-bold);color:var(--color-text-muted);letter-spacing:.06em;text-transform:uppercase;margin-bottom:4px}.field-required{color:#dc2626}.field-input,.field-textarea,.field-select{width:100%;font-size:var(--text-base);font-family:var(--font-ui);color:var(--color-text);background:#f4f7ffcc;border:1px solid #d0d9f0b3;border-radius:10px;outline:none;padding:7px 10px;transition:border-color .15s,box-shadow .15s,background .15s}.field-input:focus,.field-textarea:focus,.field-select:focus{background:#fff;border-color:#5b84f599;box-shadow:0 0 0 3px #5b84f51f}.field-input.valid{border-color:#34d39999}.field-input.invalid{border-color:#f8717199}.field-textarea{resize:vertical;min-height:64px;line-height:1.5}.field-select{cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%237A8AB0' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 10px center;background-repeat:no-repeat;padding-right:28px}.field-select option{color:var(--color-text);background:#fff}.field-hint{color:var(--color-text-muted);margin-top:2px;font-size:10px}.field-error{color:#dc2626;margin-top:2px;font-size:10px}.field-charcount{color:var(--color-text-muted);text-align:right;font-size:10px}.field-charcount.over{color:#dc2626}.field-row{grid-template-columns:1fr 1fr;gap:8px;display:grid}.field-divider{background:linear-gradient(90deg,#0000,#b4c3f066 30% 70%,#0000);height:1px;margin:2px 0}.port-indicator{border-radius:20px;align-items:center;gap:4px;padding:3px 8px;font-size:10px;display:inline-flex}.port-connected{color:var(--color-gen);background:#0ea87a1a;border:1px solid #0ea87a33}.port-disconnected{color:var(--color-text-muted);background:#f4f7ffcc;border:1px solid #d0d9f0b3}.variant-list{flex-direction:column;gap:4px;display:flex}.variant-chip{background:#f4f7ffcc;border:1px solid #d0d9f0b3;border-radius:10px;align-items:center;gap:6px;padding:5px 9px;display:flex}.variant-chip input{color:var(--color-text);font-size:11px;font-family:var(--font-ui);background:0 0;border:none;outline:none;flex:1}.variant-remove{cursor:pointer;color:var(--color-text-muted);align-items:center;display:flex}.variant-remove:hover{color:#dc2626}.add-variant{color:var(--blue-500);cursor:pointer;background:0 0;border:none;align-items:center;gap:4px;padding:2px 0;font-size:11px;font-weight:500;display:flex}.add-variant:hover{opacity:.7}.node-status{font-size:var(--text-sm);font-family:var(--font-ui);font-weight:var(--fw-medium);border-radius:10px;align-items:center;gap:6px;padding:5px 10px;display:flex}.status-idle{color:var(--color-text-muted);background:#f4f7ffcc;border:1px solid #d0d9f0b3}.status-running,.status-done{color:var(--color-gen);background:#0ea87a14;border:1px solid #0ea87a33}.status-error{color:#dc2626;background:#fff5f5e6;border:1px solid #fecacab3}.status-dot{border-radius:50%;flex-shrink:0;width:6px;height:6px}.status-idle .status-dot{background:var(--color-text-muted)}.status-running .status-dot{background:var(--color-gen);animation:1s infinite pulse}.status-done .status-dot{background:var(--color-gen)}.status-error .status-dot{background:#dc2626}.format-grid{grid-template-columns:1fr 1fr;gap:6px;display:grid}.format-btn{cursor:pointer;background:#f4f7ffcc;border:1px solid #d0d9f0b3;border-radius:10px;flex-direction:column;align-items:center;gap:4px;padding:7px;transition:all .15s;display:flex}.format-btn:hover,.format-btn.active{background:#5b84f512;border-color:#5b84f580}.format-ratio{font-family:var(--font-mono);color:var(--color-text);font-size:11px;font-weight:500}.format-label{color:var(--color-text-muted);font-size:9px}.format-rect{background:var(--blue-100);border-radius:2px}.image-grid{grid-template-columns:1fr 1fr;gap:4px;display:grid}.image-thumb{aspect-ratio:1;cursor:pointer;border:2px solid #0000;border-radius:10px;transition:border-color .15s;position:relative;overflow:hidden}.image-thumb:hover{border-color:var(--blue-400)}.image-thumb.selected{border-color:var(--blue-500)}.image-thumb img{object-fit:cover;width:100%;height:100%}.image-selected-badge{background:var(--blue-500);color:#fff;border-radius:50%;justify-content:center;align-items:center;width:16px;height:16px;font-size:9px;font-weight:700;display:flex;position:absolute;top:4px;right:4px}.gen-placeholder{aspect-ratio:4/3;width:100%;color:var(--color-text-muted);font-size:11px;font-family:var(--font-mono);background:#f4f7ffcc;border:1.5px dashed #d0d9f0cc;border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:6px;display:flex}.gen-spinner{border:2px solid #d0d9f0b3;border-top-color:var(--blue-400);border-radius:50%;width:22px;height:22px;animation:.8s linear infinite spin}.canvas-wrap{background:#f4f7ffcc;border:1px solid #d0d9f0b3;border-radius:12px;width:100%;position:relative;overflow:hidden}.canvas-wrap canvas{width:100%;height:auto;display:block}html.dark .node-card{background:var(--color-node-bg);border-color:var(--color-node-border)}html.dark .node-card:hover{border-color:#ffffff24}html.dark .node-header:after{background:linear-gradient(90deg,#0000,#ffffff0f 20% 80%,#0000)}html.dark .node-icon.cat-input{color:#6b95ff;background:#6b95ff24}html.dark .node-icon.cat-process{color:#a78bfa;background:#a78bfa24}html.dark .node-icon.cat-gen{color:#34d399;background:#34d39924}html.dark .node-icon.cat-output{color:#fb923c;background:#fb923c24}html.dark .node-error-banner{color:#f87171;background:#dc26261f;border-color:#dc26264d}html.dark .field-input,html.dark .field-textarea,html.dark .field-select{background:var(--color-field-bg);border-color:var(--color-field-border);color:var(--color-text)}html.dark .field-input:focus,html.dark .field-textarea:focus,html.dark .field-select:focus{background:#ffffff0f;border-color:#6b95ff80;box-shadow:0 0 0 3px #6b95ff1a}html.dark .field-select option{color:var(--color-text);background:#18181b}html.dark .field-divider{background:linear-gradient(90deg,#0000,#ffffff14 30% 70%,#0000)}html.dark .gen-placeholder{border-color:#ffffff1a}html.dark .port-disconnected,html.dark .variant-chip{background:var(--color-field-bg);border-color:var(--color-field-border)}html.dark .variant-chip input{color:var(--color-text)}html.dark .status-idle{background:var(--color-field-bg);border-color:var(--color-field-border)}html.dark .status-error{color:#f87171;background:#dc26261a;border-color:#dc26264d}html.dark .format-btn{background:var(--color-field-bg);border-color:var(--color-field-border)}html.dark .format-btn:hover,html.dark .format-btn.active{background:#5b84f524;border-color:#5b84f566}html.dark .format-rect{background:#5b84f540}html.dark .gen-placeholder{background:var(--color-field-bg);border-color:#3250b459}html.dark .gen-spinner{border-color:var(--color-field-border);border-top-color:var(--blue-400)}html.dark .canvas-wrap{background:var(--color-field-bg);border-color:var(--color-field-border)}
