/* =========================================================
   LAS Solution · 方案智能系统 v2 设计系统
   风格：浅色商务蓝 · 工业智能 · B2B SaaS
   ========================================================= */
:root{
  --primary:#2f6bff;
  --primary-600:#2455d8;
  --primary-soft:#edf3ff;
  --teal:#14b8a6;
  --teal-soft:#e6faf7;
  --green:#16a34a;
  --green-soft:#e8f7ee;
  --orange:#f59e0b;
  --orange-soft:#fef4e4;
  --red:#ef4444;
  --red-soft:#fdecec;
  --purple:#8b5cf6;
  --purple-soft:#f1ecfe;
  --ink:#1e293b;
  --ink-2:#475569;
  --muted:#64748b;
  --muted-2:#94a3b8;
  --line:#e6eaf1;
  --line-2:#f0f3f8;
  --bg:#f4f6fa;
  --surface:#ffffff;
  --shadow-sm:0 1px 2px rgba(15,35,70,.05);
  --shadow:0 4px 16px rgba(15,35,70,.07);
  --shadow-lg:0 16px 40px rgba(15,35,70,.14);
  --radius:10px;
  --radius-sm:7px;
  --sidebar-w:232px;
  font-size:14px;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);font-size:14px;line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
button{font-family:inherit;cursor:pointer}
input,select,textarea{font-family:inherit;font-size:13px;color:var(--ink)}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:8px}
::-webkit-scrollbar-track{background:transparent}

/* ============ 布局 ============ */
.app-shell{display:flex;min-height:100vh}
.sidebar{
  width:var(--sidebar-w);flex-shrink:0;background:var(--surface);
  border-right:1px solid var(--line);display:flex;flex-direction:column;
  padding:18px 12px 14px;position:sticky;top:0;height:100vh;overflow-y:auto;z-index:30;
}
.main{flex:1;min-width:0;display:flex;flex-direction:column}

