:root{
  /* 蓝白浅色 SaaS 主题（color token；色值不进字号门禁，但全站走 token） */
  --bg:#ffffff; --nav:#eef2fb; --panel:#fff; --ink:#1e2a3a; --muted:#6b7686; --line:#e5eaf1;
  --brand:#3b82f6; --brand-d:#2563eb; --brand-l:#60a5fa; --ok:#22c55e; --warn:#f59e0b; --danger:#ef4444; --soft:#eef3fa;
  --surface:#eaf0f7; --graphite:#16212d; --field:#0b2524; --field-2:#0f3a34;
  /* 表面分层投影：chrome 上浮 / 侧栏右分离 / 卡片浮起 */
  --shadow-card:0 1px 2px rgba(15,23,42,.05); --shadow-chrome:0 2px 8px rgba(15,23,42,.06); --shadow-nav:2px 0 8px rgba(15,23,42,.04);
  /* 字号标准刻度（详情页/抽屉/表格统一对齐，整体收紧一档） */
  --fs-title:18px;    /* 页面主标题 */
  --fs-heading:15px;  /* 抽屉主标题 */
  --fs-section:14px;  /* 面板/区块标题 */
  --fs-sub:12px;      /* 子区块标题 */
  --fs-body:12.5px;   /* 表格/字段值/正文 */
  --fs-label:12px;    /* 字段标签/卡片标签/元信息 */
  --fs-meta:11px;     /* 细元信息 */
  --fs-tag:11px;      /* 标签胶囊 */
  --fs-stat:22px;     /* 卡片大数值 */
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;font-family:-apple-system,"PingFang SC","Microsoft YaHei",system-ui,sans-serif;color:var(--ink);background:var(--surface);overflow:hidden}
.hidden{display:none!important}
.app-boot{position:fixed;inset:0;display:grid;place-items:center;background:var(--surface);color:var(--muted);font-size:var(--fs-label);z-index:120}
.scroll-scope{scrollbar-width:thin;scrollbar-gutter:stable;scrollbar-color:transparent transparent}
.scroll-scope::-webkit-scrollbar{width:8px;height:8px}
.scroll-scope::-webkit-scrollbar-track{background:transparent}
.scroll-scope::-webkit-scrollbar-thumb{background:transparent;border-radius:999px}
.scroll-scope.scrollbars-visible{scrollbar-width:thin;scrollbar-color:rgba(107,118,134,.32) transparent}
.scroll-scope.scrollbars-visible::-webkit-scrollbar-thumb{border:2px solid transparent;background:rgba(107,118,134,.32);background-clip:content-box;border-radius:999px}
.scroll-scope.scrollbars-visible::-webkit-scrollbar-thumb:hover{background:rgba(107,118,134,.46);background-clip:content-box}

