/* ============================================================
   驰牛经营分析工作台 · 设计系统 v3（方向三 · 原研哉白）
   原则：纸白、字重层级、奢侈留白、单一品牌色、表格即真相
   反 AI slop：无圆角卡片+左彩边、无紫渐变、无小字承载业务信息
   无障碍：正文≥14px、对比度≥4.5:1、触控目标≥40px
   ============================================================ */
:root{
  --paper:#FAFAF7;
  --paper-2:#F4F2EC;
  --ink:#1A1A18;
  --ink-2:#575754;
  --ink-3:#6C6C68;
  --line:#E5E3DC;
  --line-soft:#EFEDE6;
  --brand:#137C67;
  --brand-strong:#0A4F40;
  --alert:#C43C3C;
  --amber:#C99334;
  --shadow-1:0 1px 2px rgba(26,26,24,0.04);
  --shadow-2:0 8px 32px rgba(26,26,24,0.08);
  --shadow-3:0 16px 48px rgba(26,26,24,0.12);
  --fs-page:28px; --fs-h2:22px; --fs-h3:18px;
  --fs-body:16px; --fs-meta:14px; --fs-tiny:13px;
}
*{box-sizing:border-box;margin:0;padding:0}
body{
  font:16px/1.7 -apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--ink);background:var(--paper);
  font-feature-settings:"tnum";-webkit-font-smoothing:antialiased;
  min-height:100vh;
}
a{text-decoration:none;color:inherit}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}
button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible{
  outline:3px solid var(--brand);outline-offset:2px;
}
.hidden{display:none!important}
.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
.serif{font-family:"Source Han Serif SC",serif}

/* ============ 通用：输入 ============ */
.field{display:flex;flex-direction:column;gap:6px}
.field>label{font-size:var(--fs-meta);color:var(--ink-2);font-weight:500}
.input,.select,.textarea{
  width:100%;padding:11px 14px;font:inherit;color:var(--ink);
  background:var(--paper);border:1px solid var(--line);border-radius:6px;
}
.input:hover,.select:hover,.textarea:hover{border-color:var(--ink-3)}
.input:focus,.select:focus,.textarea:focus{border-color:var(--brand);outline:none;box-shadow:0 0 0 3px rgba(19,124,103,.12)}
.input::placeholder{color:var(--ink-3)}
.textarea{resize:vertical;min-height:88px}

/* ============ 通用：按钮 ============ */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:11px 20px;font-size:var(--fs-meta);font-weight:600;border-radius:6px;
  min-height:40px;transition:all .15s;border:1.5px solid transparent;cursor:pointer}
