:root{--brand:#1456f0;--brand-deep:#17437d;--brand-light:#60a5fa;--brand-soft:#1456f014;--pink:#ea5ec1;--bg:#fff;--bg-soft:#fafbfc;--bg-sider:#f8f9fb;--text:#18181b;--text-2:#45515e;--text-3:#8e8e93;--border:#e5e7eb;--border-soft:#f0f0f0;--success:#16a34a;--success-bg:#e8ffea;--warning:#b45309;--warning-bg:#fef4e6;--danger:#f04438;--danger-bg:#fee4e2;--info-bg:#e0e7ff;--shadow-sm:0 1px 2px #0000000a;--shadow:0 4px 6px #00000014;--shadow-lg:0 12px 16px -4px #24242414;--radius:12px;--radius-sm:8px;--radius-lg:20px;--radius-pill:9999px}html,body{margin:0;padding:0}body{color:var(--text);background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,DM Sans,sans-serif;font-size:14px;line-height:1.5}button{cursor:pointer;background:0 0;border:none;font-family:inherit}code{background:#f3f4f6;border-radius:4px;padding:2px 6px;font-family:ui-monospace,SF Mono,monospace;font-size:11.5px}.layout{min-height:100vh;display:flex}.sidebar{background:var(--bg-sider);border-right:1px solid var(--border-soft);flex-direction:column;flex-shrink:0;width:232px;height:100vh;padding:18px 12px;display:flex;position:sticky;top:0;overflow-y:auto}.brand{border-bottom:1px solid var(--border-soft);z-index:1;background:var(--bg-sider);align-items:center;gap:10px;margin-bottom:16px;padding:4px 8px 18px;display:flex;position:sticky;top:0}.brand-mark{background:linear-gradient(135deg, var(--brand) 0%, var(--brand-light) 100%);color:#fff;border-radius:var(--radius-sm);justify-content:center;align-items:center;width:32px;height:32px;font-size:14px;font-weight:700;display:flex}.brand strong{font-size:15px;font-weight:600;display:block}.brand span{color:var(--text-3);font-size:11px}.nav-section{margin-bottom:14px}.nav-title{color:var(--text-3);text-transform:uppercase;letter-spacing:.5px;padding:6px 12px;font-size:11px;font-weight:600}.nav-link{border-radius:var(--radius-sm);color:var(--text-2);cursor:pointer;align-items:center;gap:10px;margin-bottom:2px;padding:8px 12px;font-size:13px;display:flex;position:relative}.nav-link:hover{background:var(--brand-soft);color:var(--brand)}.nav-link.active{background:var(--brand);color:#fff;font-weight:500}.nav-link.active .badge{color:var(--brand);background:#fff}.nav-link .icon{width:16px;font-size:14px}.nav-link .badge{background:var(--danger);color:#fff;border-radius:var(--radius-pill);margin-left:auto;padding:1px 7px;font-size:11px;font-weight:600}.sidebar-footer{border-top:1px solid var(--border-soft);justify-content:space-between;align-items:center;margin-top:auto;padding:12px 8px 4px;display:flex}.sidebar-footer .user{color:var(--text-2);align-items:center;gap:8px;font-size:12px;display:flex}.avatar{background:linear-gradient(135deg, var(--pink), var(--brand));color:#fff;border-radius:50%;justify-content:center;align-items:center;width:24px;height:24px;font-size:11px;font-weight:600;display:flex}.main{flex:1;min-width:0;padding:20px 32px;overflow-x:hidden}.topbar{border-bottom:1px solid var(--border-soft);justify-content:flex-end;align-items:center;gap:12px;margin-bottom:18px;padding-bottom:14px;display:flex}.topbar .icon-btn{border-radius:var(--radius-sm);border:1px solid var(--border);cursor:pointer;width:36px;height:36px;color:var(--text-2);background:#fff;justify-content:center;align-items:center;font-size:16px;display:flex;position:relative}.topbar .icon-btn:hover{color:var(--brand);border-color:var(--brand)}.topbar .icon-btn .dot{background:var(--danger);border:2px solid #fff;border-radius:50%;width:8px;height:8px;position:absolute;top:6px;right:6px}.page-header{justify-content:space-between;align-items:flex-start;margin-bottom:22px;display:flex}.page-header h1{margin:0 0 4px;font-size:22px;font-weight:600}.page-header .subtitle{color:var(--text-3);font-size:13px}.page-header .actions{gap:8px;display:flex}.btn{border-radius:var(--radius-sm);align-items:center;gap:6px;padding:7px 14px;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.btn-primary{background:var(--brand);color:#fff}.btn-primary:hover{background:var(--brand-deep)}.btn-default{color:var(--text);border:1px solid var(--border);background:#fff}.btn-default:hover{border-color:var(--brand);color:var(--brand)}.btn-danger{background:var(--danger);color:#fff}.btn-ghost{color:var(--brand)}.btn-ghost:hover{background:var(--brand-soft)}.btn-sm{padding:4px 10px;font-size:12px}.btn-lg{padding:10px 20px;font-size:14px}.btn[disabled]{opacity:.5;cursor:not-allowed}.tag{border-radius:var(--radius-pill);padding:2px 8px;font-size:11px;font-weight:500;line-height:1.6;display:inline-block}.tag-success{background:var(--success-bg);color:var(--success)}.tag-warning{background:var(--warning-bg);color:var(--warning)}.tag-danger{background:var(--danger-bg);color:var(--danger)}.tag-info{background:var(--info-bg);color:var(--brand)}.tag-default{color:var(--text-2);background:#f3f4f6}.card{border:1px solid var(--border-soft);border-radius:var(--radius);box-shadow:var(--shadow-sm);background:#fff;padding:20px}.card-title{justify-content:space-between;align-items:center;margin:0 0 14px;font-size:14px;font-weight:600;display:flex}.stat-row{grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px;display:grid}.stat-card{border:1px solid var(--border-soft);border-radius:var(--radius);background:#fff;padding:16px 20px}.stat-card .label{color:var(--text-3);margin-bottom:6px;font-size:12px}.stat-card .value{font-size:24px;font-weight:600;line-height:1.2}.stat-card .delta{color:var(--success);margin-top:4px;font-size:11px}.stat-card .delta.down{color:var(--danger)}.tabs{border-bottom:1px solid var(--border-soft);gap:4px;margin-bottom:16px;display:flex}.tab{color:var(--text-2);cursor:pointer;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;padding:8px 14px;font-size:13px;display:flex}.tab:hover{color:var(--brand)}.tab.active{color:var(--brand);border-bottom-color:var(--brand);font-weight:500}.tab .badge{background:var(--danger);color:#fff;border-radius:var(--radius-pill);padding:1px 6px;font-size:10px;font-weight:600}table{border-collapse:collapse;width:100%;font-size:13px}thead th{text-align:left;background:var(--bg-soft);color:var(--text-3);border-bottom:1px solid var(--border-soft);padding:11px 14px;font-size:12px;font-weight:500}tbody td{border-bottom:1px solid var(--border-soft);color:var(--text);padding:13px 14px}tbody tr:hover{background:var(--bg-soft)}tbody tr.clickable{cursor:pointer}.toolbar{background:var(--bg-soft);border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;padding:12px 14px;display:flex}.toolbar input,.toolbar select{border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;padding:6px 10px;font-size:13px}.toolbar input{width:200px}.toolbar .right{align-items:center;gap:8px;margin-left:auto;display:flex}.modal-mask{z-index:1000;background:#00000073;padding:40px 20px;display:none;position:fixed;inset:0;overflow-y:auto}.modal-mask.show{justify-content:center;align-items:flex-start;display:flex}.modal{border-radius:var(--radius);width:100%;max-width:720px;box-shadow:var(--shadow-lg);background:#fff;flex-direction:column;max-height:calc(100vh - 80px);display:flex}.modal-wide{max-width:920px}.modal-header{border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:center;padding:18px 24px;display:flex}.modal-header h3{margin:0;font-size:16px;font-weight:600}.modal-header .meta{color:var(--text-3);margin-top:2px;font-size:12px}.modal-close{color:var(--text-3);cursor:pointer;padding:0 4px;font-size:22px;line-height:1}.modal-body{flex:1;padding:20px 24px;overflow-y:auto}.modal-footer{border-top:1px solid var(--border-soft);justify-content:flex-end;gap:8px;padding:14px 24px;display:flex}.modal-footer .left{margin-right:auto}.form-row{margin-bottom:16px}.form-row label{color:var(--text-2);margin-bottom:6px;font-size:12px;font-weight:500;display:block}.form-row label .required{color:var(--danger)}.form-row input[type=text],.form-row input[type=number],.form-row textarea,.form-row select{border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;padding:8px 10px;font-family:inherit;font-size:13px}.form-row textarea{resize:vertical;min-height:80px}.form-row input:focus,.form-row textarea:focus,.form-row select:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft);outline:none}.form-row .help{color:var(--text-3);margin-top:4px;font-size:11px}.form-grid-2{grid-template-columns:1fr 1fr;gap:14px;display:grid}.form-grid-3{grid-template-columns:1fr 1fr 1fr;gap:14px;display:grid}.checkbox-row{flex-wrap:wrap;gap:8px;display:flex}.pill-radio{border:1px solid var(--border);border-radius:var(--radius-pill);color:var(--text-2);cursor:pointer;-webkit-user-select:none;user-select:none;padding:6px 14px;font-size:12px}.pill-radio.checked{background:var(--brand);color:#fff;border-color:var(--brand)}.switch{background:var(--border);cursor:pointer;vertical-align:middle;border-radius:999px;width:36px;height:20px;transition:background .2s;display:inline-block;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:16px;height:16px;transition:left .2s;position:absolute;top:2px;left:2px}.switch.on{background:var(--brand)}.switch.on:after{left:18px}.lifecycle{background:var(--bg-soft);border-radius:var(--radius);align-items:center;gap:0;padding:14px;display:flex}.lifecycle .stage{text-align:center;border:1px solid var(--border);color:var(--text-3);background:#fff;flex:1;padding:10px 8px;font-size:12px;position:relative}.lifecycle .stage:first-child{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}.lifecycle .stage:last-child{border-radius:0 var(--radius-sm) var(--radius-sm) 0}.lifecycle .stage+.stage{margin-left:-1px}.lifecycle .stage.done{background:var(--success);color:#fff;border-color:var(--success)}.lifecycle .stage.current{background:var(--brand);color:#fff;border-color:var(--brand);font-weight:600}.lifecycle .stage strong{font-size:13px;display:block}.lifecycle .stage small{opacity:.85;font-size:10px;display:block}.plan-step{border:1px solid var(--border);border-radius:var(--radius);background:#fff;margin-bottom:14px;padding:16px 18px;transition:all .2s}.plan-step.done{border-left:4px solid var(--success)}.plan-step.current{border-left:4px solid var(--brand);background:var(--brand-soft)}.plan-step.future{border-left:4px solid var(--border);opacity:.85}.plan-step-header{align-items:center;gap:10px;margin-bottom:12px;display:flex}.plan-step-num{background:var(--text-3);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:24px;height:24px;font-size:12px;font-weight:600;display:flex}.plan-step.done .plan-step-num{background:var(--success)}.plan-step.current .plan-step-num{background:var(--brand)}.plan-step h4{margin:0;font-size:14px;font-weight:600}.plan-step .stage-status{color:var(--text-3);margin-left:auto;font-size:11px}.plan-step .config-row{align-items:center;gap:12px;padding:6px 0;font-size:13px;display:flex}.plan-step .config-row .label-mini{color:var(--text-3);flex-shrink:0;width:80px}.plan-step .config-row select.inline{border:1px solid var(--border);background:#fff;border-radius:6px;padding:4px 8px;font-size:12px}.plan-step .config-row input.inline{border:1px solid var(--border);background:#fff;border-radius:6px;width:80px;padding:4px 8px;font-size:12px}.upload-step{border:1px solid var(--border);border-radius:var(--radius);gap:14px;margin-bottom:12px;padding:14px;display:flex}.upload-step.done{border-color:var(--success);background:#f0fdf4}.upload-step.current{border-color:var(--brand);background:var(--brand-soft)}.upload-step .step-num{background:var(--text-3);color:#fff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:26px;height:26px;font-size:12px;font-weight:600;display:flex}.upload-step.done .step-num{background:var(--success)}.upload-step.current .step-num{background:var(--brand)}.upload-step .step-body{flex:1}.upload-step h4{margin:0 0 4px;font-size:14px}.upload-step p{color:var(--text-3);margin:0;font-size:12px}.dropzone{border:2px dashed var(--border);border-radius:var(--radius);text-align:center;color:var(--text-3);background:var(--bg-soft);cursor:pointer;margin:10px 0;padding:30px 20px}.dropzone:hover{border-color:var(--brand);color:var(--brand)}.dropzone .icon{margin-bottom:6px;font-size:28px}.file-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px;margin-top:10px;display:grid}.file-card{border:1px solid var(--border-soft);border-radius:var(--radius-sm);text-align:center;background:#fff;padding:6px;font-size:11px}.file-card .preview{height:70px;color:var(--text-3);background:linear-gradient(135deg,#f3f4f6,#e5e7eb);border-radius:6px;justify-content:center;align-items:center;margin-bottom:4px;font-size:22px;display:flex}.file-card .name{color:var(--text-2);font-size:11px}.file-card .key{color:var(--text-3);margin-top:2px;font-size:10px}.drawer-mask{z-index:999;background:#0000004d;display:none;position:fixed;inset:0}.drawer-mask.show{display:block}.drawer{width:440px;height:100vh;box-shadow:var(--shadow-lg);z-index:1000;background:#fff;flex-direction:column;transition:right .25s;display:flex;position:fixed;top:0;right:-440px}.drawer.show{right:0}.drawer-header{border-bottom:1px solid var(--border-soft);justify-content:space-between;align-items:flex-start;padding:18px 20px;display:flex}.drawer-body{flex:1;padding:8px 12px;overflow-y:auto}.notif-item{border-bottom:1px solid var(--border-soft);cursor:pointer;border-radius:6px;padding:12px}.notif-item:hover{background:var(--bg-soft)}.notif-item.unread{border-left:3px solid var(--brand);background:#1456f00a}.notif-item .meta{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:4px;display:flex}.notif-item .src{color:var(--text-3);font-size:11px}.notif-item .ts{color:var(--text-3);margin-left:auto;font-size:11px}.notif-item .title{font-size:13px;font-weight:500}.notif-item .body{color:var(--text-2);margin-top:2px;font-size:12px;line-height:1.5}.page{display:none}.page.active{display:block}.persona-grid{grid-template-columns:repeat(3,1fr);grid-auto-rows:1fr;gap:14px;display:grid}.persona-card{border:1px solid var(--border-soft);border-radius:var(--radius);cursor:pointer;background:#fff;min-height:140px;padding:16px}.persona-card:hover{box-shadow:var(--shadow);border-color:var(--brand)}.persona-card .head{align-items:center;gap:10px;margin-bottom:12px;display:flex}.persona-card .head .avatar-lg{color:#fff;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;font-size:18px;display:flex}.persona-card .head h4{margin:0;font-size:14px}.persona-card .head small{color:var(--text-3);font-size:11px}.persona-card .meta{color:var(--text-2);margin-bottom:4px;font-size:12px}.persona-card .meta strong{color:var(--text)}.pool-grid{grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:16px;display:grid}.pool-card{border:1px solid var(--border-soft);border-radius:var(--radius);background:#fff;padding:16px}.pool-card h4{align-items:center;gap:8px;margin:0 0 4px;font-size:14px;display:flex}.pool-card .count{color:var(--brand);font-size:22px;font-weight:600}.pool-card .gender-split{color:var(--text-3);gap:8px;margin-top:8px;font-size:11px;display:flex}.device-grid{grid-template-columns:repeat(2,1fr);gap:12px;display:grid}.device-card{border:1px solid var(--border-soft);border-radius:var(--radius);background:#fff;padding:16px}.device-card .head{align-items:center;gap:10px;margin-bottom:10px;display:flex}.device-card .head h4{flex:1;margin:0;font-size:14px}.device-card .accounts{grid-template-columns:repeat(4,1fr);gap:6px;margin-top:10px;display:grid}.device-card .acc{background:var(--bg-soft);text-align:center;border-radius:6px;padding:6px;font-size:11px}.device-card .acc.locked{background:var(--warning-bg);color:var(--warning)}.device-card .acc.running{background:var(--brand-soft);color:var(--brand);font-weight:600}.device-card .acc.idle{color:var(--text-3)}.metric-grid{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.metric-card{background:var(--bg-soft);border-radius:var(--radius-sm);padding:12px}.metric-card .label{color:var(--text-3);margin-bottom:4px;font-size:11px}.metric-card .value{font-size:18px;font-weight:600}.bar-row{align-items:center;gap:8px;padding:4px 0;font-size:11px;display:flex}.bar-row .lbl{width:60px;color:var(--text-2);flex-shrink:0}.bar-row .bar{background:var(--bg-soft);border-radius:4px;flex:1;height:8px;overflow:hidden}.bar-row .bar>span{background:var(--brand);height:100%;display:block}.bar-row .pct{text-align:right;width:40px;color:var(--text-3)}.timeline{background:var(--bg-soft);border-radius:var(--radius-sm);padding:12px;font-size:12px}.timeline .row{color:var(--text-2);border-bottom:1px dashed var(--border);padding:6px 0}.timeline .row:last-child{border:none}.timeline .row strong{color:var(--text)}.reply-card{border:1px solid var(--border-soft);border-radius:var(--radius);background:#fff;margin-bottom:10px;padding:14px}.reply-card .keys{color:var(--text-3);margin-top:6px;font-size:11px}.reply-card .keys span{color:var(--warning);background:#fef3c7;border-radius:4px;margin-right:4px;padding:1px 6px;display:inline-block}html,body,#root{background:var(--bg);color:var(--text);margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,DM Sans,sans-serif;font-size:14px;line-height:1.5}*{box-sizing:border-box}a{color:inherit;text-decoration:none}.nav-link{text-decoration:none!important}.form-row input[type=password],.form-row input[type=date],.form-row input[type=datetime-local],.form-row input[type=email]{border:1px solid var(--border);border-radius:var(--radius-sm);width:100%;padding:8px 10px;font-family:inherit;font-size:13px}.form-row input[type=password]:focus,.form-row input[type=date]:focus,.form-row input[type=datetime-local]:focus,.form-row input[type=email]:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft);outline:none}.toolbar input[type=date]{border:1px solid var(--border);border-radius:var(--radius-sm);background:#fff;padding:6px 10px;font-family:inherit;font-size:13px}:root[data-theme=dark]{--bg:#0f172a;--bg-soft:#1e293b;--bg-sider:#0c1322;--text:#e5e7eb;--text-2:#cbd5e1;--text-3:#94a3b8;--border:#334155;--border-soft:#1f2937}:root[data-theme=dark] .card,:root[data-theme=dark] .stat-card,:root[data-theme=dark] .panel,:root[data-theme=dark] .modal,:root[data-theme=dark] .device-card,:root[data-theme=dark] .persona-card,:root[data-theme=dark] .pool-card,:root[data-theme=dark] .reply-card,:root[data-theme=dark] .file-card,:root[data-theme=dark] .upload-step,:root[data-theme=dark] .plan-step{border-color:var(--border-soft);background:#111827}:root[data-theme=dark] .lifecycle .stage:not(.done):not(.current),:root[data-theme=dark] .toolbar input,:root[data-theme=dark] .toolbar select,:root[data-theme=dark] .form-row input,:root[data-theme=dark] .form-row select,:root[data-theme=dark] .form-row textarea,:root[data-theme=dark] .pill-radio,:root[data-theme=dark] .btn-default{color:var(--text);border-color:var(--border);background:#111827}:root[data-theme=dark] thead th{border-bottom-color:var(--border-soft);background:#0c1322}:root[data-theme=dark] tbody td{border-bottom-color:var(--border-soft)}:root[data-theme=dark] tbody tr:hover{background:#1e293b}:root[data-theme=dark] .login-page,:root[data-theme=dark] body{background:var(--bg)}:root[data-theme=dark] .tag-info{background:#1456f02e}:root[data-theme=dark] .tag-success{background:#16a34a2e}:root[data-theme=dark] .tag-warning{background:#b4530938}:root[data-theme=dark] .tag-danger{background:#f044382e}:root[data-theme=dark] .tag-default{color:var(--text-2);background:#1f2937}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm .xterm-scroll-area{visibility:hidden}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility,.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.ff-page{background:var(--bg);flex-direction:column;height:100%;min-height:0;display:flex}.ff-body{flex:1;gap:12px;min-height:0;display:flex}.ff-main{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.ff-drawer{border:1px solid var(--border-soft);background:#fff;border-radius:16px;flex-direction:column;flex-shrink:0;width:320px;transition:width .22s,opacity .22s;display:flex;overflow:hidden;box-shadow:0 1px 2px #00000008}.ff-drawer.collapsed{width:44px}.ff-drawer-toggle{border-bottom:1px solid var(--border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fafbfc;justify-content:space-between;align-items:center;padding:12px 14px;display:flex}.ff-drawer.collapsed .ff-drawer-toggle{border-bottom:none;flex-direction:column;gap:12px;padding:12px 8px}.ff-drawer-title{color:var(--text);align-items:center;gap:6px;font-size:13px;font-weight:600;display:flex}.ff-drawer-title .ff-counter{color:var(--brand);background:var(--brand-soft);border-radius:9999px;padding:1px 8px;font-size:11px;font-weight:500}.ff-drawer-collapse{cursor:pointer;color:var(--text-3);background:0 0;border:none;border-radius:6px;padding:4px 6px;font-size:14px;line-height:1}.ff-drawer-collapse:hover{background:var(--border-soft);color:var(--text)}.ff-drawer.collapsed .ff-drawer-body{display:none}.ff-drawer-body{flex:1;padding:12px 14px;overflow-y:auto}.ff-drawer-section{margin-bottom:18px}.ff-drawer-section:last-child{margin-bottom:0}.ff-drawer-section-head{align-items:center;gap:8px;margin-bottom:8px;display:flex}.ff-drawer-section-title{letter-spacing:.05em;text-transform:uppercase;color:var(--text-3);flex:1;font-size:11px;font-weight:600}.ff-drawer-section-action{cursor:pointer;color:var(--brand);background:0 0;border:none;border-radius:4px;padding:2px 6px;font-family:inherit;font-size:12px}.ff-drawer-section-action:hover{background:var(--brand-soft)}.ff-drawer-section-action:disabled{color:var(--text-3);cursor:not-allowed;background:0 0}.ff-group{border:1px solid var(--border-soft);background:#fff;border-radius:12px;margin-bottom:8px;padding:10px 12px;transition:border-color .15s,box-shadow .15s}.ff-group:hover{border-color:var(--brand-light)}.ff-group.active{border-color:var(--brand);background:var(--brand-soft)}.ff-group-head{align-items:center;gap:6px;display:flex}.ff-group-name{color:var(--text);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:13px;font-weight:500;overflow:hidden}.ff-group-name-edit{border:1px solid var(--brand-light);border-radius:6px;outline:none;flex:1;padding:3px 6px;font-family:inherit;font-size:13px}.ff-group-count{color:var(--text-3);background:var(--border-soft);border-radius:9999px;padding:1px 7px;font-size:11px}.ff-group-action{cursor:pointer;color:var(--text-3);background:0 0;border:none;border-radius:4px;padding:2px 5px;font-family:inherit;font-size:12px}.ff-group-action:hover{background:var(--border-soft);color:var(--text)}.ff-group-action.danger:hover{background:var(--danger-bg);color:var(--danger)}.ff-group-empty{color:var(--text-3);text-align:center;background:var(--bg-sider);border:1px dashed var(--border);border-radius:10px;padding:14px 8px;font-size:12px}.ff-drawer-devices{flex-direction:column;gap:6px;display:flex}.ff-drawer-device{border:1px solid var(--border-soft);cursor:pointer;-webkit-user-select:none;user-select:none;text-align:left;background:#fff;border-radius:10px;align-items:center;gap:8px;width:100%;padding:8px 10px;font-family:inherit;transition:all .15s;display:flex}.ff-drawer-device:hover:not(:disabled){border-color:var(--brand-light);background:var(--brand-soft)}.ff-drawer-device.checked{border-color:var(--brand);background:var(--brand-soft)}.ff-drawer-device:disabled{opacity:.55;cursor:not-allowed}.ff-drawer-device-check{border:1.5px solid var(--border);color:#0000;background:#fff;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:16px;height:16px;font-size:11px;transition:all .15s;display:flex}.ff-drawer-device.checked .ff-drawer-device-check{background:var(--brand);border-color:var(--brand);color:#fff}.ff-drawer-device-name{min-width:0;color:var(--text);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:13px;overflow:hidden}.ff-drawer-device-dot{background:#22c55e;border-radius:50%;flex-shrink:0;width:6px;height:6px;box-shadow:0 0 0 2px #22c55e2e}.ff-create-group{border:1px dashed var(--border);width:100%;color:var(--text-3);cursor:pointer;background:0 0;border-radius:10px;padding:9px;font-family:inherit;font-size:12px;transition:all .15s}.ff-create-group:hover:not(:disabled){border-color:var(--brand);color:var(--brand);background:var(--brand-soft)}.ff-create-group:disabled{opacity:.5;cursor:not-allowed}.ff-drawer-collapsed-icon{writing-mode:vertical-rl;color:var(--text-3);margin-top:4px;font-size:11px}.ff-drawer.left .ff-drawer-toggle{flex-direction:row-reverse}.ff-drawer.left.collapsed .ff-drawer-toggle{flex-direction:column}.ff-toolbar{display:none}.ff-toolbar-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.ff-toolbar-label{color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;margin-right:4px;font-size:12px;font-weight:500}.ff-chip{border:1px solid var(--border);color:var(--text-2);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fff;border-radius:9999px;align-items:center;gap:6px;padding:7px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:all .15s;display:inline-flex}.ff-chip:hover:not(:disabled){border-color:var(--brand-light);color:var(--brand);background:var(--brand-soft)}.ff-chip.active{background:var(--brand);color:#fff;border-color:var(--brand);box-shadow:0 2px 8px #1456f040}.ff-chip.active:hover{color:#fff;background:#0d47d8;border-color:#0d47d8}.ff-chip:disabled{opacity:.5;cursor:not-allowed}.ff-chip-dot{background:#22c55e;border-radius:50%;width:6px;height:6px;display:inline-block;box-shadow:0 0 0 2px #22c55e2e}.ff-chip.active .ff-chip-dot{background:#fff;box-shadow:0 0 0 2px #ffffff59}.ff-chip-spinner{border:1.5px solid;border-top-color:#0000;border-radius:50%;width:10px;height:10px;animation:.8s linear infinite ff-spin;display:inline-block}@keyframes ff-spin{to{transform:rotate(360deg)}}.ff-toolbar-actions{align-items:center;gap:12px;margin-left:auto;display:flex}.ff-control{color:var(--text-2);align-items:center;gap:6px;font-size:13px;display:flex}.ff-control select,.ff-control input[type=number]{border:1px solid var(--border);color:var(--text);background:#fff;border-radius:8px;outline:none;padding:6px 10px;font-family:inherit;font-size:13px;transition:border-color .15s,box-shadow .15s}.ff-control select{min-width:200px}.ff-control input[type=number]{width:72px}.ff-control select:focus,.ff-control input[type=number]:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}.ff-toggle{color:var(--text-3);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:12px;display:inline-flex}.ff-grid{flex:1;gap:12px;min-height:0;padding-bottom:4px;display:grid;overflow-y:auto}.ff-empty{border:1px dashed var(--border);color:var(--text-3);text-align:center;background:#fff;border-radius:20px;flex-direction:column;grid-column:1/-1;justify-content:center;align-items:center;min-height:180px;padding:32px 20px;display:flex}.ff-empty-emoji{opacity:.6;margin-bottom:14px;font-size:48px}.ff-empty-title{color:var(--text-2);margin-bottom:6px;font-size:16px;font-weight:500}.ff-empty-sub{color:var(--text-3);font-size:13px}.ff-panel{border:1px solid var(--border-soft);background:#fff;border-radius:16px;flex-direction:column;min-height:240px;transition:box-shadow .2s;display:flex;overflow:hidden;box-shadow:0 1px 2px #00000008}.ff-panel:hover{box-shadow:0 4px 12px #0000000d}.ff-panel.running{box-shadow:0 0 0 3px var(--brand-soft);border-color:#1456f04d}.ff-panel-head{border-bottom:1px solid var(--border-soft);background:#fafbfc;align-items:center;gap:10px;padding:12px 16px;display:flex}.ff-panel-status{border-radius:50%;flex-shrink:0;width:8px;height:8px}.ff-panel-status.online{background:#22c55e;box-shadow:0 0 0 3px #22c55e29}.ff-panel-status.running{background:var(--brand);box-shadow:0 0 0 3px var(--brand-soft);animation:1.6s ease-in-out infinite ff-pulse}@keyframes ff-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.3)}}.ff-panel-name{color:var(--text);white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;font-size:14px;font-weight:600;overflow:hidden}.ff-panel-task{color:var(--text-3);background:#f4f4f5;border-radius:4px;padding:2px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.ff-panel-action{border:1px solid var(--border);color:var(--text-2);cursor:pointer;background:#fff;border-radius:9999px;align-items:center;padding:4px 10px;font-family:inherit;font-size:12px;transition:all .15s;display:inline-flex}.ff-panel-action:hover:not(:disabled){border-color:var(--brand-light);color:var(--brand)}.ff-panel-action.stop{color:var(--danger);border-color:#f044384d}.ff-panel-action.stop:hover{background:var(--danger-bg)}.ff-panel-action:disabled{opacity:.4;cursor:not-allowed}.ff-panel-body{background:#fff;flex:1;overflow-y:auto}.ff-panel-empty{color:#94a3b8;justify-content:center;align-items:center;height:100%;padding:14px;font-size:12px;display:flex}.ff-friendly{background:#fff;flex-direction:column;gap:14px;padding:16px;display:flex}.ff-status-badge{border-radius:9999px;align-self:flex-start;align-items:center;gap:8px;padding:6px 14px;font-size:13px;font-weight:500;display:inline-flex}.ff-status-dot{background:currentColor;border-radius:50%;width:8px;height:8px}.ff-status-badge.running{color:var(--brand);background:#1456f01a}.ff-status-badge.running .ff-status-dot{animation:1.2s ease-in-out infinite ff-pulse}.ff-status-badge.succeeded{color:#16a34a;background:#16a34a1f}.ff-status-badge.failed{color:#dc2626;background:#dc26261f}.ff-status-badge.cancelled{color:#64748b;background:#64748b26}.ff-status-badge.idle{color:#94a3b8;background:#64748b1a}.ff-status-step{opacity:.75;margin-left:4px;font-size:12px;font-weight:400}.ff-progress{background:#f1f5f9;border-radius:9999px;width:100%;height:6px;overflow:hidden}.ff-progress-fill{background:linear-gradient(90deg, var(--brand), var(--brand-light));height:100%;transition:width .3s}.ff-current{border:1px solid var(--border-soft);background:#f8fafc;border-radius:10px;align-items:center;gap:10px;min-height:48px;padding:12px 16px;font-size:16px;line-height:1.4;display:flex}.ff-current-spinner{border:2px solid var(--brand-light);border-top-color:var(--brand);border-radius:50%;flex-shrink:0;width:14px;height:14px;animation:.9s linear infinite ff-spin}.ff-current-text{color:var(--text)}.ff-current-text.muted{color:var(--text-3);font-size:14px}.ff-current-text.success{color:#16a34a;font-weight:500}.ff-current-text.fail{color:#dc2626;font-weight:500}.ff-current-thinking{color:var(--text-2);font-size:14px;font-style:italic}.ff-history{flex-direction:column;gap:4px;font-size:13px;display:flex}.ff-history-title{color:var(--text-3);letter-spacing:.05em;text-transform:uppercase;margin-bottom:4px;font-size:11px;font-weight:500}.ff-history-row{color:var(--text-2);align-items:baseline;gap:8px;padding:4px 0;display:flex}.ff-history-tick{color:#16a34a;flex-shrink:0;font-weight:700}.ff-history-ts{color:var(--text-3);flex-shrink:0;font-family:ui-monospace,SFMono-Regular,monospace;font-size:11px}.ff-history-text{color:var(--text-2)}.ff-detail{border-top:1px dashed var(--border-soft);margin-top:4px;padding-top:10px}.ff-detail>summary{color:var(--text-3);cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0;font-size:12px}.ff-detail>summary:hover{color:var(--text-2)}.ff-detail-body{background:#0f172a;border-radius:6px;max-height:320px;margin-top:8px;padding:6px 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.6;overflow-y:auto}.ff-detail-empty{color:#94a3b8;padding:12px;font-size:12px}.ff-timeline{background:#0f172a;padding:6px 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;line-height:1.6}.ff-log-row{color:#e2e8f0;white-space:pre-wrap;word-break:break-word;border-left:3px solid #0000;padding:3px 12px}.ff-log-row.meta{color:#c7d2fe;background:#6366f114;border-left-color:#6366f1}.ff-log-row.error{color:#fecaca;background:#dc26261f;border-left-color:#dc2626}.ff-log-ts{color:#64748b;margin-right:8px}.ff-log-level{text-transform:uppercase;margin-right:8px;font-size:11px;font-weight:500}.ff-composer{border:1px solid var(--border);background:#fff;border-radius:18px;flex-direction:column;gap:8px;margin-top:12px;padding:10px 14px 12px;display:flex;box-shadow:0 4px 12px #0000000a}.ff-composer-bar{border-bottom:1px dashed var(--border-soft);flex-wrap:wrap;align-items:center;gap:8px;padding-bottom:6px;display:flex}.ff-composer-bar-spacer{flex:1}.ff-composer-bar .ff-control{color:var(--text-3);font-size:12px}.ff-composer-bar .ff-control select,.ff-composer-bar .ff-control input[type=number]{border:1px solid var(--border-soft);background:0 0;border-radius:6px;height:26px;padding:3px 8px;font-size:12px}.ff-composer-bar .ff-control select{min-width:160px;max-width:240px}.ff-composer-bar .ff-control input[type=number]{width:56px}.ff-composer-bar .ff-control select:hover,.ff-composer-bar .ff-control input[type=number]:hover{border-color:var(--border)}.ff-composer-bar .ff-toolbar-label{letter-spacing:.05em;font-size:11px}.ff-composer-bar-mini-btn{color:var(--text-3);cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:center;gap:4px;padding:4px 8px;font-family:inherit;font-size:12px;display:inline-flex}.ff-composer-bar-mini-btn:hover:not(:disabled){background:var(--border-soft);color:var(--text)}.ff-composer-bar-mini-btn:disabled{opacity:.4;cursor:not-allowed}.ff-composer-row{align-items:flex-end;gap:10px;display:flex}.ff-composer textarea{resize:none;color:var(--text);background:0 0;border:none;outline:none;flex:1;min-height:24px;max-height:160px;padding:4px 0;font-family:inherit;font-size:14px;line-height:1.5}.ff-composer textarea::placeholder{color:var(--text-3)}.ff-composer-hint{color:var(--text-3);white-space:nowrap;align-self:flex-end;padding-bottom:8px;font-size:11px}.ff-kbd{border:1px solid var(--border-soft);color:var(--text-2);background:#f4f4f5;border-radius:4px;padding:1px 6px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;display:inline-block}.ff-send-btn{background:var(--brand);color:#fff;cursor:pointer;white-space:nowrap;border:none;border-radius:9999px;align-items:center;gap:6px;padding:9px 18px;font-family:inherit;font-size:13px;font-weight:600;transition:all .15s;display:inline-flex;box-shadow:0 2px 8px #1456f040}.ff-send-btn:hover:not(:disabled){background:#0d47d8;transform:translateY(-1px);box-shadow:0 4px 12px #1456f052}.ff-send-btn:disabled{cursor:not-allowed;box-shadow:none;background:#d4d4d8}.ff-send-btn.stop{background:var(--danger);box-shadow:0 2px 8px #f0443840}.ff-send-btn.stop:hover{background:#dc2626}:root[data-theme=dark] .ff-toolbar{border-color:var(--border-soft);background:#111827}:root[data-theme=dark] .ff-chip{color:var(--text-2);border-color:var(--border);background:#111827}:root[data-theme=dark] .ff-chip:hover:not(:disabled){background:#1456f01f}:root[data-theme=dark] .ff-panel{border-color:var(--border-soft);background:#111827}:root[data-theme=dark] .ff-panel-head{border-color:var(--border-soft);background:#0c1322}:root[data-theme=dark] .ff-panel-body{background:#111827}:root[data-theme=dark] .ff-composer,:root[data-theme=dark] .ff-empty{border-color:var(--border);background:#111827}:root[data-theme=dark] .ff-panel-task{background:#1f2937}:root[data-theme=dark] .ff-control select,:root[data-theme=dark] .ff-control input[type=number]{color:var(--text);border-color:var(--border);background:#111827}