/* 登录 */
.login-wrap{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#1e3a8a,#0f172a)}
.login-card{background:#fff;padding:36px 32px;border-radius:14px;width:360px;box-shadow:0 20px 60px rgba(0,0,0,.3)}
.login-brand{font-size:22px;font-weight:700;display:flex;align-items:center;gap:10px}
.brand-mark{display:inline-grid;place-items:center;width:30px;height:30px;border:1px solid rgba(255,255,255,.28);border-radius:7px;background:#3b82f6;color:#fff;font-size:11px;font-weight:800;letter-spacing:.04em}
.login-brand .brand-mark{border-color:#d8e0ea}
.brand-mark.mini{width:25px;height:25px;border-radius:6px;background:#3b82f6;color:#fff;margin-right:6px}
.login-sub{color:var(--muted);font-size:13px;margin:4px 0 22px}
#login-form{display:flex;flex-direction:column;gap:12px}
#login-form input{padding:11px 12px;border:1px solid var(--line);border-radius:8px;font-size:14px}
.password-field{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#fff}
.password-field input{flex:1;border:0!important;border-radius:0!important}
#login-form button{padding:11px;background:var(--brand);color:#fff;border:0;border-radius:8px;font-size:15px;cursor:pointer}
#login-form button:hover{background:var(--brand-d)}
#login-form .password-field button{width:52px;padding:0;border:0;border-left:1px solid var(--line);border-radius:0;background:#f8fafc;color:var(--brand);font-size:13px;cursor:pointer;display:flex;align-items:center;justify-content:center}
#login-form .password-field button:hover{background:#eff6ff}
#login-form .password-field svg{width:18px;height:18px;stroke:currentColor;stroke-width:1.9;fill:none;stroke-linecap:round;stroke-linejoin:round}
.login-err{color:var(--danger);font-size:13px;min-height:18px}
.login-hint{margin-top:18px;font-size:12px;color:var(--muted);line-height:2}
.chip{display:inline-block;background:var(--soft);border:1px solid var(--line);border-radius:14px;padding:2px 10px;margin:2px 4px;cursor:pointer}
.chip:hover{border-color:var(--brand);color:var(--brand)}

/* 框架 */
.app{height:100vh;display:flex;flex-direction:column;overflow:hidden;max-width:1920px;margin:0 auto}
.topbar{flex:0 0 56px;height:56px;background:var(--bg);color:var(--ink);display:flex;align-items:center;justify-content:space-between;padding:0 18px;border-bottom:1px solid var(--line);box-shadow:var(--shadow-chrome);position:relative;z-index:5}
.topbar-left{display:flex;align-items:center;gap:10px;min-width:0}
.logo{font-weight:700;margin-right:6px}
.home-link{border:0;background:transparent;color:var(--ink);padding:6px 0;cursor:pointer;font:inherit;display:flex;align-items:center}
.home-link:hover,.home-link:focus{color:var(--brand);outline:none}
.home-link:focus-visible{outline:2px solid var(--brand);outline-offset:3px;border-radius:6px}
.project-select{background:#fff;color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:5px 8px}
.app-version-chip{display:inline-flex;align-items:center;max-width:340px;min-height:28px;padding:3px 9px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--muted);font-size:12px;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.topbar-right{display:flex;align-items:center;gap:10px;font-size:14px}
.role-badge{background:var(--brand);color:#fff;border-radius:10px;padding:2px 9px;font-size:12px}
.btn-ghost{background:transparent;border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:4px 10px;cursor:pointer}
.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}
.body{flex:1;display:flex;min-height:0;overflow:hidden}
.sidebar{flex:0 0 208px;width:208px;background:var(--nav);border-right:1px solid var(--line);border-left:3px solid var(--brand);box-shadow:var(--shadow-nav);padding:10px 0;overflow-y:auto;overflow-x:hidden;position:relative;z-index:2;transition:flex-basis .24s cubic-bezier(.2,.8,.2,1),width .24s cubic-bezier(.2,.8,.2,1),padding .24s cubic-bezier(.2,.8,.2,1)}
.sidebar-tools{padding:0 10px 8px}
.sidebar-toggle{width:100%;min-height:34px;border:1px solid rgba(59,130,246,.22);border-radius:8px;background:rgba(255,255,255,.72);color:#334155;display:flex;align-items:center;gap:9px;padding:7px 10px;font-size:var(--fs-label);font-weight:700;cursor:pointer;box-shadow:0 1px 2px rgba(15,23,42,.04);transition:background .18s ease,border-color .18s ease,color .18s ease,transform .18s ease}
.sidebar-toggle:hover,.sidebar-toggle:focus-visible{background:#fff;border-color:var(--brand-l);color:var(--brand);outline:none}
.sidebar-toggle:active{transform:translateY(1px)}
.sidebar-toggle-icon{width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;flex:0 0 18px;transition:transform .24s cubic-bezier(.2,.8,.2,1)}
.sidebar-toggle-icon svg{width:18px;height:18px}
.nav-item{width:100%;border:0;background:transparent;text-align:left;padding:11px 18px;cursor:pointer;font-size:14px;color:#334155;display:flex;gap:10px;align-items:center;min-height:42px}
.nav-item:hover{background:#e3eaf6}
.nav-item.active{background:#fff;color:var(--brand);border-right:3px solid var(--brand);font-weight:700;box-shadow:0 1px 2px rgba(15,23,42,.06)}
.content{flex:1;min-width:0;padding:16px;overflow-y:auto;overflow-x:hidden}
.app.sidebar-collapsed .sidebar{flex-basis:88px;width:88px;padding:10px 0}
.app.sidebar-collapsed .sidebar-tools{padding:0 7px 8px}
.app.sidebar-collapsed .sidebar-toggle{justify-content:center;padding:7px 0}
.app.sidebar-collapsed .sidebar-toggle-icon{transform:rotate(180deg)}
.app.sidebar-collapsed .sidebar-toggle-label,.app.sidebar-collapsed .nav-group-title{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.app.sidebar-collapsed .nav-group{margin-bottom:2px}
.app.sidebar-collapsed .nav-item{justify-content:center;flex-direction:column;gap:3px;padding:8px 6px;border-right:0;text-align:center;min-height:50px}
.app.sidebar-collapsed .nav-label{display:block;max-width:68px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-meta);line-height:1.15;font-weight:600}
.app.sidebar-collapsed .nav-item.active{border-right:0;box-shadow:inset 3px 0 0 var(--brand),0 1px 2px rgba(15,23,42,.06)}

h2.page-title{margin:0 0 4px;font-size:var(--fs-title)}
.page-desc{color:var(--muted);font-size:var(--fs-label);margin:0 0 18px}

/* 指标卡 */
.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,220px));justify-content:start;gap:14px;margin-bottom:22px}
.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,220px));justify-content:start;gap:14px;margin-bottom:22px}
.kpi-row .card{width:100%;max-width:240px}
.kpi-row .kpi{width:100%;max-width:240px}
.card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:16px;box-shadow:var(--shadow-card);transition:box-shadow .15s,transform .15s}
.card:hover{box-shadow:0 4px 12px rgba(15,23,42,.08)}
.stat-filter-card{width:100%;text-align:left;color:inherit;font:inherit;cursor:pointer}
.stat-filter-card:hover,.stat-filter-card:focus-visible{border-color:#bfdbfe;box-shadow:0 4px 12px rgba(59,130,246,.14);transform:translateY(-1px);outline:none}
.quick-filter-row{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.quick-filter-row .stat-filter-card{width:auto;min-height:30px;border:1px solid var(--line);border-radius:7px;background:#fff;padding:6px 10px;color:var(--ink);font-size:var(--fs-label);font-weight:700;box-shadow:var(--shadow-card)}
.quick-filter-row .stat-filter-card:hover,.quick-filter-row .stat-filter-card:focus-visible{background:#eef6ff;color:var(--brand);border-color:var(--brand-l);box-shadow:0 2px 8px rgba(59,130,246,.12);transform:none}
/* 嵌在白色面板里的卡片加浅底，浮起避免白卡白底无对比（画布上的卡片不受影响） */
.panel .card{background:var(--surface)}
.card .v{font-size:var(--fs-stat);font-weight:700}
.card .l{color:var(--muted);font-size:var(--fs-label);margin-top:4px}
.card.warn .v{color:var(--warn)} .card.danger .v{color:var(--danger)} .card.ok .v{color:var(--ok)}

/* 面板/表格 */
.panel{background:#fff;border:1px solid var(--line);border-radius:8px;padding:16px 18px;margin-bottom:18px;box-shadow:var(--shadow-card)}
.panel h3{margin:0 0 12px;font-size:var(--fs-section)}
.panel-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}
.panel-head h3{margin:0}
.panel-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.route-context-banner{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 12px;padding:10px 12px;border:1px solid #bfdbfe;border-left:4px solid var(--brand);border-radius:8px;background:#eff6ff;color:#1e3a8a}
.route-context-banner p{margin:0;font-size:13px;font-weight:700;color:#1e3a8a}
.boss-action-panel .panel-actions{gap:10px}
.detail-disclosure summary{cursor:pointer;font-weight:800;color:var(--ink)}
.detail-disclosure[open] summary{margin-bottom:12px}
.inline-nav{border:1px solid #bfdbfe;background:#eff6ff;color:#3b82f6;border-radius:999px;padding:6px 11px;font-size:12px;cursor:pointer;font-weight:700}
.inline-nav:hover{background:#dbeafe}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
table{width:100%;border-collapse:collapse;font-size:var(--fs-body)}
th,td{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line)}
th{color:var(--muted);font-weight:600;background:#fafbfc}
tbody tr:hover{background:#fafbfc}
/* 账单等宽表：保留逐项费用列，靠更紧凑单元格 + 横向滚动降低拥挤感（不删列、不丢对账信息） */
#bills-body{overflow-x:auto}
#bills-body table th,#bills-body table td{padding:5px 7px;font-size:var(--fs-label)}
.tag{display:inline-block;border-radius:10px;padding:1px 9px;font-size:var(--fs-tag);border:1px solid}
.t-gray{background:#f1f5f9;color:#475569;border-color:#e2e8f0}
.t-blue{background:#eff6ff;color:#3b82f6;border-color:#bfdbfe}
.t-green{background:#f0fdf4;color:#15803d;border-color:#bbf7d0}
.t-amber{background:#fffbeb;color:#b45309;border-color:#fde68a}
.t-red{background:#fef2f2;color:#b91c1c;border-color:#fecaca}
.btn{background:var(--brand);color:#fff;border:0;border-radius:6px;padding:4px 10px;font-size:12px;cursor:pointer;font-weight:700}
.btn:hover{background:var(--brand-d)}
.btn.sm-ghost{background:#fff;color:var(--brand);border:1px solid #bfdbfe}
.btn.danger{background:var(--danger)} .btn.danger:hover{background:#b91c1c}
.btn:disabled,.btn:disabled:hover{opacity:.48;cursor:not-allowed;background:#e2e8f0;color:#64748b;border-color:#cbd5e1}
.tabs{display:flex;gap:6px;margin-bottom:14px}
.tab{padding:6px 14px;border:1px solid var(--line);border-radius:7px;cursor:pointer;font-size:13px;background:#fff}
.tab.active{background:var(--brand);color:#fff;border-color:var(--brand)}
.empty{color:var(--muted);padding:18px;text-align:center}
.empty.risk-clear{display:flex;gap:10px;align-items:center;justify-content:center}
.empty-state-card{max-width:520px;margin:52px auto;padding:24px;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:var(--shadow-card);text-align:left}
.empty-state-card p{margin:8px 0 16px;color:var(--muted);font-size:var(--fs-body);line-height:1.65}
.route-skeleton{display:block}
.route-skeleton-head{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;margin-bottom:12px}
.sk-card-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,220px));justify-content:start;gap:14px;margin-bottom:18px}
.sk-card,.sk-panel{position:relative;overflow:hidden;background:#fff}
.sk-card{height:78px;border:1px solid var(--line);border-radius:8px;padding:14px;box-shadow:var(--shadow-card)}
.sk-line,.sk-chip,.sk-chart{position:relative;overflow:hidden;border-radius:999px;background:#edf2f8}
.sk-line::after,.sk-chip::after,.sk-chart::after{content:'';position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.72),transparent);animation:skeleton-shimmer 1.15s infinite}
.sk-line.title{width:160px;height:20px;margin-bottom:8px}.sk-line.desc{width:280px;height:12px}
.sk-chip{width:104px;height:30px}.sk-line.value{width:72px;height:24px;margin-bottom:10px}.sk-line.label{width:92px;height:11px}
.sk-line.panel-title{width:132px;height:15px;margin-bottom:16px}.sk-chart{height:210px;border-radius:8px}.sk-chart.small{height:170px}
@keyframes skeleton-shimmer{100%{transform:translateX(100%)}}
.muted{color:var(--muted)}
.link-btn{background:transparent;border:0;color:var(--brand);padding:0;cursor:pointer;font:inherit;text-align:left}
.link-btn:hover{text-decoration:underline}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* 配置中心 */
.config-categories{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 14px}
.config-center{display:grid;grid-template-columns:286px minmax(0,1fr);gap:16px;align-items:start}
.config-domains{position:sticky;top:0;min-width:0}
.config-tree{display:flex;flex-direction:column;gap:9px;max-height:calc(100dvh - 190px);overflow:auto;padding:8px;border:1px solid var(--line);border-radius:8px;background:#fff;scrollbar-width:thin}
.config-tree-category{position:relative}
.config-category{width:100%;display:grid;grid-template-columns:22px minmax(0,1fr) auto;gap:7px;border:0;border-radius:7px;background:#fff;color:var(--ink);padding:7px 8px;text-align:left;cursor:pointer}
.config-category i{grid-row:1/3;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border:1px solid #cbd5e1;border-radius:6px;color:#475569;font-size:12px;font-style:normal;font-weight:800;background:#f8fafc}
.config-category b{display:block;font-size:13px;line-height:1.25}
.config-category span{display:block;color:var(--muted);font-size:12px;line-height:1.35}
.config-tree-count{grid-column:3;grid-row:1/3;align-self:center;border:1px solid #dbe3ec;border-radius:999px;padding:2px 7px;background:#f8fafc;color:#64748b;font-size:11px;font-style:normal;font-weight:700;white-space:nowrap}
.config-category.active{background:#eff6ff;color:#1d4ed8}
.config-category.active i{border-color:#93c5fd;background:#dbeafe;color:#1d4ed8}
.config-category.active .config-tree-count{border-color:#bfdbfe;background:#dbeafe;color:#1d4ed8}
.config-tree-category.collapsed .config-tree-children{display:none}
.config-tree-children{position:relative;display:flex;flex-direction:column;gap:9px;margin:5px 0 0 20px;padding-left:14px;border-left:1px solid #d7e0ea}
.config-domain{position:relative;width:100%;display:grid;grid-template-columns:14px minmax(0,1fr);gap:7px;border:0;border-radius:7px;background:#fff;color:var(--ink);padding:6px 8px;text-align:left;cursor:pointer}
.config-domain i{position:relative;margin-top:2px;width:10px;height:10px;border:1px solid #94a3b8;border-radius:3px;background:#fff}
.config-domain::before{content:'';position:absolute;left:-14px;top:15px;width:12px;border-top:1px solid #d7e0ea}
.config-domain b{display:block;font-size:12.5px;line-height:1.25}
.config-domain-desc{display:none}
.config-domain.active{background:#eff6ff;color:#1d4ed8;box-shadow:inset 3px 0 0 var(--brand)}
.config-domain.active i{border-color:#2563eb;background:#2563eb}
.config-domain.locked{cursor:not-allowed;background:#f8fafc;color:#64748b}
.config-workbench{min-width:0}
.config-panel{padding:0;overflow:hidden}
.config-panel .panel-head{padding:15px 18px;margin:0;border-bottom:1px solid var(--line);background:#fff}
.config-panel-desc{margin:4px 0 0;color:var(--muted);font-size:var(--fs-label);line-height:1.5}
.config-list{display:block}
.config-rule-group{background:#fff}
.config-group-head{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 18px;border-bottom:1px solid var(--line);background:#fbfdff}
.config-group-head h3{margin:0;font-size:14px}
.config-group-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:0 0 auto}
.config-group-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
.config-rule{display:grid;grid-template-columns:1fr;align-content:start;gap:12px;padding:15px 18px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff}
.config-rule:nth-child(2n){border-right:0}
.config-rule.wide{grid-column:1/-1;grid-template-columns:minmax(260px,.85fr) minmax(360px,1.15fr);gap:16px;border-right:0}
.config-rule:last-child,.config-rule:nth-last-child(2):nth-child(odd){border-bottom:0}
.config-rule.readonly{background:#fafbfc}
.config-rule-main{min-width:0}
.config-rule-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:7px}
.config-rule-title h3{margin:0;font-size:14px}
.config-signals{display:flex;gap:7px;flex-wrap:wrap}
.config-signal{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid #dbe4ee;border-radius:7px;background:#f8fafc;color:#475569;outline:none}
.config-signal:focus{border-color:#93c5fd;box-shadow:0 0 0 3px rgba(59,130,246,.14)}
.config-signal svg{width:16px;height:16px}
.config-signal.info{font-weight:800;font-family:ui-serif,Georgia,serif}
.config-info-letter{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;border:1px solid currentColor;font-size:11px;line-height:1;font-style:italic}
.config-signal.required{border-color:#fecaca;background:#fff7ed;color:#b45309}
.config-signal.optional{opacity:.72}
.config-signal.is-active{border-color:#bfdbfe;background:#eff6ff;color:#1d4ed8}
.config-rule-meta em,.config-input-wrap em{font-style:normal;color:var(--muted)}
.config-rule-control{display:grid;grid-template-columns:minmax(0,1fr) 138px;gap:10px;align-items:start}
.config-rule.wide .config-rule-control{grid-template-columns:minmax(180px,1fr) 150px;align-items:end}
.config-rule-control.instant{grid-template-columns:minmax(180px,1fr) auto}
.config-rule.compact .config-field:first-child{max-width:260px}
.config-field{display:flex;flex-direction:column;gap:5px;min-width:0}
.config-field span{font-size:12px;color:var(--muted)}
.config-field input,.config-field select{width:100%;min-height:32px;border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:13px;color:var(--ink);background:#fff}
.config-field input:disabled,.config-field select:disabled{background:#f1f5f9;color:#64748b}
.config-field.valid input,.config-field.valid select,.config-field.valid .config-input-wrap{border-color:#86efac;background:#f0fdf4}
.config-field.invalid input,.config-field.invalid select,.config-field.invalid .config-input-wrap{border-color:#fca5a5;background:#fff7f7}
.config-field-feedback{min-height:14px;color:#64748b;font-size:11px;line-height:1.25}
.config-field.valid .config-field-feedback{color:#15803d}
.config-field.invalid .config-field-feedback{color:var(--danger)}
.config-input-wrap{display:flex;align-items:center;border:1px solid var(--line);border-radius:6px;background:#fff;overflow:hidden}
.config-input-wrap input,.config-input-wrap select{border:0;border-radius:0;min-width:0}
.config-input-wrap em{flex:0 0 auto;padding:0 9px;border-left:1px solid var(--line);font-size:12px;white-space:nowrap}
.config-actions{display:flex;gap:8px;align-items:center;justify-content:flex-end;padding-bottom:1px}
.config-readonly-note{grid-column:1/-1;margin-top:-6px;color:var(--muted);font-size:12px}
.config-readonly-pill{display:inline-flex;align-items:center;justify-content:center;min-height:28px;padding:4px 9px;border:1px solid #cbd5e1;border-radius:6px;background:#f1f5f9;color:#475569;font-size:12px;font-weight:700;white-space:nowrap}
.config-error{grid-column:1/-1;min-height:16px;color:var(--danger);font-size:12px}
.enterprise-org-grid{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(260px,.85fr);gap:0;border-top:0}
.config-subpanel{padding:16px 18px;border-bottom:1px solid var(--line);background:#fff}
.config-subpanel:nth-child(odd){border-right:1px solid var(--line)}
.config-subpanel h3{margin:0 0 12px;font-size:14px}
.config-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.config-actions.inline{justify-content:flex-start;margin-top:12px;padding-bottom:0}
.org-tree,.org-tree ul{list-style:none;margin:0;padding-left:18px}
.org-tree{padding-left:0}
.org-tree li{position:relative;margin:8px 0}
.org-tree li::before{content:'';position:absolute;left:-12px;top:16px;width:9px;border-top:1px solid #cbd5e1}
.org-tree>li::before{display:none}
.org-node{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:7px;background:#f8fafc}
.org-node b{font-size:13px}
.org-node span{flex:0 0 auto;color:var(--muted);font-size:12px}
.leasing-owner-summary{margin-bottom:12px;padding:10px 12px;border:1px solid #bfdbfe;border-radius:7px;background:#eff6ff}
.leasing-owner-summary b{display:block;font-size:14px}
.leasing-owner-summary span{display:block;margin-top:4px;color:#475569;font-size:12px}
.notify-rule{grid-template-columns:minmax(220px,.75fr) minmax(520px,1.55fr)}
.notify-control{grid-template-columns:minmax(150px,1fr) minmax(170px,1fr) 90px auto}
.notify-enabled input{width:auto;min-height:18px;align-self:flex-start}
@media (max-width: 1060px){
  .config-center{grid-template-columns:1fr}
  .config-domains{position:static}
  .config-tree{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
  .config-group-grid{grid-template-columns:1fr}
  .config-rule,.config-rule.wide{grid-column:auto;grid-template-columns:1fr;border-right:0}
  .config-rule-control,.config-rule.wide .config-rule-control{grid-template-columns:minmax(180px,1fr) 150px}
  .enterprise-org-grid,.config-form-grid{grid-template-columns:1fr}
  .config-subpanel:nth-child(odd){border-right:0}
  .notify-rule,.notify-control{grid-template-columns:1fr}
}
@media (max-width: 700px){
  .config-tree,.config-rule-control,.config-rule-control.instant,.config-rule.wide .config-rule-control{grid-template-columns:1fr}
  .config-group-head{align-items:flex-start;flex-direction:column}
  .config-group-actions{width:100%;justify-content:flex-start}
  .config-rule.compact .config-field:first-child{max-width:none}
  .config-actions{justify-content:flex-start}
}

/* 知识库 */
.kb-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:14px}
.kb-stats{display:grid;grid-template-columns:repeat(3,92px);gap:8px}
.kb-stats div{background:#fff;border:1px solid var(--line);border-radius:8px;padding:10px;text-align:center}
.kb-stats b{display:block;font-size:22px}.kb-stats span{display:block;color:var(--muted);font-size:12px;margin-top:2px}
.kb-filter-panel{padding:12px 14px}
.kb-toolbar{display:flex;gap:8px;flex-wrap:wrap}
.kb-toolbar input{flex:1;min-width:260px}
.kb-toolbar input,.kb-toolbar select,.kb-form input,.kb-form select,.kb-form textarea{
  padding:7px 9px;border:1px solid var(--line);border-radius:6px;font-size:13px;background:#fff;color:var(--ink)
}
.kb-workbench{display:grid;grid-template-columns:248px minmax(540px,1fr) 280px;gap:16px;align-items:start}
.kb-tree-panel,.kb-view,.kb-upload-panel{min-width:0}
.kb-tree-panel,.kb-upload-panel{position:sticky;top:74px;max-height:calc(100vh - 96px);overflow:auto}
.kb-tree-panel h3{display:flex;justify-content:space-between;align-items:center}.kb-tree-panel h3 span{font-size:12px;color:var(--muted);font-weight:500}
.kb-tree{font-size:13px}.kb-folder{margin:3px 0}.kb-folder summary{cursor:pointer;display:flex;justify-content:space-between;gap:8px;padding:6px 8px;border-radius:6px;color:#334155}
.kb-folder summary:hover{background:var(--soft)}.kb-folder summary b{color:var(--muted);font-size:11px}
.kb-children{padding-left:12px;border-left:1px solid var(--line);margin-left:9px}
.kb-tree-doc{display:block;width:100%;background:transparent;border:0;text-align:left;padding:7px 8px;border-radius:6px;cursor:pointer;color:var(--ink)}
.kb-tree-doc:hover{background:var(--soft)}.kb-tree-doc.active{background:#eff6ff;color:var(--brand);font-weight:600}
.kb-file-title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.kb-file-sub{display:block;color:var(--muted);font-size:11px;font-weight:400;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kb-doc-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.kb-doc-head h3{font-size:18px;margin:0 0 4px}
.kb-meta{color:var(--muted);font-size:var(--fs-label)}
.kb-view pre{white-space:pre-wrap;word-break:break-word;background:#0f172a;color:#e2e8f0;border-radius:8px;padding:16px;max-height:calc(100vh - 230px);overflow:auto;font-size:13px;line-height:1.65;margin:0}
/* 渲染后的 Markdown 文章样式 */
.kb-md{max-height:calc(100vh - 210px);overflow:auto;padding:4px 6px 20px;color:var(--ink);font-size:14px;line-height:1.78}
.kb-md h1{font-size:21px;margin:4px 0 14px;padding-bottom:8px;border-bottom:2px solid var(--line)}
.kb-md h2{font-size:17px;margin:22px 0 10px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.kb-md h3{font-size:15px;margin:16px 0 8px}
.kb-md h4,.kb-md h5,.kb-md h6{font-size:14px;margin:12px 0 6px;color:#334155}
.kb-md p{margin:9px 0}
.kb-md ul,.kb-md ol{margin:9px 0;padding-left:24px}.kb-md li{margin:4px 0}
.kb-md code{background:#f1f5f9;border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:12.5px;color:#b91c1c}
.kb-md pre.md-code{background:#0f172a;color:#e2e8f0;border-radius:8px;padding:14px;overflow:auto;font-size:12.5px;line-height:1.6;margin:11px 0}
.kb-md pre.md-code code{background:none;border:0;color:inherit;padding:0}
.kb-md blockquote{margin:11px 0;padding:8px 14px;border-left:3px solid var(--brand);background:#f8fafc;color:var(--muted);border-radius:0 6px 6px 0}
.kb-md hr{border:0;border-top:1px solid var(--line);margin:18px 0}
.kb-md a{color:var(--brand)}
.kb-md table.md-table{width:100%;border-collapse:collapse;margin:13px 0;font-size:13px}
.kb-md table.md-table th,.kb-md table.md-table td{border:1px solid var(--line);padding:7px 10px;text-align:left;vertical-align:top}
.kb-md table.md-table th{background:#f8fafc;font-weight:600}
.kb-md table.md-table tbody tr:nth-child(even){background:#fafbfc}
.kb-upload-panel h3{margin-bottom:6px}
.kb-form{display:flex;flex-direction:column;gap:9px}
.kb-form textarea{min-height:180px;resize:vertical;line-height:1.5}
.kb-form #kb-upload{padding:8px 12px;font-size:13px}
@media (max-width: 1180px){
  .kb-workbench{grid-template-columns:280px minmax(380px,1fr)}
  .kb-upload-panel{position:static;grid-column:1/-1;max-height:none}
}
@media (max-width: 820px){
  .kb-head{display:block}.kb-stats{grid-template-columns:repeat(3,1fr);margin-top:10px}
  .kb-workbench{grid-template-columns:1fr}
  .kb-tree-panel,.kb-upload-panel{position:static;max-height:none}
  .kb-view pre{max-height:none}
}

/* 视频监控墙 */
.cam-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(232px,1fr));gap:14px}
.cam{background:#0b1220;border:1px solid var(--line);border-radius:10px;overflow:hidden}
.cam-feed{position:relative;height:130px;background:repeating-linear-gradient(45deg,#0f172a,#0f172a 10px,#111c33 10px,#111c33 20px);
  display:flex;align-items:center;justify-content:center;color:#475569;font-size:13px}
.cam-feed.online{background:linear-gradient(135deg,#0b3a2e,#0b1220)}
.cam-feed.offline{background:#1f2937}
.cam-feed.blocked{background:linear-gradient(135deg,#3a2a0b,#0b1220)}
.cam-live{position:absolute;top:8px;left:8px;font-size:11px;padding:1px 7px;border-radius:8px}
.cam-live.online{background:#16a34a;color:#fff} .cam-live.offline{background:#6b7280;color:#fff} .cam-live.blocked{background:#d97706;color:#fff}
.cam-meta{padding:9px 11px;color:#e2e8f0}
.cam-meta .n{font-size:13px;font-weight:600} .cam-meta .l{font-size:12px;color:#94a3b8;margin-top:2px}
.cam-feed .play{font-size:30px;opacity:.5}

/* ===== 顶栏：搜索 / 消息铃铛 / 账号下拉 ===== */
.topbar-search{position:relative}
.topbar-search input{width:299px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:16px;padding:6px 12px;font-size:13px;transition:width .15s,border-color .15s}
.topbar-search input::placeholder{color:var(--muted)}
.topbar-search input:focus{outline:none;border-color:var(--brand);background:#fff;width:420px}
.icon-btn{position:relative;background:transparent;border:0;color:var(--muted);font-size:17px;cursor:pointer;padding:4px 6px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center}
.icon-btn:hover{background:var(--soft);color:var(--ink)}
.icon-btn svg{width:18px;height:18px;display:block}
.bell-wrap{position:relative}
.bell-badge{position:absolute;top:-2px;right:-2px;background:var(--danger);color:#fff;font-size:10px;min-width:16px;height:16px;line-height:16px;text-align:center;border-radius:8px;padding:0 3px}
.account{position:relative}
.account-btn{display:flex;align-items:center;gap:8px;background:transparent;border:0;cursor:pointer;color:var(--ink);padding:3px 6px;border-radius:8px}
.account-btn:hover{background:var(--soft)}
.avatar{width:30px;height:30px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700}
.account .role-badge{font-size:10px;padding:0 7px}
.caret{color:#94a3b8;font-size:11px}
.dropdown{position:absolute;right:0;top:46px;background:#fff;color:var(--ink);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 34px rgba(15,23,42,.18);z-index:60;min-width:200px;overflow:hidden}
.account-menu{padding:6px}
.account-menu-header{padding:9px 10px 10px;border-bottom:1px solid var(--line);margin-bottom:5px}
.account-menu-name{font-size:13px;font-weight:700;color:var(--ink);line-height:1.4}
.account-menu-meta{display:flex;align-items:center;gap:7px;margin-top:5px}
.account-menu-username{font-size:12px;color:var(--muted)}
.dropdown-item{display:block;width:100%;text-align:left;background:transparent;border:0;padding:9px 12px;font-size:13px;cursor:pointer;border-radius:7px;color:var(--ink)}
.dropdown-item:hover{background:var(--soft)}
.dropdown-item.danger{color:var(--danger)}
.dropdown-sep{height:1px;background:var(--line);margin:5px 4px}
.search-results{left:0;right:auto;top:40px;width:100%;min-width:100%;max-height:320px;overflow:auto;padding:6px}
.search-results .sr-group{font-size:11px;color:var(--muted);padding:6px 10px 2px}
.search-results .dropdown-item{display:flex;align-items:center;gap:8px}
.search-results .dropdown-item.sr-active{background:var(--soft)}
.search-results .sr-label{white-space:nowrap}
.search-results mark{background:#fde68a;color:inherit;border-radius:2px;padding:0 1px}
.bell-panel{min-width:300px;max-height:380px;overflow:auto;padding:6px}
.bell-panel .bp-title{font-size:13px;font-weight:700;padding:8px 10px;border-bottom:1px solid var(--line);margin-bottom:4px}
.bell-item{padding:9px 10px;border-radius:7px}
.bell-item:hover{background:var(--soft)}
.bell-item .t{font-size:13px;font-weight:600}
.bell-item .b{font-size:12px;color:var(--muted);margin-top:2px}
.bell-item .ts{font-size:11px;color:var(--muted);margin-top:3px}

/* ===== 面包屑 ===== */
.crumb{flex:0 0 auto;background:#fff;border-bottom:1px solid var(--line);padding:8px 26px;font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px}
.crumb .home{color:var(--brand)}
.crumb .sep{color:#cbd5e1}
.crumb .cur{color:var(--ink);font-weight:600}

/* ===== 分组导航 ===== */
.nav-group{margin-bottom:6px}
.nav-group-title{font-size:11px;color:#94a3b8;font-weight:600;letter-spacing:.5px;padding:10px 18px 5px}
.nav-item .ni-icon{width:18px;height:18px;flex:0 0 18px;display:inline-flex;align-items:center;justify-content:center;color:#607086;line-height:1}
.nav-item .ni-icon svg{width:18px;height:18px;display:block}
.nav-item:hover .ni-icon{color:#334155}
.nav-item.active .ni-icon{color:var(--brand)}

/* ===== 资产房源树 ===== */
.asset-tree .building{margin-bottom:14px}
.asset-tree .b-head{display:flex;align-items:center;gap:10px;font-weight:600;font-size:14px;margin-bottom:8px}
.asset-tree .b-head .b-stat{font-size:12px;color:var(--muted);font-weight:400}
.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;vertical-align:middle}
.status-dot.rented{background:var(--ok)} .status-dot.vacant{background:var(--warn)} .status-dot.self_use{background:var(--muted)} .status-dot.soon_vacant{background:var(--danger)}
.compact-cards{grid-template-columns:repeat(auto-fit,minmax(160px,220px));margin:0 0 14px}
/* 密集指标格：用于工单总览/效率指标等成排小指标，降框降字、提密度 */
.cards.dense{grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:10px;margin:0 0 12px}
.cards.dense .card{padding:10px 12px}
.cards.dense .card .v{font-size:var(--fs-heading);font-weight:800;line-height:1.1}
.cards.dense .card .l{font-size:var(--fs-meta);margin-top:2px}
.asset-drawer-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.asset-note{border:1px solid var(--line);background:#f8fafc;border-radius:8px;padding:10px 12px;font-size:13px;color:#334155;line-height:1.6;margin-bottom:12px}
.asset-media{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:10px;margin-bottom:14px}
.asset-photo{min-height:78px;border:1px dashed #cbd5e1;border-radius:8px;background:#f8fafc;padding:10px;display:flex;flex-direction:column;gap:5px}
.asset-photo b,.config-item b{font-size:13px}.asset-photo span,.config-item em{font-size:12px;color:var(--muted);font-style:normal}.asset-photo em{font-size:11px;color:var(--brand);font-style:normal}
.asset-config{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:8px;margin-bottom:14px}
.config-item{border:1px solid var(--line);border-radius:8px;padding:9px 10px;display:flex;flex-direction:column;gap:4px;background:#fff}
.config-item span{font-size:12px;color:var(--ok)}
.asset-legend{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.resource-building{margin-bottom:18px}
.floor-row{display:grid;grid-template-columns:58px 1fr;gap:10px;align-items:start;margin-bottom:9px}
.floor-label{font-weight:700;color:#334155;padding-top:12px}
.unit-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px}
.unit-cell{border:1px solid var(--line);border-left-width:5px;border-radius:8px;background:#fff;padding:9px 10px;text-align:left;cursor:pointer;min-height:76px;display:flex;flex-direction:column;gap:3px}
.unit-cell:hover{box-shadow:0 6px 16px rgba(15,23,42,.08);transform:translateY(-1px)}
.unit-cell b{font-size:13px}.unit-cell span,.unit-cell em{font-size:12px;color:var(--muted);font-style:normal;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.unit-cell.rented{border-left-color:var(--ok)}.unit-cell.vacant{border-left-color:var(--warn)}.unit-cell.soon_vacant{border-left-color:var(--danger)}.unit-cell.self_use{border-left-color:var(--muted)}
.subhead{font-size:14px;margin:18px 0 10px}
.panel h3+.subhead{margin-top:6px}
.asset-future-row{cursor:pointer}

/* ===== 响应式 ===== */
@media (max-width: 860px){
  .grid2{grid-template-columns:1fr}
  .topbar-search{display:none}
  .sidebar{flex-basis:88px;width:88px}.sidebar-tools{padding:0 7px 8px}.sidebar-toggle{justify-content:center;padding:7px 0}.sidebar-toggle-label,.nav-group-title{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.nav-item{justify-content:center;flex-direction:column;gap:3px;padding:8px 6px;text-align:center;min-height:50px}.nav-label{display:block;max-width:68px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-meta);line-height:1.15;font-weight:600}
}

/* ===== P3 通用列表：工具条 / 排序 / 分页 ===== */
.lv-toolbar{display:flex;gap:8px;flex-wrap:nowrap;align-items:center;min-width:0;margin-bottom:8px}
.lv-toolbar input,.lv-toolbar select{padding:7px 10px;border:1px solid var(--line);border-radius:7px;font-size:13px;background:#fff;color:var(--ink)}
.lv-search{min-width:0}
.lv-toolbar .lv-search{flex:0 1 260px;min-width:180px}
.lv-meta{margin-left:auto;display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}
.lv-count{color:var(--muted);font-size:12px}
.lv-size{display:inline-flex;align-items:center;gap:5px;color:var(--muted);font-size:12px;white-space:nowrap}
.lv-size .lv-page-size{min-height:28px;padding:4px 7px;font-size:12px;border-radius:6px}
.lv-filters{display:flex;flex:1 1 auto;gap:6px;min-width:0;margin:0;padding-bottom:2px;overflow-x:auto;scrollbar-width:thin}
.lv-filter{flex:0 0 auto;border:1px solid var(--line);background:#fff;border-radius:6px;padding:5px 9px;cursor:pointer;color:var(--ink);font-size:12px}
.lv-filter.active{border-color:var(--brand);background:#eef6ff;color:var(--brand)}
th.sortable{cursor:pointer;user-select:none;white-space:nowrap}
th.sortable:hover{color:var(--brand)}
th.sortable .arr{color:var(--brand);font-size:10px;margin-left:3px}
tr.lv-row{cursor:pointer}
.lv-pager{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;font-size:13px}
.lv-pager .lv-meta{margin-left:0}
.lv-pager-actions{display:flex;align-items:center;justify-content:flex-end;gap:6px}
.lv-pager button{background:#fff;border:1px solid var(--line);border-radius:6px;padding:4px 10px;cursor:pointer;color:var(--ink)}
.lv-pager button:disabled{opacity:.45;cursor:default}
.lv-pager .cur{color:var(--muted)}

/* ===== 详情抽屉 ===== */
.drawer-mask{position:fixed;inset:0;background:rgba(15,23,42,.42);z-index:80;display:flex;justify-content:flex-end}
.drawer{width:720px;max-width:94vw;height:100%;background:#fff;box-shadow:-12px 0 40px rgba(15,23,42,.25);display:flex;flex-direction:column;animation:slideIn .18s ease}
@keyframes slideIn{from{transform:translateX(40px);opacity:.4}to{transform:translateX(0);opacity:1}}
.drawer-head{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--line)}
.drawer-head h3{margin:0;font-size:var(--fs-heading)}
.drawer-close{background:transparent;border:0;font-size:var(--fs-heading);cursor:pointer;color:var(--muted);padding:4px 8px;border-radius:6px}
.drawer-close:hover{background:var(--soft);color:var(--ink)}
.drawer-body{padding:18px 20px;overflow:auto}
.dl{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px 22px;font-size:var(--fs-body);margin-bottom:18px}
.dl .f{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:2px 12px;align-items:baseline;min-width:0}
.dl .f.wide{grid-column:1 / -1}
.dl dt{color:var(--muted);white-space:nowrap;font-size:var(--fs-label)}
.dl dd{margin:0;color:var(--ink);min-width:0;word-break:break-word}
.drawer-body h4{font-size:var(--fs-sub);margin:16px 0 10px;color:#334155;display:flex;align-items:center;gap:6px}
.timeline{border-left:2px solid var(--line);margin-left:6px;padding-left:16px}
.tl-item{position:relative;padding-bottom:14px}
.tl-item::before{content:'';position:absolute;left:-23px;top:3px;width:10px;height:10px;border-radius:50%;background:var(--brand);border:2px solid #fff}
.tl-item .tl-act{font-size:var(--fs-body);font-weight:600}
.tl-item .tl-meta{font-size:var(--fs-meta);color:var(--muted);margin-top:2px}
.sla-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:16px}
.sla-box{border:1px solid var(--line);border-radius:8px;padding:10px;text-align:center}
.sla-box .sv{font-size:var(--fs-heading);font-weight:700}.sla-box .sl{font-size:var(--fs-meta);color:var(--muted);margin-top:3px}
.stars{color:#f59e0b;letter-spacing:1px}
.ticket-action-bar{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:#f8fafc}
.ticket-action-bar .btn{min-height:30px;padding:6px 12px}
.ticket-action-bar .btn:not(.primary):not(.danger){background:#fff;color:var(--brand);border:1px solid #bfdbfe}
.ticket-action-bar .btn:not(.primary):not(.danger):hover{background:#eff6ff}
.ticket-action-note{margin:0 0 16px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:#f8fafc;color:var(--muted);font-size:var(--fs-label)}
.tenant-ticket-panel{border:1px solid var(--line);border-radius:8px;background:#f8fafc;padding:12px;margin-top:12px}
.tenant-ticket-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0}
.tenant-ticket-form label{display:flex;flex-direction:column;gap:5px;font-size:var(--fs-label);color:var(--muted)}
.tenant-ticket-form label.wide{grid-column:1 / -1}
.tenant-ticket-form input,.tenant-ticket-form select,.tenant-ticket-form textarea{width:100%;border:1px solid var(--line);border-radius:7px;background:#fff;color:var(--ink);font:inherit;font-size:var(--fs-body);padding:8px 10px}
.tenant-ticket-form textarea{resize:vertical;min-height:72px}
.tenant-ticket-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;grid-column:1 / -1}
.tenant-ticket-actions + .tenant-ticket-form{margin-top:12px}
.field-ticket-board .page-desc{max-width:520px}
.field-ticket-actions,.field-ticket-upload{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:8px 0 14px}
.field-ticket-upload input{max-width:100%;font:inherit;font-size:var(--fs-label)}
.field-ticket-actions .btn,.field-ticket-upload .btn{min-height:32px}
.info-tip{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:6px;border-radius:50%;border:1px solid var(--line);color:var(--muted);font-size:11px;cursor:help;vertical-align:middle}
.info-tip:hover{border-color:var(--brand);color:var(--brand);background:#eef6ff}

/* ===== 主线紧凑工作台组件 ===== */
.mainline-workbench{display:grid;gap:14px;margin-bottom:14px;align-items:start}
.mainline-workbench.two,.workbench-grid.two{grid-template-columns:minmax(0,1fr) minmax(300px,.42fr)}
.mainline-workbench.three,.workbench-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.workbench-grid{display:grid;gap:14px;margin-bottom:14px;align-items:start}
.workbench-grid>*{min-width:0}
.business-summary-strip{display:grid;grid-template-columns:minmax(0,1.2fr) repeat(3,minmax(118px,.35fr));gap:12px;align-items:center;margin-bottom:14px;padding:12px 14px;border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:8px;background:var(--panel);box-shadow:var(--shadow-card)}
.business-summary-main{min-width:0}
.business-summary-title{margin:0;color:var(--ink);font-size:var(--fs-section);font-weight:800}
.business-summary-meta{margin-top:3px;color:var(--muted);font-size:var(--fs-label);line-height:1.45}
.business-summary-stat{min-width:0;padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}
.business-summary-stat b{display:block;color:var(--ink);font-size:var(--fs-heading);line-height:1.15}
.business-summary-stat span{display:block;margin-top:3px;color:var(--muted);font-size:var(--fs-meta);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.business-summary-stat.ok b{color:var(--ok)}
.business-summary-stat.warn b{color:var(--warn)}
.business-summary-stat.danger b{color:var(--danger)}
.overview-summary{grid-template-columns:minmax(0,1.1fr) repeat(3,minmax(116px,.3fr))}
.attention-strip,.risk-strip,.todo-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(176px,1fr));gap:10px;margin-bottom:14px}
.attention-item,.risk-item,.todo-item{min-width:0;padding:10px 12px;border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:8px;background:var(--panel);box-shadow:var(--shadow-card)}
.attention-item.warn,.risk-item.warn,.todo-item.warn{border-left-color:var(--warn)}
.attention-item.danger,.risk-item.danger,.todo-item.danger{border-left-color:var(--danger)}
.attention-item.ok,.risk-item.ok,.todo-item.ok{border-left-color:var(--ok)}
.attention-item b,.risk-item b,.todo-item b{display:block;color:var(--ink);font-size:var(--fs-section);line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.attention-item span,.risk-item span,.todo-item span{display:block;margin-top:4px;color:var(--muted);font-size:var(--fs-label);line-height:1.45}
.operation-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;margin-bottom:14px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel);box-shadow:var(--shadow-card)}
.operation-row .operation-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}
.operation-row .operation-note{color:var(--muted);font-size:var(--fs-label)}
.compact-metric-card,.compact-kpi{position:relative;min-height:74px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:var(--panel);box-shadow:var(--shadow-card);display:flex;flex-direction:column;justify-content:center;gap:5px;overflow:hidden}
.compact-metric-card .metric-label,.compact-kpi .kpi-l{color:var(--muted);font-size:var(--fs-label);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.compact-metric-card .metric-value,.compact-kpi .kpi-v{color:var(--ink);font-size:var(--fs-heading);font-weight:800;line-height:1.15}
.compact-metric-card .metric-meta,.compact-kpi .kpi-delta{display:flex;gap:8px;flex-wrap:wrap;color:var(--muted);font-size:var(--fs-meta)}
.compact-metric-card.ok .metric-value,.compact-kpi.ok .kpi-v{color:var(--ok)}
.compact-metric-card.warn .metric-value,.compact-kpi.warn .kpi-v{color:var(--warn)}
.compact-metric-card.danger .metric-value,.compact-kpi.danger .kpi-v{color:var(--danger)}

/* ===== 经营工作台兼容层：旧结构保留，视觉降级为浅色紧凑面板 ===== */
.ops-command{position:relative;margin-bottom:14px;padding:14px 16px;border:1px solid var(--line);border-left:4px solid var(--brand);border-radius:8px;background:var(--panel);color:var(--ink);box-shadow:var(--shadow-card);overflow:visible}
.ops-command::after{display:none}
.ops-command-head{position:relative;z-index:1;display:flex;justify-content:space-between;gap:16px;align-items:center;margin-bottom:10px}
.ops-command .page-title{color:var(--ink);font-size:var(--fs-title)}
.ops-command .page-desc{color:var(--muted);margin-bottom:0}
.surface-kicker{font-size:var(--fs-label);color:var(--brand);font-weight:800;margin-bottom:6px}
.ops-signal{min-width:126px;padding:8px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface);text-align:right;box-shadow:var(--shadow-card)}
.ops-signal b{display:block;font-size:var(--fs-stat);color:var(--warn)}.ops-signal span{font-size:var(--fs-label);color:var(--muted)}
.story{position:relative;z-index:1;display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:0}
.story-card{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:14px;border-left:4px solid var(--brand);cursor:pointer;transition:transform .15s ease, box-shadow .15s ease, border-color .15s ease}
.story-card.risk{border-left-color:var(--danger)}.story-card.eff{border-left-color:var(--ok)}
.story-card .q{font-size:var(--fs-label);color:var(--muted);font-weight:800}
.story-card .big{font-size:var(--fs-stat);font-weight:800;margin:7px 0 3px;color:var(--ink)}
.story-card .sub{font-size:var(--fs-label);color:var(--muted);line-height:1.5}
.story-card .story-cta{margin-top:10px;font-size:var(--fs-label);color:var(--brand);font-weight:800}
.story-card:hover{transform:translateY(-1px);box-shadow:var(--shadow-card)}
.story-card:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.story-card .big.warn{color:var(--warn)}.story-card .big.danger{color:var(--danger)}.story-card .big.ok{color:var(--ok)}
.priority-panel{border-left:4px solid var(--brand)}
.priority-panel .panel-head h3{font-size:15px}
.panel-subtitle{margin-left:8px;color:var(--muted);font-size:12px;font-weight:500}
/* 图表层级标签：主图 vs 次级（结构/排行/补充/占比），让分析区有视觉优先级 */
.panel-tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:10px;font-size:var(--fs-tag);font-weight:600;vertical-align:middle}
.panel-tag.tag-main{background:var(--brand);color:#fff}
.panel-tag.tag-sub{background:var(--soft);color:var(--muted);border:1px solid var(--line)}
/* 主图视觉权重高于次级图：主图加粗左边框；次级图弱化 */
.chart-main{border-left:3px solid var(--brand)}
.chart-sub .echart{opacity:.96}
/* 图表内联解读条：图表的解读数字（非顶部 KPI 带 / 非 .cards 卡堆），随图出现 */
.chart-readout{display:flex;flex-wrap:wrap;gap:8px 22px;margin:0 0 12px;padding:8px 12px;background:var(--surface);border:1px solid var(--line);border-radius:8px}
.chart-readout .readout-item{display:flex;align-items:baseline;gap:6px}
.chart-readout .readout-l{font-style:normal;color:var(--muted);font-size:var(--fs-label)}
.chart-readout .readout-v{font-size:var(--fs-section);font-weight:800;color:var(--ink)}
.chart-readout .readout-v.warn{color:var(--warn)}
.chart-readout .readout-v.danger{color:var(--danger)}
.chart-readout .readout-v.ok{color:var(--ok)}
.report-summary-head{margin-top:12px}
.report-summary-head h3{font-size:var(--fs-sub)}
.security-chain{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 14px}
.security-chain.flow{gap:18px}
.chain-step{position:relative;min-height:82px;border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:12px 12px 12px 14px;box-shadow:var(--shadow-card)}
button.chain-step{width:100%;text-align:left;color:inherit;font:inherit;cursor:pointer}
button.chain-step:hover,button.chain-step:focus-visible{border-color:#bfdbfe;box-shadow:0 4px 12px rgba(59,130,246,.14);outline:none}
.chain-step b{display:block;color:#3b82f6;font-size:12px;margin-bottom:7px}
.chain-step span{display:block;font-weight:800;font-size:14px}
.chain-step em{display:block;margin-top:5px;color:var(--muted);font-size:12px;font-style:normal;line-height:1.45}
.chain-step .chain-metric{display:block;margin-top:6px;font-size:var(--fs-title);font-weight:800;line-height:1.05;color:var(--ink)}
.chain-step.warn .chain-metric{color:var(--warn)}.chain-step.ok .chain-metric{color:var(--ok)}.chain-step.danger .chain-metric{color:var(--danger)}
.security-chain.flow .chain-step:not(:last-child)::after{content:'→';position:absolute;right:-15px;top:50%;transform:translateY(-50%);color:var(--brand);font-weight:800;font-size:15px;z-index:1}
.field-panel{background:#fafcff}
.tickets-ops-board,.billing-ops-board{position:relative;margin-bottom:14px;padding:12px 14px;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:var(--shadow-card)}
.billing-ops-board{display:grid;grid-template-columns:minmax(0,.86fr) minmax(420px,1.14fr);gap:18px;align-items:stretch}
.tickets-ops-board .page-title,.billing-ops-board .page-title{font-size:var(--fs-title)}
.dispatch-row,.billing-row{display:grid;gap:10px}
.dispatch-row{grid-template-columns:repeat(auto-fit,minmax(150px,220px));justify-content:start}
.billing-row{grid-template-columns:repeat(3,minmax(150px,220px));justify-content:start}
.dispatch-signal,.billing-signal{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:10px 12px;min-height:70px;box-shadow:var(--shadow-card)}
.dispatch-signal b,.billing-signal b{display:block;font-size:var(--fs-stat);color:var(--ink);margin-bottom:5px}
.dispatch-signal span,.billing-signal span{display:block;font-size:var(--fs-label);font-weight:800;color:var(--ink)}
.dispatch-signal em,.billing-signal em{display:block;margin-top:6px;color:var(--muted);font-size:var(--fs-meta);font-style:normal;line-height:1.45}
.dispatch-signal.drillable{cursor:pointer;transition:box-shadow .15s,border-color .15s}
.dispatch-signal.drillable:hover{border-color:var(--brand);box-shadow:0 6px 16px rgba(15,23,42,.08)}
.dispatch-signal.ok b,.billing-signal.ok b{color:var(--ok)}
.dispatch-signal.danger b{color:var(--danger)}
.billing-signal.warn b{color:var(--warn)}
.bill-structured-filters{padding:7px 10px;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px}
.bill-structured-filters .panel-head{align-items:center;margin-bottom:0;gap:8px;min-width:260px}
.bill-structured-filters .panel-head h3{white-space:nowrap}
.bill-filter-head-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
.bill-filter-grid{display:grid;grid-template-columns:minmax(160px,1.6fr) repeat(3,minmax(96px,1fr));gap:6px;min-width:0}
.bill-filter-grid-advanced{grid-template-columns:repeat(4,minmax(112px,1fr));margin-top:6px}
.bill-filter-grid label,.bill-field{display:flex;flex-direction:column;gap:3px;min-width:0}
.bill-filter-grid label span,.bill-field span{font-size:11px;line-height:1.1;color:var(--muted)}
.bill-structured-filters>.bill-filter-grid label span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
.bill-structured-filters .bill-advanced-filters .bill-filter-grid label span{position:static;width:auto;height:auto;overflow:visible;clip:auto}
.bill-filter-grid input,.bill-filter-grid select,.bill-field input,.bill-field select{
  width:100%;min-height:28px;border:1px solid var(--line);border-radius:6px;background:#fff;color:var(--ink);padding:4px 7px;font-size:var(--fs-label)
}
.bill-text-filter{grid-column:span 1}
.bill-status-tabs{margin:-2px 0 12px}
.bill-advanced-filters{margin:0;border-top:0;padding-top:0}
.bill-advanced-filters[open]{grid-column:1/-1;border-top:1px solid var(--line);padding-top:6px}
.bill-advanced-filters summary{cursor:pointer;color:var(--brand);font-weight:800;font-size:var(--fs-label);line-height:1.1;white-space:nowrap}
.bill-filter-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:8px}
.bill-batch-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-4px 0 14px;padding:11px 14px;border:1px solid #bfdbfe;border-left:4px solid var(--brand);border-radius:8px;background:#f5f8fc}
.bill-batch-bar>div{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.bill-batch-bar b{font-size:14px}.bill-batch-bar span{color:var(--muted);font-size:13px}
.bill-row-check,#bill-select-all{width:16px;height:16px;accent-color:var(--brand)}
.bill-modal-mask{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;padding:24px;background:rgba(15,23,42,.46)}
.bill-modal{width:min(920px,96vw);max-height:92vh;display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 24px 70px rgba(15,23,42,.28);overflow:hidden}
.bill-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:16px 18px;border-bottom:1px solid var(--line);background:#fafcff}
.bill-modal-head h3{margin:0;font-size:16px}.bill-modal-head p{margin:4px 0 0;color:var(--muted);font-size:12px}
.bill-modal-body{padding:16px 18px;overflow:auto}
.bill-modal-grid{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(260px,.8fr);gap:16px;align-items:start}
.bill-modal-grid h4{margin:0 0 10px;font-size:13px;color:#334155}
.bill-total{display:flex;align-items:center;justify-content:space-between;margin-top:10px;padding:10px 12px;border:1px solid var(--line);border-radius:7px;background:var(--surface)}
.bill-total span{font-size:12px;color:var(--muted)}.bill-total b{font-size:18px;color:var(--brand)}
.bill-missing{margin:0 0 10px;padding:9px 10px;border:1px solid #fde68a;border-radius:7px;background:#fffbeb;color:#92400e;font-size:12px;line-height:1.5}
.bill-source{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 10px;padding:8px 10px;border:1px solid var(--line);border-radius:7px;background:#f8fafc}
.bill-source span{font-size:12px;color:var(--muted)}.bill-source b{font-size:13px;color:#334155}
.bill-modal-controls{display:grid;grid-template-columns:180px 180px minmax(260px,1fr);gap:12px;align-items:end;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.bill-channel-group{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-height:32px}
.bill-channel-group label{display:inline-flex;align-items:center;gap:5px;padding:5px 8px;border:1px solid var(--line);border-radius:999px;background:#fff;font-size:12px;color:#334155;white-space:nowrap}
.bill-channel{accent-color:var(--brand)}
.bill-modal-actions{display:flex;justify-content:flex-end;gap:8px;padding:13px 18px;border-top:1px solid var(--line);background:#fafbfc}
.delivery-status-block{margin:14px 0 16px}
.delivery-status-block h4{margin:0 0 10px}
.delivery-status-table th,.delivery-status-table td{font-size:var(--fs-label);vertical-align:middle}
.delivery-status-table td:last-child{width:72px;text-align:right}
.faq-card-grid,.engineering-review-cards,.role-governance-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}
.faq-card,.review-card,.role-governance-card{border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:10px 12px;box-shadow:var(--shadow-card);min-width:0}
.faq-card-head{display:flex;align-items:center;gap:8px;margin-bottom:7px}
.faq-card-head b,.role-governance-card b,.review-card b{display:block;min-width:0;color:var(--ink);font-size:var(--fs-body);line-height:1.35}
.faq-card p,.message-item p{margin:0;color:var(--muted);font-size:var(--fs-label);line-height:1.5}
.review-card span,.role-governance-card span,.message-item time{display:block;color:var(--muted);font-size:var(--fs-meta);font-weight:700;margin-bottom:5px}
.review-card em,.role-governance-card em{display:block;margin-top:5px;color:var(--muted);font-size:var(--fs-label);font-style:normal;line-height:1.4}
.role-governance-card .role-card-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
.review-card.compact b{font-size:var(--fs-heading)}
.message-timeline{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.message-item{position:relative;border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:8px;background:var(--panel);padding:10px 12px;box-shadow:var(--shadow-card)}
.message-item b{display:block;color:var(--ink);font-size:var(--fs-body);line-height:1.35;margin-bottom:5px}
.chart{display:flex;align-items:flex-end;gap:14px;height:160px;padding:10px 4px 0}
.bar-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;height:100%;justify-content:flex-end}
.bar-pair{display:flex;gap:4px;align-items:flex-end;height:120px}
.bar{width:14px;border-radius:4px 4px 0 0}
.bar.cr{background:var(--brand)}.bar.tk{background:#93c5fd}
.bar-x{font-size:11px;color:var(--muted)}
.legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-top:6px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;vertical-align:middle}

/* ===== 数据驾驶舱：12 列栅格 / KPI 卡 / 图表容器 / 排行榜 ===== */
.grid-12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:14px;margin-bottom:14px}
.grid-12 .panel{margin-bottom:0}
/* 指标分组：透明容器，让白卡浮在画布上（避免白卡白面板无对比） */
.metric-group{margin-bottom:0}
.metric-group>h3{margin:0 0 10px;font-size:var(--fs-section)}
.metric-group .subhead{margin:14px 0 8px}
.metric-group>h3:first-child+.subhead{margin-top:4px}
.grid-12>*{min-width:0}
.col-1{grid-column:span 1}.col-2{grid-column:span 2}.col-3{grid-column:span 3}.col-4{grid-column:span 4}.col-5{grid-column:span 5}.col-6{grid-column:span 6}.col-7{grid-column:span 7}.col-8{grid-column:span 8}.col-9{grid-column:span 9}.col-10{grid-column:span 10}.col-11{grid-column:span 11}.col-12{grid-column:span 12}
.panel.flush{margin-bottom:0;height:100%;display:flex;flex-direction:column}
/* KPI 卡：名称 + 值 + 环比/同比 + 趋势箭头 + sparkline */
.kpi{position:relative;background:#fff;border:1px solid var(--line);border-radius:8px;padding:12px 14px;min-height:80px;display:flex;flex-direction:column;justify-content:center;gap:5px;overflow:hidden;box-shadow:var(--shadow-card)}
.kpi-l{color:var(--muted);font-size:var(--fs-label);display:flex;align-items:center;gap:6px}
.kpi-v{font-size:var(--fs-title);font-weight:800;color:var(--ink);line-height:1.1}
.kpi.ok .kpi-v{color:var(--ok)}.kpi.warn .kpi-v{color:var(--warn)}.kpi.danger .kpi-v{color:var(--danger)}
.kpi-delta{display:flex;gap:10px;font-size:var(--fs-label);color:var(--muted)}
.kpi-delta b{font-weight:600}
.kpi-delta .up{color:var(--ok)}.kpi-delta .down{color:var(--danger)}
.kpi-arrow{font-size:13px;font-weight:800}
.kpi-arrow.up{color:var(--ok)}.kpi-arrow.down{color:var(--danger)}
.kpi-spark{position:absolute;right:10px;bottom:8px;width:74px;height:30px;opacity:.9}
.evidence-kpi-row{grid-template-columns:repeat(5,minmax(174px,220px));align-items:stretch;justify-content:start}
.evidence-kpi-row .kpi{max-width:220px;min-height:156px;align-items:flex-start;justify-content:flex-start}
.evidence-card .kpi-l{font-weight:800;color:var(--ink)}
.evidence-card .kpi-v{font-size:16px}
.evidence-card .kpi-delta{display:grid;gap:3px;line-height:1.35}
/* 图表容器 */
.echart{width:100%;height:240px}
.echart.trend{height:280px;max-width:1120px;margin-left:auto;margin-right:auto}
.echart.dist{height:240px}
.echart.mini{height:180px}
.echart.sm{height:200px;max-width:880px;margin-left:auto;margin-right:auto}
.chart-drillable{cursor:pointer}
.chart-empty{display:flex;align-items:center;justify-content:center;height:200px;color:var(--muted);font-size:var(--fs-label)}
.small-trend-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;min-height:200px;align-content:center}
.small-trend-item{border:1px solid var(--line);border-radius:8px;background:var(--surface);padding:12px;box-shadow:var(--shadow-card)}
.small-trend-item span,.small-trend-item em{display:block;color:var(--muted);font-size:var(--fs-label);font-style:normal}
.small-trend-item b{display:block;margin:6px 0 3px;font-size:var(--fs-heading);color:var(--ink)}
.distribution-rank{min-height:200px;padding:4px 2px 10px;display:flex;flex-direction:column}
.distribution-rank-summary{display:flex;align-items:center;justify-content:space-between;margin:0 4px 8px;color:var(--muted);font-size:var(--fs-meta);line-height:1.4}
.distribution-rank-summary b{color:var(--ink);font-size:var(--fs-label)}
.distribution-rank-body{display:flex;flex-direction:column;gap:8px;max-height:280px;overflow-y:auto;padding:0 4px 2px 0}
.distribution-rank-row{appearance:none;width:100%;min-height:44px;border:1px solid var(--line);border-radius:8px;background:var(--panel);padding:8px 10px;display:grid;grid-template-columns:minmax(0,1fr) max-content;gap:7px 12px;align-items:center;text-align:left;color:var(--ink);cursor:pointer;transition:background .16s ease,border-color .16s ease,box-shadow .16s ease}
.distribution-rank-row:hover{background:var(--soft);border-color:var(--brand-l);box-shadow:0 1px 2px rgba(15,23,42,.05)}
.distribution-rank-row:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.distribution-rank-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-body);font-weight:700}
.distribution-rank-value{white-space:nowrap;color:var(--muted);font-size:var(--fs-label);font-weight:700;font-variant-numeric:tabular-nums}
.distribution-rank-bar{grid-column:1/-1;height:7px;border-radius:999px;background:var(--soft);overflow:hidden}
.distribution-rank-bar i{display:block;width:var(--rank-value,0%);height:100%;border-radius:999px;background:var(--brand)}
.distribution-rank-row[data-distribution-filter="hq"] .distribution-rank-bar i{background:var(--warn)}
/* 排行榜 */
.rank-list{display:flex;flex-direction:column;gap:9px}
.rank-row{display:grid;grid-template-columns:22px 1fr auto;align-items:center;gap:10px;cursor:pointer}
.rank-row:hover .rank-name{color:var(--brand)}
.rank-no{width:22px;height:22px;border-radius:6px;display:grid;place-items:center;font-size:11px;font-weight:800;background:var(--soft);color:var(--muted)}
.rank-row:nth-child(1) .rank-no{background:#3b82f6;color:#fff}
.rank-row:nth-child(2) .rank-no{background:#60a5fa;color:#fff}
.rank-row:nth-child(3) .rank-no{background:#93c5fd;color:#fff}
.rank-main{min-width:0}
.rank-name{font-size:var(--fs-body);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank-bar{height:6px;border-radius:3px;background:var(--soft);margin-top:5px;overflow:hidden}
.rank-bar i{display:block;height:100%;border-radius:3px;background:var(--brand)}
.rank-val{font-size:var(--fs-body);font-weight:700;color:var(--ink);white-space:nowrap}
.battery-bar{height:8px;min-width:72px;border-radius:999px;background:var(--soft);overflow:hidden;margin:3px 0 4px;border:1px solid var(--line)}
.battery-bar i{display:block;height:100%;border-radius:999px;background:var(--ok)}
.battery-bar.warn i{background:var(--warn)}
.battery-bar.bad i{background:var(--danger)}
@media (max-width:1280px){.grid-12{grid-template-columns:repeat(6,minmax(0,1fr))}.col-1{grid-column:span 1}.col-2{grid-column:span 2}.col-3{grid-column:span 3}.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{grid-column:span 6}.mainline-workbench.three,.workbench-grid.three{grid-template-columns:repeat(2,minmax(0,1fr))}.business-summary-strip{grid-template-columns:minmax(0,1fr) repeat(3,minmax(108px,.34fr))}}
@media (max-width:760px){
  .grid-12{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
  .col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{grid-column:span 2}
  .echart,.echart.trend,.echart.dist{height:200px}
  .echart.mini,.echart.sm{height:180px}
  .business-summary-strip{grid-template-columns:1fr}
  .evidence-kpi-row{grid-template-columns:1fr}
  .operation-row{align-items:stretch}
  .operation-row .operation-group{width:100%}
}
@media (max-width:860px){.story,.security-chain,.dispatch-row,.billing-row,.billing-ops-board,.mainline-workbench.two,.mainline-workbench.three,.workbench-grid.two,.workbench-grid.three{grid-template-columns:1fr}.ops-command-head{display:block}.ops-signal{text-align:left;margin-top:12px}.security-chain.flow .chain-step::after{display:none}}
@media (max-width:560px){
  .drawer{width:100vw;max-width:100vw}
  .drawer-head{padding:14px 16px}
  .drawer-body{padding:14px 16px}
  .drawer-body .dl{grid-template-columns:1fr;gap:8px}
  .drawer-body .dl .f{grid-template-columns:72px minmax(0,1fr)}
  .drawer-body table{display:block;overflow-x:auto;white-space:nowrap}
}
@media (max-width:860px){
  .bill-structured-filters{display:block}
  .bill-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .bill-text-filter{grid-column:1/-1}
  .bill-modal-grid,.bill-modal-controls{grid-template-columns:1fr}
  .bill-modal-mask{align-items:flex-start;padding:12px}
  .faq-card-grid,.engineering-review-cards,.role-governance-grid,.message-timeline{grid-template-columns:1fr}
}
@media (max-width:560px){
  .bill-structured-filters{padding:8px 10px}
  .bill-structured-filters .panel-head{margin-bottom:4px}
  .bill-filter-grid{grid-template-columns:1fr}
  .bill-structured-filters .bill-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .bill-structured-filters .bill-text-filter{grid-column:auto}
  .bill-filter-head-actions{gap:4px;justify-content:flex-start}
  .bill-filter-head-actions .btn{padding:3px 6px;font-size:11px}
  .bill-filter-actions,.bill-batch-bar,.bill-modal-actions{align-items:stretch;flex-direction:column}
  .bill-batch-bar>div{display:block}
  .bill-batch-bar span{display:block;margin-top:4px}
  .bill-channel-group{align-items:stretch}
  .bill-channel-group label{width:100%;justify-content:flex-start}
}

.mini-metric-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:8px;margin:10px 0 12px}
.mini-metric{border:1px solid var(--line);border-radius:8px;background:#fff;padding:8px 10px;min-height:50px;box-sizing:border-box}
.mini-metric b{display:block;font-size:18px;line-height:1.1;color:var(--ink)}
.mini-metric span{display:block;margin-top:5px;font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ===== 独立 AI客服页 ===== */
.customer-service-page{min-height:100dvh;background:#e9eef4;color:var(--ink);overflow:auto}
.customer-service-shell{min-height:100dvh;display:grid;grid-template-columns:minmax(200px,220px) minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);gap:12px;align-items:stretch;padding:12px;box-sizing:border-box}
.customer-service-topbar{grid-column:1/-1;min-height:54px;display:flex;align-items:center;justify-content:space-between;gap:16px;border:1px solid rgba(148,163,184,.38);border-radius:8px;background:rgba(255,255,255,.92);padding:10px 12px;box-shadow:0 10px 28px rgba(15,23,42,.08)}
.customer-service-home{display:inline-flex;align-items:center;gap:7px;color:var(--ink);font-weight:800;text-decoration:none;white-space:nowrap}
.customer-service-home:hover{color:var(--brand)}
.customer-service-brand{display:flex;flex-direction:column;gap:16px;align-items:flex-start;padding:16px;border-radius:8px;background:#122135;color:#fff;box-shadow:0 16px 36px rgba(15,23,42,.18);min-width:0}
.customer-service-brand .brand-mark{width:36px;height:36px;background:#2f766d;border-color:rgba(255,255,255,.28)}
.customer-service-brand h1{margin:0;font-size:27px;line-height:1.12}
.customer-service-brand p{margin:10px 0 0;color:#c9d5e3;font-size:13px;line-height:1.6;max-width:24ch}
.customer-service-scenarios{display:grid;grid-template-columns:1fr;gap:8px;width:100%;margin-top:18px}
.customer-service-scenarios span{display:block;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:rgba(255,255,255,.06);padding:9px 10px;color:#edf5ff;font-size:12px}
.customer-service-widget-root{position:relative;min-height:0;height:calc(100dvh - 90px)}
.customer-service-page .cs-chat-window{position:relative;inset:auto;right:auto;bottom:auto;width:100%;max-width:none;height:100%;max-height:none;border-radius:8px;box-shadow:0 16px 42px rgba(15,23,42,.16);opacity:1;transform:none;pointer-events:auto}
.customer-service-page .cs-chat-window.cs-chat-visible{opacity:1;transform:none}
.customer-service-page .cs-chat-window.cs-expanded{width:100%;height:100%}
.customer-service-page .cs-chat-window{grid-template-columns:minmax(250px,.34fr) minmax(380px,1fr) minmax(236px,.3fr)}
.customer-service-page .cs-context-panel{display:flex}
.customer-service-page.cs-embed-mode{background:#fff}
.cs-embed-mode .customer-service-shell{display:block;min-height:100vh;padding:0}
.cs-embed-mode .customer-service-topbar,.cs-embed-mode .customer-service-brand{display:none}
.cs-embed-mode .customer-service-widget-root{height:100vh;min-height:100vh}
.cs-embed-mode .cs-floating-entry{display:none}
.cs-embed-mode .cs-chat-window{position:fixed;inset:0;width:100vw;max-width:none;height:100vh;max-height:none;border:0;border-radius:0;box-shadow:none;transform:none;opacity:1}
.cs-embed-mode .cs-chat-window.cs-expanded{width:100vw;height:100vh}

@media (max-width:720px){
  .customer-service-shell{display:block;padding:12px}
  .customer-service-topbar{margin-bottom:12px;align-items:flex-start;flex-direction:column}
  .customer-service-brand{display:none}
  .customer-service-widget-root{height:calc(100dvh - 98px)}
  .customer-service-page .cs-chat-window{width:100%;max-width:none;height:100%;max-height:none}
}

/* toast */
.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%);background:#111827;color:#fff;
  padding:10px 18px;border-radius:8px;font-size:14px;box-shadow:0 10px 30px rgba(0,0,0,.3);z-index:50}

/* ===== 全局 AI客服入口 ===== */
.cs-floating-entry{position:fixed;right:24px;bottom:24px;width:60px;height:60px;border:0;border-radius:50%;background:#2563eb;color:#fff;box-shadow:0 12px 30px rgba(37,99,235,.35);z-index:70;cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;transition:transform .2s cubic-bezier(.2,.8,.2,1),background .18s ease,box-shadow .18s ease}
.cs-floating-entry:hover,.cs-floating-entry:focus-visible{background:#1d4ed8;transform:translateY(-2px) scale(1.08);box-shadow:0 16px 36px rgba(37,99,235,.42);outline:none}
/* 机器人图标：常态轻微漂浮 + 周期眨眼 + 天线闪烁 */
.cs-bot-svg{width:34px;height:34px;display:block;animation:cs-bot-float 3.2s ease-in-out infinite}
.cs-bot-eye{transform-box:fill-box;transform-origin:center;animation:cs-bot-blink 4.2s ease-in-out infinite}
.cs-bot-spark{transform-box:fill-box;transform-origin:center;animation:cs-bot-spark 1.7s ease-in-out infinite}
.cs-floating-entry:hover .cs-bot-svg,.cs-floating-entry:focus-visible .cs-bot-svg{animation:cs-bot-hover .95s cubic-bezier(.34,1.56,.64,1) infinite}
.cs-floating-entry:hover .cs-bot-eye,.cs-floating-entry:focus-visible .cs-bot-eye{animation:cs-bot-eye-scan .95s ease-in-out infinite}
.cs-floating-entry:hover .cs-bot-spark,.cs-floating-entry:focus-visible .cs-bot-spark{animation:cs-bot-spark-hover .72s ease-in-out infinite}
.cs-float-dot{position:absolute;right:6px;top:5px;min-width:18px;height:18px;padding:0 4px;border-radius:999px;background:#ef4444;border:2px solid #fff;color:#fff;font-size:10px;line-height:14px;font-weight:700;text-align:center}
/* 未读：脉冲光环 + 机器人加速点头；每条新消息整体弹跳一次 */
.cs-floating-entry::before{content:"";position:absolute;inset:0;border-radius:50%;background:#2563eb;opacity:0;z-index:-1;pointer-events:none}
.cs-floating-entry.cs-has-unread::before{animation:cs-pulse 1.8s ease-out infinite}
.cs-floating-entry.cs-has-unread .cs-bot-svg{animation-duration:1.5s}
.cs-floating-entry.cs-bump{animation:cs-bump .62s ease}
.cs-floating-entry.cs-bump .cs-float-dot{animation:cs-dot-pop .5s ease}
@keyframes cs-bot-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes cs-bot-hover{0%,100%{transform:translateY(0) rotate(0deg)}35%{transform:translateY(-4px) rotate(-5deg)}70%{transform:translateY(1px) rotate(4deg)}}
@keyframes cs-bot-blink{0%,92%,100%{transform:scaleY(1)}95%{transform:scaleY(.12)}}
@keyframes cs-bot-eye-scan{0%,100%{transform:translateX(0) scaleY(1)}42%{transform:translateX(1.5px) scaleY(1)}62%{transform:translateX(-1.2px) scaleY(.7)}}
@keyframes cs-bot-spark{0%,100%{opacity:.5;transform:scale(.8)}50%{opacity:1;transform:scale(1.15)}}
@keyframes cs-bot-spark-hover{0%,100%{opacity:.65;transform:translateY(0) scale(.86)}50%{opacity:1;transform:translateY(-1.5px) scale(1.22)}}
@keyframes cs-pulse{0%{transform:scale(1);opacity:.55}70%{transform:scale(1.85);opacity:0}100%{opacity:0}}
@keyframes cs-bump{0%,100%{transform:scale(1)}30%{transform:scale(1.18)}60%{transform:scale(.94)}}
@keyframes cs-dot-pop{0%{transform:scale(.4)}60%{transform:scale(1.3)}100%{transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.cs-bot-svg,.cs-bot-eye,.cs-bot-spark,.cs-floating-entry.cs-has-unread::before,.cs-floating-entry.cs-bump,.cs-floating-entry.cs-bump .cs-float-dot{animation:none}}
.cs-chat-window{position:fixed;right:24px;bottom:24px;width:min(860px,calc(100vw - 48px));max-width:calc(100vw - 48px);height:min(720px,calc(100vh - 48px));max-height:calc(100vh - 48px);background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 18px 54px rgba(15,23,42,.24);z-index:71;display:grid;grid-template-columns:minmax(230px,.34fr) minmax(360px,1fr);grid-template-rows:58px minmax(0,1fr);overflow:hidden;opacity:0;transform:translate3d(28px,16px,0) scale(.97);transform-origin:right bottom;pointer-events:none;transition:transform .28s cubic-bezier(.2,.8,.2,1),opacity .22s ease,width .22s ease,height .22s ease}
.cs-chat-window.cs-chat-visible{opacity:1;transform:translate3d(0,0,0) scale(1);pointer-events:auto}
.cs-chat-window.cs-expanded{width:min(1120px,calc(100vw - 48px));height:calc(100vh - 48px);grid-template-columns:minmax(250px,.3fr) minmax(400px,1fr) minmax(236px,.3fr)}
.cs-chat-window.cs-expanded .cs-context-panel{display:flex}
.cs-chat-head{grid-column:1/-1;height:58px;display:flex;align-items:center;justify-content:space-between;padding:11px 14px;background:#0f172a;color:#fff}
.cs-chat-head-actions{display:flex;align-items:center;gap:2px}
.cs-chat-head b{display:block;font-size:15px}.cs-chat-head span{display:block;font-size:12px;color:#cbd5e1;margin-top:2px}
.cs-chat-head button{border:0;background:transparent;color:#cbd5e1;font-size:15px;cursor:pointer;padding:4px 8px;border-radius:6px}
.cs-chat-head button:hover{background:#1e293b;color:#fff}
.cs-session-panel{grid-column:1;grid-row:2;border-right:1px solid var(--line);background:#f8fafc;padding:10px;display:flex;flex-direction:column;gap:10px;min-width:0;min-height:0;overflow:hidden}
.cs-session-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;flex:0 0 auto}
.cs-session-panel-head b{display:block;font-size:13px;color:var(--ink);line-height:1.25}
.cs-session-panel-head span{display:block;margin-top:2px;font-size:11px;color:var(--muted);line-height:1.35}
.cs-session-panel-head button{border:1px solid #a7d8d2;background:#ecfdf9;color:#0f766e;border-radius:8px;padding:6px 9px;font-size:12px;cursor:pointer;white-space:nowrap}
.cs-session-panel-head button:hover{background:#d8f7ef}
.cs-session-list{display:flex;flex-direction:column;gap:7px;overflow-y:auto;overflow-x:hidden;min-height:0;padding-right:2px}
.cs-tracking-list{display:flex;flex-direction:column;gap:7px;overflow-y:auto;overflow-x:hidden;min-height:30px;max-height:180px}
.cs-session-item{flex:0 0 auto;width:100%;max-width:none;text-align:left;border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:8px;padding:8px 9px;cursor:pointer;min-width:0}
.cs-session-item:hover{border-color:#bfdbfe;background:#eff6ff}
.cs-session-item.active{border-color:#0f766e;background:#e6fffa}
.cs-session-item span{display:-webkit-box;font-size:12px;font-weight:700;line-height:1.35;white-space:normal;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}
.cs-session-item small{display:block;margin-top:3px;font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cs-track-item{display:block;width:100%;max-width:none;border:1px solid #bbf7d0;background:#f0fdf4;color:#166534;border-radius:8px;padding:7px 8px;font-size:11px;line-height:1.4;white-space:normal;overflow:hidden;text-overflow:ellipsis;word-break:break-word}
.cs-session-empty{display:inline-flex;align-items:center;color:var(--muted);font-size:12px;min-height:28px}
.cs-chat-workspace{grid-column:2;grid-row:2;display:flex;flex-direction:column;min-width:0;min-height:0;background:#f8fafc}
.cs-chat-body{flex:1;overflow:auto;padding:14px 16px;background:#f8fafc}
.cs-chat-intro{border:1px solid var(--line);border-radius:8px;background:#fff;padding:12px;margin-bottom:10px}
.cs-chat-intro b{display:block;font-size:13px;margin-bottom:9px}
.cs-chip-row{display:flex;flex-wrap:wrap;gap:7px}
.cs-chip,.cs-chat-suggest button{border:1px solid #a7d8d2;background:#ecfdf9;color:#0f766e;border-radius:8px;padding:5px 9px;font-size:12px;cursor:pointer}
.cs-chip:hover,.cs-chat-suggest button:hover{background:#d8f7ef}
.cs-msg{display:flex;margin:9px 0}.cs-msg-bubble{max-width:min(82%,680px);border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.55;word-break:break-word}
.cs-msg small{display:block;color:var(--muted);font-size:11px;margin-top:3px}
.cs-msg.user{justify-content:flex-end}.cs-msg.user .cs-msg-bubble{background:#0f766e;color:#fff}
.cs-msg.ai{justify-content:flex-start;flex-direction:column;align-items:flex-start}.cs-msg.ai .cs-msg-bubble{background:#fff;border:1px solid var(--line)}
.cs-msg-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:6px;max-width:92%}
.cs-msg-actions button,.cs-message-board-actions button{border:1px solid #cbd5e1;background:#fff;color:#334155;border-radius:8px;padding:5px 9px;font-size:12px;cursor:pointer}
.cs-msg-actions button:hover,.cs-message-board-actions button:hover{background:#f1f5f9}
.cs-msg-actions button:disabled,.cs-message-board-actions button:disabled{opacity:.55;cursor:not-allowed}
.cs-msg-actions button.warn{border-color:#fecaca;background:#fef2f2;color:#b91c1c}
.cs-action-note{font-size:12px;color:#475569}
.cs-action-note.warn{color:#b91c1c}
.cs-message-board{border:1px solid #bfdbfe;border-radius:8px;background:#fff;padding:10px;margin:10px 0}
.cs-message-board b{display:block;font-size:13px;margin-bottom:7px}
.cs-message-board textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:7px;padding:8px 9px;font-size:13px;line-height:1.45;resize:vertical}
.cs-message-board-actions{display:flex;gap:7px;justify-content:flex-end;margin-top:8px}
.cs-message-board-actions button:first-child{border-color:#2563eb;background:#2563eb;color:#fff}
.cs-context-panel{grid-column:3;grid-row:2;display:none;flex-direction:column;gap:10px;min-width:0;min-height:0;border-left:1px solid var(--line);background:#fbfdff;padding:10px;overflow-y:auto;overflow-x:hidden}
.cs-context-card{border:1px solid var(--line);border-radius:8px;background:#fff;padding:10px;min-width:0}
.cs-context-card b{display:block;font-size:13px;color:var(--ink);line-height:1.35}
.cs-context-card small,.cs-context-card span{display:block;margin-top:5px;font-size:11px;color:var(--muted);line-height:1.5;word-break:break-word}
.cs-context-label{margin:0 0 6px;color:#0f766e;font-weight:800}
.cs-context-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:8px}
.cs-context-card-head span{margin-top:1px;white-space:nowrap}
.cs-service-scope{background:#f8fafc}
.cs-openai-api-body{display:flex;flex-direction:column;gap:8px;min-width:0}
.cs-openai-api-body dl{display:grid;grid-template-columns:68px minmax(0,1fr);gap:5px 8px;margin:0}
.cs-openai-api-body dt{color:var(--muted);font-size:11px}
.cs-openai-api-body dd{margin:0;min-width:0;font-size:11px;line-height:1.45;word-break:break-word}
.cs-openai-api-body code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;background:#f1f5f9;border:1px solid #e2e8f0;border-radius:6px;padding:2px 4px;white-space:normal;word-break:break-all}
.cs-openai-api-body pre{margin:0;max-height:138px;overflow:auto;border:1px solid #e2e8f0;border-radius:8px;background:#0f172a;color:#dbeafe;padding:8px;font-size:10px;line-height:1.5;white-space:pre-wrap;word-break:break-word}
.cs-openai-api-body small{font-size:11px;color:var(--muted);line-height:1.45}
.cs-reference-toggle{margin-top:5px;border:0;background:transparent;color:#0f766e;font-size:12px;font-weight:800;cursor:pointer;padding:0}
.cs-reference-toggle:hover{text-decoration:underline}
.cs-reference-panel{border-top:1px solid var(--line);background:#fff;padding:10px 12px;max-height:240px;overflow:auto}
.cs-reference-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px}
.cs-reference-head b{display:block;font-size:13px;color:var(--ink)}
.cs-reference-head span{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.cs-reference-head button{border:1px solid #cbd5e1;background:#fff;border-radius:8px;padding:5px 9px;font-size:12px;color:#334155;cursor:pointer}
.cs-reference-layout{display:grid;grid-template-columns:minmax(150px,.42fr) minmax(0,1fr);gap:10px}
.cs-reference-list{display:flex;flex-direction:column;gap:6px;min-width:0}
.cs-reference-list button{border:1px solid var(--line);border-radius:8px;background:#f8fafc;text-align:left;padding:7px 8px;cursor:pointer;min-width:0}
.cs-reference-list button:hover,.cs-reference-list button.active{border-color:#0f766e;background:#ecfdf9}
.cs-reference-list span{display:block;font-size:12px;font-weight:800;color:var(--ink);line-height:1.35;word-break:break-word}
.cs-reference-list small{display:block;margin-top:2px;font-size:11px;color:var(--muted)}
.cs-reference-content{min-width:0;border:1px solid #e2e8f0;border-radius:8px;background:#fbfdff;padding:8px}
.cs-reference-content b{display:block;font-size:12px;color:var(--ink)}
.cs-reference-content small{display:block;margin-top:2px;font-size:11px;color:var(--muted)}
.cs-reference-content pre{margin:7px 0 0;white-space:pre-wrap;word-break:break-word;font:inherit;font-size:12px;line-height:1.55;color:#334155}
.cs-reference-error{margin-top:8px;color:#b91c1c;font-size:12px}
.cs-chat-suggest{display:flex;gap:6px;flex-wrap:wrap;padding:0 10px 8px;background:#fff;max-height:76px;overflow:auto}
.cs-chat-suggest:empty{display:none}
.cs-chat-form{display:flex;align-items:stretch;gap:8px;padding:10px;border-top:1px solid var(--line);background:#fff}
.cs-chat-form textarea{flex:1;min-width:0;min-height:74px;max-height:220px;border:1px solid var(--line);border-radius:7px;padding:9px 10px;font:inherit;font-size:13px;line-height:1.5;resize:vertical}
.cs-chat-form textarea:focus{outline:none;border-color:#0f766e;box-shadow:0 0 0 3px rgba(15,118,110,.14)}
.cs-chat-form button{border:0;background:#0f766e;color:#fff;border-radius:7px;padding:0 15px;font-size:13px;cursor:pointer}
.cs-chat-form button:hover{background:#115e59}
@media (max-width: 980px){
  .cs-chat-window,.cs-chat-window.cs-expanded,.customer-service-page .cs-chat-window{grid-template-columns:minmax(220px,.38fr) minmax(0,1fr)}
  .cs-chat-window .cs-context-panel{display:none!important}
  .cs-chat-window .cs-chat-workspace{grid-column:2}
}
.cs-overview-cards{grid-template-columns:repeat(auto-fit,minmax(136px,1fr));margin-bottom:16px}
.cs-detail-grid{display:grid;gap:16px;align-items:start}
.cs-detail-grid>aside{border-top:1px solid var(--line);padding-top:14px}
.cs-detail-grid aside dl+h3{margin-top:16px}
.cs-add-form{display:flex;gap:8px;margin-bottom:10px;flex-wrap:wrap}
.cs-add-form input{flex:1;min-width:180px;padding:6px 9px;border:1px solid var(--line);border-radius:6px;font-size:13px;background:#fff;color:var(--ink)}
@media (max-width: 640px){
  .cs-floating-entry{right:16px;top:auto;bottom:96px;width:54px;height:54px}
  .cs-bot-svg{width:32px;height:32px}
  .cs-chat-window{right:12px;left:12px;bottom:12px;width:auto;max-width:none;height:80vh;max-height:none;grid-template-columns:1fr;grid-template-rows:58px minmax(0,1fr)}
  .cs-chat-window.cs-expanded{height:calc(100vh - 24px)}
  .cs-chat-window .cs-session-panel,.cs-chat-window .cs-context-panel{display:none!important}
  .cs-chat-window .cs-chat-workspace{grid-column:1;grid-row:2}
  .customer-service-page .cs-chat-window{grid-template-columns:1fr}
  .cs-reference-layout{grid-template-columns:1fr}
}