.btn-primary{background:var(--ink);color:var(--paper)}
.btn-primary:hover{background:#000}
.btn-primary:disabled{background:var(--ink-3);cursor:not-allowed}
.btn-brand{background:var(--brand);color:#fff}
.btn-brand:hover{background:var(--brand-strong)}
.btn-ghost{background:transparent;color:var(--ink-2);min-height:36px;padding:6px 10px}
.btn-ghost:hover{color:var(--ink);background:var(--paper-2)}
.btn-danger{color:var(--alert);background:transparent;min-height:36px;padding:6px 10px}
.btn-danger:hover{background:#FCEEEC}
.btn-link{color:var(--brand);font-weight:500;background:transparent;padding:0;min-height:0;text-decoration:underline;text-underline-offset:3px}

/* ============ 通用：提示块（信息放主信息区，不用小灰字） ============ */
.callout{padding:14px 18px;border-radius:6px;background:#F4F2EC;color:var(--ink-2);font-size:var(--fs-meta);line-height:1.7;margin:0 0 16px;border-left:3px solid var(--ink-3)}
.callout-brand{background:#E8F3EF;border-left-color:var(--brand);color:var(--brand-strong)}
.callout-warn{background:#FBF1E1;border-left-color:var(--amber);color:#7A5715}
.callout-error{background:#FCEEEC;border-left-color:var(--alert);color:#8B2929}

/* ============ 通用：状态标签 ============ */
.tag{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-tiny);font-weight:600;padding:3px 10px;border-radius:99px;background:var(--paper-2);color:var(--ink-2)}
.tag::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.tag-success{background:#DEF0E7;color:var(--brand-strong)}
.tag-warn{background:#FBF1E1;color:#7A5715}
.tag-error{background:#FCEEEC;color:#8B2929}
.tag-neutral{background:var(--paper-2);color:var(--ink-2)}

/* ============ 登录 / 注册 / 找回 公共壳 ============ */
.auth-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--paper);padding:24px}
.auth-card{width:min(440px,100%);padding:8px 4px}
.auth-card .brand{display:flex;align-items:center;justify-content:center;gap:13px;margin-bottom:8px}
.auth-card .brand-logo{display:block;width:52px;height:52px;flex-shrink:0}
.auth-card .brand-copy{text-align:left}
.auth-card .brand b{display:block;font-family:serif;font-size:30px;line-height:1;font-weight:900;letter-spacing:7px}
.auth-card .brand small{display:block;font-family:sans-serif;font-size:var(--fs-tiny);font-weight:500;letter-spacing:3px;color:var(--ink-3);margin-top:7px}
#login .brand-logo{width:60px;height:60px}
#login .brand b{letter-spacing:4px}
#login .brand small{font-size:15px;letter-spacing:4px}
.auth-card h1{font-family:serif;font-size:var(--fs-h2);font-weight:700;text-align:center;margin:24px 0 6px}
.auth-card>.callout{margin-top:18px}
.auth-card form{display:flex;flex-direction:column;gap:18px;margin-top:8px}
.auth-card .form-foot{text-align:center;color:var(--ink-3);font-size:var(--fs-tiny);margin-top:24px;line-height:1.8}
.auth-card .form-foot a{color:var(--brand);font-weight:500}
.auth-card .form-foot b{color:var(--ink);font-weight:600}
.auth-error{min-height:18px;font-size:var(--fs-meta);color:var(--alert);text-align:center;margin-top:10px}
.auth-success{min-height:18px;font-size:var(--fs-meta);color:var(--brand-strong);text-align:center;margin-top:10px}

/* ============ 应用主框架 ============ */
.app{display:flex;min-height:100vh}
.aside{width:228px;padding:34px 0 0;border-right:1px solid var(--line);position:sticky;top:0;height:100vh;background:var(--paper);display:flex;flex-direction:column;flex-shrink:0}
.side-drawer{display:flex;flex:1;min-height:0;flex-direction:column}
.aside .brand{display:flex;align-items:center;gap:10px;padding:0 24px 30px}
.aside .brand-logo{display:block;width:36px;height:36px;flex-shrink:0}
.aside .brand b{display:block;font-family:serif;font-size:22px;line-height:1;font-weight:900;letter-spacing:5px;white-space:nowrap}
.aside .brand small{display:block;font-family:sans-serif;font-size:var(--fs-tiny);font-weight:500;letter-spacing:2px;color:var(--ink-3);margin-top:6px;white-space:nowrap}
.aside nav{display:flex;flex-direction:column;gap:2px;padding:0 12px}
.aside nav a{display:block;padding:10px 16px;font-size:var(--fs-meta);color:var(--ink-2);border-radius:6px;font-weight:500;letter-spacing:.5px}
.aside nav a:hover{background:var(--paper-2);color:var(--ink)}
.aside nav a.now{color:var(--ink);font-weight:700;background:var(--paper-2);position:relative}
.aside nav a.now::before{content:"";position:absolute;left:-12px;top:8px;bottom:8px;width:3px;background:var(--brand)}
.aside-foot{margin-top:auto;padding:24px 28px 28px;border-top:1px solid var(--line);font-size:var(--fs-tiny);color:var(--ink-3);line-height:1.7}
.aside-foot b{display:block;color:var(--ink);font-size:var(--fs-meta);margin-bottom:2px}
.aside-foot button{color:var(--ink-3);font-size:var(--fs-tiny);margin-top:6px;padding:0;text-decoration:underline;text-underline-offset:3px}
.aside-foot button:hover{color:var(--brand)}

main{flex:1;min-width:0;padding:0 48px;max-width:1280px;margin:0 auto}
.page-head{display:flex;justify-content:space-between;align-items:flex-end;padding:34px 0 28px;border-bottom:1px solid var(--line);margin-bottom:28px;gap:16px}
.page-head h1{font-family:serif;font-size:var(--fs-page);font-weight:700;letter-spacing:1px}
.page-head .meta{color:var(--ink-3);font-size:var(--fs-meta);margin-top:6px}
.page-head-actions{display:flex;align-items:center;gap:10px}.message-center-btn{position:relative;display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:999px;background:var(--paper);padding:9px 14px;color:var(--ink);font-weight:700;cursor:pointer}.message-center-btn:hover{border-color:var(--ink-3)}.message-center-btn b{display:inline-flex;min-width:20px;height:20px;align-items:center;justify-content:center;border-radius:999px;background:#9B2C2C;color:#fff;font-size:11px;padding:0 5px}.pre-line{white-space:pre-line}

/* ============ 顶栏：用户菜单 ============ */
.user-menu{position:relative}
.user-menu .me{background:transparent;border:1px solid var(--line);border-radius:99px;padding:7px 16px;font-size:var(--fs-meta);color:var(--ink);font-weight:500;cursor:pointer;display:flex;align-items:center;gap:8px}
.user-menu .me:hover{border-color:var(--ink-3)}
.user-menu .me::after{content:"▾";color:var(--ink-3);font-size:10px}
.user-menu .dropdown{position:absolute;right:0;top:calc(100% + 8px);background:var(--paper);border:1px solid var(--line);border-radius:8px;min-width:200px;box-shadow:var(--shadow-2);padding:6px;z-index:100}
.user-menu .dropdown button{display:flex;align-items:center;gap:8px;width:100%;text-align:left;padding:10px 12px;border-radius:6px;font-size:var(--fs-meta);color:var(--ink)}
.user-menu .dropdown button:hover{background:var(--paper-2)}
.user-menu .dropdown .sep{height:1px;background:var(--line);margin:4px 8px}
.user-menu .dropdown .label{font-size:var(--fs-tiny);color:var(--ink-3);padding:6px 12px}

/* ============ KPI / 数字 ============ */
.kpi-row{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:24px;padding:24px 0 8px;border-bottom:1px solid var(--line);margin-bottom:36px}
.kpi{padding:6px 0}
.kpi .l{font-size:var(--fs-meta);color:var(--ink-2);font-weight:500}
.kpi .v{font-family:serif;font-size:36px;font-weight:700;letter-spacing:-.5px;margin-top:6px;line-height:1.1}
.kpi.hero .v{font-size:48px}
.kpi .d{font-size:var(--fs-tiny);color:var(--ink-3);margin-top:4px}
.alert-c{color:var(--alert)}
.brand-c{color:var(--brand)}

/* ============ 重点动作列表 ============ */
.list{display:flex;flex-direction:column;gap:14px;padding:8px 0}
.list-item{display:flex;gap:12px;padding:6px 0;align-items:flex-start}
.list-item .pt{width:8px;height:8px;border-radius:50%;margin-top:10px;flex-shrink:0}
.list-item .pt.r{background:var(--alert)} .list-item .pt.y{background:var(--amber)} .list-item .pt.g{background:var(--brand)}
.list-item b{font-size:var(--fs-body);font-weight:700}
.list-item p{font-size:var(--fs-meta);color:var(--ink-2);line-height:1.7;margin-top:2px}

/* ============ 表格：表格即真相 ============ */
.sec{margin-bottom:44px}
.sec-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.sec-h h2{font-family:serif;font-size:var(--fs-h2);font-weight:700;letter-spacing:1px}
.sec-h .more{font-size:var(--fs-meta);color:var(--brand);font-weight:500}
.sec-h .more:hover{text-decoration:underline;text-underline-offset:3px}
table{width:100%;border-collapse:collapse;font-size:var(--fs-body);font-variant-numeric:tabular-nums}
thead th{font-size:var(--fs-tiny);font-weight:500;color:var(--ink-3);text-align:left;padding:14px 12px;border-bottom:1px solid var(--line);white-space:nowrap;letter-spacing:.5px}
thead th.r{text-align:right}
thead th.sortable{cursor:pointer;user-select:none}
thead th.sortable:hover{color:var(--ink)}
thead th.sortable .arr{font-size:10px;margin-left:4px;color:var(--ink-3);font-weight:400}
thead th.sortable.on{color:var(--ink)}
thead th.sortable.on .arr{color:var(--brand)}
tbody td{padding:16px 12px;white-space:nowrap;border-bottom:1px solid var(--line-soft)}
tbody tr:hover{background:var(--paper-2)}
tbody tr:last-child td{border-bottom:0}
td.r{text-align:right;font-weight:500}
td .g-name{font-weight:700}
td .g-sub{font-size:var(--fs-tiny);color:var(--ink-3);margin-top:1px}
 td .ent-list{font-size:var(--fs-tiny);color:var(--ink-2);max-width:260px;line-height:1.5;display:flex;flex-direction:column;gap:5px}
td .ent-more{color:var(--brand);cursor:pointer;font-weight:600}
.risk-t{font-weight:700}
.risk-t.r{color:var(--alert)} .risk-t.y{color:var(--amber)} .risk-t.g{color:var(--brand)}
.risk-t i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:8px;font-style:normal}
.risk-t.r i{background:var(--alert)} .risk-t.y i{background:var(--amber)} .risk-t.g i{background:var(--brand)}
.empty-row td{text-align:center;color:var(--ink-3);padding:36px 16px !important}

/* ============ 工具栏：搜索 + 筛选 ============ */
.toolbar{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}
.toolbar .search-input{flex:1;min-width:180px;max-width:340px;padding:9px 12px}
.risk-filter{display:inline-flex;align-items:center;gap:4px;background:transparent;border:1px solid var(--line);border-radius:99px;padding:3px}
.risk-btn{border-radius:99px;padding:5px 14px;font-size:var(--fs-tiny);font-weight:600;background:transparent;color:var(--ink-2);min-height:30px}
.risk-btn:hover{color:var(--ink)}
.risk-btn.on{background:var(--ink);color:var(--paper)}
.risk-btn.on[data-r="红"]{background:var(--alert)}
.risk-btn.on[data-r="黄"]{background:var(--amber)}
.risk-btn.on[data-r="绿"]{background:var(--brand)}
.count{margin-left:auto;font-size:var(--fs-tiny);color:var(--ink-3)}

/* ============ 销售筛选行（折叠式多选 chips） ============ */
.sales-row{display:flex;align-items:center;gap:10px;margin-bottom:16px;flex-wrap:wrap}
.sales-row .filter-label{font-size:var(--fs-meta);color:var(--ink-2);font-weight:500;flex-shrink:0}
.sales-toggle{border:1px solid var(--line);border-radius:99px;min-height:32px}
.sales-toggle .caret{display:inline-block;margin-left:6px;color:var(--ink-3);font-size:11px;transition:transform .15s}
.sales-toggle.on .caret{transform:rotate(180deg)}
.sales-filter{flex-wrap:wrap}
.sales-filter .risk-btn{padding:5px 16px}
.sales-row.hidden{display:none}

/* ============ 柱状图 ============ */
.bars{display:flex;align-items:flex-end;gap:6px;height:140px;padding:8px 0 0}
.bars i{flex:1;background:var(--brand);border-radius:3px 3px 0 0;min-width:8px;position:relative;opacity:.85}
.bars i:hover{opacity:1}
.bars i.off{background:var(--line);opacity:1}
.bars i:hover::after{content:attr(data-d);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translateX(-50%);background:var(--ink);color:var(--paper);font-size:var(--fs-tiny);padding:4px 8px;white-space:nowrap;letter-spacing:.5px}

/* ============ 模态：head + body + foot ============ */
dialog#modal{position:fixed;inset:0;margin:auto;border:0;border-radius:10px;padding:0;
  width:min(520px,94vw);max-height:min(86vh,760px);overflow:auto;
  box-shadow:var(--shadow-3);background:var(--paper)}
dialog#modal::backdrop{background:rgba(26,26,24,0.4);backdrop-filter:blur(2px)}
.modal-head{padding:24px 28px 16px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:flex-start;position:sticky;top:0;background:var(--paper);z-index:2}
.modal-head h3{font-family:serif;font-size:var(--fs-h3);font-weight:700;margin:0}
.modal-title-row{display:flex;align-items:center;gap:14px;min-width:0}.modal-back{flex:0 0 auto;border:0;background:var(--paper-2);border-radius:999px;padding:7px 11px;color:var(--ink-2);font-weight:700;cursor:pointer}.modal-back:hover{background:var(--line-soft);color:var(--ink)}
.modal-close{color:var(--ink-3);font-size:24px;width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px}
.modal-close:hover{background:var(--paper-2);color:var(--ink)}
.modal-body{padding:24px 28px}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;padding:16px 28px 24px;border-top:1px solid var(--line-soft);background:var(--paper-2)}
.modal-body .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.modal-body .form-grid .full{grid-column:1/-1}
.modal-body .form-grid+.callout{margin-top:8px}
.platform-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.platform-picker label{display:flex;align-items:center;gap:8px;padding:9px 11px;border:1px solid var(--line);border-radius:6px;cursor:pointer;background:var(--paper)}
.platform-picker label:has(input:checked){border-color:var(--brand);background:rgba(19,124,103,.07);color:var(--brand-strong)}
.platform-picker input{accent-color:var(--brand)}
.field>.callout{margin:4px 0 0}
.setting-list{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}
.platform-setting-filters{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 10px}
.platform-setting-filter{padding:8px 12px;border:1px solid var(--line);border-radius:99px;background:var(--paper-2);color:var(--ink);font:inherit;cursor:pointer}
.platform-setting-filter:hover,.platform-setting-filter.is-active{border-color:var(--brand);background:#e6f3ef;color:var(--brand)}
.platform-setting-count{margin:0 0 12px;color:var(--ink-3);font-size:var(--fs-meta)}
.platform-setting-item{display:inline-flex;align-items:center;gap:7px;padding:7px 10px;border:1px solid var(--line);border-radius:99px;background:var(--paper-2)}
.platform-setting-item i{font-size:var(--fs-tiny);font-style:normal;color:var(--ink-3)}
.inline-field{display:flex;gap:8px}
.inline-field .input{flex:1}
.inline-field .btn{flex:0 0 auto}

/* ============ 角色/状态/动作通用 ============ */
.role-tag{display:inline-block;font-size:var(--fs-tiny);font-weight:600;padding:2px 8px;border-radius:4px}
.role-tag.admin{background:#E8F3EF;color:var(--brand-strong)}
.role-tag.business{background:var(--paper-2);color:var(--ink-2)}
.status-tag{display:inline-block;font-size:var(--fs-tiny);font-weight:600;padding:2px 8px;border-radius:4px}
.status-tag.active{background:#DEF0E7;color:var(--brand-strong)}
.status-tag.pending{background:#FBF1E1;color:#7A5715}
.status-tag.disabled{background:var(--paper-2);color:var(--ink-3)}

/* ============ 顶部通知（横贯全宽，不被 #app 隐藏） ============ */
.top-notice{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:9999;
  min-width:320px;max-width:84vw;padding:12px 20px;border-radius:6px;
  background:var(--paper);border:1px solid var(--line);box-shadow:var(--shadow-2);
  font-size:var(--fs-meta);display:flex;align-items:center;gap:10px}
.top-notice.error{border-color:var(--alert);color:var(--alert)}
.top-notice.success{border-color:var(--brand);color:var(--brand-strong)}
.top-notice.hidden{display:none}
.top-notice::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}

/* ============ 分页条（总览/分析/流失预警通用，v10 新增） ============ */
.pager{display:flex;align-items:center;gap:14px;padding:18px 4px 4px;flex-wrap:wrap}
.pager .pager-label{font-size:16px;font-weight:700;color:var(--ink)}
.pager .pager-label b{color:var(--brand-strong)}
.pager .pager-size{display:inline-flex;align-items:center;gap:8px;font-size:15px;font-weight:600}
.pager .pager-size select{width:auto;padding:6px 10px}
.risk-btn:disabled,.risk-btn:disabled:hover{opacity:.45;cursor:not-allowed;border-color:var(--line)}

/* ============ 流失预警（v10 新增） ============ */
.churn-alert-row td{background:#FCEEEC}
.risk-t.n{color:var(--ink-2)}
.risk-t.n i{background:var(--ink-3)}

/* ============ 渐进式披露（v11 新增）：折叠区块 + 紧凑预警横幅 ============ */
.fold-wrap > .fold-sec{margin-bottom:0}
.fold-sec{margin-bottom:22px;border:1px solid var(--line);border-radius:6px;background:var(--paper)}
.fold-sec > summary{display:flex;align-items:center;gap:14px;cursor:pointer;list-style:none;
  padding:16px 20px;font-size:19px;font-weight:700;color:var(--ink)}
.fold-sec > summary::-webkit-details-marker{display:none}
.fold-sec > summary::after{content:"收起 ▴";margin-left:auto;font-size:14px;font-weight:600;color:var(--ink-2)}
.fold-sec:not([open]) > summary::after{content:"展开 ▾"}
.fold-badge{font-size:14px;font-weight:600;padding:4px 12px;border-radius:999px;background:var(--paper-2);color:var(--ink-2)}
.fold-badge.badge-alert{background:#FCEEEC;color:#8B2929;font-weight:700}
.fold-body{padding:0 20px 18px}
.churn-banner{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:12px 18px}
.churn-banner b{flex:1;min-width:280px;font-size:17px;color:#8B2929}
.churn-banner .btn{flex-shrink:0;margin:0}

/* ============ 侧边栏收起/展开（v13 新增） ============ */
.aside{position:sticky}
#side-collapse{position:absolute;top:16px;right:12px;z-index:5;width:26px;height:26px;
  border:1px solid var(--line);border-radius:6px;background:var(--paper);color:var(--ink-2);
  font-size:12px;cursor:pointer;line-height:1;padding:0}
#side-collapse:hover{color:var(--ink);border-color:var(--ink-3)}
body.side-collapsed .aside{width:64px}
body.side-collapsed .aside .brand{padding-left:0;padding-right:0;justify-content:center}
body.side-collapsed .aside .brand-logo{width:34px;height:34px}
body.side-collapsed .aside .brand-copy{display:none}
body.side-collapsed .aside nav a{font-size:0;padding:14px 0;justify-content:center;text-align:center}
body.side-collapsed .aside nav a::before{content:attr(data-short);font-size:15px;font-weight:600}
body.side-collapsed .aside nav a.now::before{display:none}
body.side-collapsed .aside nav a.now{background:var(--paper-2)}
body.side-collapsed .aside-foot{display:none}
body.side-collapsed #side-collapse{right:50%;transform:translateX(50%);top:10px}
@media (max-width:760px){
  #side-collapse{display:none}
}

/* ============ 手机导航抽屉 ============ */
.mobile-menu-toggle,.mobile-nav-scrim{display:none}

/* ============ 骨架屏 ============ */
@keyframes shimmer{0%{background-position:-400px 0}100%{background-position:400px 0}}
.skeleton{background:linear-gradient(90deg,var(--line-soft) 0%,var(--paper-2) 50%,var(--line-soft) 100%);background-size:800px 100%;animation:shimmer 1.4s infinite linear;border-radius:4px}
.skel-line{height:14px;margin:10px 0}
.skel-block{height:80px;margin:14px 0}

/* ============ 响应式 ============ */
@media (max-width:1080px){
  .kpi-row{grid-template-columns:1fr 1fr;gap:18px}
  .kpi.hero .v{font-size:36px}
}

/* ============ PRD v0.5 首期业务闭环（v30） ============ */
.aside nav{overflow-y:auto;padding-bottom:20px}
.mvp-kpis{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:14px;margin:8px 0 28px}
.mvp-kpi{appearance:none;text-align:left;border:1px solid var(--line);background:var(--paper);border-radius:8px;padding:18px;cursor:pointer;color:var(--ink)}
.mvp-kpi:hover{border-color:var(--brand);transform:translateY(-1px)}
.mvp-kpi span,.mvp-kpi i{display:block;color:var(--ink-2);font-style:normal;font-size:13px}
.mvp-kpi b{display:block;font:700 34px/1.25 var(--serif);margin:7px 0;color:var(--ink)}
.mvp-split{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin:8px 0 30px}
.module-card{appearance:none;text-align:left;border:1px solid var(--line);border-radius:8px;background:var(--paper);padding:22px;cursor:pointer;color:var(--ink)}
.module-card:hover{border-color:var(--brand);background:#F3F8F6}.module-card b,.module-card span{display:block}.module-card b{font-size:18px;margin-bottom:8px}.module-card span{color:var(--ink-2);line-height:1.7}
.module-card b:only-child{margin-bottom:0}
.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin:10px 0 18px}.section-head h2{margin:0}.section-head p{margin:6px 0 0;color:var(--ink-2)}
.toolbar{display:flex;gap:10px;align-items:center;margin:8px 0 22px}.toolbar .input{max-width:520px}
.table-scroll{overflow:auto}.table-scroll small,td small{display:block;color:var(--ink-2);margin-top:4px;max-width:340px;white-space:normal}
.record-search-bar{display:flex;align-items:center;gap:10px;margin:10px 0;padding:10px 12px;background:#f7faff;border:1px solid var(--line-soft);border-radius:10px}
.record-search-bar .select{flex:0 0 auto;max-width:230px}.record-search-bar .input{flex:1;min-width:180px}.record-search-count{color:var(--ink-3);font-size:var(--fs-meta);white-space:nowrap}
tr.record-search-hidden{display:none!important}
@media(max-width:700px){.record-search-bar{flex-wrap:wrap}.record-search-bar .select,.record-search-bar .input{max-width:none;flex:1 1 100%}.record-search-count{white-space:normal}}
.empty-state{border:1px dashed var(--line);border-radius:8px;padding:34px;text-align:center;color:var(--ink-2);margin:12px 0 28px}.empty-state b{display:block;color:var(--ink);font-size:18px}.empty-state p{margin:8px 0 0}
.notice-item{padding:14px 0;border-bottom:1px solid var(--line)}.notice-item p{white-space:pre-wrap;color:var(--ink-2)}
.modal-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.btn-danger{background:#8B2929;color:white;border-color:#8B2929}
@media(max-width:1080px){.mvp-kpis{grid-template-columns:repeat(3,1fr)}.mvp-split{grid-template-columns:1fr 1fr}}
@media(max-width:760px){.mvp-kpis,.mvp-split{grid-template-columns:1fr 1fr}.section-head{align-items:flex-start;flex-direction:column}.toolbar{flex-wrap:wrap}}
@media (max-width:760px){
  body.mobile-nav-open{overflow:hidden}
  .app{display:block}
  .aside{position:sticky;top:0;z-index:200;width:100%;height:64px;min-height:64px;
    flex-direction:row;padding:0 18px;align-items:center;justify-content:space-between;overflow:visible;
    border-right:0;border-bottom:1px solid var(--line);box-shadow:0 1px 0 rgba(26,26,24,.02)}
  .aside .brand{padding:0;border:0;gap:8px;position:relative;z-index:220}
  .aside .brand-logo{width:30px;height:30px}
  .aside .brand b{font-size:20px;letter-spacing:4px}
  .aside .brand small{display:none}
  .mobile-menu-toggle{display:inline-flex;width:44px;height:44px;align-items:center;justify-content:center;
    flex-direction:column;gap:5px;border-radius:6px;position:relative;z-index:230;background:var(--paper)}
  .mobile-menu-toggle:hover{background:var(--paper-2)}
  .mobile-menu-toggle span{display:block;width:22px;height:2px;background:var(--ink);border-radius:2px;
    transition:transform .2s ease,opacity .15s ease}
  body.mobile-nav-open .mobile-menu-toggle span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  body.mobile-nav-open .mobile-menu-toggle span:nth-child(2){opacity:0}
  body.mobile-nav-open .mobile-menu-toggle span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
  .side-drawer{position:fixed;z-index:210;top:0;right:0;width:min(86vw,340px);height:100vh;height:100dvh;
    padding-top:76px;background:var(--paper);box-shadow:var(--shadow-3);transform:translateX(105%);
    visibility:hidden;transition:transform .22s ease,visibility 0s linear .22s}
  body.mobile-nav-open .side-drawer{transform:translateX(0);visibility:visible;transition-delay:0s}
  .aside nav{flex:1;min-height:0;flex-direction:column;padding:0 16px 20px;gap:2px;overflow-y:auto;overflow-x:hidden}
  .aside nav a{white-space:normal;padding:11px 14px;font-size:15px;line-height:1.5}
  .aside nav a.now::before{display:block;left:-16px}
  .nav-sep{padding:15px 14px 5px}
  .aside-foot{display:block;padding:20px 30px max(24px,env(safe-area-inset-bottom));background:var(--paper)}
  .mobile-nav-scrim{display:block;position:fixed;z-index:190;inset:0;background:rgba(26,26,24,.38);
    opacity:0;visibility:hidden;pointer-events:none;transition:opacity .22s ease,visibility 0s linear .22s}
  body.mobile-nav-open .mobile-nav-scrim{opacity:1;visibility:visible;pointer-events:auto;transition-delay:0s}
  body.side-collapsed .aside{width:100%}
  body.side-collapsed .aside .brand{padding:0;justify-content:flex-start}
  body.side-collapsed .aside .brand-logo{width:30px;height:30px}
  body.side-collapsed .aside .brand-copy{display:block}
  body.side-collapsed .aside nav a{font-size:15px;padding:11px 14px;text-align:left}
  body.side-collapsed .aside nav a::before{content:""}
  body.side-collapsed .aside nav a.now::before{display:block}
  body.side-collapsed .nav-sep{display:block}
  body.side-collapsed .aside-foot{display:block}
  main{padding:0 18px}
  .page-head{padding:26px 0 22px;margin-bottom:24px}
  .kpi-row{grid-template-columns:1fr 1fr}
  .modal-body .form-grid{grid-template-columns:1fr}
  .platform-picker{grid-template-columns:1fr}
}

@media (prefers-reduced-motion:reduce){
  .side-drawer,.mobile-nav-scrim,.mobile-menu-toggle span{transition:none!important}
}

/* ============================================================
   驾驶舱模块（v15）：导航分组 / KPI 网格 / 图表容器 / 上传框
   ============================================================ */
.nav-sep{display:flex;align-items:center;gap:9px;padding:22px 14px 8px;
  font-size:12px;line-height:1;font-weight:700;color:var(--ink-3);letter-spacing:1.5px;
  cursor:default;user-select:none;white-space:nowrap}
.nav-sep::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--brand);opacity:.72;flex-shrink:0}
.nav-sep::after{content:"";height:1px;background:var(--line);flex:1;min-width:18px}
.aside nav>.nav-sep:first-child{padding-top:8px}
body.side-collapsed .nav-sep{display:none}
@media (max-width:760px){
  .nav-sep{padding:20px 14px 8px}
  .aside nav>.nav-sep:first-child{padding-top:8px}
}
.cj-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:24px 28px;padding:26px 0 10px;border-bottom:1px solid var(--line);margin-bottom:30px}
.cj-kpis .kpi .v{font-size:30px}
.cj-kpis .kpi.hero .v{font-size:40px}
.cj-two{display:grid;grid-template-columns:1fr 1fr;gap:0 40px}
.chart-box{height:320px;width:100%}
.upload-box{border:2px dashed var(--line);border-radius:8px;padding:34px 28px;text-align:center;cursor:pointer;transition:border-color .15s,background .15s}
.upload-box:hover,.upload-box.drag{border-color:var(--brand);background:#F3F8F6}
.upload-box p{font-size:var(--fs-body);color:var(--ink)}
.upload-box p.g-sub{font-size:var(--fs-meta);color:var(--ink-2);margin-top:6px;line-height:1.8}
@media (max-width:1080px){
  .cj-kpis{grid-template-columns:1fr 1fr}
  .cj-two{grid-template-columns:1fr}
  .chart-box{height:260px}
}

/* 客户编辑工作台 */
.editor-tabs{display:flex;gap:6px;overflow-x:auto;border-bottom:1px solid var(--line);margin:0 0 18px;padding-bottom:8px}
.editor-tabs button{border:0;background:transparent;color:var(--ink-2);font:inherit;font-weight:600;padding:8px 12px;border-radius:8px;white-space:nowrap;cursor:pointer}
.editor-tabs button.on{background:var(--ink);color:#fff}
.group-tab{min-width:0}
.account-line{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--line-soft)}
.account-line small{display:block;color:var(--ink-3);margin-top:4px}
.row-overdue{background:#fff4f2!important}
.nowrap{white-space:nowrap}
.compact-select{width:auto!important;padding:7px 10px!important}
.break-all{word-break:break-all}

/* 客户管理：账户定位搜索结果 */
.account-locate-box{margin:0 0 12px}
.account-locate-box.hidden{display:none}
.account-locate{background:var(--paper-2);border:1px solid var(--line-soft);border-left:3px solid var(--brand);border-radius:12px;padding:6px 18px}
.account-locate-loading{padding:10px 2px;color:var(--ink-3);font-size:var(--fs-meta)}
.account-locate-head{display:flex;align-items:baseline;gap:10px;padding:10px 0 4px}.account-locate-head span{color:var(--ink-3);font-size:var(--fs-meta)}
.account-locate-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:10px 0;border-top:1px solid var(--line-soft)}
.account-locate-main{min-width:0}.account-locate-main b{font-size:15px}.account-locate-main span{margin-left:10px;color:var(--ink-2)}
.account-locate-main small{display:block;color:var(--ink-3);margin-top:3px}
.account-locate-actions{flex:0 0 auto;display:flex;gap:8px}
tr.row-locate-hit>td{background:#eef7f0}
tr.row-locate-flash{animation:locateFlash 2.4s ease-out}
@keyframes locateFlash{0%,55%{background:#d9efdf}100%{background:transparent}}
.entity-search-count{margin:0 0 10px;color:var(--brand);font-size:var(--fs-meta);font-weight:700}
.entity-search-count.hidden{display:none}
details.entity-disclosure.hidden{display:none}

/* 客户与客群：渐进式披露 */
.group-page-head,.group-search-bar,.result-heading{display:flex;align-items:center;justify-content:space-between;gap:18px}
.group-page-head{margin-bottom:22px}.group-page-head h2{font-family:serif;font-size:var(--fs-h2);margin:0}.group-page-head p{color:var(--ink-2);margin-top:5px}
.group-search-bar{padding:16px 18px;background:var(--paper-2);border:1px solid var(--line-soft);border-radius:12px;margin-bottom:12px}
.group-search-bar .select{flex:0 0 160px;max-width:160px}
.group-search-bar .input{flex:1;max-width:none;background:var(--paper)}.group-search-bar>span{font-size:var(--fs-meta);color:var(--ink-3);white-space:nowrap}
.qualification-paste-zone{display:grid;grid-template-columns:72px minmax(0,1fr) auto;align-items:center;gap:14px;min-height:92px;padding:12px 14px;border:2px dashed var(--line);border-radius:10px;background:var(--paper-2);cursor:pointer;transition:border-color .15s,background .15s}
.qualification-paste-zone:hover,.qualification-paste-zone:focus{outline:0;border-color:var(--brand);background:#F3F8F6}.qualification-paste-zone.has-image{border-style:solid;border-color:var(--brand)}
.qualification-paste-zone img{width:72px;height:64px;object-fit:contain;border-radius:6px;background:#fff;border:1px solid var(--line-soft)}.qualification-paste-zone img[hidden]{display:none}.qualification-paste-zone:not(.has-image){grid-template-columns:minmax(0,1fr) auto}
.qualification-paste-zone>div{display:flex;flex-direction:column;gap:4px;min-width:0}.qualification-paste-zone>div b{color:var(--ink)}.qualification-paste-zone>div span{color:var(--ink-3);font-size:var(--fs-meta);white-space:normal;overflow-wrap:anywhere}
.visually-hidden{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.linkage-summary{display:flex;align-items:center;flex-wrap:wrap;gap:5px 12px;min-height:56px;padding:11px 13px;border:1px solid var(--line);border-left:3px solid var(--brand);border-radius:8px;background:var(--paper-2)}.linkage-summary b{color:var(--ink)}.linkage-summary span,.linkage-summary small{color:var(--ink-2);line-height:1.6}.linkage-summary .btn{margin-left:auto}.linkage-summary .danger-text{color:var(--alert)}
.spend-snapshot{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--paper-2)}.spend-snapshot>label{display:grid;gap:6px}.spend-snapshot>label>span{font-size:var(--fs-meta);color:var(--ink-2)}.spend-snapshot>label>small{line-height:1.45;color:var(--ink-3)}.spend-snapshot>small,.spend-snapshot>span{grid-column:1/-1;color:var(--ink-3)}
.filter-disclosure,.definition-disclosure,.group-disclosure,.result-disclosure,.form-disclosure,.entity-disclosure{border:1px solid var(--line);border-radius:10px;background:var(--paper)}
.filter-disclosure{margin-bottom:18px}.filter-disclosure>summary,.definition-disclosure>summary,.group-disclosure>summary,.result-disclosure>summary,.form-disclosure>summary,.entity-disclosure>summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;font-weight:700}
.filter-disclosure>summary::-webkit-details-marker,.definition-disclosure>summary::-webkit-details-marker,.group-disclosure>summary::-webkit-details-marker,.result-disclosure>summary::-webkit-details-marker,.form-disclosure>summary::-webkit-details-marker,.entity-disclosure>summary::-webkit-details-marker{display:none}
.filter-disclosure>summary{padding:11px 14px;color:var(--ink-2)}.filter-disclosure>summary::after,.definition-disclosure>summary::after,.group-disclosure>summary::after,.result-disclosure>summary::after{content:'⌄';color:var(--ink-3)}
.filter-disclosure[open]>summary::after,.definition-disclosure[open]>summary::after,.group-disclosure[open]>summary::after,.result-disclosure[open]>summary::after{transform:rotate(180deg)}
.filter-disclosure>summary i{font-style:normal;font-size:var(--fs-tiny);color:var(--brand);background:#E8F3EF;padding:3px 8px;border-radius:99px}
.filter-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:4px 14px 14px}.filter-grid label{display:grid;gap:6px;color:var(--ink-3);font-size:var(--fs-tiny)}
.group-card-list{display:grid;gap:14px}.group-card{border:1px solid var(--line);border-radius:14px;background:var(--paper);box-shadow:0 2px 10px rgba(31,40,36,.035);overflow:hidden}.group-card.is-overdue{border-left:4px solid var(--alert)}
.group-card-main{padding:20px}.group-card-title{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.group-card-title h3{font-family:serif;font-size:20px;margin:0}.group-card-title p{font-size:var(--fs-meta);color:var(--ink-2);margin-top:5px}
.group-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line-soft);border:1px solid var(--line-soft);border-radius:10px;overflow:hidden;margin-top:16px}.group-metrics>span{display:flex;flex-direction:column;gap:3px;padding:12px 14px;background:var(--paper-2)}.group-metrics i{font-style:normal;font-size:var(--fs-tiny);color:var(--ink-3)}.group-metrics b{font-size:15px}.group-metrics small{color:var(--ink-3)}
.group-card-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:16px}.danger-text{color:var(--alert)!important}.group-disclosure{border:0;border-top:1px solid var(--line-soft);border-radius:0;background:var(--paper-2)}.group-disclosure>summary{padding:12px 20px;color:var(--ink-2);font-size:var(--fs-meta)}.group-disclosure>summary span{margin-left:auto;color:var(--ink-3);font-size:var(--fs-tiny);font-weight:500}
.search-picker-results{position:relative;z-index:3;display:grid;gap:4px;margin-top:6px;max-height:220px;overflow:auto;border-radius:8px;background:var(--paper)}.search-picker-results:empty{display:none}.search-picker-results button{display:flex;justify-content:space-between;gap:12px;width:100%;padding:10px 12px;border:1px solid var(--line-soft);border-radius:7px;background:var(--paper);text-align:left;cursor:pointer}.search-picker-results button:hover{border-color:var(--brand);background:var(--paper-2)}.search-picker-results small,.search-picker-results>span{color:var(--ink-3);padding:8px}
.group-detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;padding:2px 20px 18px}.group-detail-grid>div{background:var(--paper);border:1px solid var(--line-soft);border-radius:8px;padding:12px}.group-detail-grid i{font-style:normal;font-size:var(--fs-tiny);color:var(--ink-3)}.group-detail-grid p{margin-top:6px;line-height:1.7;word-break:break-word}.more-count{display:inline-block;margin-left:7px;color:var(--brand);font-size:var(--fs-tiny)}
.pager{display:flex;align-items:center;justify-content:center;gap:14px;margin:20px 0}.pager span{font-size:var(--fs-meta);color:var(--ink-2)}.definition-disclosure{margin-top:18px;background:var(--paper-2)}.definition-disclosure>summary{padding:12px 14px;color:var(--ink-2)}.definition-disclosure p{padding:0 14px 14px;color:var(--ink-2);line-height:1.8}

/* 客户池海搜索结果 */
.customer-search{display:flex;gap:10px;padding:16px;background:var(--paper-2);border:1px solid var(--line-soft);border-radius:12px}.customer-search .input{flex:1;max-width:none}.search-hint{display:flex;gap:10px;align-items:flex-start;margin:10px 2px 20px;color:var(--ink-2);font-size:var(--fs-meta)}.search-hint span{flex:0 0 auto;color:var(--brand);font-weight:700}.result-heading{padding:6px 2px 12px}.result-heading span{color:var(--ink-3);font-size:var(--fs-meta)}
.customer-result-list{display:grid;gap:12px}.customer-result-card{border:1px solid var(--line);border-radius:12px;background:var(--paper);overflow:hidden}.customer-result-main{padding:18px}.result-title{display:flex;align-items:center;gap:10px}.result-title h3{font-family:serif;font-size:19px;margin:0}.source-badge{font-size:11px;font-weight:700;padding:3px 8px;border-radius:99px;background:#E8F3EF;color:var(--brand-strong)}.source-badge.is-group{background:#F2EEE4;color:#765F2F}.result-tags{margin-top:10px}.result-meta{display:flex;flex-wrap:wrap;gap:8px 22px;margin-top:14px}.result-meta span{display:flex;gap:7px;font-size:var(--fs-meta)}.result-meta i{font-style:normal;color:var(--ink-3)}.result-sub{color:var(--ink-2);font-size:var(--fs-meta);margin-top:10px}.result-disclosure{border:0;border-top:1px solid var(--line-soft);border-radius:0;background:var(--paper-2)}.result-disclosure>summary{padding:11px 18px;color:var(--ink-2);font-size:var(--fs-meta)}.result-disclosure>summary span{margin-left:auto;color:var(--ink-3);font-weight:500}.result-detail-grid{display:grid;gap:10px;padding:0 18px 16px}.result-detail-grid>div{padding:12px;border-radius:8px;background:var(--paper);border:1px solid var(--line-soft)}.result-detail-grid p{display:grid;grid-template-columns:42px 1fr;gap:8px;margin-top:7px;line-height:1.6;word-break:break-word}.result-detail-grid p>span{color:var(--ink-3)}.muted{color:var(--ink-3)}
.pending-onboarding{display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:18px}.pending-onboarding p{margin-top:5px}.pending-onboarding .action-row{justify-content:flex-end;flex-wrap:wrap}.entity-meta{display:flex;flex-wrap:wrap;gap:8px 24px;color:var(--ink-3);font-size:var(--fs-meta);margin-bottom:12px}.account-api-pull{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px}.account-api-pull p{margin-top:4px}.api-match-list{display:grid;gap:7px;margin-top:10px}.api-match-list button{display:flex;justify-content:space-between;gap:14px;text-align:left;border:1px solid var(--line);border-radius:8px;background:var(--paper);padding:10px 12px;cursor:pointer}.api-match-list button:hover{border-color:var(--brand)}.api-match-list span{color:var(--ink-3)}.notice-item.is-read{opacity:.62}.notice-item>small{display:block;color:var(--ink-3);margin-top:5px}
.result-sub{display:grid;grid-template-columns:42px 1fr;gap:8px}.result-sub i{font-style:normal;color:var(--ink-3)}

/* 客群编辑工作台：桌面侧栏，窄屏自动换行，无横向滚动 */
dialog#modal.modal-workspace{width:min(900px,96vw);max-height:min(90vh,880px)}
.modal-workspace .modal-body{padding:0}.editor-workspace{display:grid;grid-template-columns:190px minmax(0,1fr);min-height:560px}.editor-tabs{display:flex;flex-direction:column;gap:6px;overflow:visible;border:0;border-right:1px solid var(--line);margin:0;padding:18px 12px;background:var(--paper-2)}
.editor-tabs button{display:flex;flex-direction:column;align-items:flex-start;gap:3px;width:100%;white-space:normal;text-align:left;padding:11px 12px;border-radius:9px}.editor-tabs button span{font-weight:700}.editor-tabs button small{font-size:11px;font-weight:400;color:var(--ink-3)}.editor-tabs button.on{background:var(--ink);color:#fff}.editor-tabs button.on small{color:rgba(255,255,255,.68)}
.editor-panel{min-width:0;padding:24px 28px}.form-intro{padding:12px 14px;background:var(--paper-2);border-radius:9px;border-left:3px solid var(--brand)}.form-intro p{color:var(--ink-2);font-size:var(--fs-meta);margin-top:3px}
.form-disclosure{overflow:hidden}.form-disclosure>summary{padding:12px 14px}.form-disclosure>summary span{display:flex;flex-direction:column;gap:2px}.form-disclosure>summary small{color:var(--ink-3);font-weight:400}.form-disclosure>summary i,.entity-disclosure>summary i{font-style:normal;color:var(--brand);font-size:var(--fs-tiny)}.form-disclosure[open]>summary i,.entity-disclosure[open]>summary i{font-size:0}.form-disclosure[open]>summary i::after,.entity-disclosure[open]>summary i::after{content:'收起';font-size:var(--fs-tiny)}
.disclosure-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:4px 14px 14px;border-top:1px solid var(--line-soft);padding-top:14px}.disclosure-grid.one{grid-template-columns:1fr}.entity-list{display:grid;gap:10px}.entity-disclosure{overflow:hidden}.entity-disclosure>summary{padding:14px 16px}.entity-disclosure>summary span{display:flex;flex-direction:column;gap:3px}.entity-disclosure>summary small{color:var(--ink-3);font-weight:400}.entity-body{padding:0 16px 14px;border-top:1px solid var(--line-soft)}.entity-actions{display:flex;justify-content:flex-end;padding:10px 0}.empty-inline{padding:16px;color:var(--ink-3);text-align:center}.linked-section{margin-bottom:24px}

@media(max-width:760px){
  .group-page-head,.group-search-bar{align-items:flex-start;flex-direction:column}.group-search-bar .input,.group-search-bar .select{width:100%;max-width:none;flex:auto}.filter-grid,.group-metrics,.group-detail-grid,.spend-snapshot{grid-template-columns:1fr}.group-card-title{flex-direction:column}.group-card-actions{justify-content:flex-start}.customer-search{flex-wrap:wrap}.customer-search .input{flex-basis:100%}
  dialog#modal.modal-workspace{width:96vw}.editor-workspace{grid-template-columns:1fr;min-height:0}.editor-tabs{display:grid;grid-template-columns:1fr 1fr;border-right:0;border-bottom:1px solid var(--line);padding:12px}.editor-tabs button{min-width:0}.editor-panel{padding:20px}.disclosure-grid{grid-template-columns:1fr}.modal-workspace .modal-head{padding:18px 20px 14px}.qualification-paste-zone{grid-template-columns:56px minmax(0,1fr)}.qualification-paste-zone:not(.has-image){grid-template-columns:1fr}.qualification-paste-zone img{width:56px;height:56px}.qualification-paste-zone .btn{grid-column:1/-1;width:100%}.linkage-summary{align-items:flex-start;flex-direction:column}.linkage-summary .btn{margin-left:0;width:100%}
}

/* 二代账户看板卡片 */
.ledger-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:14px;margin-top:10px}
.ledger-card{border:1px solid var(--line);border-radius:10px;padding:14px 16px;background:var(--paper);display:flex;flex-direction:column;gap:8px}
.ledger-card-head{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:15px}
.ledger-card-sub{color:var(--ink-2);font-size:12px}
.ledger-card-nums{display:flex;justify-content:space-between;gap:12px}
.ledger-card-nums>div{display:flex;flex-direction:column;gap:2px}
.ledger-card-nums span{font-size:12px;color:var(--ink-2)}
.ledger-card-nums b{font-size:17px}
.ledger-card .action-row{margin-top:2px}
@media(max-width:760px){.ledger-cards{grid-template-columns:1fr}}

/* Other ledger: customer-style cards and legible financial rows. */
.second-agent-cards{grid-template-columns:1fr;margin-top:18px}
#other-ledger-entries .business-table{table-layout:auto;min-width:960px}
#other-ledger-entries .business-table th:first-child{width:220px}
#other-ledger-entries .business-table th:nth-child(2){width:28%}
#other-ledger-entries .business-table td{vertical-align:top;word-break:normal;overflow-wrap:anywhere;padding:20px 18px}
#other-ledger-entries .business-table th:last-child{width:170px}
#other-ledger-entries .ledger-money{white-space:nowrap;min-width:155px}
#other-ledger-entries small{display:block;margin-top:8px}

.ledger-section>summary{display:flex;align-items:center;justify-content:space-between;gap:20px;cursor:pointer;list-style:none}.ledger-section>summary h2{margin:0}.ledger-section>summary>span{color:var(--ink-3);font-size:14px}.ledger-section-body{padding-top:24px}.ledger-filter{display:flex;align-items:end;flex-wrap:wrap;gap:10px;margin:18px 0}.ledger-filter>.input{flex:1 1 260px}.ledger-filter>.select{width:auto;max-width:340px}.ledger-filter label{font-size:13px;color:var(--ink-3)}.second-agent-cards [hidden]{display:none!important}
/* 经营中台顶部导航 */
@media(min-width:761px){
  .app{display:block}
  .aside{width:100%;height:84px;padding:0 40px;position:sticky;top:0;z-index:180;display:flex;flex-direction:row;align-items:center;border-right:0;border-bottom:1px solid var(--line);box-shadow:0 4px 16px rgba(20,35,64,.05)}
  .aside .brand{padding:0 52px 0 0;gap:16px;flex:0 0 auto}
  .aside .brand-logo{width:52px;height:52px}
  .aside .brand-copy{display:flex;align-items:baseline;gap:12px;white-space:nowrap}
  body.side-collapsed .aside .brand-copy{display:flex}
  .aside .brand b,.aside .brand small{display:inline;margin:0;font-family:serif;font-size:21px;line-height:1.2;font-weight:900;letter-spacing:1px;color:var(--ink)}
  #side-collapse{position:static;transform:none;width:auto;height:44px;padding:0 18px;font-size:15px;font-weight:700;border-radius:9px;white-space:nowrap}
  .mega-top-tabs{display:flex;align-items:center;gap:8px;margin-left:18px}
  .mega-top-tabs button{border:0;background:transparent;border-radius:8px;padding:11px 17px;font-size:15px;font-weight:600;line-height:1.3;color:var(--ink-2);cursor:pointer;white-space:nowrap}
  .mega-top-tabs button:hover,.mega-top-tabs button[aria-expanded="true"],#side-collapse[aria-expanded="true"]{background:#ecf3ff;color:#1c52ad}
  .side-drawer{position:absolute;top:84px;left:50%;right:auto;transform:translateX(-50%);width:min(1120px,calc(100vw - 48px));display:none;max-height:min(75vh,700px);overflow:auto;min-height:0;padding:24px 32px 18px;background:var(--paper);box-shadow:0 18px 35px rgba(15,30,62,.16);border:1px solid var(--line);border-top:0;border-radius:0 0 12px 12px;flex-direction:column}
  body.mega-nav-open .side-drawer{display:flex}
  .aside nav{width:100%;margin:auto;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));align-items:start;gap:20px;padding:0;overflow:visible}
  .mega-group{display:flex;flex-direction:column;gap:3px;min-width:0}
  .mega-group-hidden{display:none!important}
  .aside nav .nav-sep{font-size:13px;color:var(--ink);padding:2px 11px 15px;letter-spacing:.4px}
  .aside nav .nav-sep::after{display:none}
  .aside nav a{font-size:14px;padding:10px 12px;border-radius:7px;white-space:normal}
  .aside nav a.now{background:#eaf1ff;color:#174ca8}
  .aside nav a.now::before{display:none}
  .aside-foot{display:flex;gap:18px;align-items:center;width:100%;margin:18px auto 0;padding:14px 10px 0;border-top:1px solid var(--line)}
  .aside-foot b{display:inline;margin:0}
  .aside-foot button{margin:0}
  body.mega-nav-open:not(.mega-nav-all) .side-drawer{left:var(--mega-popover-left,16px);transform:none;width:var(--mega-popover-width,400px);padding:20px 24px 24px;max-height:min(72vh,620px)}
  body.mega-nav-open:not(.mega-nav-all) .aside nav{width:min(320px,100%);margin:0 auto;grid-template-columns:1fr;gap:0}
  body.mega-nav-open:not(.mega-nav-all) .aside nav .nav-sep{padding:2px 12px 9px}
  body.mega-nav-open:not(.mega-nav-all) .aside nav a{padding:10px 12px}
  body.mega-nav-open:not(.mega-nav-all) .aside-foot{display:none}
  main{max-width:1580px;padding:0 42px}
}
@media(min-width:761px) and (max-width:980px){
  .aside{padding:0 20px}
  .aside .brand{padding-right:18px;gap:10px}
  .aside .brand-logo{width:42px;height:42px}
  .aside .brand-copy{gap:7px}
  .aside .brand b,.aside .brand small{font-size:16px;letter-spacing:.5px}
  .mega-top-tabs{gap:0;margin-left:4px}
  .mega-top-tabs button{padding:9px 8px;font-size:13px}
}
@media(max-width:760px){
  .mega-top-tabs{display:none}.mega-group{display:contents}
  .aside .brand{gap:10px}
  .aside .brand-logo,body.side-collapsed .aside .brand-logo{width:36px;height:36px}
  .aside .brand-copy{display:flex;align-items:baseline;gap:7px;white-space:nowrap}
  .aside .brand b,.aside .brand small{display:inline;margin:0;font-family:serif;font-size:16px;line-height:1.2;font-weight:900;letter-spacing:.5px;color:var(--ink)}
}
.unified-filter{position:relative;display:flex;align-items:center;gap:10px;margin:14px 0 10px;padding:10px 12px;border:1px solid #dce5f3;border-radius:12px;background:#fff;box-shadow:0 2px 10px rgba(24,59,110,.04)}
.unified-filter>.input{flex:1;min-width:180px;background:#f7f9fc}
.unified-filter-more{white-space:nowrap}
.unified-filter-panel{position:absolute;top:calc(100% + 6px);left:0;z-index:75;width:min(940px,calc(100vw - 50px));max-height:min(70vh,620px);overflow:auto;padding:20px;border:1px solid #dce5f3;border-radius:14px;background:#fff;box-shadow:0 18px 40px rgba(18,41,80,.2)}
.unified-filter-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}
.unified-filter-grid label{display:flex;flex-direction:column;gap:7px;color:var(--ink-2);font-size:13px;font-weight:600;min-width:0}
.unified-filter-grid .input{width:100%;min-width:0}
.unified-filter-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
.record-search-hidden{display:none!important}
.record-page-hidden{display:none!important}
.record-actions-menu{display:inline-block;vertical-align:top}
.record-actions-menu>summary{list-style:none;cursor:pointer;white-space:nowrap}
.record-actions-menu>summary::-webkit-details-marker{display:none}
.record-actions-menu:not([open])>.record-actions-items{display:none}
.record-actions-items{position:fixed;z-index:180;display:flex;flex-direction:column;gap:7px;width:220px;max-height:calc(100vh - 24px);overflow:auto;padding:12px;border:1px solid #dce5f3;border-radius:12px;background:#fff;box-shadow:0 12px 32px rgba(18,41,80,.18)}
.record-actions-items .btn{width:100%;margin:0!important;text-align:left;justify-content:flex-start}
.account-funds-tabs{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 22px;padding-bottom:14px;border-bottom:1px solid var(--line)}
.account-funds-tabs button{min-width:130px;min-height:42px}
.account-funds-head .block-title{margin:0}
.record-pager{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:12px;margin:16px 0 24px;font-size:14px;color:var(--ink-2)}
.record-pager label{display:flex;align-items:center;gap:8px;margin-right:auto;white-space:nowrap}
.record-pager .select{width:auto;padding:7px 28px 7px 10px}
.record-page-info{white-space:nowrap}
.record-filter-empty{text-align:center;padding:24px;border-bottom:1px solid var(--line)}
@media(max-width:760px){.unified-filter{flex-wrap:wrap}.unified-filter>.input{flex-basis:100%}.unified-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.unified-filter-grid{grid-template-columns:1fr}}
.customer-combined-filter{position:relative;display:block;padding:12px;border:1px solid #dce5f3;border-radius:12px;background:#fff}
.customer-filter-head{display:flex;align-items:center;gap:10px}
.customer-filter-head>.input{flex:1;min-width:180px}
.customer-filter-panel{position:absolute;top:calc(100% + 6px);left:0;z-index:80;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;width:min(940px,calc(100vw - 50px));max-height:min(70vh,620px);overflow:auto;padding:18px;border:1px solid #dce5f3;border-radius:12px;background:#fff;box-shadow:0 18px 40px rgba(18,41,80,.2)}
.customer-filter-panel label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink-2)}
.customer-filter-panel .input{width:100%;min-width:0}
.customer-filter-panel p{grid-column:1/-1;color:var(--ink-3);font-size:12px;margin:0}
@media(max-width:760px){.customer-filter-head{flex-wrap:wrap}.customer-filter-head>.input{flex-basis:100%}.customer-filter-panel{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.customer-filter-panel{grid-template-columns:1fr}}
.native-combined-filter{position:relative;display:block!important;padding:10px 12px!important;margin:12px 0!important;border:1px solid #dce5f3;border-radius:12px;background:#fff}
.native-filter-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.native-filter-top>.input,.native-filter-top>.field{flex:1 1 240px;max-width:600px}
.native-filter-panel{position:absolute;top:calc(100% + 6px);left:0;z-index:76;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;width:min(940px,calc(100vw - 50px));max-height:min(70vh,620px);overflow:auto;padding:20px;border:1px solid #dce5f3;border-radius:14px;background:#fff;box-shadow:0 18px 40px rgba(18,41,80,.2)}
.native-filter-panel>*{min-width:0;max-width:none!important}
.native-filter-panel .input,.native-filter-panel .select{width:100%;max-width:none!important}
@media(max-width:760px){.native-filter-panel{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:480px){.native-filter-panel{grid-template-columns:1fr}}
/* Meeting record controls. */
.module-toggle{display:flex;gap:10px;align-items:center;border:0;background:transparent;color:inherit;font:inherit;font-weight:inherit;padding:0;cursor:pointer;text-align:left}
.module-toggle::before{content:'▾';font-size:15px;color:var(--primary,#2157e6)}
.module-toggle[aria-expanded="false"]::before{content:'▸'}
.record-module-body[hidden]{display:none!important}
[data-record-section]{margin:20px 0;padding:16px 0}
.record-download{margin:8px 0 10px}

/* Notices live inside the native dialog top layer. */
.dialog-notice{position:sticky;top:0;z-index:50;margin:12px;padding:14px 18px;border-radius:10px;box-shadow:0 3px 12px #0002}

/* Sales statistics: numeric headings and values share their column alignment. */
#salesPerfMvp .business-table .r{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}

#salesPerfMvp .business-table th{white-space:nowrap}
.sp-column-label{vertical-align:middle}
.sp-sort-controls{display:inline-flex;flex-direction:column;vertical-align:middle;margin-left:5px;gap:1px}
#salesPerfMvp .sp-sort-button{display:block;width:20px;height:14px;min-width:0;min-height:0;padding:0;border:0;border-radius:3px;background:transparent!important;color:#9aa6b9!important;font-size:9px;line-height:14px;cursor:pointer;box-shadow:none;transform:none}
#salesPerfMvp .sp-sort-button:hover,#salesPerfMvp .sp-sort-button:focus-visible{background:#e6edff!important;color:#174bd4!important;outline:1px solid #9bb5ff;outline-offset:0}
#salesPerfMvp .sp-sort-button.is-active{background:#e6edff!important;color:#174bd4!important}

/* Shared cursor semantics, including navigation anchors handled by JavaScript. */
body :where(button,a[href],a[data-page],[onclick],[role="button"],summary,select,input[type="button"],input[type="submit"],input[type="reset"],input[type="checkbox"],input[type="radio"],input[type="file"],input[type="color"],input[type="range"],label:has(input[type="checkbox"],input[type="radio"])){cursor:pointer!important}
body :where(input:not([type]),input[type="text"],input[type="search"],input[type="email"],input[type="password"],input[type="tel"],input[type="url"],input[type="number"],input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"],input[type="week"],textarea,[contenteditable="true"]){cursor:text!important}
body input[type="file"]::file-selector-button{cursor:inherit}
body :disabled,body [aria-disabled="true"],body [aria-disabled="true"] *,body label:has(input:disabled):not(:has(input:enabled)){cursor:default!important}
