/* One visual contract for the original role workbenches and finance. */
:root {
  --ops-brand:#C0231F; --ops-brand-soft:#FBEFEE; --ops-ink:#1F2329;
  --ops-text:#4E5969; --ops-muted:#626B77; --ops-line:#E5E6EB;
  --ops-canvas:#F5F6F8; --ops-surface:#FFFFFF; --ops-subtle:#F8F9FB;
  --ops-nav:#16181D; --ops-nav-text:#CDD2DA; --ops-nav-hover:#292C33;
  --ops-success:#15803D; --ops-warning:#9A600D;
  --ops-radius:8px; --ops-card-radius:12px; --ops-card-shadow:0 1px 2px rgba(23,25,31,.05);
  --ops-control:34px; --ops-rail:160px;
  --ops-role-height:64px; --ops-header-height:52px;
  --ops-font:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
}
html:has(body.ops-ui-specialist),body.ops-ui-specialist {min-width:320px}
html body {
  --brand:var(--ops-brand); --red:var(--ops-brand); --danger:var(--ops-brand);
  --paper:var(--ops-canvas); --canvas:var(--ops-canvas); --bg-app:var(--ops-canvas);
  --surface:var(--ops-surface); --surface-soft:var(--ops-subtle);
  --paper-deep:#F0F1F3; --ink:var(--ops-ink); --text:var(--ops-ink);
  --ink-2:var(--ops-text); --ink-3:var(--ops-muted); --muted:var(--ops-muted);
  --text-2:var(--ops-text); --text-3:var(--ops-muted); --line:var(--ops-line);
  --amber:var(--ops-warning); --green:var(--ops-success); --font:var(--ops-font);
  margin:0; font-family:var(--ops-font); font-size:13px; color:var(--ops-ink);
  background:var(--ops-canvas); font-variant-numeric:tabular-nums;
  -webkit-font-smoothing:antialiased;
}
body button,body input,body select,body textarea {font-family:var(--ops-font)}
body button:focus-visible,body a:focus-visible,body select:focus-visible,
body input:focus-visible,body textarea:focus-visible {outline:2px solid var(--ops-brand);outline-offset:3px}
body .ops-role-preview-bar {height:var(--ops-role-height);padding:9px 12px;background:var(--ops-canvas);z-index:100}
body .ops-role-preview-surface {height:46px;border:1px solid var(--ops-line);border-radius:8px;box-shadow:none}
body .ops-role-tabs-label {color:var(--ops-muted);letter-spacing:0}
body .ops-role-tab {font-size:13px;font-weight:600;border-radius:6px;text-decoration:none}
body .ops-role-tab.on {color:var(--ops-brand);background:var(--ops-brand-soft);border-color:#EDC8C5}
body .ops-role-tabs-scroll {scrollbar-width:none}
body .ops-public-readonly-badge {font-size:11px;color:var(--ops-muted);background:var(--ops-subtle);border-radius:6px}
/* Same navigation width, type, active state and icon size in all seven roles. */
body.ops-ui-react .cc-shell>.cc-rail,body.ops-ui-specialist .module-rail,body.ops-ui-finance .sidebar {
  width:var(--ops-rail);min-width:var(--ops-rail);background:var(--ops-nav);color:var(--ops-nav-text);
  border-right:0;box-sizing:border-box;padding:14px 10px;
  top:var(--ops-role-height);height:calc(100vh - var(--ops-role-height));
  display:flex;flex-direction:column;align-items:stretch;gap:6px;
}
body.ops-ui-react .cc-rail-brand {margin:0 0 14px 10px;width:30px;height:30px;border-radius:8px;background:var(--ops-brand)}
body .module-rail__brand{display:flex;align-items:center;justify-content:center;margin:0 0 14px 10px;width:30px;height:30px;border-radius:8px;background:var(--ops-brand);color:#FFF;font-size:14px;font-weight:700;line-height:1;text-decoration:none;flex:none}
body .module-rail__brand:hover{opacity:.88}
body.ops-ui-react .cc-rail-divider {width:100%;background:rgba(255,255,255,.08);margin:8px 0}
body.ops-ui-react .cc-rail-item,body.ops-ui-specialist .module-rail__item,body.ops-ui-finance .sidebar button {
  display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:9px;
  width:100%;min-height:40px;height:40px;padding:0 10px;flex:none;
  border:1px solid transparent;border-radius:6px;background:transparent;color:var(--ops-nav-text);
  font-size:13px;font-weight:500;line-height:1.3;box-shadow:none;
}
body.ops-ui-react .cc-rail-item-label {display:inline;font-size:13px;font-weight:500;color:inherit;line-height:1.3}
body.ops-ui-react .cc-rail-item svg,body .module-rail__item svg {width:18px;height:18px;flex:none}
body.ops-ui-react .cc-rail-item:hover,body.ops-ui-specialist .module-rail__item:hover,body.ops-ui-finance .sidebar button:hover {background:rgba(255,255,255,.06);color:#FFF;border-color:transparent}
body.ops-ui-react .cc-rail-item.is-active,body.ops-ui-specialist .module-rail__item.is-active,body.ops-ui-finance .sidebar button.active {
  color:#FFF;background:rgba(255,255,255,.08);border-color:transparent;box-shadow:inset 2px 0 0 0 var(--role-accent,var(--ops-brand));font-weight:600;
}
body.ops-ui-react .cc-rail-item.is-active .cc-rail-item-label {color:#FFF}
body .module-rail__item.is-active::before {display:none}
body .module-rail__caption {padding:10px 12px 5px;color:#7D838E;font-size:11px;font-weight:500;letter-spacing:1.2px}
body.ops-ui-react .cc-rail-role,body .module-rail__identity {width:100%;color:#959BA6;border-color:rgba(255,255,255,.08);align-items:flex-start;padding:12px 10px 0;font-size:11px}
body .module-rail__identity{display:flex;align-items:center;gap:7px;margin-top:auto;border-top:1px solid rgba(255,255,255,.08)}
body.ops-ui-react .cc-rail-role>span {display:block;color:#959BA6}
body.ops-ui-react .cc-rail-avatar,body .module-rail__avatar {background:rgba(255,255,255,.08);border-color:transparent;color:#EFF1F4;width:28px;height:28px}
body .module-rail__avatar{display:grid;place-items:center;flex:0 0 28px;border-radius:50%;font-size:10px;font-weight:800}
body.ops-ui-react .cc-rail-item:focus-visible,body .module-rail__item:focus-visible,body .sidebar button:focus-visible {outline-color:var(--role-accent,var(--ops-brand));outline-offset:-2px}
/* Shared white page header, grey workspace, eight-pixel cards. */
body.ops-ui-react .cc-root,body.ops-ui-react .cc-shell {background:var(--ops-canvas);font-family:var(--ops-font)}
body.ops-ui-react .cc-topbar,body .finance-topbar,body.ops-ui-specialist .app-header {
  height:var(--ops-header-height);min-height:var(--ops-header-height);padding:0 16px;
  background:#FFF;border-bottom:1px solid var(--ops-line);box-shadow:none;
}
body.ops-ui-react .cc-brand-name,body .brand-lockup {font-size:14px;font-weight:650}
body.ops-ui-react .cc-brand-sub,body.ops-ui-react .cc-topbar-chip {color:var(--ops-muted);font-size:12px}
body .brand-mark,body.ops-ui-react .cc-brand-mark {width:28px;height:28px;border-radius:8px;box-shadow:none;background:var(--ops-brand);font:700 14px var(--ops-font);color:#FFF}
/* Same date readout badge in every role header. */
body .shell-pill,body .asof {display:inline-flex;align-items:center;min-height:26px;padding:0 10px;border:1px solid var(--ops-line);border-radius:999px;background:var(--ops-surface);color:var(--ops-muted);font-size:11px;font-weight:600;white-space:nowrap;box-shadow:none}
body.ops-ui-react .cc-canvas {border-color:var(--ops-line);border-radius:var(--ops-radius);box-shadow:none}
body.ops-ui-react .cc-card,body.ops-ui-react .cc-action-dock {border-color:var(--ops-line);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
body.ops-ui-react .wbv7 {--ink:var(--ops-ink);--sub:var(--ops-text);--faint:var(--ops-muted);--line:var(--ops-line);--bg:var(--ops-canvas);--card:#FFF;--red:var(--ops-brand);--green:var(--ops-success);--amber:var(--ops-warning);font-family:var(--ops-font)}
body.ops-ui-react .wbv7 .wrap {padding:16px 20px 48px;max-width:none}
body.ops-ui-react .wbv7 .card,body.ops-ui-react .wbv7 .qcard,body.ops-ui-react .wbv7 .aicard,body.ops-ui-react .wbv7 table {border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow);border-color:var(--ops-line)}
body.ops-ui-react .wbv7 .card .v {font-size:28px;font-weight:650}
body.ops-ui-react .wbv7 th,body.ops-ui-react .cc-table th {font-size:12px;color:var(--ops-text);background:var(--ops-subtle);letter-spacing:0}
body.ops-ui-react .wbv7 tr:hover td {background:var(--ops-subtle)}
body.ops-ui-react .wbv7 .btn,body.ops-ui-react .cc-btn,body.ops-ui-finance .button {min-height:34px;border-radius:6px;font-size:12px}
body.ops-ui-react .wbv7 .crumbbar {background:#FFF;border-color:var(--ops-line);font-size:12px;color:var(--ops-text)}
body.ops-ui-react .wbv7 .banner,body.ops-ui-react .dglv7 .dglv7-brief {background:#FFF;color:var(--ops-ink);border:1px solid var(--ops-line);border-left:3px solid var(--ops-brand);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
body.ops-ui-react .wbv7 .banner .bh,body.ops-ui-react .dglv7 .dglv7-brief h2 {color:var(--ops-ink);font-size:22px;font-weight:650;line-height:1.5}
body.ops-ui-react .wbv7 .banner .bh b,body.ops-ui-react .dglv7 .dglv7-brief h2 b {color:var(--ops-brand)}
body.ops-ui-react .wbv7 .banner .bk,body.ops-ui-react .wbv7 .banner .bs,body.ops-ui-react .dglv7 .dglv7-brief>p,body.ops-ui-react .dglv7 .dglv7-kicker,body.ops-ui-react .dglv7 .dglv7-provenance {color:var(--ops-muted);font-size:12px;border-color:var(--ops-line)}
body.ops-ui-react .dglv7 .dglv7-top-grid button {background:var(--ops-subtle);color:var(--ops-ink);border-color:var(--ops-line);border-radius:8px}
body.ops-ui-react .dglv7 .dglv7-top-grid button:hover {background:var(--ops-brand-soft);border-color:#EDC8C5}
body.ops-ui-react .dglv7 .dglv7-top-grid button>span,body.ops-ui-react .dglv7 .dglv7-top-grid small {color:var(--ops-muted);font-size:12px}
body.ops-ui-react .dglv7 .dglv7-top-grid button>span b {color:var(--ops-ink)}
body.ops-ui-react .dglv7 .dglv7-top-grid button>span i.red {color:var(--ops-brand);background:var(--ops-brand-soft)}
body.ops-ui-react .dglv7 .dglv7-top-grid button>span i.amber {color:var(--ops-warning);background:#FFF5E6}
/* The specialist's queue, analysis and follow-up retain their original columns. */
body.ops-ui-specialist .app,body.ops-ui-specialist .history-app {grid-template-columns:var(--ops-rail) 252px minmax(0,1fr)!important;grid-template-rows:52px minmax(0,1fr)!important;background:var(--ops-canvas)}
body.ops-ui-specialist .specialist-new-app {grid-template-columns:var(--ops-rail) minmax(0,1fr);grid-template-rows:52px minmax(0,1fr);background:var(--ops-canvas)}
body.ops-ui-specialist .module-rail {grid-column:1;grid-row:1/3;z-index:60}
body.ops-ui-specialist .app-header {grid-column:2/-1;grid-row:1;top:64px;grid-template-columns:auto minmax(0,1fr) auto;gap:20px}
body.ops-ui-specialist .case-rail {top:116px;height:calc(100vh - 116px);border-color:var(--ops-line)}
body.ops-ui-specialist .history-context-rail {top:116px;height:calc(100vh - 116px)}
body.ops-ui-specialist .page {max-width:none;width:calc(100% - 32px);margin:16px auto 48px}
body.ops-ui-specialist .workspace,body.ops-ui-specialist .history-workspace {background:var(--ops-canvas)}
body.ops-ui-specialist .surface,body.ops-ui-specialist .section,body.ops-ui-specialist .r6-section {border-color:var(--ops-line);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
body.ops-ui-specialist .ai-card {background:#FFF;color:var(--ops-ink);border:1px solid var(--ops-line);border-left:3px solid var(--ops-brand);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
body.ops-ui-specialist .ai-head,body.ops-ui-specialist .ai-evidence,body.ops-ui-specialist .ai-evidence>div {border-color:var(--ops-line)}
body.ops-ui-specialist .ai-body h2 {color:var(--ops-ink);font-size:22px;line-height:1.5}
body.ops-ui-specialist .ai-body p {color:var(--ops-text)}
body.ops-ui-specialist .ai-body strong,body.ops-ui-specialist .ai-body b {color:var(--ops-ink)}
body.ops-ui-specialist .ai-evidence {background:var(--ops-subtle);color:var(--ops-text)}
body.ops-ui-specialist .ai-evidence strong,body.ops-ui-specialist .ai-evidence b {color:var(--ops-ink)}
body.ops-ui-specialist :is(.app,.history-app,.specialist-new-app) .module-rail {top:64px;height:calc(100vh - 64px)}
body.ops-ui-specialist .brand-mark {box-shadow:none}
body.ops-ui-specialist .ai-brief:has(.r6-demo-analysis) {background:#FFF;color:var(--ops-ink);border:1px solid var(--ops-line);border-left:3px solid var(--ops-brand);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
body.ops-ui-specialist .ai-brief:has(.r6-demo-analysis) .ai-brief__top {background:#FFF;color:var(--ops-text);border-color:var(--ops-line)}
body.ops-ui-specialist .ai-brief__top .ai-label {color:var(--ops-brand)}
body.ops-ui-specialist .daily-hero {background:#FFF;color:var(--ops-ink);border:1px solid var(--ops-line);border-left:3px solid var(--ops-brand);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
body.ops-ui-specialist .daily-hero h2 {font-size:22px;line-height:1.5;font-weight:650}
body.ops-ui-specialist .daily-hero p,body.ops-ui-specialist .daily-hero__kicker,body.ops-ui-specialist .daily-hero__metric span {color:var(--ops-muted);font-size:12px}
body.ops-ui-specialist .daily-hero__boundary {color:var(--ops-warning);font-size:11px}
body.ops-ui-specialist .daily-hero__metric,body.ops-ui-specialist .daily-hero__metrics {border-color:var(--ops-line);background:var(--ops-subtle)}
body.ops-ui-specialist .history-view-tab.is-active {color:var(--ops-brand);background:var(--ops-brand-soft)}
body.ops-ui-specialist .ai-date {color:var(--ops-ink);background:#FFF;border-color:var(--ops-line);min-height:34px}
body.ops-ui-specialist .r6-demo-analysis,body.ops-ui-specialist .r6-demo-lead h2,body.ops-ui-specialist .r6-demo-module h3,body.ops-ui-specialist .r6-demo-checks b {color:var(--ops-ink)}
body.ops-ui-specialist .r6-demo-lead h2 {font-size:22px;line-height:1.45;font-weight:650}
body.ops-ui-specialist .r6-demo-lead h2::first-letter {color:inherit}
body.ops-ui-specialist .r6-demo-lead p,body.ops-ui-specialist .r6-demo-analysis .r6-demo-analysis,body.ops-ui-specialist .r6-demo-exclusions span,body.ops-ui-specialist .r6-demo-checks small {color:var(--ops-muted);font-size:12px}
body.ops-ui-specialist .r6-demo-grid,body.ops-ui-specialist .r6-demo-module {border-color:var(--ops-line)}
body.ops-ui-specialist .r6-demo-table td,body.ops-ui-specialist .r6-demo-table th {color:var(--ops-text);border-color:var(--ops-line);font-size:12px}
body.ops-ui-specialist .r6-demo-table td.is-negative,body.ops-ui-specialist .r6-demo-table th.is-negative {color:var(--ops-brand)}
body.ops-ui-specialist .r6-demo-table td.is-warn,body.ops-ui-specialist .r6-demo-table th.is-warn {color:var(--ops-warning)}
body.ops-ui-specialist .r6-demo-note {color:var(--ops-warning)!important;background:#FFF5E6;border-color:#EEDBC0;font-size:11px!important}
body.ops-ui-specialist .r6-demo-exclusions li,body.ops-ui-specialist .r6-demo-checks article {background:var(--ops-subtle);border-color:var(--ops-line)}
body.ops-ui-specialist .r6-demo-exclusions b {color:var(--ops-ink);font-size:12px}
body.ops-ui-specialist .r6-demo-checks article.is-primary {background:#FFF5E6;border-color:#EEDBC0}
body.ops-ui-specialist .r6-demo-checks p {color:var(--ops-text)!important;font-size:11px!important}
body.ops-ui-specialist .r6-demo-module h3>span,body.ops-ui-specialist .r6-demo-checks b i {color:var(--ops-brand);background:var(--ops-brand-soft)}
/* Finance follows the same shell and control scale. */
body.ops-ui-finance .sidebar {padding:14px 10px;bottom:auto;z-index:70}
body.ops-ui-finance .workspace-name {padding:10px 12px 5px;color:#7D838E;font-size:11px;font-weight:500;letter-spacing:1.2px;line-height:1.4}
body.ops-ui-finance .workspace-name span {display:none}
body.ops-ui-finance .sidebar nav,body.ops-ui-finance .side-bottom {padding:0}
body.ops-ui-finance .side-bottom {margin-top:auto}
body.ops-ui-finance .dataset-note {padding:12px 10px 0;line-height:1.6}
body.ops-ui-finance .finance-topbar {margin-left:var(--ops-rail);display:flex;align-items:center;gap:10px;position:sticky;top:64px;z-index:60}
body.ops-ui-finance .finance-topbar strong {font-size:14px;font-weight:650}
body.ops-ui-finance .finance-topbar small {font-size:12px;color:var(--ops-muted)}
body.ops-ui-finance #main {margin-left:var(--ops-rail);padding:16px 20px;min-height:calc(100vh - 116px)}
body.ops-ui-finance .page-heading {margin-bottom:16px;min-height:44px}
body.ops-ui-finance h1 {font-size:22px;font-weight:650;line-height:1.5}
body.ops-ui-finance .panel,body.ops-ui-finance .metrics,body.ops-ui-finance .filterbar,body.ops-ui-finance .operating-source {border-radius:var(--ops-card-radius);border-color:var(--ops-line);box-shadow:var(--ops-card-shadow)}
body.ops-ui-finance .panel-heading h2 {font-size:14px}
body.ops-ui-finance .panel-description,body.ops-ui-finance .legend,body.ops-ui-finance .panel-heading .subtle {font-size:11px}
body.ops-ui-finance .metric {padding:0 16px}
body.ops-ui-finance .metric-value {font-size:28px;font-weight:650}
body.ops-ui-finance .filterbar label {font-size:12px}
body.ops-ui-finance select {min-height:32px}
body.ops-ui-finance th {color:var(--ops-text);font-size:12px;background:var(--ops-subtle)}
/* Cards across all seven roles: one radius and one soft shadow.
   静态容器卡连边框一起统一;带选中/悬停态的交互卡只统一圆角,不动状态样式。 */
body.ops-ui-react .cc-canvas-block,
body.ops-ui-specialist .diagnosis-card,body.ops-ui-specialist .trend-panel,body.ops-ui-specialist .dossier,body.ops-ui-specialist .judgement-panel,
body.ops-ui-specialist .section-card,body.ops-ui-specialist .carry-card,body.ops-ui-specialist .archive-case,body.ops-ui-specialist .metric-strip {
  border-color:var(--ops-line);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow);
}
body.ops-ui-react .cc-account-card,
body.ops-ui-specialist .hypothesis-card,body.ops-ui-specialist .review-ai-card,body.ops-ui-specialist .dossier-card,
body.ops-ui-specialist .review-impact-card,body.ops-ui-specialist .review-risk-card,
body.ops-ui-specialist .bawang-card,body.ops-ui-specialist .offline-panel {border-radius:var(--ops-card-radius)}
/* 专员门店详情卡(dsv7)并入统一卡片语言:圆角+浅阴影;风险/可疑态的有色边线不动。 */
body.ops-ui-react .dsv7-diag,body.ops-ui-react .dsv7-trend2,body.ops-ui-react .dsv7-reviewspot,body.ops-ui-react .dsv7-dossier,body.ops-ui-react .dsv7-metric,body.ops-ui-react .dsv7-platforms>div,body.ops-ui-react .dsv7-tile {border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
/* Keep all role navigation available at narrower widths. */
@media(min-width:701px){
  body.ops-ui-specialist .app>.case-rail {grid-column:2!important;grid-row:2!important;position:sticky}
  body.ops-ui-specialist .case-list {display:grid;overflow-x:hidden;overflow-y:auto}
  body.ops-ui-specialist .case-button {min-width:0}
  body.ops-ui-specialist .app>.workspace {grid-column:3!important;grid-row:2!important}
}
@media(max-width:1100px) and (min-width:701px){
  :root{--ops-rail:84px}
  body.ops-ui-react .cc-shell>.cc-rail,body.ops-ui-specialist .module-rail,body.ops-ui-finance .sidebar{padding:12px 6px}
  body.ops-ui-react .cc-rail-item,body.ops-ui-specialist .module-rail__item,body.ops-ui-finance .sidebar button{height:58px;min-height:58px;flex-direction:column;justify-content:center;gap:5px;padding:6px 2px;font-size:11px}
  body.ops-ui-react .cc-rail-item-label{font-size:11px}
  body.ops-ui-finance .workspace-name{font-size:12px;padding:0 0 10px;text-align:center}
  body.ops-ui-finance .dataset-note,body .module-rail__caption{display:none}
  body.ops-ui-specialist .app,body.ops-ui-specialist .history-app{grid-template-columns:84px 216px minmax(0,1fr)!important}
  body.ops-ui-specialist .app-header .header-context{display:none}
  body.ops-ui-specialist .app-header{grid-template-columns:1fr auto}
}
@media(max-width:700px){
  body .ops-role-preview-bar{height:64px;padding:7px 8px}
  body .ops-role-preview-surface{height:50px}
  body .ops-role-tabs-label,body .ops-public-readonly-badge{display:none}
  body .ops-role-tab{min-height:42px;padding:10px}
  body.ops-ui-react .cc-shell{display:flex;flex-direction:column}
  body.ops-ui-react .cc-shell>.cc-rail,body.ops-ui-specialist .module-rail,body.ops-ui-finance .sidebar{position:sticky;top:64px;width:100%;min-width:0;height:52px;min-height:52px;flex-direction:row;align-items:center;padding:5px 8px;gap:5px;overflow-x:auto;z-index:90;border-right:0}
  body.ops-ui-react .cc-shell>.cc-rail,body.ops-ui-specialist .module-rail,body.ops-ui-finance .sidebar{overflow-y:hidden;scrollbar-width:none}
  body.ops-ui-react .cc-rail-brand,body.ops-ui-react .cc-rail-divider,body.ops-ui-react .cc-rail-spacer,body.ops-ui-react .cc-rail-role,body .module-rail__brand,body .module-rail__caption,body .module-rail__identity,body.ops-ui-finance .workspace-name,body.ops-ui-finance .side-bottom{display:none}
  body.ops-ui-react .cc-rail-item,body.ops-ui-specialist .module-rail__item,body.ops-ui-finance .sidebar button{width:auto;min-width:max-content;height:40px;min-height:40px;flex-direction:row;font-size:12px;padding:0 10px;gap:6px}
  body.ops-ui-react .cc-rail-item-label{font-size:12px;display:inline}
  body.ops-ui-react .cc-rail-item svg,body .module-rail__item svg{width:16px;height:16px}
  body.ops-ui-react .cc-shell>.cc-root{width:100%}
  body.ops-ui-react .ops-role-preview-workspace .cc-topbar-stack{top:116px}
  body.ops-ui-specialist .app,body.ops-ui-specialist .history-app{grid-template-columns:minmax(0,1fr)!important;grid-template-rows:52px 52px auto minmax(0,1fr)!important}
  body.ops-ui-specialist .specialist-new-app{grid-template-columns:minmax(0,1fr);grid-template-rows:52px 52px minmax(0,1fr)}
  body.ops-ui-specialist .module-rail{grid-column:1;grid-row:1}
  body.ops-ui-specialist :is(.app,.history-app,.specialist-new-app) .module-rail{height:52px}
  body.ops-ui-specialist .app-header{grid-column:1/-1;grid-row:2;top:116px;grid-template-columns:1fr auto;padding:0 12px}
  body.ops-ui-specialist .header-context{display:none}
  body.ops-ui-specialist .case-rail{grid-column:1!important;grid-row:3!important;position:static;height:auto}
  body.ops-ui-specialist .ops-role-preview-bar+.app .case-rail {height:auto;min-height:0;position:static}
  body.ops-ui-specialist .history-context-rail{grid-column:1;grid-row:3;position:static;height:auto;max-height:300px;overflow:auto}
  body.ops-ui-specialist .history-page-head,body.ops-ui-specialist .archive-toolbar{flex-wrap:wrap;gap:12px}
  body.ops-ui-specialist .history-workspace{padding:14px 12px;overflow:hidden}
  body.ops-ui-specialist .history-view-tabs{max-width:100%;overflow:auto}
  body.ops-ui-specialist .workspace,body.ops-ui-specialist .history-workspace{grid-column:1!important;grid-row:4!important}
  body.ops-ui-specialist .specialist-new-workspace{grid-column:1;grid-row:3}
  body.ops-ui-specialist .page{width:100%;margin-top:12px}
  body.ops-ui-finance .sidebar nav{display:flex;gap:5px;height:40px;overflow:visible;flex:none}
  body.ops-ui-finance .sidebar .icon{display:none}
  body.ops-ui-finance .finance-topbar{margin-left:0;top:116px;padding:0 12px}
  body.ops-ui-finance #main{margin-left:0;padding:14px 12px}
  body.ops-ui-finance .metric{padding:0 12px}
  body.ops-ui-finance .metric-value{font-size:24px}
  body.ops-ui-react .wbv7 .wrap{padding:12px}
}
@media(prefers-reduced-motion:reduce){body *,body *::before,body *::after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}

/* Collapsed navigation: one body class narrows every role rail to icons. */
body.ops-rail-mini{--ops-rail:64px}
body.ops-rail-mini .cc-rail-brand,body.ops-rail-mini .module-rail__brand{margin-left:0;align-self:center}
body.ops-rail-mini .cc-rail-item-label{display:none}
body.ops-rail-mini .cc-rail-item,body.ops-rail-mini .module-rail__item,body.ops-rail-mini .sidebar button{justify-content:center;padding:0;font-size:0;gap:0}
body.ops-rail-mini .cc-rail-item svg,body.ops-rail-mini .module-rail__item svg{width:18px;height:18px}
body.ops-rail-mini .module-rail__caption,body.ops-rail-mini .workspace-name,body.ops-rail-mini .dataset-note{display:none}
body.ops-rail-mini .module-rail__identity span:last-child,body.ops-rail-mini .cc-rail-role>span{display:none}
body.ops-rail-mini .module-rail__identity,body.ops-rail-mini .cc-rail-role{justify-content:center;padding:12px 0 0;width:auto;align-self:center}

/* ===== 表现层增强(不动内容与密度):微交互 / 图表描绘 / AI 卡高光 ===== */
/* 导航条目状态过渡:激活线与底色淡入淡出。 */
body.ops-ui-react .cc-rail-item,body.ops-ui-specialist .module-rail__item,body.ops-ui-finance .sidebar button {
  transition:background .15s ease,color .15s ease,box-shadow .18s ease;
}
/* 卡片 hover:浮起 + 阴影加深 + 边线提亮(仅静态容器卡,精确指针设备)。 */
@media (hover:hover) {
  body.ops-ui-react .cc-canvas-block,body.ops-ui-react .cc-card,body.ops-ui-react .wbv7 .card,body.ops-ui-react .wbv7 .qcard,
  body.ops-ui-specialist .diagnosis-card,body.ops-ui-specialist .trend-panel,body.ops-ui-specialist .dossier,
  body.ops-ui-specialist .section-card,body.ops-ui-specialist .carry-card,
  body.ops-ui-finance .panel,body.ops-ui-finance .metrics,body.ops-ui-finance .operating-source {
    transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
  }
  body.ops-ui-react .cc-canvas-block:hover,body.ops-ui-react .cc-card:hover,body.ops-ui-react .wbv7 .card:hover,body.ops-ui-react .wbv7 .qcard:hover,
  body.ops-ui-specialist .diagnosis-card:hover,body.ops-ui-specialist .trend-panel:hover,body.ops-ui-specialist .dossier:hover,
  body.ops-ui-specialist .section-card:hover,body.ops-ui-specialist .carry-card:hover,
  body.ops-ui-finance .panel:hover,body.ops-ui-finance .metrics:hover,body.ops-ui-finance .operating-source:hover {
    transform:translateY(-2px);box-shadow:0 6px 16px rgba(23,25,31,.08);border-color:#D8DAE0;
  }
}
/* 财务趋势图:进入/重绘时主线描绘、面积与数据点随后淡入;recharts 自带动画,不重复处理。 */
@keyframes opsChartDraw {to {stroke-dashoffset:0}}
@keyframes opsChartFade {to {opacity:1}}
body.ops-ui-finance .chart-wrap path[stroke]:not([stroke-dasharray]) {stroke-dasharray:2000;stroke-dashoffset:2000;animation:opsChartDraw .9s ease-out forwards}
body.ops-ui-finance .chart-wrap path[fill]:not([fill="none"]) {opacity:0;animation:opsChartFade .7s .25s ease-out forwards}
body.ops-ui-finance .chart-wrap circle {opacity:0;animation:opsChartFade .5s .5s ease-out forwards}
/* 全网健康结构条:3.2s 一次的微光扫过,提示它是实时结构而非装饰。 */
body.ops-ui-react .cc-tier-bar {position:relative}
body.ops-ui-react .cc-tier-bar::after {
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(105deg,transparent 42%,rgba(255,255,255,.38) 50%,transparent 58%);
  transform:translateX(-100%);animation:opsShimmer 3.2s ease-in-out infinite;
}
@keyframes opsShimmer {0% {transform:translateX(-100%)} 45%,100% {transform:translateX(100%)}}
/* AI 产出卡:缓慢流动的渐变描边,一眼可辨"这是 AI 生成";不支持 @property 时退化为静态描边。 */
@property --ops-ai-angle {syntax:"<angle>";inherits:false;initial-value:0deg}
@keyframes opsAiSpin {to {--ops-ai-angle:360deg}}
body.ops-ui-react .ai-signature-card,body.ops-ui-react .wbv7 .aicard,body.ops-ui-react .dglv7 .dglv7-brief,
body.ops-ui-react .dsv7-aicard,
body.ops-ui-specialist .ai-card,body.ops-ui-specialist .ai-brief:has(.r6-demo-analysis) {position:relative}
body.ops-ui-react .dsv7-aicard {background:#FFF;border-color:var(--ops-line);border-radius:var(--ops-card-radius);box-shadow:var(--ops-card-shadow)}
body.ops-ui-react .ai-signature-card::before,body.ops-ui-react .wbv7 .aicard::before,body.ops-ui-react .dglv7 .dglv7-brief::before,
body.ops-ui-react .dsv7-aicard::before,
body.ops-ui-specialist .ai-card::before,body.ops-ui-specialist .ai-brief:has(.r6-demo-analysis)::before {
  content:"";position:absolute;inset:-1px;border-radius:calc(var(--ops-card-radius) + 1px);padding:1.5px;pointer-events:none;
  background:conic-gradient(from var(--ops-ai-angle),rgba(192,35,31,.55),rgba(194,87,10,.35),rgba(192,35,31,.12) 40%,rgba(192,35,31,.55));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;
  mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;
  animation:opsAiSpin 6s linear infinite;
}
/* 进度条进场生长:宽度从 0 长到内联目标值。 */
@keyframes opsBarGrow {from {width:0}}
body.ops-ui-react .prog>i,body.ops-ui-react .cc-tier-seg-red,body.ops-ui-react .cc-tier-seg-amber,body.ops-ui-react .cc-tier-seg-green,
body.ops-ui-finance .rank-fill,body.ops-ui-finance .stacked-track span {animation:opsBarGrow .7s cubic-bezier(.2,0,0,1) both}
/* 行 hover 预览卡(shared/HoverPeek.tsx;pointer-events:none,不拦截点击)。 */
@keyframes opsPeekIn {from {opacity:0;transform:translateY(4px)}}
body .ops-peek {position:fixed;z-index:1200;width:264px;background:#FFF;border:1px solid var(--ops-line);border-radius:12px;box-shadow:0 12px 32px rgba(23,25,31,.14);padding:12px 14px;pointer-events:none;animation:opsPeekIn .15s ease-out}
body .ops-peek-title {font-size:13px;font-weight:650;color:var(--ops-ink)}
body .ops-peek-sub {font-size:11px;color:var(--ops-muted);margin-top:2px}
body .ops-peek-lines {margin-top:8px;display:grid;gap:4px}
body .ops-peek-line {display:flex;justify-content:space-between;font-size:11.5px;color:var(--ops-muted)}
body .ops-peek-line b {color:var(--ops-ink);font-weight:600}
body .ops-peek-line.red b {color:var(--ops-brand)}
body .ops-peek-line.amber b {color:var(--ops-warning)}
body .ops-peek-line.green b {color:var(--ops-success)}
body .ops-peek-note {margin-top:8px;padding-top:8px;border-top:1px solid var(--ops-line);font-size:11px;color:var(--ops-muted);line-height:1.6}
@media (prefers-reduced-motion:reduce) {
  body.ops-ui-react .cc-tier-bar::after,
  body.ops-ui-react .ai-signature-card::before,body.ops-ui-react .wbv7 .aicard::before,body.ops-ui-react .dglv7 .dglv7-brief::before,
  body.ops-ui-react .dsv7-aicard::before,
  body.ops-ui-specialist .ai-card::before,body.ops-ui-specialist .ai-brief:has(.r6-demo-analysis)::before {animation:none!important;display:none}
}

/* Keep navigation on screen and reveal complete pages without a second fade-in. */
html {background:var(--ops-canvas,#F5F6F8);scrollbar-gutter:stable}
body.ops-ui-react .v7-fade-in,body.ops-ui-react .v7-level-in {animation:none!important}
/* Cross-document snapshots intercept input even after the next DOM is ready.
   Keep the existing HTML/React loading skeletons as the visible transition. */
@view-transition {navigation:none}

/* Snapshot disclosure stays visible without competing with role tabs. */
body .ops-demo-disclosure {display:flex;flex-direction:column;align-items:flex-end;gap:1px;flex:none;padding:0 10px;line-height:15px}
body .ops-demo-disclosure .ops-public-readonly-badge {margin:0;padding:0 5px;font-size:10px;line-height:15px}
body .ops-demo-snapshot-notice {font-size:10px;color:var(--ops-muted);white-space:nowrap}
body.ops-ui-react .v7-skel-bar {background:#E5E6EB;border-radius:4px;animation:v7SkelPulse 1.4s ease-in-out infinite}
@keyframes v7SkelPulse {0%,100%{opacity:1}50%{opacity:.5}}
@media(max-width:1100px){body .ops-role-preview-surface{flex-wrap:wrap;height:50px}body .ops-role-preview-switcher,body .ops-role-preview-surface>.ops-role-tabs{height:30px;flex:1 1 100%;min-width:0}body .ops-role-tabs{padding-top:0;padding-bottom:0}body .ops-role-tab{min-height:26px;padding:4px 10px}body .ops-demo-disclosure{height:17px;flex-direction:row;align-items:center;gap:8px;padding:0 10px}body .ops-demo-disclosure .ops-public-readonly-badge{display:inline}body .ops-demo-snapshot-notice{font-size:9px}}
@media(prefers-reduced-motion:reduce){body.ops-ui-react .v7-skel-bar{animation:none}}

/* Keep a stable, data-free workspace visible while code or authorization loads. */
body.ops-ui-react .ops-workspace-loading{display:grid;grid-template-columns:160px minmax(0,1fr);min-height:calc(100vh - 64px);background:var(--ops-canvas,#F5F6F8);color:var(--ops-ink,#1D2129)}
body.ops-ui-react .ops-loading-rail{background:#17181c;padding:20px 14px;display:flex;flex-direction:column;gap:24px}
body.ops-ui-react .ops-loading-brand{width:32px;height:32px;border-radius:6px;background:#c92026;color:#fff;display:grid;place-items:center;font-size:16px;font-weight:700}
body.ops-ui-react .ops-loading-nav-bar{height:12px;width:78%;border-radius:4px;background:#34353a}
body.ops-ui-react .ops-loading-main{min-width:0}
body.ops-ui-react .ops-loading-header{height:56px;padding:0 24px;display:flex;align-items:center;justify-content:space-between;background:#fff;border-bottom:1px solid #E5E6EB;font-size:14px}
body.ops-ui-react .ops-loading-header span{font-size:12px;color:#86909c}
body.ops-ui-react .ops-loading-content{padding:28px}
@media(max-width:720px){body.ops-ui-react .ops-workspace-loading{grid-template-columns:56px minmax(0,1fr)}body.ops-ui-react .ops-loading-rail{padding:16px 12px}body.ops-ui-react .ops-loading-nav-bar{width:100%}body.ops-ui-react .ops-loading-content{padding:16px}body.ops-ui-react .ops-loading-header{padding:0 16px}}