/* ============ 品牌 & 工作区 ============ */
.brand{display:flex;gap:10px;align-items:center;padding:0 8px 18px}
.brand-mark{
  width:38px;height:38px;border-radius:10px;display:grid;place-items:center;
  background:linear-gradient(135deg,#2f6bff,#4f9dff);color:#fff;
  font-size:20px;font-weight:800;letter-spacing:.5px;
  box-shadow:0 4px 10px rgba(47,107,255,.35);
}
.brand-text strong{font-size:15px;display:block;letter-spacing:.2px}
.brand-text span{font-size:11px;color:var(--muted);display:block;margin-top:2px}
.workspace-switch{
  height:36px;border:1px solid var(--line);border-radius:8px;display:flex;align-items:center;gap:8px;
  padding:0 10px;margin:0 2px 14px;color:var(--ink-2);font-size:12.5px;background:var(--surface);
}
.workspace-switch:hover{border-color:#c8d4e6}
.dot{width:7px;height:7px;border-radius:50%;background:var(--teal);box-shadow:0 0 0 3px var(--teal-soft)}
.chevron{margin-left:auto;color:var(--muted-2);font-size:11px}

/* ============ 导航 ============ */
.nav{display:flex;flex-direction:column;gap:2px}
.nav-label{
  font-size:10.5px;color:var(--muted-2);padding:16px 12px 6px;
  letter-spacing:1.5px;font-weight:600;
}
.nav-item{
  height:38px;border:0;background:transparent;text-align:left;border-radius:8px;
  padding:0 12px;color:var(--ink-2);display:flex;align-items:center;gap:10px;
  font-size:13.5px;transition:background .15s,color .15s;position:relative;
}
.nav-item .ni-ico{width:18px;text-align:center;font-size:15px;color:var(--muted-2);transition:color .15s}
.nav-item:hover{background:var(--line-2);color:var(--ink)}
.nav-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600}
.nav-item.active .ni-ico{color:var(--primary)}
.nav-item.active::before{
  content:"";position:absolute;left:-12px;top:50%;transform:translateY(-50%);
  width:3px;height:20px;border-radius:3px;background:var(--primary);
}

/* ============ 侧边栏底部 ============ */
.sidebar-bottom{margin-top:auto;display:flex;flex-direction:column;gap:10px}
.support{
  background:#f7f9fd;border:1px solid var(--line);padding:11px 12px;display:flex;
  gap:9px;align-items:center;border-radius:9px;
}
.support-icon{
  width:26px;height:26px;border-radius:50%;display:grid;place-items:center;
  background:var(--primary-soft);color:var(--primary);font-weight:700;font-size:13px;flex-shrink:0;
}
.support strong{font-size:12.5px;display:block}
.support small{font-size:11px;color:var(--muted)}
.user-mini{display:flex;align-items:center;gap:9px;padding:4px 6px;border-radius:8px}
.user-mini:hover{background:var(--line-2)}
.avatar{
  width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#f59e0b,#f97316);
  color:#fff;display:grid;place-items:center;font-size:13px;font-weight:600;flex-shrink:0;
}
.user-mini strong{font-size:12.5px;display:block}
.user-mini small{font-size:11px;color:var(--muted)}
.user-mini .more{margin-left:auto;color:var(--muted-2)}

/* ============ 顶栏 ============ */
.topbar{
  height:56px;background:var(--surface);border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;padding:0 24px;
  position:sticky;top:0;z-index:20;
}
.crumb{font-size:14.5px;font-weight:600;color:var(--ink)}
.crumb .sep{color:var(--muted-2);margin:0 7px;font-weight:400}
.crumb .sub{color:var(--muted);font-weight:400}
.topbar-right{display:flex;align-items:center;gap:14px}
.global-search{position:relative;width:300px}
.gs-ico{position:absolute;left:11px;top:50%;transform:translateY(-50%);color:var(--muted-2);font-size:15px}
.global-search input{
  width:100%;height:36px;border:1px solid var(--line);border-radius:9px;background:#f7f9fd;
  padding:0 12px 0 34px;font-size:13px;outline:none;transition:all .15s;
}
.global-search input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.gs-drop{
  position:absolute;top:42px;left:0;right:0;background:#fff;border:1px solid var(--line);
  border-radius:10px;box-shadow:var(--shadow-lg);padding:6px;z-index:60;max-height:320px;overflow:auto;
}
.gs-item{padding:8px 10px;border-radius:7px;cursor:pointer;display:flex;gap:8px;align-items:center}
.gs-item:hover{background:var(--primary-soft)}
.gs-item .k{width:26px;height:26px;border-radius:6px;display:grid;place-items:center;font-size:13px;background:var(--line-2);color:var(--ink-2);flex-shrink:0}
.gs-item strong{font-size:13px;display:block}
.gs-item small{font-size:11px;color:var(--muted)}
.gs-empty{padding:14px;text-align:center;color:var(--muted);font-size:12.5px}
.icon-btn{
  width:36px;height:36px;border:1px solid var(--line);border-radius:9px;background:#fff;
  display:grid;place-items:center;position:relative;font-size:16px;color:var(--ink-2);
}
.icon-btn:hover{border-color:#c8d4e6;background:var(--line-2)}
.badge-dot{
  position:absolute;top:8px;right:9px;width:7px;height:7px;border-radius:50%;
  background:var(--red);border:1.5px solid #fff;
}

/* ============ 内容区 ============ */
.content{padding:22px 26px 48px;max-width:1440px;width:100%;margin:0 auto}
.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}
.page-head h1{font-size:20px;font-weight:700;letter-spacing:.2px}
.page-head p{font-size:12.5px;color:var(--muted);margin-top:4px}
.page-head .actions{display:flex;gap:10px;align-items:center;flex-shrink:0}

/* ============ 按钮 ============ */
.btn{
  height:34px;padding:0 14px;border-radius:8px;border:1px solid var(--line);
  background:#fff;color:var(--ink-2);font-size:13px;display:inline-flex;align-items:center;
  gap:6px;transition:all .15s;white-space:nowrap;font-weight:500;
}
.btn:hover{border-color:#c8d4e6;background:var(--line-2)}
.btn.primary{
  background:var(--primary);border-color:var(--primary);color:#fff;font-weight:500;
  box-shadow:0 3px 8px rgba(47,107,255,.28);
}
.btn.primary:hover{background:var(--primary-600);border-color:var(--primary-600)}
.btn.danger{color:var(--red);border-color:#f6c9c9}
.btn.danger:hover{background:var(--red-soft)}
.btn.ghost{border-color:transparent;background:transparent;color:var(--muted)}
.btn.ghost:hover{background:var(--line-2);color:var(--ink)}
.btn.sm{height:28px;padding:0 10px;font-size:12px;border-radius:7px}
.btn.lg{height:40px;padding:0 20px;font-size:14px;border-radius:9px}
.btn.block{width:100%;justify-content:center}
.btn:disabled{opacity:.55;cursor:not-allowed}
.link-btn{background:none;border:none;color:var(--primary);font-size:13px;padding:2px 4px;cursor:pointer}
.link-btn:hover{text-decoration:underline}
.link-btn.danger{color:var(--red)}

/* ============ 面板 & 卡片 ============ */
.panel{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  box-shadow:var(--shadow-sm);
}
.panel-pad{padding:18px 20px}
.panel-head{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:14px 18px;border-bottom:1px solid var(--line-2);
}
.panel-head h3{font-size:14px;font-weight:600}
.panel-head .helper{font-size:12px;color:var(--muted)}
.panel-head .actions{display:flex;gap:8px;align-items:center}
.grid{display:grid;gap:14px}
.grid.stats{grid-template-columns:repeat(4,1fr);margin-bottom:14px}
.grid.two-col{grid-template-columns:1fr 1fr}
.grid.two-31{grid-template-columns:2.2fr 1fr}

/* 统计卡 */
.stat{
  padding:16px 18px;display:flex;flex-direction:column;gap:6px;position:relative;overflow:hidden;
  transition:transform .15s,box-shadow .15s;cursor:pointer;
}
.stat:hover{transform:translateY(-2px);box-shadow:var(--shadow)}
.stat .stat-top{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:7px}
.stat .stat-num{font-size:28px;font-weight:700;letter-spacing:.5px}
.stat .stat-foot{font-size:11.5px;color:var(--muted-2)}
.stat .stat-ico{
  position:absolute;right:14px;top:14px;width:34px;height:34px;border-radius:9px;
  display:grid;place-items:center;font-size:17px;
}
.ico-blue{background:var(--primary-soft);color:var(--primary)}
.ico-teal{background:var(--teal-soft);color:var(--teal)}
.ico-orange{background:var(--orange-soft);color:var(--orange)}
.ico-green{background:var(--green-soft);color:var(--green)}
.ico-purple{background:var(--purple-soft);color:var(--purple)}

/* ============ 状态标签 ============ */
.status{
  display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 9px;
  border-radius:20px;font-size:11.5px;font-weight:500;white-space:nowrap;
}
.status::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}
.st-blue{background:var(--primary-soft);color:var(--primary)}
.st-green{background:var(--green-soft);color:var(--green)}
.st-orange{background:var(--orange-soft);color:var(--orange)}
.st-red{background:var(--red-soft);color:var(--red)}
.st-gray{background:#f1f4f9;color:#7c8aa0}
.st-teal{background:var(--teal-soft);color:var(--teal)}
.st-purple{background:var(--purple-soft);color:var(--purple)}

/* ============ 徽标 & 标签 ============ */
.tag{
  display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:5px;
  font-size:11px;font-weight:500;background:var(--line-2);color:var(--ink-2);
}
.tag.open{background:var(--teal-soft);color:var(--teal)}
.tag.lock{background:var(--orange-soft);color:var(--orange)}
.tag.blue{background:var(--primary-soft);color:var(--primary)}
.chip{
  height:28px;padding:0 12px;border-radius:20px;border:1px solid var(--line);background:#fff;
  font-size:12.5px;color:var(--ink-2);display:inline-flex;align-items:center;gap:6px;transition:all .15s;
}
.chip:hover{border-color:#c8d4e6}
.chip.active{background:var(--primary-soft);border-color:var(--primary);color:var(--primary);font-weight:600}

/* ============ 表单 ============ */
.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 16px;padding:18px 20px}
.form-grid.cols-3{grid-template-columns:repeat(3,1fr)}
.form-grid .full{grid-column:1/-1}
label.field{display:flex;flex-direction:column;gap:6px}
label.field .lbl{font-size:12.5px;font-weight:500;color:var(--ink-2)}
label.field .lbl .req{color:var(--red);margin-left:2px}
label.field .hint{font-size:11px;color:var(--muted-2)}
.input,.select,.textarea{
  width:100%;height:34px;border:1px solid var(--line);border-radius:8px;padding:0 10px;
  background:#fff;outline:none;transition:border-color .15s,box-shadow .15s;font-size:13px;
}
.textarea{height:auto;padding:8px 10px;min-height:70px;resize:vertical;line-height:1.5}
.input:focus,.select:focus,.textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(47,107,255,.12)}
.input::placeholder,.textarea::placeholder{color:#aab4c4}
.select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2394a3b8' stroke-width='1.5' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 11px center;padding-right:28px}
.input-sm{height:30px;font-size:12.5px}
.required{color:var(--red)}

/* 开关 */
.switch{
  position:relative;width:34px;height:20px;border-radius:20px;background:#d3dbe8;
  transition:background .18s;flex-shrink:0;border:0;padding:0;
}
.switch::after{
  content:"";position:absolute;top:2.5px;left:2.5px;width:15px;height:15px;border-radius:50%;
  background:#fff;transition:left .18s;box-shadow:0 1px 3px rgba(0,0,0,.2);
}
.switch.on{background:var(--primary)}
.switch.on::after{left:16.5px}
.switch.sm{width:28px;height:17px}
.switch.sm::after{width:12px;height:12px;top:2.5px;left:2.5px}
.switch.sm.on::after{left:13.5px}

/* ============ 表格 ============ */
.table-wrap{overflow-x:auto}
.table{width:100%;border-collapse:collapse;font-size:13px}
.table th{
  text-align:left;padding:10px 14px;background:#f8fafc;color:var(--muted);
  font-size:12px;font-weight:600;border-bottom:1px solid var(--line);white-space:nowrap;
}
.table td{padding:11px 14px;border-bottom:1px solid var(--line-2);vertical-align:middle}
.table tbody tr:hover{background:#fafbfe}
.table .table-sub{display:block;font-size:11.5px;color:var(--muted);margin-top:3px}
.table .cell-main{font-weight:600}
.table .ops{display:flex;gap:2px;white-space:nowrap}

/* ============ 筛选条 ============ */
.filterbar{
  display:flex;gap:10px;align-items:center;padding:13px 18px;border-bottom:1px solid var(--line-2);
  flex-wrap:wrap;
}
.filterbar .input{width:240px}
.filterbar .chips{display:flex;gap:8px;flex-wrap:wrap}
.filterbar .grow{flex:1}

/* ============ 步骤条（向导） ============ */
.steps{display:flex;align-items:center;gap:0;padding:6px 0 20px}
.step{display:flex;align-items:center;gap:9px;flex:1;max-width:220px}
.step .n{
  width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-size:13px;font-weight:600;
  background:var(--line-2);color:var(--muted-2);flex-shrink:0;transition:all .2s;
}
.step .st-t{display:flex;flex-direction:column}
.step .st-t strong{font-size:13px;color:var(--muted)}
.step .st-t span{font-size:11px;color:var(--muted-2)}
.step.active .n{background:var(--primary);color:#fff;box-shadow:0 3px 8px rgba(47,107,255,.3)}
.step.active .st-t strong{color:var(--primary)}
.step.done .n{background:var(--green-soft);color:var(--green)}
.step.done .st-t strong{color:var(--green)}
.step-arrow{flex:0 0 24px;color:#c2ccdb;text-align:center;font-size:15px}

/* ============ 卡片选择（向导用） ============ */
.pick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;padding:18px 20px}
.pick-card{
  border:1.5px solid var(--line);border-radius:10px;padding:14px 15px;cursor:pointer;
  transition:all .15s;background:#fff;position:relative;
}
.pick-card:hover{border-color:#c3d3f5;box-shadow:var(--shadow-sm)}
.pick-card.sel{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 3px rgba(47,107,255,.1)}
.pick-card .pc-title{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:8px}
.pick-card .pc-sub{font-size:11.5px;color:var(--muted);margin-top:5px;line-height:1.5}
.pick-card .pc-foot{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}
.pick-card .check{
  position:absolute;top:11px;right:11px;width:20px;height:20px;border-radius:50%;
  border:1.5px solid #ccd6e6;display:grid;place-items:center;color:#fff;font-size:11px;
}
.pick-card.sel .check{background:var(--primary);border-color:var(--primary)}

/* ============ 空状态 ============ */
.empty{padding:52px 20px;text-align:center;color:var(--muted)}
.empty .e-ico{
  width:58px;height:58px;margin:0 auto 14px;border-radius:16px;background:var(--line-2);
  display:grid;place-items:center;font-size:26px;color:var(--muted-2);
}
.empty strong{display:block;font-size:14px;color:var(--ink-2);margin-bottom:4px}
.empty p{font-size:12.5px}

/* ============ 流程链路（工作台） ============ */
.flow{display:flex;align-items:stretch;gap:0;padding:16px 18px;flex-wrap:wrap}
.flow-node{
  flex:1;min-width:150px;background:#f8fafc;border:1px solid var(--line);border-radius:10px;
  padding:13px 14px;cursor:pointer;transition:all .15s;position:relative;
}
.flow-node:hover{border-color:var(--primary);box-shadow:var(--shadow-sm);transform:translateY(-1px)}
.flow-node .fn-ico{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;font-size:14px;margin-bottom:8px}
.flow-node .fn-name{font-size:13px;font-weight:600}
.flow-node .fn-count{font-size:22px;font-weight:700;margin-top:2px}
.flow-node .fn-desc{font-size:11px;color:var(--muted)}
.flow-arrow{display:flex;align-items:center;padding:0 10px;color:#c2ccdb;font-size:18px}

/* ============ 任务列表 ============ */
.task-list{padding:8px 0}
.task-row{
  display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--line-2);
}
.task-row:last-child{border-bottom:0}
.task-row:hover{background:#fafbfe}
.task-icon{
  width:34px;height:34px;border-radius:9px;display:grid;place-items:center;
  font-size:14px;font-weight:700;color:#fff;flex-shrink:0;
}
.blue-bg{background:linear-gradient(135deg,#2f6bff,#5b9bff)}
.orange-bg{background:linear-gradient(135deg,#f59e0b,#fbbf24)}
.teal-bg{background:linear-gradient(135deg,#0ea5a4,#2dd4bf)}
.gray-bg{background:linear-gradient(135deg,#94a3b8,#b6c2d4)}
.task-row .t-main{flex:1;min-width:0}
.task-row .t-main strong{font-size:13.5px;display:block}
.task-row .t-main small{font-size:11.5px;color:var(--muted)}

/* ============ 进度条 ============ */
.progress{height:6px;border-radius:6px;background:var(--line-2);overflow:hidden}
.progress .bar{height:100%;border-radius:6px;background:linear-gradient(90deg,var(--primary),#5b9bff);transition:width .3s}
.progress.teal .bar{background:linear-gradient(90deg,#0ea5a4,#2dd4bf)}

/* ============ 时间线 ============ */
.timeline{position:relative;padding-left:22px}
.timeline::before{content:"";position:absolute;left:7px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tl-item{position:relative;padding:0 0 20px}
.tl-item:last-child{padding-bottom:0}
.tl-item::before{
  content:"";position:absolute;left:-21px;top:4px;width:12px;height:12px;border-radius:50%;
  background:#fff;border:3px solid var(--primary);
}
.tl-item.done::before{background:var(--green);border-color:var(--green)}
.tl-item.wait::before{border-color:var(--muted-2);background:#fff}
.tl-item .tl-t{font-size:13px;font-weight:600}
.tl-item .tl-d{font-size:11.5px;color:var(--muted);margin-top:2px}

/* ============ Toast ============ */
.toast{
  position:fixed;top:64px;left:50%;transform:translateX(-50%) translateY(-16px);
  background:#1e293b;color:#fff;padding:10px 18px;border-radius:10px;font-size:13px;
  box-shadow:var(--shadow-lg);opacity:0;pointer-events:none;transition:all .25s;z-index:200;max-width:420px;text-align:center;
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.ok{background:#0f8f5f}
.toast.err{background:#d63031}

/* ============ 弹窗 & 抽屉 ============ */
[hidden]{display:none!important}
.modal-mask,.drawer-mask{
  position:fixed;inset:0;background:rgba(15,23,42,.45);z-index:100;
  display:flex;justify-content:center;align-items:center;backdrop-filter:blur(2px);
}
.drawer-mask{justify-content:flex-end}
.modal{
  background:#fff;border-radius:14px;width:min(560px,92vw);max-height:86vh;overflow:auto;
  box-shadow:var(--shadow-lg);animation:pop .18s ease;
}
@keyframes pop{from{transform:scale(.96);opacity:0}to{transform:scale(1);opacity:1}}
.drawer{
  background:#fff;width:min(640px,96vw);height:100%;box-shadow:var(--shadow-lg);
  animation:slideIn .2s ease;display:flex;flex-direction:column;
}
@keyframes slideIn{from{transform:translateX(60px);opacity:0}to{transform:translateX(0);opacity:1}}
.modal-head,.drawer-head{
  padding:16px 20px;border-bottom:1px solid var(--line-2);display:flex;align-items:center;justify-content:space-between;
}
.modal-head h3,.drawer-head h3{font-size:15px;font-weight:600}
.modal-body,.drawer-body{padding:18px 20px;overflow:auto}
.modal-foot,.drawer-foot{padding:13px 20px;border-top:1px solid var(--line-2);display:flex;gap:10px;justify-content:flex-end}
.x-btn{width:28px;height:28px;border:0;background:transparent;border-radius:7px;color:var(--muted);font-size:16px}
.x-btn:hover{background:var(--line-2);color:var(--ink)}

/* ============ 客户管理 ============ */
.contact-row{display:grid;grid-template-columns:78px repeat(4,1fr) auto;gap:8px;align-items:center;padding:10px 0;border-bottom:1px dashed var(--line)}
.contact-row .idx{font-size:12px;color:var(--muted);font-weight:600}
.contact-block{padding:0 20px 6px}

/* ============ 设备卡片 ============ */
.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;padding:18px 20px}
.device-card{
  border:1px solid var(--line);border-radius:11px;padding:15px 16px;background:#fff;
  transition:all .15s;cursor:pointer;position:relative;
}
.device-card:hover{border-color:#c3d3f5;box-shadow:var(--shadow);transform:translateY(-1px)}
.device-card .dc-head{display:flex;align-items:flex-start;gap:10px}
.device-card .dc-ico{
  width:38px;height:38px;border-radius:10px;display:grid;place-items:center;font-size:18px;
  background:var(--primary-soft);color:var(--primary);flex-shrink:0;
}
.device-card .dc-name{font-size:13.5px;font-weight:600}
.device-card .dc-code{font-size:11px;color:var(--muted);margin-top:1px}
.device-card .dc-type{margin-left:auto}
.device-card .dc-params{display:grid;grid-template-columns:1fr 1fr;gap:7px 10px;margin-top:12px;padding-top:11px;border-top:1px dashed var(--line)}
.device-card .dc-param{font-size:11.5px;color:var(--muted)}
.device-card .dc-param b{display:block;font-size:12.5px;color:var(--ink);font-weight:600}
.device-card .dc-foot{display:flex;align-items:center;justify-content:space-between;margin-top:12px}
.device-card .open-tag{font-size:11px;color:var(--teal);display:inline-flex;align-items:center;gap:4px;font-weight:600}

/* 参数配置表 */
.param-table{width:100%;border-collapse:collapse}
.param-table th{font-size:11.5px;color:var(--muted);font-weight:600;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}
.param-table td{padding:7px 10px;border-bottom:1px solid var(--line-2);vertical-align:middle}
.param-table .p-key{font-weight:600;font-size:13px}
.param-table .p-code{font-size:11px;color:var(--muted-2)}
.param-preset{font-size:10.5px;color:var(--muted-2);background:var(--line-2);padding:1px 6px;border-radius:4px;margin-left:6px}
.param-custom{font-size:10.5px;color:var(--purple);background:var(--purple-soft);padding:1px 6px;border-radius:4px;margin-left:6px}

/* ============ 需求采集 ============ */
.section-tabs{display:flex;gap:6px;padding:13px 18px 0;overflow-x:auto}
.section-tab{
  height:34px;padding:0 15px;border:1px solid var(--line);background:#fff;border-radius:9px 9px 0 0;
  font-size:12.5px;color:var(--ink-2);display:inline-flex;align-items:center;gap:6px;white-space:nowrap;border-bottom:0;
}
.section-tab.active{background:var(--primary-soft);border-color:var(--primary);color:var(--primary);font-weight:600}
.section-tab .cnt{font-size:10.5px;background:#e6ebf4;border-radius:10px;padding:1px 7px;color:var(--muted)}
.section-tab.active .cnt{background:var(--primary);color:#fff}
.field-flag{font-size:10.5px;font-weight:600;display:inline-flex;align-items:center;gap:3px;margin-left:7px}
.flag-open{color:var(--teal);background:var(--teal-soft);border-radius:4px;padding:1px 5px}
.flag-req{color:var(--red);background:var(--red-soft);border-radius:4px;padding:1px 5px}

/* ============ 结果页 ============ */
.result-hero{
  background:linear-gradient(135deg,#1e3a8a,#2f6bff 55%,#4f9dff);border-radius:13px;color:#fff;
  padding:22px 24px;display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:14px;
}
.result-hero .rh-label{font-size:12px;opacity:.8}
.result-hero .rh-num{font-size:34px;font-weight:700;letter-spacing:.5px}
.result-hero .rh-unit{font-size:13px;opacity:.85;margin-left:4px}
.bar-row{display:flex;align-items:center;gap:10px;padding:7px 0}
.bar-row .br-label{width:150px;font-size:12.5px;text-align:right;flex-shrink:0;color:var(--ink-2)}
.bar-row .br-track{flex:1;height:22px;background:var(--line-2);border-radius:6px;overflow:hidden;position:relative}
.bar-row .br-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,var(--primary),#5b9bff);display:flex;align-items:center;justify-content:flex-end;padding-right:8px;color:#fff;font-size:11.5px;font-weight:600;min-width:34px;transition:width .4s}
.bar-row .br-fill.teal{background:linear-gradient(90deg,#0ea5a4,#2dd4bf)}

/* 公式展开 */
.formula-box{
  background:#f8fafc;border:1px solid var(--line);border-radius:9px;padding:12px 14px;margin-top:8px;font-size:12.5px;
}
.formula-box .fb-title{font-size:11px;color:var(--muted);font-weight:600;letter-spacing:.5px;margin-bottom:6px}
.formula-box .fb-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding:3px 0}
.fv{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--line);border-radius:6px;padding:3px 8px;font-size:12px}
.fv .fv-k{color:var(--muted);font-size:11px}
.fv .fv-v{font-weight:600;color:var(--primary)}
.fv.src-dev{background:var(--teal-soft);border-color:#b9ece3;color:#0d9488}
.fv.src-req{background:var(--primary-soft);border-color:#c9dcff;color:var(--primary)}
.op{color:var(--muted-2);font-weight:600;font-size:14px}

/* ============ 模板设计器（三栏） ============ */
.designer{display:grid;grid-template-columns:210px 1fr 250px;gap:0;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#fff;min-height:560px}
.designer-side{border-right:1px solid var(--line);background:#fafbfe;padding:12px;display:flex;flex-direction:column;gap:2px}
.designer-side .ds-title{font-size:11px;color:var(--muted-2);font-weight:600;letter-spacing:1px;padding:6px 8px 8px}
.ds-item{
  display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:8px;font-size:13px;color:var(--ink-2);
  background:transparent;border:0;text-align:left;width:100%;
}
.ds-item:hover{background:var(--line-2)}
.ds-item.active{background:var(--primary-soft);color:var(--primary);font-weight:600}
.ds-item .ds-count{margin-left:auto;font-size:11px;color:var(--muted-2);background:#e9eef6;border-radius:10px;padding:0 7px}
.ds-item.active .ds-count{background:var(--primary);color:#fff}
.ds-add{border:1px dashed #c8d4e6;color:var(--muted);justify-content:center;margin-top:6px}
.ds-add:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-soft)}
.designer-main{min-width:0;overflow:auto;background:#fff}
.designer-inspector{border-left:1px solid var(--line);background:#fafbfe;padding:14px;overflow:auto}

/* 字段行 */
.field-card{
  border:1px solid var(--line);border-radius:9px;margin:12px 14px;padding:13px 14px;background:#fff;
  transition:all .15s;position:relative;
}
.field-card:hover{border-color:#c3d3f5}
.field-card.sel{border-color:var(--primary);box-shadow:0 0 0 3px rgba(47,107,255,.1)}
.field-card .fc-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.field-card .fc-label{font-size:13.5px;font-weight:600}
.field-card .fc-type{font-size:11px;color:var(--muted);background:var(--line-2);border-radius:4px;padding:1px 7px}
.field-card .fc-ops{margin-left:auto;display:flex;gap:4px;opacity:0;transition:opacity .15s}
.field-card:hover .fc-ops{opacity:1}
.field-card .fc-code{font-size:11px;color:var(--muted-2);margin-top:4px;font-family:Consolas,monospace}
.field-card .fc-foot{display:flex;align-items:center;gap:10px;margin-top:9px;padding-top:8px;border-top:1px dashed var(--line)}
.field-preview{margin-top:9px}

/* 公式构建器 */
.formula-card{border:1px solid var(--line);border-radius:9px;margin:12px 14px;padding:13px 14px;background:#fff}
.formula-card.sel{border-color:var(--primary);box-shadow:0 0 0 3px rgba(47,107,255,.1)}
.formula-card .fc-title{font-size:13.5px;font-weight:600;display:flex;align-items:center;gap:8px}
.formula-card .fc-desc{font-size:11.5px;color:var(--muted);margin-top:3px}
.expr{
  margin-top:10px;background:#f8fafc;border:1px dashed #ccd6e6;border-radius:8px;padding:10px 12px;
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;min-height:44px;
}
.expr .op{font-size:15px}
.expr .add-var{
  border:1px dashed #c8d4e6;background:#fff;color:var(--muted);border-radius:6px;height:26px;padding:0 9px;font-size:12px;
}
.expr .add-var:hover{border-color:var(--primary);color:var(--primary)}
.var-chip{
  display:inline-flex;align-items:center;gap:5px;border-radius:6px;padding:4px 9px;font-size:12px;font-weight:500;
  background:var(--primary-soft);border:1px solid #c9dcff;color:var(--primary);
}
.var-chip.dev{background:var(--teal-soft);border-color:#b9ece3;color:#0d9488}
.var-chip .vx{cursor:pointer;opacity:.6;font-weight:700;margin-left:2px}
.var-chip .vx:hover{opacity:1;color:var(--red)}
.field-pool .pool-item{
  display:flex;align-items:center;gap:7px;padding:8px 9px;border:1px solid var(--line);border-radius:8px;
  margin-bottom:7px;background:#fff;cursor:pointer;font-size:12.5px;transition:all .12s;
}
.field-pool .pool-item:hover{border-color:var(--primary);box-shadow:var(--shadow-sm)}
.field-pool .pool-item .pi-name{font-weight:500;flex:1}
.field-pool .pool-item .pi-code{font-size:10.5px;color:var(--muted-2);font-family:Consolas,monospace}
.field-pool .pool-item .pi-src{font-size:10px;border-radius:4px;padding:1px 6px}
.pool-tabs{display:flex;gap:4px;margin-bottom:10px;background:var(--line-2);border-radius:8px;padding:3px}
.pool-tab{flex:1;height:28px;border:0;border-radius:6px;background:transparent;font-size:12px;color:var(--muted)}
.pool-tab.active{background:#fff;color:var(--primary);font-weight:600;box-shadow:var(--shadow-sm)}

/* 字段池总览条 */
.poolbar{
  border:1px solid var(--line);border-radius:12px;background:#fff;margin-bottom:14px;overflow:hidden;
}
.poolbar.has{border-color:#ffe3b3;background:linear-gradient(180deg,#fffdf6,#fff)}
.poolbar-head{display:flex;align-items:center;gap:10px;padding:11px 16px;border-bottom:1px solid var(--line-2);flex-wrap:wrap}
.poolbar-title{font-size:13px;font-weight:700;color:var(--orange);display:flex;align-items:center;gap:6px}
.poolbar-head .helper{font-size:12px;color:var(--muted)}
.poolbar-head .helper b{color:var(--orange)}
.poolbar-body{display:flex;flex-wrap:wrap;gap:7px;padding:11px 16px}
.poolbar-chip{
  display:inline-flex;align-items:center;gap:6px;background:var(--orange-soft);border:1px solid #f7ddb0;
  color:#8a5a10;border-radius:7px;padding:4px 10px;font-size:12px;
}
.poolbar-chip i{font-style:normal}
.poolbar-chip em{font-style:normal;font-family:Consolas,monospace;font-size:10.5px;color:#b07f2d;background:rgba(255,255,255,.65);border-radius:3px;padding:0 5px}
.poolbar-chip small{font-size:10.5px;color:#b07f2d}
.ds-icon{font-size:14px}
.ds-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.setting-row.open-on{background:var(--orange-soft);border-radius:10px;margin-top:8px}
.formula-box.ok{border-color:#bde5cf;background:#f2fbf6}
.formula-box.ok .fb-title{color:var(--green)}
/* 字段下拉选项预览 */
.fc-options{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
.opt-chip{font-size:10.5px;background:var(--line-2);border-radius:4px;padding:1px 7px;color:var(--ink-2)}
.lbl{font-size:12.5px;font-weight:500;color:var(--ink-2)}
.fc-code code{font-family:Consolas,monospace;background:var(--line-2);border-radius:4px;padding:0 5px;color:var(--primary);font-size:10.5px}
.formula-box code{font-family:Consolas,monospace;background:var(--line-2);border-radius:3px;padding:0 4px;font-size:10.5px;color:var(--ink-2)}
/* 图标选择器 */
.icon-picker{display:flex;flex-wrap:wrap;gap:6px}
.ico-btn{
  width:36px;height:36px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:17px;
  cursor:pointer;display:grid;place-items:center;transition:all .12s;
}
.ico-btn:hover{border-color:var(--primary)}
.ico-btn.sel{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 2px rgba(47,107,255,.15)}
.pool-note{padding:8px 4px 2px;color:var(--muted);font-size:11.5px}

/* ============ 智能方案 ============ */
.proposal-card{border:1px solid var(--line);border-radius:11px;padding:16px 18px;background:#fff;margin-bottom:12px;transition:all .15s}
.proposal-card:hover{box-shadow:var(--shadow)}
.proposal-card .pc-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.proposal-card .pc-title{font-size:14px;font-weight:600;flex:1}
.proposal-card .pc-info{font-size:12px;color:var(--muted);margin-top:6px;display:flex;gap:16px;flex-wrap:wrap}
.proposal-card .pc-actions{display:flex;gap:8px;margin-top:12px}
.gen-progress{margin-top:14px}
.gen-steps{display:flex;gap:0;margin-top:10px;align-items:center}
.gen-step{flex:1;text-align:center;font-size:11px;color:var(--muted)}
.gen-step .g-dot{width:22px;height:22px;border-radius:50%;background:var(--line-2);margin:0 auto 5px;display:grid;place-items:center;font-size:10px;color:var(--muted-2)}
.gen-step.done .g-dot{background:var(--green);color:#fff}
.gen-step.run .g-dot{background:var(--primary);color:#fff;animation:pulse 1.2s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(47,107,255,.4)}50%{box-shadow:0 0 0 7px rgba(47,107,255,0)}}
.ppt-preview{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;padding:4px 0;
}
.ppt-page{
  aspect-ratio:16/10;border:1px solid var(--line);border-radius:7px;background:#fff;position:relative;
  overflow:hidden;cursor:pointer;transition:all .15s;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:4px;font-size:10px;color:var(--muted);
}
.ppt-page:hover{box-shadow:var(--shadow);border-color:var(--primary)}
.ppt-page .pp-bar{height:4px;border-radius:4px;background:var(--primary-soft)}
.ppt-page .pp-bar.b2{width:60%}
.ppt-page .pp-bar.b3{width:80%}
.ppt-page .pp-bar.b4{width:45%}
.ppt-page.cover{background:linear-gradient(135deg,#1e3a8a,#2f6bff);color:#fff;border:0}

/* ============ 设置 ============ */
.setting-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px 18px;border-bottom:1px solid var(--line-2)}
.setting-row:last-child{border-bottom:0}
.setting-row .sr-t{font-size:13.5px;font-weight:500}
.setting-row .sr-d{font-size:11.5px;color:var(--muted);margin-top:2px}

/* ============ 其他 ============ */
.section-title{font-size:13px;font-weight:600;margin:18px 0 10px;display:flex;align-items:center;gap:8px}
.section-title::before{content:"";width:3px;height:14px;border-radius:3px;background:var(--primary)}
.divider{height:1px;background:var(--line-2);margin:6px 0}
.muted{color:var(--muted)}
.small{font-size:12px}
.mt8{margin-top:8px}.mt12{margin-top:12px}.mt16{margin-top:16px}.mt20{margin-top:20px}
.mb8{margin-bottom:8px}.mb12{margin-bottom:12px}.mb16{margin-bottom:16px}
.flex{display:flex;align-items:center;gap:8px}
.between{justify-content:space-between}
.wrap{flex-wrap:wrap}
.grow{flex:1}
.hidden{display:none!important}
.code{font-family:Consolas,Menlo,monospace;font-size:11.5px;background:var(--line-2);border-radius:4px;padding:1px 6px;color:var(--ink-2)}

/* ============ 账户设置 ============ */
.acc-tabs{display:flex;gap:10px;margin-bottom:16px}
.acc-tab{
  flex:1;display:flex;align-items:center;gap:11px;padding:13px 16px;border:1px solid var(--line-2);
  border-radius:12px;background:#fff;cursor:pointer;text-align:left;transition:all .15s;
}
.acc-tab:hover{border-color:#c8d4e6;box-shadow:var(--shadow-sm)}
.acc-tab .at-ico{width:34px;height:34px;border-radius:9px;background:var(--line-2);color:var(--ink-2);display:grid;place-items:center;font-size:16px;flex:none}
.acc-tab .at-body{display:flex;flex-direction:column;gap:2px}
.acc-tab .at-body strong{font-size:13.5px;color:var(--ink)}
.acc-tab .at-body small{font-size:11px;color:var(--muted)}
.acc-tab.active{border-color:var(--primary);background:var(--primary-soft)}
.acc-tab.active .at-ico{background:var(--primary);color:#fff}
.acc-tab.active .at-body strong{color:var(--primary)}

.cell-user{display:flex;align-items:center;gap:10px}
.cell-user .avatar{width:30px;height:30px;font-size:12px;flex:none}
.role-chip{display:inline-flex;align-items:center;height:22px;padding:0 10px;border:1px solid;border-radius:20px;font-size:11.5px;font-weight:600;background:#fff}

.role-grid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));align-items:stretch}
.role-card{padding:0;overflow:hidden;display:flex;flex-direction:column}
.role-card .rc-bar{height:4px;flex:none}
.role-card .rc-head{display:flex;align-items:center;gap:12px;padding:16px 18px 0}
.role-card .rc-head .avatar{width:38px;height:38px;font-size:14px;flex:none}
.role-card .rc-info{flex:1;min-width:0}
.role-card .rc-info strong{font-size:14px;display:block}
.role-card .rc-info small{font-size:11.5px;color:var(--muted);display:block;margin-top:3px;line-height:1.5}
.role-card .rc-tags{padding:12px 18px 0}
.role-card .rc-ops{display:flex;gap:6px;padding:14px 18px 16px;margin-top:auto;border-top:1px solid var(--line-2);margin-top:14px}
.role-card .rc-ops .btn{flex:none}

.perm-tags{display:flex;flex-wrap:wrap;gap:6px}
.perm-tags .tag b{font-weight:600;margin-left:3px}
.perm-opt{
  display:flex;align-items:flex-start;gap:7px;padding:7px 11px;border:1px solid var(--line-2);
  border-radius:9px;background:#fff;font-size:12px;color:var(--ink-2);cursor:pointer;transition:all .15s;line-height:1.45;
}
.perm-opt:hover{border-color:#c8d4e6}
.perm-opt.on{border-color:var(--primary);background:var(--primary-soft);color:var(--primary)}
.perm-opt .pm-check{margin-top:1px}
.perm-opt small{display:block;font-size:10.5px;color:var(--muted);margin-top:1px}

.pm-box{border:1px solid var(--line-2);border-radius:12px;overflow:hidden;margin:0 18px}
.pm-row{display:grid;grid-template-columns:170px repeat(7,1fr);align-items:center;border-bottom:1px solid var(--line-2);min-height:42px}
.pm-row:last-child{border-bottom:0}
.pm-row.pm-head{background:#f8fafc;min-height:36px}
.pm-row.pm-head .pm-cell{font-size:11.5px;color:var(--muted);font-weight:500}
.pm-mod{display:flex;align-items:center;gap:7px;padding:0 14px;font-size:12.5px;font-weight:500;color:var(--ink-2)}
.pm-ico{width:22px;height:22px;border-radius:6px;background:var(--line-2);display:grid;place-items:center;font-size:11px;flex:none}
.pm-cell{display:flex;justify-content:center}
.pm-check{width:16px;height:16px;accent-color:var(--primary);cursor:pointer}

.acc-perm-head{display:flex;align-items:center;gap:12px;padding:2px 0 16px;border-bottom:1px solid var(--line-2);margin-bottom:16px}
.acc-perm-head .avatar{width:42px;height:42px;font-size:16px}
.acc-perm-head strong{display:block;font-size:14px}
.acc-perm-head small{font-size:11.5px;color:var(--muted);display:block;margin-top:3px}

.color-picker{display:flex;gap:8px;padding:2px 0 14px}
.color-dot{width:22px;height:22px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px var(--line-2);cursor:pointer;transition:transform .12s}
.color-dot:hover{transform:scale(1.15)}
.color-dot.sel{box-shadow:0 0 0 2px var(--primary);transform:scale(1.12)}

/* 响应式降级 */
@media (max-width:1180px){
  .grid.stats{grid-template-columns:repeat(2,1fr)}
  .grid.two-col,.grid.two-31{grid-template-columns:1fr}
  .designer{grid-template-columns:190px 1fr 230px}
  .contact-row{grid-template-columns:repeat(2,1fr)}
  .global-search{width:210px}
}
@media (max-width:900px){
  .sidebar{display:none}
  .designer{grid-template-columns:1fr}
  .designer-side,.designer-inspector{display:none}
}

/* ============ 知识库 ============ */
.kb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;padding:12px 18px}
.kb-card{border:1px solid var(--line);border-radius:10px;padding:14px;display:flex;flex-direction:column;gap:8px;transition:box-shadow .15s}
.kb-card:hover{box-shadow:var(--shadow-sm)}
.kb-summary{font-size:12px;color:var(--muted);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.kb-content{font-size:12px;color:var(--ink);line-height:1.7;white-space:pre-wrap;max-height:420px;overflow-y:auto;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:12px}
.tag-row{display:flex;gap:6px;flex-wrap:wrap}

/* ============ 生成业务流 ============ */
.tl-flow{font-size:12px;color:var(--muted);padding:10px 18px;line-height:1.8;white-space:pre-wrap}
.flow-node.done{border-color:var(--green);background:var(--green-soft)}
.flow-node.done .fn-ico{background:var(--green);color:#fff}
.flow-node.run{border-color:var(--primary);background:var(--primary-soft);animation:pulse 1.2s infinite}
.flow-node.run .fn-ico{background:var(--primary);color:#fff}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.65}}
.alert{background:#fff8e6;border:1px solid #f5d28e;color:#8a6d1d;border-radius:8px;font-size:12px}

/* ============ 知识库上传区 ============ */
.upload-zone{
  border:2px dashed var(--line);border-radius:12px;padding:28px 20px;margin:12px 18px;
  text-align:center;cursor:pointer;transition:border-color .15s,background .15s;
}
.upload-zone:hover{border-color:var(--primary);background:var(--primary-soft)}
.upload-zone .uz-ico{font-size:26px;color:var(--primary);margin-bottom:6px}
.upload-zone .uz-text{display:flex;flex-direction:column;gap:4px}
.upload-zone .uz-text strong{font-size:14px}
.upload-zone .uz-text span{font-size:12px;color:var(--muted)}

/* ============ DSH 多Agent 子流程 ============ */
.sub-flow-wrap{border-top:1px dashed var(--line);margin-top:10px;padding:14px 18px 8px}
.sub-flow-title{font-size:12px;font-weight:600;color:var(--muted);margin-bottom:10px}
.sub-flow{display:flex;align-items:stretch;gap:0;flex-wrap:wrap}
.sub-node{border:1px solid var(--line);border-radius:8px;padding:8px 14px;min-width:120px;text-align:center;background:var(--surface)}
.sub-node .sn-ico{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;font-size:12px;margin:0 auto 4px;background:var(--line);color:var(--muted)}
.sub-node .sn-name{font-size:12px;font-weight:600}
.sub-node .sn-desc{font-size:10px;color:var(--muted);margin-top:2px}
.sub-node.done{border-color:var(--green);background:var(--green-soft)}
.sub-node.done .sn-ico{background:var(--green);color:#fff}
.sub-node.run{border-color:var(--primary);background:var(--primary-soft);animation:pulse 1.2s infinite}
.sub-node.run .sn-ico{background:var(--primary);color:#fff}

/* ============ 生成业务流步骤详情 ============ */
.step-detail{padding:4px 2px}
.kv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.kv{display:flex;justify-content:space-between;background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 12px;font-size:12px}
.kv span{color:var(--muted)}
.tbl-wrap{overflow-x:auto;margin-bottom:6px}
.data-tbl{width:100%;border-collapse:collapse;font-size:12px}
.data-tbl th,.data-tbl td{border:1px solid var(--line);padding:6px 10px;text-align:left}
.data-tbl th{background:var(--surface);font-weight:600;color:var(--muted)}
.factpack-banner{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-bottom:10px}
.fp-item{background:var(--primary-soft);border:1px solid var(--line);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;gap:4px}
.fp-item span{font-size:11px;color:var(--muted)}
.fp-item strong{font-size:13px}
.factpack-note{background:var(--green-soft);border:1px solid var(--green);border-radius:8px;padding:8px 12px;font-size:12px;color:var(--green);margin-bottom:10px}
.fp-json{background:#1e1e2e;color:#cdd6f4;border-radius:8px;padding:12px;font-size:11px;font-family:var(--font-mono);max-height:260px;overflow:auto;white-space:pre-wrap}
.rag-row{display:flex;gap:10px;padding:10px 0;border-bottom:1px dashed var(--line);font-size:13px}
.rag-row .rag-ico{font-size:18px}
.rag-hit{padding:4px 0 0 0;font-size:12px;color:var(--ink)}
.agent-card{border:1px solid var(--line);border-radius:10px;margin-bottom:10px;overflow:hidden}
.agent-card .ac-head{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--surface);border-bottom:1px solid var(--line)}
.agent-card .ac-ico{width:22px;height:22px;border-radius:50%;background:var(--primary);color:#fff;display:grid;place-items:center;font-size:11px;font-weight:600}
.agent-card .ac-body{padding:10px 14px;font-size:12px;line-height:1.7}
.ac-line{padding:2px 0}
.chapters{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-bottom:10px}
.chapter{background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:12px;display:flex;gap:8px;align-items:center}
.chapter span{width:20px;height:20px;border-radius:6px;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-size:11px;font-weight:600}
.ppt-card{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin-bottom:10px}
.ppt-ico{font-size:24px}
.ppt-slides{display:grid;grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:8px}
.ppt-slide{aspect-ratio:16/9;background:var(--surface);border:1px solid var(--line);border-radius:6px;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:2px;font-size:11px}
.ppt-slide span{font-size:10px;color:var(--muted)}
.archive-ok{background:var(--green-soft);border:1px solid var(--green);color:var(--green);border-radius:10px;padding:14px 16px;font-size:14px;font-weight:600}
.archive-note{margin-top:8px}
.flow-node{cursor:pointer}

/* ============ 章节配置编辑器 ============ */
.sec-row{display:flex;align-items:center;gap:8px;padding:5px 0}
.sec-idx{width:22px;height:22px;border-radius:6px;background:var(--primary-soft);color:var(--primary);display:grid;place-items:center;font-size:11px;font-weight:600;flex-shrink:0}

/* ============ 智能方案模板 ============ */
.tpl-logo{width:56px;height:56px;border-radius:8px;border:1px solid var(--line);object-fit:contain;background:#fff;flex-shrink:0}
.tpl-logo.sm{width:44px;height:44px}
.tpl-logo.placeholder{display:grid;place-items:center;font-size:9px;color:var(--muted);background:var(--surface);letter-spacing:1px}
.sec-mini{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.sec-mini span{font-size:11px;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:4px;padding:1px 6px}
.tpl-opt-list{display:flex;flex-direction:column;gap:8px;max-height:280px;overflow-y:auto}
.tpl-opt{display:flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;cursor:pointer;transition:all .15s}
.tpl-opt:hover{border-color:var(--primary);box-shadow:var(--shadow-sm)}
.tpl-opt.active{border-color:var(--primary);background:var(--primary-soft);box-shadow:0 0 0 1px var(--primary)}
