.cust-root{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:hidden;background:radial-gradient(ellipse 60% 50% at 20% 0%,rgba(34,211,238,.18) 0%,transparent 60%),radial-gradient(ellipse 50% 40% at 85% 20%,rgba(168,85,247,.18) 0%,transparent 60%),radial-gradient(ellipse 70% 60% at 50% 100%,rgba(91,140,255,.22) 0%,transparent 70%),linear-gradient(135deg,#0f1322,#161425 45%,#0d1320);padding:20px}.cust-blob{position:absolute;border-radius:50%;filter:blur(80px);opacity:.45;z-index:0;pointer-events:none;mix-blend-mode:screen}.cust-blob-1{width:380px;height:380px;background:#5b8cff;top:-80px;left:-60px;animation:float1 14s ease-in-out infinite}.cust-blob-2{width:320px;height:320px;background:#a855f7;bottom:-80px;right:-40px;animation:float2 16s ease-in-out infinite}.cust-blob-3{width:260px;height:260px;background:#22d3ee;top:40%;left:-100px;animation:float3 18s ease-in-out infinite}.cust-blob-4{width:240px;height:240px;background:#f472b6;top:10%;right:-80px;animation:float4 20s ease-in-out infinite}.cust-blob-5{width:220px;height:220px;background:#f59e0b;bottom:15%;left:30%;opacity:.32;animation:float5 22s ease-in-out infinite}.cust-blob-6{width:280px;height:280px;background:#10b981;top:55%;right:10%;opacity:.28;animation:float6 24s ease-in-out infinite}@keyframes float1{0%,to{transform:translate(0)}50%{transform:translate(40px,30px)}}@keyframes float2{0%,to{transform:translate(0)}50%{transform:translate(-30px,-40px)}}@keyframes float3{0%,to{transform:translate(0) scale(1)}50%{transform:translate(60px,-40px) scale(1.1)}}@keyframes float4{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-50px,50px) scale(1.08)}}@keyframes float5{0%,to{transform:translate(0)}50%{transform:translate(30px,-60px)}}@keyframes float6{0%,to{transform:translate(0) scale(1)}50%{transform:translate(-40px,-30px) scale(1.12)}}.cust-card{position:relative;z-index:1;width:100%;max-width:460px;background:#1b1f2ab3;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:20px;padding:36px 32px;box-shadow:0 24px 80px #00000080}.cust-title{font-size:34px;font-weight:700;text-align:center;letter-spacing:3px;background:linear-gradient(135deg,#5b8cff,#a855f7);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.cust-subtitle{text-align:center;color:var(--text-dim);margin:6px 0 24px;font-size:13px}.cust-tabs{display:flex;gap:8px;margin-bottom:24px;background:#00000040;padding:4px;border-radius:12px}.cust-tabs button{flex:1;background:transparent;border:none;color:var(--text-dim);padding:10px;border-radius:9px;cursor:pointer;font-size:14px;transition:all .2s}.cust-tabs button.active{background:#5b8cff2e;color:#fff}.cust-input-group{display:flex;flex-direction:column;gap:12px}.cust-input-group input{width:100%;padding:14px 16px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:#00000040;color:#fff;font-size:15px;text-align:center;letter-spacing:1px}.cust-input-group input:focus{outline:none;border-color:#5b8cff}.cust-btn{width:100%;padding:14px;border-radius:12px;border:none;background:linear-gradient(135deg,#5b8cff,#4a7bef);color:#fff;font-size:15px;font-weight:600;cursor:pointer;transition:all .2s}.cust-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 8px 24px #5b8cff66}.cust-btn:disabled{opacity:.5;cursor:not-allowed}.cust-btn.ghost{background:#ffffff14}.cust-status{margin-top:16px;padding:12px 16px;border-radius:12px;font-size:14px;text-align:center}.cust-status.error{background:#f871711f;border:1px solid rgba(248,113,113,.3);color:#f87171}.cust-status.success{background:#34d3991f;border:1px solid rgba(52,211,153,.3);color:#34d399}.cust-product{margin-top:12px;padding:10px;background:#0000004d;border-radius:8px}.cust-product code{color:#fff;font-family:var(--mono);word-break:break-all}.cust-progress-wrap{margin-top:8px}.cust-progress-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:13px;color:var(--text-dim)}.cust-progress-head b{color:#5b8cff;font-size:16px}.cust-progress-track{height:8px;background:#0000004d;border-radius:4px;overflow:hidden}.cust-progress-bar{height:100%;background:linear-gradient(90deg,#5b8cff,#a855f7);border-radius:4px;transition:width .4s}.cust-log{margin-top:16px;max-height:180px;overflow:auto;background:#0006;border-radius:10px;padding:10px 12px;font-family:var(--mono);font-size:11px;color:var(--text-dim);line-height:1.6}.cust-query-card{margin-top:16px;background:#ffffff08;border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:16px}.cust-query-row{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.05);font-size:14px}.cust-query-row:last-child{border-bottom:none}.cust-query-row span{color:var(--text-dim)}.cust-query-row code{font-family:var(--mono);color:#fff}.cust-admin-link{position:relative;z-index:1;margin-top:24px;color:var(--text-faint);text-decoration:none;font-size:13px}.cust-admin-link:hover{color:var(--text-dim)}.cust-info-bar{display:flex;justify-content:center;align-items:center;gap:24px;margin-bottom:20px;padding:12px 16px;background:#34d39914;border:1px solid rgba(52,211,153,.2);border-radius:12px;font-size:13px;color:var(--text-dim)}.cust-info-item{display:flex;flex-direction:column;align-items:center;gap:4px}.cust-info-label{font-size:12px;color:var(--text-dim)}.cust-info-val{color:#34d399;font-size:18px}.cust-info-divider{width:1px;height:36px;background:#ffffff1a}.cust-slot-grid{display:flex;flex-wrap:wrap;gap:3px;max-width:160px;justify-content:center;margin-top:2px}.cust-slot{width:8px;height:8px;border-radius:2px}.cust-slot.free{background:#34d39959}.cust-slot.busy{background:#fbbf24}.cust-info-bar b{color:#34d399}.cust-textarea{width:100%;padding:12px 14px;border-radius:12px;border:1px solid rgba(255,255,255,.1);background:#00000040;color:#fff;font-family:var(--mono);font-size:13px;resize:vertical}.cust-textarea:focus{outline:none;border-color:#5b8cff}.cust-batch-results{margin-top:16px;max-height:280px;overflow:auto;display:flex;flex-direction:column;gap:6px}.cust-batch-row{display:flex;justify-content:space-between;gap:12px;padding:8px 12px;border-radius:8px;font-size:13px;background:#ffffff08}.cust-batch-row code{font-family:var(--mono);color:var(--text-dim)}.cust-batch-row.ok span{color:#34d399}.cust-batch-row.fail span{color:#f87171}.cust-token-hint{font-size:12px;color:var(--text-dim);line-height:1.6;padding:4px 2px}.cust-token-hint a{color:#5b8cff;margin-left:6px;text-decoration:none}.cust-token-hint a:hover{text-decoration:underline}:root{--bg: #0f1117;--bg-soft: #161922;--bg-card: #1b1f2a;--bg-hover: #232838;--border: #2a3040;--text: #e6e9ef;--text-dim: #9aa3b2;--text-faint: #6b7280;--primary: #5b8cff;--primary-dim: #2f4d8f;--success: #34d399;--warn: #fbbf24;--error: #f87171;--radius: 10px;--mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;font-size:14px;line-height:1.5}.app{display:grid;grid-template-columns:minmax(0,220px) minmax(0,1fr);height:100vh;min-height:0}.sidebar{background:var(--bg-soft);border-right:1px solid var(--border);display:flex;flex-direction:column;padding:16px 0}.brand{padding:0 20px 16px;font-weight:700;font-size:18px;letter-spacing:.5px}.brand small{display:block;font-weight:400;font-size:11px;color:var(--text-faint);letter-spacing:0}.nav-item{padding:10px 20px;cursor:pointer;color:var(--text-dim);display:flex;gap:10px;align-items:center;border-left:3px solid transparent}.nav-item:hover{background:var(--bg-hover);color:var(--text)}.nav-item.active{color:var(--text);border-left-color:var(--primary);background:var(--bg-hover)}.main{overflow:auto;padding:16px 20px;min-width:0;min-height:0}.page-title{font-size:20px;font-weight:700;margin:0 0 4px}.page-sub{color:var(--text-dim);margin:0 0 20px;font-size:13px}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:16px}.card-title{font-weight:600;margin:0 0 12px;display:flex;align-items:center;justify-content:space-between}button{font-family:inherit;font-size:13px;border:1px solid var(--border);background:var(--bg-hover);color:var(--text);padding:7px 14px;border-radius:8px;cursor:pointer;transition:background .15s,border-color .15s}button:hover{background:var(--bg-card);border-color:var(--primary-dim)}button.primary{background:var(--primary);border-color:var(--primary);color:#fff}button.primary:hover{background:#4a7bef}button.danger{color:var(--error);border-color:#5a2a2a}button.ghost{background:transparent}button:disabled{opacity:.45;cursor:not-allowed}button.sm{padding:4px 9px;font-size:12px}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.spacer{flex:1}label.field{display:block;margin-bottom:12px}.field-label{display:flex;align-items:baseline;gap:6px;margin-bottom:4px;font-size:13px}.field-label .req{color:var(--error)}.field-help{color:var(--text-faint);font-size:11px;margin-top:3px}input[type=text],input[type=password],input[type=number],textarea,select{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:7px;color:var(--text);padding:7px 10px;font-family:inherit;font-size:13px}input:focus,textarea:focus,select:focus{outline:none;border-color:var(--primary)}textarea{resize:vertical;min-height:60px;font-family:var(--mono)}.switch{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.switch input{width:auto}.group-block{border:1px solid var(--border);border-radius:8px;padding:12px;margin-bottom:12px}.group-title{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--text-faint);margin-bottom:10px}.advanced-toggle{color:var(--primary);cursor:pointer;font-size:12px;-webkit-user-select:none;user-select:none}table{width:100%;border-collapse:collapse;font-size:13px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border)}th{color:var(--text-dim);font-weight:600;font-size:12px}tr:hover td{background:var(--bg-hover)}.editor-grid{display:grid;grid-template-columns:minmax(160px,220px) minmax(180px,1fr) minmax(240px,340px);gap:12px;align-items:stretch;min-height:0;width:100%}.editor-grid>.card{min-height:320px;max-height:min(78vh,calc(100vh - 200px));overflow:auto;min-width:0}@media(max-width:1100px){.editor-grid{grid-template-columns:1fr}.editor-grid>.card{max-height:none;min-height:200px}}.palette-item{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:8px;cursor:grab}.palette-item:hover{border-color:var(--primary-dim)}.palette-item .pi-title{font-size:13px;font-weight:500}.palette-item .pi-desc{font-size:11px;color:var(--text-faint)}.cat-label{font-size:11px;text-transform:uppercase;color:var(--text-faint);margin:12px 0 6px;letter-spacing:.5px}.pipeline{display:flex;flex-direction:column;gap:0}.pl-step{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px 12px;cursor:pointer;position:relative}.pl-step.selected{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}.pl-step.disabled{opacity:.5}.pl-step .pl-head{display:flex;align-items:center;gap:8px}.pl-step .pl-idx{width:22px;height:22px;border-radius:50%;background:var(--primary-dim);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px;flex-shrink:0}.pl-step .pl-title{font-weight:500}.pl-step .pl-step-id{font-size:11px;color:var(--text-faint);font-family:var(--mono)}.pl-connector{width:2px;height:16px;background:var(--border);margin-left:23px}.pl-actions{display:flex;gap:4px}.badge{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:500}.badge.cap{background:var(--primary-dim);color:#cdd}.badge.builtin{background:#3a2f5a;color:#c5b3ff}.badge.success{background:#14432f;color:var(--success)}.badge.failed{background:#4a1f1f;color:var(--error)}.badge.running{background:#1f3a4a;color:#7dd3fc}.badge.pending{background:var(--bg-hover);color:var(--text-dim)}.badge.aborted{background:#44400f;color:var(--warn)}.badge.skipped{background:var(--bg-hover);color:var(--text-faint)}.progress{height:6px;background:var(--bg);border-radius:3px;overflow:hidden}.progress>div{height:100%;background:var(--primary);transition:width .3s}.logbox{background:#0a0c11;border:1px solid var(--border);border-radius:8px;padding:10px;font-family:var(--mono);font-size:12px;height:360px;overflow:auto}.log-line{white-space:pre-wrap;word-break:break-all;padding:1px 0}.log-line .lt{color:var(--text-faint)}.log-line.error{color:var(--error)}.log-line.warn{color:var(--warn)}.log-line.info{color:var(--text)}.log-line.debug{color:var(--text-dim)}.issues{background:#3a1f1f;border:1px solid #5a2a2a;border-radius:8px;padding:10px 12px;margin-bottom:12px;font-size:12px}.issues .issue{color:var(--error)}.channel-test-block{display:flex;flex-direction:column;gap:10px}.test-result-banner{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:10px;border:1px solid transparent}.test-result-banner.pending{background:#5b8cff1f;border-color:#5b8cff59;color:#93c5fd}.test-result-banner.ok{background:#34d3991f;border-color:#34d39973;color:var(--success)}.test-result-banner.fail{background:#f871711f;border-color:#f8717173;color:var(--error)}.test-result-icon{font-size:22px;font-weight:700;line-height:1.2;min-width:22px}.test-result-title{font-size:15px;font-weight:700;margin-bottom:4px}.test-result-text{font-size:13px;line-height:1.5;opacity:.95}.ok-banner{background:#14432f;border:1px solid #1f6444;color:var(--success);border-radius:8px;padding:8px 12px;margin-bottom:12px;font-size:12px}.empty{color:var(--text-faint);text-align:center;padding:40px}.toast{position:fixed;bottom:20px;right:20px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;padding:12px 16px;box-shadow:0 8px 24px #0006;z-index:1000;max-width:360px}.toast.error{border-color:#5a2a2a}.kv{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;font-size:12px}.kv .k{color:var(--text-dim)}.kv .v{font-family:var(--mono);word-break:break-all}.inline-input{display:inline-flex;gap:6px;align-items:center}
