/* 🔴 设计令牌已迁出 → styles/tokens.css（2026-10-30 单D · 单一真相源）
   本文件**不得**再出现 :root{...} 令牌定义，一律走 var(--token)。
   引序：styles/tokens.css 必须在本文件之前加载（index.html 已保证，判据守卫）。 */
    * { margin: 0; padding: 0; box-sizing: border-box; }
    html, body, #root { height: 100%; width: 100%; }
    body {
      font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif;
      background: var(--bg-app); /* fallback */
      background: var(--color-bg-gradient);
      background-attachment: fixed;
      -webkit-font-smoothing: antialiased;
      text-rendering: optimizeLegibility;
      font-feature-settings: 'kern','liga','tnum';
    }
    ::selection{background:rgba(138,237,213,0.3);color:var(--ink-900)}
    /* ===== Ant Design 主题覆盖 ===== */
    .ant-btn-primary {
      background: var(--color-primary-gradient) !important;
      border-color: transparent !important;
      border-radius: 10px !important;
      box-shadow: 0 2px 8px rgba(var(--primary-rgb), 0.25) !important;
      transition: all 0.3s ease !important;
    }
    .ant-btn-primary:hover, .ant-btn-primary:focus {
      background: var(--color-primary-gradient-dark) !important;
      box-shadow: var(--shadow-brand-lg) !important;
      transform: translateY(-1px) !important;
    }
    .ant-btn-primary:active {
      transform: translateY(0) !important;
    }
    .ant-btn-default {
      border-radius: 10px !important;
      border-color: var(--color-border) !important;
      transition: all 0.3s ease !important;
    }
    .ant-btn-default:hover {
      border-color: var(--primary) !important;
      color: var(--primary) !important;
      background: var(--color-primary-lighter) !important;
    }
    .ant-card {
      border-radius: var(--radius-lg) !important;
      border-color: var(--color-border) !important;
      box-shadow: var(--shadow-md) !important;
      transition: all 0.3s ease !important;
    }
    .ant-card:hover {
      box-shadow: var(--shadow-card-hover) !important;
      border-color: rgba(var(--primary-rgb), 0.2) !important;
    }
    .ant-card-head {
      border-bottom-color: var(--color-border) !important;
    }
    .ant-table {
      border-radius: var(--radius-md) !important;
    }
    .ant-table-thead > tr > th {
      background: var(--color-surface) !important;
      border-color: var(--color-border) !important;
    }
    .ant-table-tbody > tr > td {
      border-color: var(--color-border) !important;
    }
    .ant-table-tbody > tr:hover > td {
      background: var(--color-primary-lighter) !important;
    }
    .ant-input, .ant-input-affix-wrapper {
      border-radius: var(--radius-sm) !important;
      border-color: var(--color-border) !important;
    }
    .ant-input:focus, .ant-input-focused,
    .ant-input-affix-wrapper:focus, .ant-input-affix-wrapper-focused {
      border-color: var(--primary) !important;
      box-shadow: 0 0 0 2px rgba(var(--primary-rgb), 0.12) !important;
    }
    .ant-select .ant-select-selector {
      border-radius: var(--radius-sm) !important;
      border-color: var(--color-border) !important;
    }
    .ant-select-focused .ant-select-selector {
      border-color: var(--primary) !important;
      box-shadow: 0 0 0 2px rgba(var(--primary-rgb), 0.12) !important;
    }
    .ant-modal .ant-modal-content {
      border-radius: var(--radius-xl) !important;
      box-shadow: var(--shadow-lg) !important;
    }
    .ant-modal .ant-modal-header {
      border-radius: var(--radius-xl) var(--radius-xl) 0 0 !important;
    }
    .ant-drawer .ant-drawer-content {
      border-radius: var(--radius-lg) 0 0 var(--radius-lg) !important;
    }
    .ant-tabs .ant-tabs-ink-bar {
      background: var(--primary) !important;
    }
    .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {
      color: var(--primary) !important;
    }
    .ant-tabs-tab:hover .ant-tabs-tab-btn {
      color: var(--primary) !important;
    }
    .ant-tabs-tab.ant-tabs-tab-active {
      background: linear-gradient(135deg, rgba(138,237,213,0.16), rgba(var(--primary-rgb), 0.16)) !important;
      border-radius: 8px 8px 0 0 !important;
    }
    .ant-tabs-tab {
      padding: 10px 18px !important;
      border-radius: 8px 8px 0 0 !important;
      transition: all 0.2s ease !important;
    }
    .ant-tabs-tab:hover {
      background: rgba(0,0,0,0.03) !important;
    }
    .ant-tabs-nav {
      margin-bottom: 24px !important;
    }
    .ant-menu .ant-menu-item-selected {
      color: var(--primary) !important;
      background: linear-gradient(90deg, rgba(var(--primary-rgb), 0.08) 0%, transparent 100%) !important;
    }
    .ant-menu .ant-menu-item-selected::after {
      border-right-color: var(--primary) !important;
    }
    .ant-menu .ant-menu-item:hover {
      color: var(--primary) !important;
      background: rgba(var(--primary-rgb), 0.04) !important;
    }
    .ant-tag {
      border-radius: var(--radius-sm) !important;
    }
    .ant-badge-status-dot {
      border-radius: 50% !important;
    }
    .ant-segmented .ant-segmented-item-selected {
      background: var(--primary-grad-deep);
      color: #fff !important;
    }
    .ant-segmented .ant-segmented-item:hover:not(.ant-segmented-item-selected) {
      color: var(--primary) !important;
    }
    .ant-pagination .ant-pagination-item-active {
      border-color: var(--primary) !important;
    }
    .ant-pagination .ant-pagination-item-active a {
      color: var(--primary) !important;
    }
    .ant-switch-checked {
      background: var(--color-primary-gradient) !important;
    }
    .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
      color: var(--primary) !important;
      border-color: var(--primary) !important;
    }
    .ant-radio-checked .ant-radio-inner {
      border-color: var(--primary) !important;
    }
    .ant-radio-checked .ant-radio-inner::after {
      background: var(--primary) !important;
    }
    .ant-checkbox-checked .ant-checkbox-inner {
      background: var(--primary) !important;
      border-color: var(--primary) !important;
    }
    .ant-progress .ant-progress-bg {
      background: var(--primary) !important;
    }
    .ant-steps .ant-steps-item-finish .ant-steps-item-icon {
      border-color: var(--primary) !important;
    }
    .ant-steps .ant-steps-item-finish .ant-steps-item-icon .ant-steps-icon {
      color: var(--primary) !important;
    }
    .ant-steps .ant-steps-item-active .ant-steps-item-icon {
      background: var(--color-primary-gradient) !important;
      border-color: transparent !important;
    }
    .ant-alert.ant-alert-info {
      border-radius: var(--radius-md) !important;
    }
    .ant-statistic .ant-statistic-content-value {
      color: var(--color-text-primary) !important;
    }
    .ant-empty .ant-empty-description {
      color: var(--color-text-tertiary) !important;
    }
    .ant-tooltip .ant-tooltip-inner {
      border-radius: var(--radius-sm) !important;
    }
    .ant-tooltip .ant-tooltip-arrow::before {
      background: var(--ink-900) !important;
    }
    .ant-tooltip-inner {
      background: var(--ink-900) !important;
    }
    .ant-popover .ant-popover-inner {
      border-radius: var(--radius-md) !important;
    }
    .ant-dropdown .ant-dropdown-menu {
      border-radius: var(--radius-md) !important;
    }
    .logo {
      height: 64px;
      display: flex;
      align-items: center;
      justify-content: center;
      font-weight: bold;
      font-size: 18px;
      color: var(--color-primary);
      border-bottom: 1px solid var(--color-border);
      background: linear-gradient(135deg, rgba(var(--primary-rgb), 0.06) 0%, rgba(232, 149, 74, 0.04) 100%);
    }
    /* ===== 客户管理卡片网格 ===== */
    .page-customers { padding: 0; }
    .cust-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; flex-wrap: wrap; gap: 16px; }
    .cust-title { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 34px; color: var(--ink-900); margin: 0; font-weight: 600; letter-spacing: -0.5px; line-height: 1.2; }
    .cust-actions { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
    .cust-search { width: 280px; }
    .filter-bar { display: flex; gap: 10px; align-items: center; margin-bottom: 24px; flex-wrap: wrap; }
    .filter-chip { padding: 6px 14px; border-radius: 999px; border: 1px solid var(--ink-200); background: var(--bg-card); color: var(--ink-700); font-size: 13px; cursor: pointer; transition: all 200ms ease; user-select: none; }
    .filter-chip:hover { border-color: var(--primary); color: var(--primary); }
    .filter-chip.active { background: var(--primary-text); color: #fff; border-color: var(--primary-text); }
    .customer-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
    @media (max-width: 1200px) { .customer-grid { grid-template-columns: repeat(2, 1fr); } }
    @media (max-width: 640px) { .customer-grid { grid-template-columns: 1fr; } }
    .customer-card { background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 16px; padding: 20px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); transition: all 0.24s ease; cursor: pointer; }
    .customer-card:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(20,48,43,0.08); }
    .card-top { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 16px; }
    .card-avatar { width: 44px; height: 44px; border-radius: 50%; background: var(--primary-grad-deep); color: #fff; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 16px; flex-shrink: 0; }
    .card-name { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 18px; color: var(--ink-900); margin: 0; font-weight: 600; line-height: 1.3; }
    .card-sub { font-size: 12px; color: var(--ink-500); margin-top: 2px; }
    .card-badge { margin-left: auto; padding: 4px 10px; border-radius: 999px; font-size: 11px; font-weight: 600; white-space: nowrap; }
    .badge-ok { background: var(--ok-soft); color: var(--ok); }
    .badge-warn { background: var(--warn-soft); color: var(--warn); }
    .badge-danger { background: var(--danger-soft); color: var(--danger); }
    .badge-info { background: var(--primary-100); color: var(--primary); }
    .badge-done { background: #EEF0F2; color: #8C9BA8; }
    .bmi-row { margin-bottom: 16px; }
    .bmi-label { font-size: 12px; color: var(--ink-500); display: flex; justify-content: space-between; }
    .bmi-value { font-weight: 600; color: var(--ink-900); }
    .bmi-bar { height: 6px; background: var(--line-subtle); border-radius: 999px; margin-top: 6px; overflow: hidden; }
    .bmi-fill { display: block; height: 100%; border-radius: 999px; transition: width 0.3s ease; }
    .card-tags { display: flex; flex-direction: row; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; min-height: 24px; align-items: center; }
    .card-tag { padding: 4px 10px; border-radius: 999px; background: var(--primary-50); color: var(--primary); font-size: 11px; white-space: nowrap; line-height: 1.4; box-sizing: border-box; }
    .card-status { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-700); margin-bottom: 8px; }
    .status-dot { width: 6px; height: 6px; border-radius: 50%; display: inline-block; }
    .card-contact { font-size: 12px; color: var(--ink-400); margin-bottom: 16px; }
    .card-actions { display: flex; gap: 8px; justify-content: flex-end; border-top: 1px solid var(--line-subtle); padding-top: 12px; }
    .card-act-btn { font-size: 12px; color: var(--ink-500); background: transparent; border: none; cursor: pointer; padding: 4px 8px; border-radius: 8px; transition: background 0.15s; display: flex; align-items: center; gap: 4px; }
    .card-act-btn:hover { background: var(--primary-100); color: var(--primary); }
    .card-act-sm { padding: 6px 12px; border-radius: 8px; background: var(--primary-100); color: var(--primary); font-size: 12px; font-weight: 500; }
    .cust-pagination { display: flex; justify-content: center; gap: 8px; margin-top: 32px; position: relative; z-index: 10; }
    .cust-pagination .ant-pagination-item { border-radius: 12px !important; border: 1px solid rgba(0,0,0,0.1) !important; background: #fff !important; min-width: 42px !important; font-size: 13px !important; }
    .cust-pagination .ant-pagination-item-active { background: var(--ink-500) !important; border-color: var(--ink-500) !important; }
    .cust-pagination .ant-pagination-item-active a { color: #fff !important; }
    .cust-empty { text-align: center; padding: 80px 20px; color: var(--ink-400); }

    /* ===== Hotfix3: 客户管理原型风格样式 ===== */
    .cust-group-section { margin-bottom: 16px; }
    .cust-group-header { font-size: 13px; font-weight: 600; color: var(--color-text-secondary, #6B7A88); padding: 8px 0 6px; border-bottom: 1px solid var(--color-border, #E8E4DF); margin-bottom: 10px; }
    .card-contact-right { font-size: 12px; color: var(--color-text-quaternary, #A0AEC0); white-space: nowrap; text-align: right; line-height: 1.4; margin-left: auto; padding-left: 8px; flex-shrink: 0; }
    /* section-head 标题 + 副标题 */
    .cust-section-head { margin-bottom: 24px; }
    .cust-section-head h2 { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 32px; font-weight: 600; letter-spacing: -0.5px; color: var(--ink-900); margin: 0 0 6px 0; }
    .cust-section-head p { color: var(--ink-500); font-size: 15px; margin-top: 6px; margin-bottom: 0; line-height: 1.6; }

    /* cust-toolbar 同行布局: 筛选标签 + spacer + 搜索框 + 按钮 */
    .cust-toolbar { display: flex; align-items: center; gap: 14px; margin-bottom: 22px; flex-wrap: wrap; }
    .cust-toolbar .filters { display: flex; gap: 8px; flex-wrap: wrap; }
    .cust-toolbar .spacer { flex: 1; min-width: 12px; }

    /* 搜索框 pill 风格 */
    .cust-toolbar .search-bar { flex: 1; max-width: 360px; min-width: 200px; display: flex; align-items: center; gap: 8px; background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 999px; padding: 0 16px; color: var(--ink-400); font-size: 13px; height: 38px; transition: all 0.2s; }
    .cust-toolbar .search-bar:hover { border-color: #B8BFB9; }
    .cust-toolbar .search-bar:focus-within { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.12); background: #fff; }
    .cust-toolbar .search-bar .ant-input { background: transparent !important; border: none !important; box-shadow: none !important; padding: 0 !important; font-size: 13px !important; }
    .cust-toolbar .search-bar .ant-input-affix-wrapper { background: transparent !important; border: none !important; box-shadow: none !important; padding: 0 !important; }
    .cust-toolbar .search-bar .ant-input-affix-wrapper-focused,
    .cust-toolbar .search-bar .ant-input-affix-wrapper:hover { border: none !important; box-shadow: none !important; }
    .cust-toolbar .search-bar .ant-input-prefix { color: var(--ink-400); margin-right: 4px; }
    .cust-toolbar .search-bar .ant-input-clear-icon { color: #B8BFB9; }
    .cust-toolbar .search-bar .ant-input { height: auto !important; line-height: 1.4 !important; }

    /* 筛选 chip 原型风格 */
    .cust-toolbar .chip { padding: 8px 16px; border-radius: 999px; border: 1px solid var(--ink-200); background: #fff; color: var(--ink-700); font-size: 13px; font-weight: 500; cursor: pointer; transition: all 0.2s ease; user-select: none; }
    .cust-toolbar .chip:hover { border-color: var(--primary); color: var(--primary); }
    .cust-toolbar .chip.active { background: var(--ink-500); color: #fff; border-color: transparent; }

    /* cust-card 原型风格卡片 */
    .customer-card.cust-card { display: flex; flex-direction: column; background: #fff; border: 1px solid rgba(0,0,0,0.06); border-radius: 16px; padding: 20px; box-shadow: 0 1px 3px rgba(0,0,0,0.04), 0 1px 2px rgba(0,0,0,0.06) !important; transition: all 0.26s cubic-bezier(0.4,0,0.2,1); position: relative; }
    .customer-card.cust-card:hover { box-shadow: 0 8px 24px rgba(20,48,43,0.08); transform: translateY(-3px); }
    .customer-card.cust-card .card-top { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 16px; }
    .customer-card.cust-card .card-avatar.av { width: 48px; height: 48px; border-radius: 14px; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-weight: 600; font-size: 17px; flex-shrink: 0; box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.2); }
    .customer-card.cust-card .card-name.nm { font-size: 16px; font-weight: 600; color: var(--ink-900); line-height: 1.3; }
    .customer-card.cust-card .card-sub.mt { font-size: 12px; color: var(--ink-400); margin-top: 2px; }
    .customer-card.cust-card .card-badge { margin-left: auto; padding: 4px 10px; border-radius: 999px; font-size: 11px; font-weight: 600; white-space: nowrap; }

    /* BMI 进度条原型风格 (track 7px + fill 渐变) */
    .customer-card.cust-card .bmi-row.bmi { margin-bottom: 14px; }
    .customer-card.cust-card .bmi-row.bmi .bmi-label.bl { display: flex; justify-content: space-between; font-size: 12px; color: var(--ink-500); margin-bottom: 6px; }
    .customer-card.cust-card .bmi-row.bmi .bmi-label.bl .bmi-value { color: var(--ink-900); font-weight: 600; font-family: "SF Pro Display", -apple-system, "Helvetica Neue", sans-serif; }
    .customer-card.cust-card .bmi-row.bmi .bmi-bar.track { height: 7px; background: #F0F2F1; border-radius: 999px; overflow: hidden; margin-top: 0; }
    .customer-card.cust-card .bmi-row.bmi .bmi-bar.track .bmi-fill.fill { height: 100%; border-radius: 999px; background: linear-gradient(135deg, var(--color-primary-300), var(--primary)); transition: width 0.3s ease; }

    .customer-card.cust-card .card-tags.tags { display: flex; flex-direction: row; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; min-height: 24px; align-items: center; }
    .customer-card.cust-card .card-tags.tags .card-tag { padding: 4px 10px; border-radius: 999px; background: var(--primary-soft); color: var(--primary-text); font-size: 11px; white-space: nowrap; font-weight: 500; line-height: 1.4; box-sizing: border-box; }
    .customer-card.cust-card .card-status.status { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-700); margin-bottom: 6px; }
    .customer-card.cust-card .card-status.status .status-dot.sd { width: 7px; height: 7px; border-radius: 50%; background: var(--ok); }
    .customer-card.cust-card .card-contact.lc { font-size: 12px; color: var(--ink-400); margin-bottom: 16px; }
    .customer-card.cust-card .card-actions.acts { display: flex; gap: 8px; justify-content: flex-start; border-top: none; padding-top: 14px; margin-top: auto; }
    .customer-card.cust-card .card-actions.acts .card-act-btn { font-size: 12px; color: var(--ink-500); font-weight: 500; cursor: pointer; padding: 5px 10px; border-radius: 8px; background: transparent; border: none; transition: background 0.15s; display: flex; align-items: center; gap: 4px; }
    .customer-card.cust-card .card-actions.acts .card-act-btn:hover { background: var(--primary-50); color: var(--primary); }
    .customer-card.cust-card .card-actions.acts .card-act-sm.pi { font-size: 12px; color: var(--ink-500); font-weight: 500; cursor: pointer; padding: 5px 12px; border-radius: 8px; background: transparent; border: none; transition: background 0.15s; display: flex; align-items: center; gap: 4px; }
    .customer-card.cust-card .card-actions.acts .card-act-sm.pi:hover { background: var(--primary-50); color: var(--primary); }
    /* 第八批: 服务状态与操作行之间的弱分隔线（下移居中 + 降低透明度） */
    .customer-card.cust-card .c-divider { margin: 12px 0 0; border-top: 1px solid rgba(0,0,0,0.04); }

    /* 分页器原型风格 (pager) */
    .cust-pagination.pager { display: flex; justify-content: center; gap: 8px; margin-top: 32px; position: relative; z-index: 10; }
    .cust-pagination.pager .ant-pagination-item,
    .cust-pagination.pager .ant-pagination-prev,
    .cust-pagination.pager .ant-pagination-next,
    .cust-pagination.pager .ant-pagination-jump-prev,
    .cust-pagination.pager .ant-pagination-jump-next {
      padding: 0 14px !important;
      min-width: 42px !important;
      height: 36px !important;
      line-height: 34px !important;
      border-radius: 12px !important;
      border: 1px solid rgba(0,0,0,0.1) !important;
      background: #fff !important;
      color: var(--ink-700) !important;
      font-size: 13px !important;
      font-family: inherit !important;
    }
    .cust-pagination.pager .ant-pagination-item a { color: var(--ink-700) !important; line-height: 34px !important; }
    .cust-pagination.pager .ant-pagination-item-active { background: var(--ink-500) !important; border-color: var(--ink-500) !important; }
    .cust-pagination.pager .ant-pagination-item-active a { color: #fff !important; }
    .cust-pagination.pager .ant-pagination-prev:hover:not(.ant-pagination-disabled),
    .cust-pagination.pager .ant-pagination-next:hover:not(.ant-pagination-disabled),
    .cust-pagination.pager .ant-pagination-item:hover:not(.ant-pagination-item-active) {
      background: var(--bg-card) !important;
      border-color: #B8BFB9 !important;
    }
    .cust-pagination.pager .ant-pagination-total-text { display: none !important; }

    /* ===== Dashboard Styles ===== */
    .dashboard-page { padding: 24px 32px; }
    .dashboard-header { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 28px; }
    .dashboard-greeting { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 28px; color: var(--ink-900); margin: 0 0 4px 0; font-weight: 600; }
    .dashboard-subtitle { font-size: 14px; color: var(--ink-500); margin: 0; max-width: 600px; line-height: 1.6; }
    .dashboard-actions { display: flex; gap: 12px; flex-shrink: 0; }

    .stat-cards-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 28px; }
    .stat-card-new { position: relative; background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 16px; padding: 20px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); transition: all 0.24s ease; display: flex; align-items: flex-start; gap: 14px; }
    .stat-card-new:hover { transform: translateY(-2px); box-shadow: 0 12px 32px rgba(20,48,43,0.08); }
    .stat-clickable { cursor: pointer; }
    .stat-icon-new { width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; font-size: 20px; flex-shrink: 0; }
    .stat-content { flex: 1; }
    .stat-value-new { font-size: 28px; font-weight: 700; color: var(--ink-900); line-height: 1.2; font-family: "SF Pro Display", -apple-system, "Helvetica Neue", sans-serif; }
    .stat-label-new { font-size: 13px; color: var(--ink-700); margin-top: 2px; }
    .stat-sub-new { font-size: 11px; color: var(--ink-400); margin-top: 4px; }
    .stat-badge-new { position: absolute; top: 12px; right: 12px; background: var(--danger); color: #fff; font-size: 10px; padding: 2px 8px; border-radius: 999px; font-weight: 600; }

    /* === KPI Cards (prototype style) === */
    .kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-bottom:24px;align-items:stretch !important}
    .kpi{background:#fff;border:1px solid #E8ECE9;border-radius:16px;padding:22px;box-shadow:0 2px 8px rgba(20,48,43,0.04);position:relative;overflow:hidden;min-height:130px !important}
    .kpi .glow{position:absolute;right:-30px;top:-30px;width:120px;height:120px;border-radius:50%;background:linear-gradient(135deg,rgba(138,237,213,0.16),rgba(var(--primary-rgb), 0.16));filter:blur(8px)}
    .kpi .label{font-size:13px;color:var(--ink-500);font-weight:500}
    .kpi .val{font-size:34px;font-weight:600;color:var(--ink-900);margin:8px 0 4px;letter-spacing:-1px}
    .kpi .trend{font-size:12px;font-weight:600;display:flex;align-items:center;gap:4px}
    .kpi .trend.up{color:var(--primary)}
    .kpi .trend.down{color:var(--danger)}
    .kpi .val-wrap{position:relative;display:inline-block}
    .kpi-badge{position:absolute;top:50%!important;left:calc(100% + 6px)!important;right:auto!important;transform:translateY(-50%)!important;background:var(--danger);color:#fff;font-size:10px;padding:2px 8px;border-radius:999px;font-weight:600;white-space:nowrap}
/* === hotfix12v2 检查更新按钮样式 === */
.btn { display:inline-flex; align-items:center; justify-content:center; font-weight:500; border-radius:8px; cursor:pointer; transition:all .2s; border:1px solid transparent; font-size:14px; padding:8px 16px; line-height:1.5; }
.btn-secondary { background:#fff; border-color:var(--line-strong, #d9d9d9); color:var(--ink-700, #3d3d3d); }
.btn-secondary:hover { background:var(--bg-hover, #f5f5f5); border-color:var(--color-primary, #4e6ef2); color:var(--color-primary, #4e6ef2); }
.btn-secondary:disabled { opacity:.5; cursor:not-allowed; }
.btn-sm { padding:4px 12px; font-size:12px; border-radius:6px; }
/* === hotfix14: only hide default prev/next outside cust-pagination === */
.ant-pagination:not(.cust-pagination) .ant-pagination-prev,
.ant-pagination:not(.cust-pagination) .ant-pagination-next { display: none !important; }
    /* 客户头像主题色（薄荷雾：主色浅底 + 主色深字） */
    .ant-avatar { background: var(--primary-soft) !important; color: var(--primary-text) !important; font-weight: 600; }

    /* Pill tabs for todo */
    .todo-pill-tabs{display:flex;gap:0;background:var(--surface-3, #EEF5F2);border-radius:var(--r-pill, 999px);padding:2px}
    .todo-pill-tab{font-size:12px;padding:4px 12px;border-radius:var(--r-pill, 999px);cursor:pointer;color:var(--ink-500, #6E6E73);transition:all var(--t-fast, 140ms);border:none;background:transparent}
    .todo-pill-tab.active{background:var(--surface, #fff);color:var(--ink-900, #1D1D1F);font-weight:500;box-shadow:var(--sh-sm,0 1px 2px rgba(20,48,43,0.04))}

    .alert-config-panel { background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 16px; padding: 20px; margin-bottom: 24px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); }
    .alert-config-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; font-weight: 600; font-size: 15px; color: var(--ink-900); }
    .alert-config-body { display: flex; gap: 20px; flex-wrap: wrap; margin-bottom: 16px; }
    .alert-config-item { display: flex; align-items: center; gap: 6px; font-size: 13px; color: var(--ink-700); cursor: pointer; }
    .alert-config-item input { width: 16px; height: 16px; accent-color: var(--primary); }
    .alert-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
    .alert-clients-list { display: flex; flex-direction: column; gap: 8px; padding-top: 12px; border-top: 1px solid var(--line-subtle); }
    .alert-client-row { display: flex; align-items: center; gap: 10px; }
    .alert-client-name { font-weight: 600; font-size: 14px; color: var(--ink-900); margin-right: 8px; }
    .alert-more { font-size: 12px; color: var(--ink-400); text-align: center; padding: 4px; }
    .alert-empty { text-align: center; color: var(--ink-400); padding: 12px; font-size: 13px; }

    /* === Todo Task Items (prototype style) === */
    .todo-task-item{display:flex;align-items:center;gap:14px;padding:14px 0;border-bottom:1px solid #E8ECE9}
/* 批M1·B1：待办操作区（原先一个按钮都没有，逻辑函数空转） */
.todo-task-ops{display:flex;gap:6px;flex-shrink:0;flex-wrap:wrap}
.todo-op{height:28px;padding:0 11px;border-radius:14px;border:1px solid #D6E4DE;background:#fff;color:#3C5A50;
  font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap;transition:all .15s}
.todo-op:hover{border-color:var(--primary);color:#2A6B5A;background:#F2FAF7}
.todo-op.primary{background: var(--primary-text);border-color: var(--primary-text);color:#fff}
.todo-op.primary:hover{filter:brightness(1.05);color:#fff}
.todo-op.danger:hover{border-color:#E2574C;color:var(--danger-600);background:#FDF3F2}
@media (max-width:768px){.todo-task-item{flex-wrap:wrap}.todo-task-ops{width:100%;padding-left:52px}}
    .todo-task-item:last-child{border-bottom:none}
    .todo-task-ic{width:38px;height:38px;border-radius:11px;background:linear-gradient(135deg,rgba(138,237,213,0.16),rgba(var(--primary-rgb), 0.16));display:grid;place-items:center;color:var(--primary);flex-shrink:0;font-size:16px}
    .todo-task-body{flex:1;min-width:0}
    .todo-task-body .t{font-size:14px;font-weight:500;color:var(--ink-900)}
    .todo-task-body .m{font-size:12px;color:var(--ink-400);margin-top:2px}
    .todo-task-when{font-size:12px;color:var(--ink-400);white-space:nowrap}
    .todo-task-actions{display:flex;gap:4px;margin-top:4px}

    .activity-feed-section { background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 16px; padding: 24px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); flex: 1; display: flex; flex-direction: column; }
    .activity-feed-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
    .activity-feed-title { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 18px; color: var(--ink-900); margin: 0; font-weight: 600; display: flex; align-items: center; gap: 8px; }
    .activity-feed-title .pulse-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--primary); position: relative; }
    .activity-feed-title .pulse-dot::after { content: ''; position: absolute; top: -3px; left: -3px; width: 14px; height: 14px; border-radius: 50%; border: 2px solid rgba(var(--primary-rgb), 0.3); animation: pulse-ring 2s ease-out infinite; }
    @keyframes pulse-ring { 0% { transform: scale(0.6); opacity: 1; } 100% { transform: scale(1.4); opacity: 0; } }
    .activity-feed-link { font-size: 13px; color: var(--primary); cursor: pointer; font-weight: 500; transition: opacity 0.2s; }
    .activity-feed-link:hover { opacity: 0.7; }
    .activity-list { display: flex; flex-direction: column; }
    .activity-item { display: flex; align-items: flex-start; gap: 12px; padding: 13px 0; border-bottom: 1px solid #E8ECE9; cursor: pointer; transition: background 0.15s; border-radius: 8px; margin: 0 -8px; padding-left: 8px; padding-right: 8px; }
    .activity-item:last-child { border-bottom: none; }
    .activity-item:hover { background: rgba(var(--primary-rgb), 0.04); }
    .activity-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; margin-top: 6px; }
    .activity-content { flex: 1; min-width: 0; }
    .activity-desc { font-size: 13px; color: var(--ink-700); line-height: 1.5; }
    .activity-desc .activity-highlight { font-weight: 600; color: var(--primary); }
    .activity-time { font-size: 11px; color: var(--ink-400); white-space: nowrap; margin-left: auto; flex-shrink: 0; }
    .activity-empty { text-align: center; padding: 32px 0; color: var(--ink-400); font-size: 13px; }
    .activity-badge { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 11px; font-weight: 600; margin-left: 6px; }
    .activity-badge-plan { background: var(--accent-100); color: var(--accent); }
    .activity-badge-report { background: var(--primary-100); color: var(--primary); }
    .activity-badge-system { background: var(--danger-soft); color: var(--danger); }

    .dashboard-row-2col { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 24px; align-items: stretch; }
    .dashboard-col-left { flex: 1.3; min-width: 0; }
    .dashboard-col-right { flex: 1; min-width: 0; }
    .dashboard-col-equal { min-width: 0; display: flex; flex-direction: column; }

    /* 柱状图 */
    .chart-section { background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 16px; padding: 24px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); }
    .chart-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
    .chart-title { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 18px; color: var(--ink-900); margin: 0; font-weight: 600; }
    .chart-link { font-size: 13px; color: var(--primary); cursor: pointer; font-weight: 500; }
    .chart-link:hover { opacity: 0.7; }
    .chart-body { display: flex; align-items: flex-end; justify-content: space-between; height: 180px; padding: 0 8px; gap: 8px; }
    .chart-bar-col { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 8px; height: 100%; justify-content: flex-end; }
    .chart-bar-value { font-size: 12px; font-weight: 600; color: var(--primary); }
    .chart-bar { width: 100%; max-width: 36px; border-radius: 8px 8px 4px 4px; background: linear-gradient(180deg, var(--primary) 0%, var(--primary-600) 100%); transition: height 0.6s cubic-bezier(0.4,0,0.2,1); min-height: 4px; position: relative; }
    .chart-bar:hover { background: linear-gradient(180deg, var(--accent) 0%, var(--warn) 100%); }
    .chart-bar-day { font-size: 11px; color: var(--ink-400); font-weight: 500; }
    .chart-bar-today { background: linear-gradient(180deg, var(--accent) 0%, var(--warn) 100%); }
    .chart-summary { display: flex; gap: 24px; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--line-subtle); }
    .chart-summary-item { display: flex; flex-direction: column; gap: 2px; }
    .chart-summary-label { font-size: 11px; color: var(--ink-400); }
    .chart-summary-value { font-size: 18px; font-weight: 700; color: var(--ink-900); }
    .chart-summary-value.up { color: var(--primary); }
    .chart-summary-value.down { color: var(--danger); }

    /* 重点名单 */
    .priority-section { background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 16px; padding: 24px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); }
    .priority-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
    .priority-title { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 18px; color: var(--ink-900); margin: 0; font-weight: 600; display: flex; align-items: center; gap: 8px; }
    .priority-count { background: var(--danger-soft); color: var(--danger); font-size: 12px; font-weight: 600; padding: 2px 10px; border-radius: 999px; }
    .priority-list-container { display: flex; flex-direction: column; gap: 10px; }
    .priority-item { display: flex; align-items: center; gap: 12px; padding: 14px; background: var(--surface); border: 1px solid var(--line-subtle); border-radius: 12px; transition: all 0.2s; cursor: pointer; }
    .priority-item:hover { box-shadow: 0 4px 16px rgba(20,48,43,0.06); transform: translateX(2px); }
    .priority-item.urgent { border-left: 3px solid var(--danger); }
    .priority-item.attention { border-left: 3px solid var(--warn); }
    .priority-avatar { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; font-weight: 600; font-size: 16px; color: #fff; flex-shrink: 0; }
    .priority-avatar.urgent { background: linear-gradient(135deg, var(--danger), #D97373); }
    .priority-avatar.attention { background: linear-gradient(135deg, var(--warn), #E8C078); }
    .priority-avatar.stable { background: linear-gradient(135deg, var(--primary), var(--primary-600)); }
    .priority-body { flex: 1; min-width: 0; }
    .priority-name-row { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }
    .priority-name { font-size: 15px; font-weight: 600; color: var(--ink-900); }
    .priority-age { font-size: 12px; color: var(--ink-400); }
    .priority-metric { font-size: 13px; color: var(--ink-700); line-height: 1.4; }
    .priority-metric .metric-value { font-weight: 600; }
    .priority-metric .metric-warn { color: var(--danger); font-weight: 600; }
    .priority-right { text-align: right; flex-shrink: 0; }
    .priority-time { font-size: 11px; color: var(--ink-400); }
    .priority-status-tag { display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 10px; font-weight: 600; margin-top: 4px; }
    .priority-status-tag.urgent { background: var(--danger-soft); color: var(--danger); }
    .priority-status-tag.attention { background: var(--warn-soft); color: var(--warn); }
    .priority-status-tag.followup { background: var(--primary-100); color: var(--primary); }
    .priority-empty { text-align: center; padding: 32px 0; color: var(--ink-400); font-size: 13px; }

    .dashboard-todo-section { background: var(--bg-card); border: 1px solid var(--line-subtle); border-radius: 16px; padding: 24px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); flex: 1; display: flex; flex-direction: column; }
    .todo-section-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
    .section-title { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 20px; color: var(--ink-900); margin: 0; font-weight: 600; }
    .todo-filters { display: flex; gap: 8px; }
    .todo-list-container { display: flex; flex-direction: column; gap: 12px; }

    .todo-item { display: flex; gap: 14px; padding: 16px; background: var(--surface); border: 1px solid var(--line-subtle); border-radius: 12px; transition: all 0.2s; }
    .todo-item:hover { box-shadow: 0 4px 16px rgba(20,48,43,0.06); }
    .todo-overdue { border-color: var(--danger-soft); background: #FFFAF9; }
    .todo-avatar { width: 44px; height: 44px; border-radius: 50%; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-weight: 600; font-size: 18px; flex-shrink: 0; }
    .todo-body { flex: 1; }
    .todo-header-row { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
    .todo-name { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 16px; font-weight: 600; color: var(--ink-900); }
    .todo-sub { font-size: 12px; color: var(--ink-500); }
    .todo-badge { padding: 3px 10px; border-radius: 999px; font-size: 11px; font-weight: 600; }
    .badge-ok { background: var(--ok-soft); color: var(--ok); }
    .badge-warn { background: var(--warn-soft); color: var(--warn); }
    .badge-danger { background: var(--danger-soft); color: var(--danger); }
    .badge-info { background: var(--primary-100); color: var(--primary); }
    .badge-done { background: #EEF0F2; color: #8C9BA8; }
    .todo-desc { font-size: 14px; color: var(--ink-700); line-height: 1.5; }
    .todo-desc-sub { font-size: 13px; color: var(--ink-500); line-height: 1.5; margin-top: 4px; }
    .todo-footer-row { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; }
    .todo-deadline { font-size: 12px; color: var(--ink-400); display: flex; align-items: center; gap: 4px; }
    .todo-deadline-overdue { color: var(--danger); font-weight: 600; }
    .todo-actions { display: flex; gap: 4px; }
    .todo-empty { text-align: center; padding: 40px 0; }
    .todo-empty .ant-empty { margin-bottom: 16px; }

    .modal-overlay { position: fixed; inset: 0; background: rgba(20,48,43,0.35); display: grid; place-items: center; z-index: 1000; backdrop-filter: blur(2px); }
    .todo-modal { background: var(--bg-card); border-radius: 16px; width: 480px; max-width: 90vw; max-height: 90vh; overflow-y: auto; box-shadow: 0 24px 64px rgba(20,48,43,0.2); }
    .todo-modal-header { display: flex; align-items: center; justify-content: space-between; padding: 20px 24px; border-bottom: 1px solid var(--line-subtle); }
    .todo-modal-header h3 { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif; font-size: 18px; color: var(--ink-900); margin: 0; }
    .todo-modal-body { padding: 24px; display: flex; flex-direction: column; gap: 16px; }
    .todo-form-group { display: flex; flex-direction: column; gap: 6px; }
    .todo-form-group label { font-size: 13px; color: var(--ink-700); font-weight: 500; }
    .todo-form-row { display: flex; gap: 16px; }
    .todo-select, .todo-input { padding: 10px 14px; border: 1px solid var(--ink-200); border-radius: 12px; background: var(--surface); font-size: 14px; color: var(--ink-900); outline: none; transition: border 0.2s; }
    .todo-select:focus, .todo-input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.1); }
    .todo-textarea { padding: 10px 14px; border: 1px solid var(--ink-200); border-radius: 12px; background: var(--surface); font-size: 14px; color: var(--ink-900); outline: none; resize: vertical; font-family: inherit; transition: border 0.2s; }
    .todo-textarea:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.1); }
    .todo-modal-footer { display: flex; justify-content: flex-end; gap: 12px; padding: 16px 24px; border-top: 1px solid var(--line-subtle); }

    @media (max-width: 768px) {
      .stat-cards-row { grid-template-columns: repeat(2, 1fr); }
      .dashboard-header { flex-direction: column; gap: 16px; }
    }
    /* ===== End Dashboard Styles ===== */

        .page-title { font-size: 20px; font-weight: 600; margin-bottom: 16px; color: var(--color-text-primary); }
    .stat-card { display: flex; align-items: center; gap: 16px; }
    .stat-icon { width: 48px; height: 48px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 24px; transition: all 0.3s ease; }
    .stat-value { font-size: 28px; font-weight: bold; line-height: 1.2; }
    .stat-label { font-size: 13px; color: var(--color-text-tertiary); }
    .chat-container { display: flex; flex-direction: column; }
    .chat-messages { flex: 1; overflow-y: auto; padding: 16px; background: var(--color-bg); border-radius: var(--radius-md); min-height: 100px; max-height: calc(100vh - 400px); }
    .chat-input-area { margin-top: 12px; display: flex; gap: 8px; flex-shrink: 0; overflow: visible; }
    .chat-message { margin-bottom: 16px; display: flex; gap: 8px; }
    .chat-message.user { justify-content: flex-end; }
    .chat-bubble { max-width: 70%; padding: 12px 16px; border-radius: var(--radius-lg); line-height: 1.6; white-space: pre-wrap; transition: all 0.25s ease; }
    .chat-message.assistant .chat-bubble { background: #fff; border: 1px solid var(--color-border); box-shadow: var(--shadow-sm); }
    .chat-message.assistant .chat-bubble:hover { box-shadow: var(--shadow-md); }
    .chat-message.user .chat-bubble { background: var(--primary-grad-deep); color: #fff; box-shadow: var(--shadow-brand); }
    .sources-tag { margin-top: 8px; font-size: 12px; color: var(--color-text-tertiary); }
    .config-bar { display: none !important; } /* v2.1.1: 移除API密钥条，已内嵌PAT */

    /* ===== v2.1.1 全局组件样式 ===== */
    /* 主按钮 */
    .ant-btn-primary {
      background: var(--primary-grad-deep) !important;
      border: none !important;
      border-radius: 12px !important;
      box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.25) !important;
      color: #fff !important;
      font-weight: 500;
    }
    .ant-btn-primary:hover:not(:disabled) {
      opacity: 0.9;
      box-shadow: 0 6px 16px rgba(var(--primary-rgb), 0.3) !important;
    }
    /* 次按钮 */
    .ant-btn-default {
      background: var(--bg-card) !important;
      border: 1px solid var(--ink-200) !important;
      color: var(--ink-900) !important;
      border-radius: 12px !important;
    }
    .ant-btn-default:hover:not(:disabled) {
      border-color: var(--primary) !important;
      color: var(--primary) !important;
    }
    /* 危险按钮 */
    .ant-btn-dangerous {
      background: var(--danger) !important;
      border: none !important;
      color: #fff !important;
      border-radius: 12px !important;
    }
    /* 输入框聚焦 */
    .ant-input:focus, .ant-input-focused,
    .ant-input-affix-wrapper:focus, .ant-input-affix-wrapper-focused,
    .ant-picker:focus, .ant-picker-focused {
      border-color: var(--primary) !important;
      box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.1) !important;
    }
    .ant-input-number:focus, .ant-input-number-focused {
      border-color: var(--primary) !important;
      box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.1) !important;
    }
    /* 卡片 */
    .ant-card {
      background: var(--bg-card) !important;
      border-radius: 16px !important;
      border: 1px solid var(--line-subtle) !important;
      box-shadow: 0 4px 12px rgba(20,48,43,0.06) !important;
      transition: all 300ms cubic-bezier(0.4,0,0.2,1) !important;
    }
    .ant-card:hover {
      box-shadow: 0 12px 32px rgba(20,48,43,0.08) !important;
      transform: translateY(-2px);
    }
    .ant-modal-content {
      background: var(--bg-card) !important;
      border-radius: 16px !important;
    }
    /* 语义徽章 */
    .badge-stable { background: var(--ok-soft); color: var(--ok); padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 500; }
    .badge-watch { background: var(--warn-soft); color: var(--warn); padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 500; }
    .badge-critical { background: var(--danger-soft); color: var(--danger); padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 500; }
    .badge-active { background: var(--primary-100); color: var(--primary); padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 500; }
    /* 页面标题 */
    .page-title {
      font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "PingFang SC", "Helvetica Neue", sans-serif;
      font-size: 28px; font-weight: 600; color: var(--ink-900);
    }

    ::-webkit-scrollbar { width: 6px; height: 6px; }
    ::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: 3px; }
    .loading-wrap { text-align: center; padding: 60px 0; color: var(--color-text-tertiary); }
    /* ===== 方案编辑器样式 ===== */
    .plan-editor-layout { display: flex; height: calc(100vh - 260px); min-height: 600px; }
    .plan-nav { width: 220px; background: var(--color-surface); border-right: 1px solid var(--color-border); overflow-y: auto; padding: 12px 0; }
    .plan-nav-item { padding: 10px 16px; cursor: pointer; display: flex; align-items: center; gap: 8px; font-size: 13px; border-left: 3px solid transparent; transition: all 0.2s; }
    .plan-nav-item:hover { background: var(--color-primary-lighter); }
    .plan-nav-item.active { background: var(--color-primary-light); border-left-color: var(--color-primary); color: var(--color-primary); font-weight: 500; }
    .plan-nav-item .nav-num { width: 20px; height: 20px; border-radius: 50%; background: var(--color-border); display: flex; align-items: center; justify-content: center; font-size: 11px; flex-shrink: 0; transition: all 0.3s ease; }
    .plan-nav-item.active .nav-num { background: var(--primary-grad-deep); color: #fff; }
    .plan-nav-item .nav-eye { margin-left: auto; opacity: 0.5; font-size: 12px; }
    .plan-editor-content { flex: 1; overflow-y: auto; padding: 20px; background: #fff; }
    .plan-section-card { margin-bottom: 16px; }
    .plan-section-card .card-header { display: flex; justify-content: space-between; align-items: center; padding: 12px 16px; background: var(--color-surface); border-bottom: 1px solid var(--color-border); border-radius: var(--radius-md) var(--radius-md) 0 0; }
    .plan-section-card .card-title { font-weight: 600; font-size: 15px; }
    .plan-section-card .card-body { padding: 16px; }
    .plan-toolbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; padding: 12px 16px; background: #fff; border-radius: var(--radius-md); border: 1px solid var(--color-border); }
    .macro-nutrient-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 16px; }
    .macro-card { padding: 16px; border-radius: var(--radius-md); text-align: center; }
    .macro-card .macro-value { font-size: 28px; font-weight: bold; margin-bottom: 4px; }
    .macro-card .macro-label { font-size: 12px; color: var(--color-text-tertiary); }
    .macro-card.protein { background: var(--color-primary-light); }
    .macro-card.protein .macro-value { color: var(--color-primary); }
    .macro-card.fat { background: var(--color-accent-light); }
    .macro-card.fat .macro-value { color: var(--color-accent); }
    .macro-card.carb { background: var(--color-success-light); }
    .macro-card.carb .macro-value { color: var(--color-success); }
    .macro-card.calories { background: var(--color-danger-light); }
    .macro-card.calories .macro-value { color: var(--color-danger); }
    /* PDF预览样式 */
    .pdf-container { width: 210mm; margin: 0 auto; background: #fff; padding: 12mm 10mm; box-shadow: var(--shadow-lg); font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif; color: var(--color-text-primary); font-size: 11px; line-height: 1.5; }
    .pdf-cover { background: var(--primary-grad-deep); color: #fff; padding: 14px 18px; border-radius: var(--radius-md); margin-bottom: 12px; }
    .pdf-cover-title { font-size: 18px; font-weight: bold; margin-bottom: 2px; }
    .pdf-cover-subtitle { font-size: 11px; opacity: 0.85; margin-bottom: 8px; }
    .pdf-cover-info { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: 10px; }
    .pdf-cover-info-item { display: flex; gap: 3px; }
    .pdf-cover-info-item .label { opacity: 0.7; }
    .pdf-cover-info-item .value { font-weight: 500; }
    .pdf-cover-footer { margin-top: 8px; padding-top: 6px; border-top: 1px solid rgba(255,255,255,0.2); font-size: 9px; opacity: 0.8; display: flex; justify-content: space-between; }
    .pdf-tags { display: flex; gap: 4px; flex-wrap: wrap; margin-top: 6px; }
    .pdf-tag { padding: 1px 8px; border-radius: 10px; background: rgba(255,255,255,0.2); color: #fff; font-size: 9px; }
    .pdf-section { margin-bottom: 12px; }
    .pdf-section-title { font-size: 13px; font-weight: bold; color: #333; margin-bottom: 6px; padding: 5px 10px; border-radius: 4px 4px 0 0; display: flex; align-items: center; gap: 5px; }
    .pdf-st-macro { background: linear-gradient(90deg, #e3f2fd, transparent); border-left: 3px solid #2196f3; }
    .pdf-st-supp { background: linear-gradient(90deg, #f3e5f5, transparent); border-left: 3px solid #9c27b0; }
    .pdf-st-carb { background: linear-gradient(90deg, #e8f5e9, transparent); border-left: 3px solid #4caf50; }
    .pdf-st-staple { background: linear-gradient(90deg, #fff3e0, transparent); border-left: 3px solid #ff9800; }
    .pdf-st-protein { background: linear-gradient(90deg, #e3f2fd, transparent); border-left: 3px solid #2196f3; }
    .pdf-st-veg { background: linear-gradient(90deg, #e8f5e9, transparent); border-left: 3px solid #4caf50; }
    .pdf-st-fat { background: linear-gradient(90deg, #fff8e1, transparent); border-left: 3px solid #ffc107; }
    .pdf-st-snack { background: linear-gradient(90deg, #fce4ec, transparent); border-left: 3px solid #e91e63; }
    .pdf-st-forbid { background: linear-gradient(90deg, #ffebee, transparent); border-left: 3px solid #f44336; }
    .pdf-st-rec { background: linear-gradient(90deg, #e8f5e9, transparent); border-left: 3px solid #4caf50; }
    .pdf-st-rule { background: linear-gradient(90deg, #e0f7fa, transparent); border-left: 3px solid #00bcd4; }
    .pdf-st-monitor { background: linear-gradient(90deg, #e3f2fd, transparent); border-left: 3px solid #3f51b5; }
    .pdf-table { width: 100%; border-collapse: collapse; margin-bottom: 8px; font-size: 10px; }
    .pdf-table th { background: var(--bg-card); padding: 5px 7px; text-align: left; font-weight: 600; border: 1px solid var(--ink-200); color: #555; }
    .pdf-table td { padding: 4px 7px; border: 1px solid var(--ink-200); }
    .pdf-table tr:nth-child(even) td { background: var(--bg-app); }
    .pdf-macro-cards { display: flex; gap: 6px; margin-bottom: 8px; }
    .pdf-macro-card { flex: 1; padding: 8px; border-radius: 6px; text-align: center; }
    .pdf-macro-card.protein { background: #e3f2fd; border: 1px solid #90caf9; }
    .pdf-macro-card.fat { background: #fff8e1; border: 1px solid #ffe082; }
    .pdf-macro-card.carb { background: #e8f5e9; border: 1px solid #a5d6a7; }
    .pdf-macro-card .macro-name { font-size: 10px; color: #777; margin-bottom: 2px; }
    .pdf-macro-card .macro-grams { font-size: 18px; font-weight: bold; }
    .pdf-macro-card .macro-kcal { font-size: 9px; color: #999; }
    .pdf-macro-card .macro-ratio { font-size: 9px; margin-top: 1px; }
    .pdf-macro-card.protein .macro-grams { color: #1565c0; }
    .pdf-macro-card.fat .macro-grams { color: #e65100; }
    .pdf-macro-card.carb .macro-grams { color: #2e7d32; }
    .pdf-food-cat { margin-bottom: 6px; }
    .pdf-food-cat-title { font-weight: 600; margin-bottom: 3px; font-size: 11px; }
    .pdf-food-items { display: flex; flex-wrap: wrap; gap: 3px; }
    .pdf-food-item { padding: 1px 7px; border-radius: 8px; font-size: 9px; }
    .pdf-rule-item { margin-bottom: 4px; padding-left: 14px; position: relative; font-size: 10px; }
    .pdf-rule-item::before { content: '✓'; position: absolute; left: 0; color: #4caf50; font-weight: bold; }
    .pdf-monitor-item { display: flex; margin-bottom: 3px; padding: 5px 7px; background: var(--bg-card); border-radius: 4px; font-size: 10px; }
    .pdf-monitor-item .name { width: 100px; font-weight: 500; }
    .pdf-monitor-item .freq { flex: 1; color: #666; }
    .pdf-monitor-item .target { color: #4caf50; font-weight: 500; }
    .pdf-callout { padding: 8px 10px; border-radius: 6px; margin: 6px 0; font-size: 10px; }
    .pdf-callout.info { background: #e3f2fd; border-left: 3px solid #2196f3; }
    .pdf-callout.warn { background: #fff8e1; border-left: 3px solid #ffc107; }
    .pdf-callout.tip { background: #e8f5e9; border-left: 3px solid #4caf50; }
    .pdf-footer { text-align: center; color: #999; font-size: 9px; margin-top: 14px; padding-top: 8px; border-top: 1px solid var(--ink-200); }
    .version-tag { background: var(--color-primary-light); color: var(--color-primary); padding: 1px 6px; border-radius: 3px; font-size: 10px; }
    .pdf-sub-title { font-size: 11px; font-weight: 600; margin: 8px 0 4px 0; }
    @media print { .pdf-container { box-shadow: none; } }

    /* ===== 新布局框架 CSS ===== */
    .app-shell { display: grid; grid-template-columns: 76px 1fr; min-height: 100vh; }
    .app-sider {
      position: sticky; top: var(--nav-h); height: calc(100vh - var(--nav-h)); background: rgba(20,48,43,0.04);
      display: flex; flex-direction: column; align-items: center; padding: 18px 0; z-index: 100;
      box-shadow: none; border-right: 1px solid var(--line);
    }
    .sider-logo {
      width: 44px; height: 44px; border-radius: 12px;
      background: linear-gradient(135deg, var(--color-primary-400) 0%, var(--color-accent) 100%);
      display: flex; align-items: center; justify-content: center; margin-bottom: 16px;
      color: #fff; font-size: 20px; flex-shrink: 0;
      box-shadow: var(--sh-md);
    }
    .sider-menu { flex: 1; display: flex; flex-direction: column; gap: 4px; width: 100%; align-items: center; }
    .sider-menu-item {
      width: 100%; max-width: 56px; min-height: 52px; border-radius: 12px;
      display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
      cursor: pointer; white-space: nowrap; color: var(--ink-500);
      transition: all 240ms cubic-bezier(0.4,0,0.2,1); position: relative; padding: 8px 4px;
    }
    .sider-menu-item:hover { background: var(--surface-3); color: var(--ink-900); }
    .sider-menu-item.active {
      background: var(--primary-grad-deep);
      color: #fff; box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.4);
    }
    .sider-menu-item.active::before {
      content: ''; position: absolute; left: -10px; top: 50%; transform: translateY(-50%);
      width: 3px; height: 24px; background: var(--color-accent); border-radius: 2px;
    }
    .sider-menu-label { font-size: 11px; line-height: 1; white-space: nowrap; text-align: center; }
    .sider-badge {
      position: absolute; top: 4px; right: 4px; min-width: 16px; height: 16px;
      border-radius: 999px; background: var(--color-accent); color: var(--color-primary-900);
      font-size: 10px; font-weight: 600; display: flex; align-items: center; justify-content: center;
      padding: 0 4px; border: 2px solid var(--bg-app);
    }
    .sider-avatar {
      width: 40px; height: 40px; border-radius: 50%;
      background: linear-gradient(135deg, var(--color-accent) 0%, var(--color-accent-dark) 100%);
      display: flex; align-items: center; justify-content: center; color: #fff; font-size: 16px;
      font-weight: 600; cursor: pointer; transition: all 240ms ease; flex-shrink: 0;
    }
    .sider-avatar:hover { transform: scale(1.06); box-shadow: 0 4px 12px rgba(0,0,0,0.3); }
    .app-main { display: flex; flex-direction: column; min-height: 100vh; padding-top: var(--nav-h); }
    .app-topbar {
      height: var(--nav-h); background: var(--surface); border-bottom: 1px solid var(--line);
      display: flex; align-items: center; padding: 0 28px; gap: 20px;
      position: fixed; top: 0; left: 0; right: 0; z-index: 900;
    }
    .topbar-brand { display: flex; align-items: center; gap: 12px; min-width: 0; }
    .topbar-logo { width: 32px; height: 32px; border-radius: 10px; background: linear-gradient(135deg, var(--primary), #2E9D84); display: flex; align-items: center; justify-content: center; font-size: 17px; box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.25); flex-shrink: 0; }
    .topbar-page-title { font-size: 19px; font-weight: 700; color: var(--ink-900); letter-spacing: .2px; white-space: nowrap; line-height: 1; }
    /* 顶栏版本徽章（2026-10-24）：共享测试环境里"你现在验的是哪个版本"必须一眼可见 */
    .topbar-ver {
      font-size: 11.5px; line-height: 1; padding: 4px 8px; border-radius: 6px;
      background: #FFF6E8; color: #8A5A00; border: 1px solid #F3DCB4;
      cursor: pointer; white-space: nowrap; font-variant-numeric: tabular-nums;
      font-family: ui-monospace, SFMono-Regular, Menlo, monospace; letter-spacing: .2px;
    }
    .topbar-ver:hover { background: #FFEED2; }
    .topbar-ver.prod { background: #E9F7F1; color: #1F5E4C; border-color: #BFE6D6; }
    .topbar-ver.prod:hover { background: #DBF1E8; }
    .topbar-spacer { flex: 1; }
    .topbar-breadcrumb { display: flex; align-items: center; gap: 8px; font-size: 14px; color: var(--color-text-secondary); }
    .topbar-breadcrumb .crumb-current { color: var(--color-text-primary); font-weight: 500; }
    .topbar-actions { display: flex; align-items: center; gap: 8px; margin-left: auto; }
    .topbar-icon-btn {
      width: 36px; height: 36px; border-radius: 50%; border: none; background: transparent;
      display: flex; align-items: center; justify-content: center; cursor: pointer;
      color: var(--color-text-tertiary); transition: all 200ms ease; position: relative;
    }
    .topbar-icon-btn:hover { background: var(--color-primary-soft); color: var(--color-primary); }
    .topbar-admin-btn {
      height: 30px; padding: 0 12px; border-radius: 999px; border: 1px solid var(--color-primary);
      background: var(--color-primary-soft); color: var(--color-primary); font-size: 12.5px; font-weight: 600;
      cursor: pointer; transition: all 200ms ease; font-family: inherit;
    }
    .topbar-admin-btn:hover { background: var(--color-primary); color: #fff; }
    .topbar-icon-btn .notify-dot {
      position: absolute; top: 6px; right: 6px; width: 8px; height: 8px;
      border-radius: 50%; background: var(--color-danger); border: 2px solid var(--color-card);
    }
    .app-content { flex: 1; padding: 24px 32px 48px; overflow: auto; }

    /* ===== 登录页布局（2026-09-25 重做 · 方案 B 浅色品牌面）===== */
    /* 左栏＝纯白品牌面（干净留白 + 极淡主色光斑）／右栏＝品牌底 + 白卡浮起 */
    .login-page {
      min-height: 100vh; display: grid; grid-template-columns: 1.05fr 1fr;
      background: var(--color-bg); position: relative; overflow: hidden;
    }
    .login-hero {
      /* 左内边距 140 ≈ 右栏卡片右边距 137 ⇒ 两侧外留白对称；品牌叙事整体右移 80px */
      position: relative; padding: 56px 60px 56px 140px; display: flex; flex-direction: column;
      justify-content: space-between; z-index: 1; background: var(--surface); overflow: hidden;
    }
    .login-hero > *:not(.login-glow) { position: relative; z-index: 2; }
    .login-glow {
      position: absolute; inset: 0; pointer-events: none; z-index: 1;
      background:
        radial-gradient(720px 520px at -6% -4%, rgba(var(--primary-rgb), 0.17) 0%, transparent 62%),
        radial-gradient(600px 460px at 104% 104%, rgba(var(--accent-rgb), 0.11) 0%, transparent 60%);
    }
    /* 品牌行 */
    .login-hero-top { display: flex; align-items: center; gap: 14px; }
    .login-logo-mark { width: 48px; height: 48px; flex: none; display: block; }
    .login-logo-mark svg { display: block; width: 48px; height: 48px; }
    .login-brand-name {
      font-size: 24px; font-weight: 700; letter-spacing: 2px; line-height: 1.1; color: var(--ink-900);
    }
    .login-brand-sub { font-size: 11px; letter-spacing: 2px; color: var(--color-text-tertiary); margin-top: 5px; }
    /* 中部 */
    .login-hero-center { display: flex; flex-direction: column; gap: 22px; }
    .login-status-tag {
      display: inline-flex; align-items: center; gap: 8px; padding: 6px 14px 6px 12px;
      border-radius: 999px; background: var(--color-primary-lighter);
      font-size: 13px; color: var(--color-primary-900); width: fit-content;
    }
    .login-status-tag .dot {
      width: 7px; height: 7px; border-radius: 50%; background: var(--color-success);
      animation: loginPulse 2.4s infinite;
    }
    @keyframes loginPulse {
      0% { box-shadow: 0 0 0 0 rgba(var(--ok-rgb), 0.55); }
      70% { box-shadow: 0 0 0 8px rgba(var(--ok-rgb), 0); }
      100% { box-shadow: 0 0 0 0 rgba(var(--ok-rgb), 0); }
    }
    .login-hero-title {
      font-family: var(--font); font-size: 72px; font-weight: 600;
      color: var(--ink-900); line-height: 1.05; letter-spacing: -2px; margin: 0;
    }
    .login-hero-title .hl { color: var(--primary-text, #267A63); }
    .login-hero-sub {
      font-size: 17px; color: var(--color-text-tertiary); line-height: 1.7; max-width: 470px; margin: 0;
    }
    /* 底部：gap 26 / 条目 gap 9 / 图标 30 —— 三条文案收紧成块，与上下模块双向拉开 */
    .login-hero-bottom { display: flex; flex-direction: column; gap: 26px; }
    .login-feats { display: flex; flex-direction: column; gap: 9px; }
    .login-feat {
      display: flex; align-items: center; gap: 12px; font-size: 14.5px; color: var(--color-text-secondary);
    }
    .login-feat-ic {
      width: 30px; height: 30px; border-radius: 9px; flex: none;
      display: flex; align-items: center; justify-content: center;
      background: var(--color-bg); color: var(--primary-text, #267A63);
    }
    .login-security-row { display: flex; align-items: center; gap: 22px; }
    .login-security-item {
      display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--color-text-quaternary);
    }
    .login-copyright { font-size: 12px; color: var(--color-text-quaternary); }
    /* 右栏 · 表单 */
    .login-form-area {
      display: flex; align-items: center; justify-content: center; padding: 40px;
      position: relative; z-index: 1; background: var(--color-bg);
    }
    .login-card {
      width: 100%; max-width: 428px; background: var(--color-card);
      border: 1px solid var(--color-border-light); border-radius: 28px;
      box-shadow: var(--shadow-xl); padding: 48px 40px;
    }
    .login-card-title {
      font-size: 30px; font-weight: 600; letter-spacing: -0.4px;
      color: var(--ink-900); margin: 0 0 8px 0;
    }
    .login-card-sub { font-size: 14px; color: var(--color-text-tertiary); margin: 0 0 30px 0; }
    .login-field { margin-bottom: 18px; }
    .login-field-label {
      display: block; font-size: 13px; font-weight: 600;
      color: var(--color-text-secondary); margin-bottom: 8px;
    }
    .login-field-input { position: relative; }
    /* 输入框：外层容器管高度/圆角/边框/底色；内层 input 必须 height:auto。
       坑源：内层 input 若也吃 48px，会撑破容器底边 10.5px，白色溢出块遮住下边框。
       同源先例（本仓已有修法）：.cust-toolbar .search-bar .ant-input { height: auto !important } */
    .login-card .ant-input-affix-wrapper,
    .login-card .ant-input-affix-wrapper-lg {
      height: 48px !important; border-radius: 12px !important; box-sizing: border-box;
      padding: 0 14px !important; background: var(--bg-card) !important;
      display: inline-flex; align-items: center;
      transition: border-color 180ms ease, background 180ms ease, box-shadow 180ms ease;
    }
    .login-card .ant-input-affix-wrapper:focus-within,
    .login-card .ant-input-affix-wrapper-focused {
      background: var(--surface) !important; border-color: var(--primary) !important;
      box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.16) !important;
    }
    .login-card .ant-input-affix-wrapper > input.ant-input,
    .login-card .ant-input-affix-wrapper .ant-input {
      height: auto !important; min-height: 0 !important; padding: 0 !important;
      border: none !important; border-radius: 0 !important; background: transparent !important;
      box-shadow: none !important; font-size: 14px !important; line-height: 1.4 !important;
      color: var(--ink-900) !important;
    }
    .login-card .ant-input-affix-wrapper .ant-input::placeholder { color: var(--ink-300) !important; }
    .login-card .ant-input-prefix { margin-inline-end: 12px !important; color: var(--ink-300) !important; line-height: 0; }
    .login-card .ant-input-prefix .anticon { font-size: 16px; }
    .login-card .ant-input-suffix { color: var(--ink-300) !important; }
    /* 浏览器自动填充（Safari/Chrome）：抹掉黄色底块与黑字覆盖，回归设计底色。
       autofill 的黄底是 UA 的 background-color，CSS 改不动，只能用 inset box-shadow 色块盖住。
       ⚠️ 选择器必须一直写到 `.ant-input-affix-wrapper input` 这一级：上面主规则
       `.login-card .ant-input-affix-wrapper .ant-input { box-shadow: none !important }` 是 3 类特异性，
       若此处只用 `.login-card input`（2 类）会被它压掉 ⇒ inset 色块失效、黄块照旧（实测踩过）。 */
    .login-card .ant-input-affix-wrapper input:-webkit-autofill,
    .login-card .ant-input-affix-wrapper input:-webkit-autofill:hover,
    .login-card .ant-input-affix-wrapper input:-webkit-autofill:focus,
    .login-card .ant-input-affix-wrapper input:-webkit-autofill:active {
      -webkit-box-shadow: 0 0 0 1000px var(--bg-card) inset !important;
      box-shadow: 0 0 0 1000px var(--bg-card) inset !important;
      -webkit-text-fill-color: var(--ink-900) !important;
      caret-color: var(--ink-900) !important;
      transition: background-color 9999999s ease-out 0s !important;
    }
    .login-card .ant-input-affix-wrapper input:-webkit-autofill:focus {
      -webkit-box-shadow: 0 0 0 1000px var(--surface) inset !important;
      box-shadow: 0 0 0 1000px var(--surface) inset !important;
    }
    .login-row-mid { display: flex; justify-content: space-between; align-items: center; margin: 4px 0 24px; }
    .login-remember { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--color-text-tertiary); }
    .login-forgot {
      font-size: 13px; font-weight: 500; color: var(--primary-text, #267A63); cursor: pointer;
    }
    .login-forgot:hover { text-decoration: underline; }
    .login-submit { height: 48px; border-radius: 12px !important; }
    .login-divider {
      display: flex; align-items: center; gap: 12px; margin: 22px 0 18px;
      color: var(--color-text-quaternary); font-size: 12px;
    }
    .login-divider::before, .login-divider::after {
      content: ''; flex: 1; height: 1px; background: var(--color-border-light);
    }
    .login-alt-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
    .login-alt-btn {
      height: 44px; border-radius: 12px; border: 1px solid var(--color-border-light);
      background: var(--color-card); display: flex; align-items: center; justify-content: center;
      gap: 8px; cursor: pointer; font-size: 13.5px; font-weight: 500; font-family: var(--font);
      color: var(--color-text-secondary); transition: all 200ms ease;
    }
    .login-alt-btn:hover {
      border-color: var(--color-primary); color: var(--primary-text, #267A63);
      background: var(--color-primary-lighter);
    }
    .login-admin-row { display: flex; justify-content: center; margin-top: 16px; }
    .login-admin-link {
      display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px;
      color: var(--color-text-quaternary); cursor: pointer; transition: color 150ms ease;
    }
    .login-admin-link:hover { color: var(--primary-text, #267A63); }
    .login-terms { text-align: center; font-size: 12px; color: var(--color-text-quaternary); margin: 18px 0 0 0; line-height: 1.6; }
    .login-terms a { color: var(--primary-text, #267A63); cursor: pointer; }
    .login-terms a:hover { text-decoration: underline; }
    .login-error-msg {
      color: var(--color-danger); font-size: 13px; margin-bottom: 16px;
      padding: 9px 12px; background: var(--color-danger-light); border-radius: 9px;
    }

        /* ===== 问询干预三栏布局 ===== */
    .casechat-layout {
      display: grid; grid-template-columns: 280px 1fr 300px;
      height: calc(100vh - 60px - 48px - 40px); min-height: 500px;
    }
    .casechat-left-panel { border-right: 1px solid var(--color-border-light); overflow-y: auto; background: var(--color-surface); }
    .casechat-center-panel { display: flex; flex-direction: column; overflow: hidden; }
    .casechat-right-panel { border-left: 1px solid var(--color-border-light); overflow-y: auto; background: var(--color-surface); padding: 20px; }
    .casechat-right-panel .profile-header { text-align: center; margin-bottom: 20px; }
    .casechat-right-panel .profile-avatar {
      width: 72px; height: 72px; border-radius: 50%; margin: 0 auto 12px;
      display: flex; align-items: center; justify-content: center; color: #fff; font-size: 28px; font-weight: 600;
    }
    .casechat-right-panel .profile-name { font-family: var(--font-serif); font-size: 20px; font-weight: 600; color: var(--color-text-primary); }
    .casechat-right-panel .profile-info { font-size: 13px; color: var(--color-text-tertiary); margin-top: 4px; }
    .casechat-right-panel .profile-section { margin-bottom: 20px; }
    .casechat-right-panel .profile-section-title {
      font-size: 12px; font-weight: 600; color: var(--color-text-tertiary);
      text-transform: uppercase; letter-spacing: 1px; margin-bottom: 12px;
    }
    .casechat-right-panel .profile-kv-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 8px; }
    .casechat-right-panel .profile-kv-item {
      padding: 10px 12px; background: var(--color-card); border-radius: 10px;
    }
    .casechat-right-panel .profile-kv-label { font-size: 11px; color: var(--color-text-tertiary); }
    .casechat-right-panel .profile-kv-value { font-family: var(--font-num); font-size: 18px; font-weight: 600; color: var(--color-text-primary); margin-top: 2px; }
    .casechat-right-panel .profile-kv-value.abnormal { color: var(--color-danger); }

    /* 智诊分析面板 */
    .casechat-right-panel .diagnosis-risk-badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 11px; font-weight: 600; }
    .casechat-right-panel .diagnosis-risk-high { background: rgba(220,38,38,0.1); color: #dc2626; }
    .casechat-right-panel .diagnosis-risk-medium { background: rgba(217,119,6,0.1); color: #d97706; }
    .casechat-right-panel .diagnosis-risk-low { background: rgba(22,163,74,0.1); color: #16a34a; }
    .casechat-right-panel .diagnosis-summary-text { font-size: 12px; color: var(--color-text-secondary); line-height: 1.5; margin: 6px 0; }
    .casechat-right-panel .diagnosis-subsection { margin-top: 10px; }
    .casechat-right-panel .diagnosis-subsection-title { font-size: 10px; font-weight: 600; color: var(--color-text-tertiary); text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 4px; }
    .casechat-right-panel .diagnosis-item { padding: 5px 0; border-bottom: 1px solid var(--color-border-light); font-size: 11px; }
    .casechat-right-panel .diagnosis-item:last-child { border-bottom: none; }
    .casechat-right-panel .diagnosis-item-header { font-weight: 500; color: var(--color-text-primary); display: flex; align-items: center; gap: 4px; }
    .casechat-right-panel .diagnosis-item-abnormal { color: var(--color-danger); font-weight: 600; }
    .casechat-right-panel .diagnosis-causes { color: var(--color-text-tertiary); margin-top: 2px; padding-left: 8px; font-size: 10px; line-height: 1.5; }

    /* ===== Batch5: KnowledgePage Mint Haze Styles ===== */
    .knowledge-layout { display: grid; grid-template-columns: 220px 1fr; gap: 22px; align-items: flex-start; }
    @media (max-width: 900px) { .knowledge-layout { grid-template-columns: 1fr; } }
    .know-cats { background: var(--color-card, #F7FAF9); border: 1px solid var(--color-border-light, #ECEEEA); border-radius: 16px; padding: 18px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); }
    .kc-title { font-size: 13px; font-weight: 600; color: var(--ink-400, #8E8E93); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 12px; }
    .kc-item { display: flex; justify-content: space-between; align-items: center; padding: 10px 12px; border-radius: 12px; cursor: pointer; font-size: 14px; color: var(--ink-700, #3A3A3C); transition: all 0.14s ease; margin-bottom: 2px; }
    .kc-item:hover { background: var(--color-surface, #FAF7F0); }
    .kc-item.active { background: linear-gradient(135deg,rgba(111,224,200,0.16),rgba(var(--primary-rgb), 0.16)); color: var(--primary-text); font-weight: 500; }
    .kc-count { font-size: 11px; color: var(--ink-400, #8E8E93); background: var(--color-surface, #FAF7F0); padding: 2px 8px; border-radius: 999px; }
    .kc-item.active .kc-count { background: rgba(var(--primary-rgb), .12); color: var(--primary-text); }
    .know-list { background: var(--color-card, #F7FAF9); border: 1px solid var(--color-border-light, #ECEEEA); border-radius: 16px; padding: 18px; box-shadow: 0 4px 12px rgba(20,48,43,0.06); }
    .know-toolbar { display: flex; gap: 12px; margin-bottom: 16px; }
    .know-card { display: flex; align-items: center; gap: 16px; padding: 18px; border-bottom: 1px solid var(--color-border-light, #ECEEEA); transition: background 0.14s ease; }
    .know-card:last-child { border-bottom: none; }
    .know-card:hover { background: var(--color-surface, #FAF7F0); }
    .know-main { flex: 1; min-width: 0; }
    .know-title { font-size: 15px; font-weight: 600; color: var(--color-text-primary, #1D1D1F); margin-bottom: 10px; }
    .know-meta { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
    .know-date { width: 100px; font-size: 13px; color: var(--ink-400, #8E8E93); text-align: center; flex-shrink: 0; }
    .know-ops { display: flex; gap: 14px; flex-shrink: 0; font-size: 13px; }
    /* ===== End KnowledgePage Styles ===== */

    /* ===== Batch5: CaseChatPage Mint Haze Styles ===== */
    /* ===== Phase9: 三栏一屏布局 ===== */
    .app-main.casechat-mode { min-height: 0; height: 100vh; overflow: hidden; padding-top: var(--nav-h); grid-column: 2; }
    .app-main.casechat-mode .app-content { flex: 1; min-height: 0; padding: 0 !important; overflow: hidden; display: flex; flex-direction: column; }
    .chat-shell {
      flex: 1 1 auto; min-width: 0; min-height: 0;
      display: grid; grid-template-columns: 260px 1fr 360px; gap: 0;
      height: 100%; overflow: hidden;
    }
    .chat-list {
      order: 1;
      background: var(--color-card, #F7FAF9);
      border-right: 1px solid var(--color-border-light, #ECEEEA);
      display: flex; flex-direction: column; min-height: 0;
      padding: 0; overflow: hidden;
    }
    .chat-list .chat-search-box { flex-shrink: 0; }
    .chat-list .chat-scroll { flex: 1; min-height: 0; overflow-y: auto; padding: 8px 12px 16px; }
    .chat-main { order: 3; min-height: 0; overflow: hidden; }
    .chat-aside.proto-aside {
      order: 2;
      padding: 0 !important; overflow: hidden !important;
      display: flex; flex-direction: column; min-height: 0;
    }
    .chat-aside.proto-aside .aside-head {
      flex-shrink: 0; padding: 12px 14px 8px;
      border-bottom: 1px solid var(--color-border-light, #ECEEEA);
      background: var(--color-surface, #FAF7F0);
    }
    .chat-aside.proto-aside .aside-body {
      flex: 1; min-height: 0; overflow-y: auto;
      padding: 12px 14px 14px;
    }
    .chat-aside.proto-aside .aside-foot {
      flex-shrink: 0; padding: 10px 14px;
      border-top: 1px solid var(--color-border-light, #ECEEEA);
      background: var(--color-surface, #FAF7F0);
    }
    .chat-list .sl { font-size: 12px; font-weight: 600; color: var(--ink-400, #8E8E93); padding: 8px 12px; text-transform: uppercase; letter-spacing: 1px; }
    .cli { display: flex; align-items: center; gap: 12px; padding: 12px; border-radius: 12px; cursor: pointer; transition: all 0.14s ease; margin-bottom: 4px; }
    .cli:hover { background: var(--color-surface, #FAF7F0); }
    .cli.active { background: var(--color-primary-soft, rgba(var(--primary-rgb), 0.08)); }
    .cli .av { width: 40px; height: 40px; border-radius: 12px; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-weight: 600; flex-shrink: 0; }
    .cli .info { flex: 1; min-width: 0; }
    .cli .info .n { font-size: 14px; font-weight: 600; color: var(--color-text-primary, #1D1D1F); display: flex; justify-content: space-between; }
    .cli .info .n .tm { font-size: 11px; color: var(--ink-300, #AEAEB2); font-weight: 400; }
    .cli .info .p { font-size: 12px; color: var(--ink-400, #8E8E93); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .chat-main { display: flex; flex-direction: column; min-height: 0; overflow: hidden; background: var(--color-bg, #F7FAF9); }
    .chat-main > div { min-height: 0; }
    .chat-main .chat-stagebar { display: none !important; }
    .stage-shell { display:flex; flex-direction:column; gap:12px; min-height:100%; }

    /* ===== v1.5: 中栏步骤操作主线 ===== */
    .step-pane { display: flex; flex-direction: column; min-height: 0; overflow: hidden; background: var(--color-bg, #F7FAF9); }
    .step-pane-head { flex-shrink: 0; padding: 14px 20px 10px; background: var(--color-surface, #FAF7F0); border-bottom: 1px solid var(--color-border-light, #ECEEEA); }
    .step-pane-head .sp-client { font-family: var(--font-serif); font-size: 17px; font-weight: 600; color: var(--color-text-primary); display:flex; align-items:center; gap:8px; }
    .step-pane-head .sp-sub { font-size: 12px; color: var(--color-text-tertiary); margin-top: 2px; }
    .step-progress { flex-shrink: 0; padding: 14px 20px 6px; background: var(--color-surface, #FAF7F0); }
    .step-progress-track { display:flex; align-items:center; }
    .step-node { display:flex; flex-direction:column; align-items:center; gap:6px; cursor:pointer; position:relative; z-index:2; }
    .step-node .dot { width:30px; height:30px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:13px; font-weight:600; background:#fff; border:2px solid var(--color-border, #D8DCD6); color:var(--color-text-tertiary); transition:all .15s; }
    .step-node .lbl { font-size:11px; color:var(--color-text-tertiary); white-space:nowrap; }
    .step-node.done .dot { background:#52c41a; border-color:#52c41a; color:#fff; }
    .step-node.done .lbl { color:#52c41a; }
    .step-node.active .dot { background:var(--color-primary, #3FB89B); border-color:var(--color-primary, #3FB89B); color:#fff; box-shadow:0 0 0 4px rgba(var(--primary-rgb), 0.15); }
    .step-node.active .lbl { color:var(--color-primary, #3FB89B); font-weight:600; }
    .step-node.locked .dot { opacity:0.5; }
    .step-node.locked { cursor:not-allowed; }
    .step-connector { flex:1; height:2px; background:var(--color-border, #D8DCD6); margin:0 -2px; margin-bottom:22px; z-index:1; }
    .step-connector.done { background:#52c41a; }
    .step-cards { flex-shrink:0; display:grid; grid-template-columns:repeat(5,1fr); gap:8px; padding:10px 20px; background:var(--color-surface, #FAF7F0); border-bottom:1px solid var(--color-border-light, #ECEEEA); }
    .step-card { background:#fff; border:1px solid var(--color-border-light, #ECEEEA); border-radius:10px; padding:10px 12px; cursor:pointer; transition:all .15s; position:relative; }
    .step-card:hover { border-color:var(--color-primary, #3FB89B); box-shadow:0 2px 8px rgba(var(--primary-rgb), 0.1); }
    .step-card.active { border-color:var(--color-primary, #3FB89B); box-shadow:0 2px 12px rgba(var(--primary-rgb), 0.18); background:linear-gradient(180deg,rgba(var(--primary-rgb), 0.04),#fff); }
    .step-card.done { border-color:rgba(82,196,26,0.4); }
    .step-card.locked { opacity:0.55; cursor:not-allowed; }
    /* v1.6: 查看历史状态（viewing）—— 青色描边区分当前 active */
    .step-node.viewing .dot { background:#13c2c2; border-color:#13c2c2; color:#fff; box-shadow:0 0 0 4px rgba(19,194,194,0.15); }
    .step-node.viewing .lbl { color:#13c2c2; font-weight:600; }
    .step-card.viewing { border-color:#13c2c2; box-shadow:0 2px 12px rgba(19,194,194,0.18); background:linear-gradient(180deg,rgba(19,194,194,0.05),#fff); }
    .step-pane-body.viewing-history { position:relative; }
    .step-pane-body.viewing-history::before { content:''; position:absolute; top:0; left:0; right:0; bottom:0; background:repeating-linear-gradient(45deg, transparent, transparent 14px, rgba(19,194,194,0.025) 14px, rgba(19,194,194,0.025) 28px); pointer-events:none; z-index:0; border-radius:inherit; }
    .step-pane-body.viewing-history > * { position:relative; z-index:1; }
    /* v1.6: 查看历史时，产物区滚动内容只读（禁用交互但保留滚动） */
    .step-pane-body.viewing-history .stage-scroll { pointer-events:none; }
    .step-pane-body.viewing-history .stage-scroll select,
    .step-pane-body.viewing-history .stage-scroll input,
    .step-pane-body.viewing-history .stage-scroll button,
    .step-pane-body.viewing-history .stage-scroll label { pointer-events:none; }
    .step-card .sc-num { font-size:11px; font-weight:600; color:var(--color-text-tertiary); }
    .step-card .sc-name { font-size:13px; font-weight:600; color:var(--color-text-primary); margin:2px 0 4px; display:flex; align-items:center; gap:6px; }
    .step-card .sc-stat { font-size:11px; color:var(--color-text-tertiary); line-height:1.4; min-height:30px; }
    .step-card .sc-badge { position:absolute; top:8px; right:8px; font-size:10px; }
    .step-pane-body { flex:1; min-height:0; overflow-y:auto; padding:16px 20px 20px; }

    /* ===== v2.8.0 紧凑步骤条（合并 head + progress + cards 为单行，总高 ~72px） ===== */
    .compact-stepbar { flex-shrink:0; display:flex; align-items:center; gap:0; padding:8px 16px; background:var(--color-surface, #FAF7F0); border-bottom:1px solid var(--color-border-light, #ECEEEA); min-height:56px; }
    .compact-stepbar .csb-client { display:flex; flex-direction:column; gap:1px; margin-right:14px; min-width:0; flex-shrink:0; }
    .compact-stepbar .csb-client .nm { font-family:var(--font-serif); font-size:14px; font-weight:600; color:var(--color-text-primary); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:120px; display:flex; align-items:center; gap:6px; }
    .compact-stepbar .csb-client .meta { font-size:10.5px; color:var(--color-text-tertiary); white-space:nowrap; }
    .compact-stepbar .csb-track { flex:1; display:flex; align-items:center; gap:0; min-width:0; }
    /* 🔴 批4d：智诊工作台「干预周期」轮次切换（此前时间线只在客户详情页，智诊里看不到轮次） */
    .ws-cycle { position:relative; display:inline-block; }
    .ws-cycle .tbtn.cycle { background:#F4FBF7; border:1px solid #CBE7DC; color:var(--primary-text); }
    .ws-cycle-menu { position:absolute; right:0; top:112%; z-index:60; background:#fff; border:1px solid #E8E4DF; border-radius:10px; box-shadow:0 8px 24px rgba(0,0,0,.12); min-width:240px; padding:6px; }
    .ws-cycle-mi { padding:7px 10px; font-size:12.5px; color:var(--ink-700); border-radius:7px; cursor:pointer; white-space:nowrap; }
    .ws-cycle-mi:hover { background:#F4FBF7; }
    .ws-cycle-mi.on { background:#EAF7F1; font-weight:600; color:#1F7A63; }
    .csb-node { display:flex; flex-direction:column; align-items:center; gap:2px; cursor:pointer; position:relative; z-index:2; flex-shrink:0; padding:2px 4px; }
    .csb-node .csb-dot { width:26px; height:26px; border-radius:50%; display:flex; align-items:center; justify-content:center; font-size:11.5px; font-weight:700; background:#fff; border:2px solid var(--color-border, #D8DCD6); color:var(--color-text-tertiary); transition:all .15s; }
    .csb-node .csb-lbl { font-size:10.5px; color:var(--color-text-tertiary); white-space:nowrap; font-weight:500; }
    .csb-node.done .csb-dot { background:#52c41a; border-color:#52c41a; color:#fff; }
    .csb-node.done .csb-lbl { color:#52c41a; }
    .csb-node.active .csb-dot { background: var(--primary-text); border-color: var(--primary-text); color:#fff; box-shadow:0 0 0 3px rgba(42,111,110,0.15); }
    .csb-node.active .csb-lbl { color:var(--primary, #2A6F6E); font-weight:700; }
    .csb-node.locked { cursor:not-allowed; }
    .csb-node.locked .csb-dot { opacity:0.45; }
    .csb-node.merged .csb-dot { background: var(--primary-grad-deep); border-color: var(--primary-text); color:#fff; position:relative; }
    .csb-node.merged .csb-dot::after { content:'3+4'; position:absolute; bottom:-5px; right:-8px; font-size:7.5px; font-weight:700; background:var(--warn, #C2884A); color:#fff; padding:0 3px; border-radius:6px; line-height:1.4; }
    .csb-node.viewing .csb-dot { background:#13c2c2; border-color:#13c2c2; color:#fff; box-shadow:0 0 0 3px rgba(19,194,194,0.15); }
    .csb-node.viewing .csb-lbl { color:#13c2c2; font-weight:700; }
    .csb-connector { flex:1; height:2px; background:var(--color-border, #D8DCD6); margin:0 -2px; margin-bottom:14px; z-index:1; min-width:8px; }
    .csb-connector.done { background:#52c41a; }
    .csb-stat { font-size:9.5px; color:var(--ink-400); white-space:nowrap; margin-top:1px; }
    .csb-stat.warn { color:var(--warn, #C2884A); }

    /* v2.8.0 AB 对比表增强 */
    .ab-compare-table { width:100%; border-collapse:separate; border-spacing:0; border-radius:var(--r-md, 12px); border:1px solid var(--line,rgba(0,0,0,0.06)); font-size:13px; overflow:hidden; }
    .ab-compare-table th { background:var(--primary-700, #287F66); color:#fff; padding:10px 12px; text-align:left; font-weight:600; font-size:12.5px; }
    .ab-compare-table th.chosen-a { background:var(--primary, #2A6F6E); }
    .ab-compare-table th.chosen-b { background:var(--primary, #2A6F6E); }
    .ab-compare-table td { padding:9px 12px; border-top:1px solid var(--line,rgba(0,0,0,0.06)); vertical-align:middle; }
    .ab-compare-table tr:nth-child(even) td { background:var(--color-surface, #FAF7F0); }
    .ab-compare-table tr.diff-row td { background:var(--warn-soft, #FBF1DC) !important; }
    .ab-compare-table tr.diff-row td:first-child { font-weight:700; color:var(--warn-700, #8A5A12); }
    .ab-diff-dots { display:inline-flex; gap:2px; margin-left:6px; vertical-align:middle; }
    .ab-diff-dots .dot { width:7px; height:7px; border-radius:50%; background:var(--ink-200, #D4D4D8); }
    .ab-diff-dots .dot.on { background:var(--warn, #C2884A); }
    .ab-summary-bar { background:linear-gradient(135deg,rgba(var(--primary-rgb), 0.06),rgba(194,136,74,0.06)); border:1px solid var(--color-border-light, #ECEEEA); border-radius:var(--r-md, 12px); padding:12px 14px; margin-bottom:12px; font-size:12.5px; line-height:1.7; color:var(--ink-700, #3A3A3C); }
    .ab-summary-bar b { color:var(--primary, #2A6F6E); }
    .ab-reco { display:inline-flex; align-items:center; gap:4px; background:var(--primary-50, #EDFAF5); color:var(--primary-text); font-weight:600; padding:2px 8px; border-radius:6px; font-size:11.5px; margin-top:4px; }

    /* v2.8.0 Stage5 导出页 */
    .export-summary-grid { display:grid; grid-template-columns:repeat(5,1fr); gap:8px; margin-bottom:12px; }
    .export-sum-card { background:var(--color-surface, #FAF7F0); border-radius:var(--r-md, 10px); padding:10px 8px; text-align:center; border:1px solid var(--line,rgba(0,0,0,0.04)); }
    .export-sum-card .ico { font-size:20px; margin-bottom:3px; }
    .export-sum-card .ttl { font-size:11px; font-weight:700; color:var(--ink-800, #1D1D1F); margin-bottom:2px; }
    .export-sum-card .txt { font-size:10.5px; color:var(--ink-500, #6E6E73); line-height:1.4; }
    .export-confirm-bar { background:var(--ok-soft, #E3F7EF); border:1px solid rgba(var(--ok-rgb), 0.3); border-radius:var(--r-md, 12px); padding:10px 14px; display:flex; align-items:center; gap:8px; font-size:13px; font-weight:600; color:var(--ok-700, #176B46); margin-bottom:12px; }

    @media (max-width:1100px) { .export-summary-grid { grid-template-columns:repeat(3,1fr); } }

    /* ===== v1.5: 右栏对话 ===== */
    .chat-pane { display:flex; flex-direction:column; min-height:0; overflow:hidden; background:var(--color-bg, #F7FAF9); border-left:1px solid var(--color-border-light, #ECEEEA); }
    .chat-pane-head { flex-shrink:0; padding:12px 16px; background:var(--color-surface, #FAF7F0); border-bottom:1px solid var(--color-border-light, #ECEEEA); display:flex; align-items:center; gap:10px; }
    .chat-pane-head .cp-av { width:34px; height:34px; border-radius:10px; background: var(--primary-grad-deep); color:#fff; display:flex; align-items:center; justify-content:center; font-size:15px; font-weight:600; }
    .chat-pane-head .cp-who b { font-size:14px; color:var(--color-text-primary); }
    .chat-pane-head .cp-who span { font-size:11px; color:var(--color-text-tertiary); display:block; }
    .chat-pane-body { flex:1; min-height:0; overflow-y:auto; padding:14px 14px 6px; }
    .chat-pane-input { flex-shrink:0; padding:8px 12px 12px; background:var(--color-surface, #FAF7F0); border-top:1px solid var(--color-border-light, #ECEEEA); }

    /* v1.5 智诊4Step */
    .diag-step { background:#fff; border:1px solid var(--color-border-light, #ECEEEA); border-radius:12px; margin-bottom:12px; overflow:hidden; }
    .diag-step-head { padding:12px 16px; display:flex; align-items:center; gap:10px; cursor:pointer; background:var(--color-surface, #FAF7F0); border-bottom:1px solid var(--color-border-light, #ECEEEA); }
    .diag-step-head .ds-num { width:26px; height:26px; border-radius:8px; background:var(--color-primary, #3FB89B); color:#fff; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; flex-shrink:0; }
    .diag-step-head .ds-title { font-size:14px; font-weight:600; color:var(--color-text-primary); flex:1; }
    .diag-step-body { padding:14px 16px; }
    .flow-svg-wrap { width:100%; overflow-x:auto; padding:8px 0; }
    .flow-node { cursor:pointer; }
    .flow-node rect { transition:all .15s; }
    .flow-node:hover rect { stroke-width:2.5; }
    @media (max-width:1200px) { .chat-shell { grid-template-columns:240px 1fr; } .chat-pane { display:none; } }
    @media (max-width:900px) { .chat-shell { grid-template-columns:200px 1fr; } .step-cards { grid-template-columns:repeat(5,minmax(80px,1fr)); } }
    .stage-title { height:60px; flex-shrink:0; display:flex; flex-direction:column; justify-content:center; gap:2px; }
    .stage-title b { font-size:var(--fs-xl, 20px); color:var(--ink-900, #1D1D1F); font-weight:700; line-height:1.2; }
    .stage-title span { font-size:var(--fs-sm, 13px); color:var(--ink-500, #6E6E73); line-height:1.3; }
    .stage-scroll { flex:1; min-height:0; overflow-y:auto; display:flex; flex-direction:column; gap:12px; padding-right:2px; }
    .stage-foot { height:80px; flex-shrink:0; display:flex; align-items:center; gap:10px; padding-top:4px; }
    .stage-card { background:var(--color-card, #fff); border:1px solid var(--line,rgba(0,0,0,0.06)); border-radius:var(--r-lg, 16px); box-shadow:var(--sh-sm); padding:14px; }
    .stage-card-title { font-size:var(--fs-base, 14px); font-weight:700; color:var(--ink-900, #1D1D1F); margin-bottom:10px; }
    .stage-sub { font-size:var(--fs-sm, 13px); color:var(--ink-500, #6E6E73); }
    .stage-warn { background:var(--warn-soft, #FBF1DC); border-left:3px solid var(--warn, #E0A33C); border-radius:var(--r-md, 12px); padding:10px 12px; font-size:var(--fs-sm, 13px); color:#7A5412; line-height:1.5; }
    .stage-upload { border:1.5px dashed var(--primary, #3FB89B); border-radius:var(--r-lg, 16px); background:var(--primary-50,var(--color-primary-lighter, #EDFAF5)); padding:18px 14px; text-align:center; cursor:pointer; transition:all var(--t-fast, 140ms); }
    .stage-upload:hover { background:var(--primary-100, #D6F5EC); border-color: var(--primary-text); }
    .stage-upload-icon { font-size:28px; color:var(--primary, #3FB89B); margin-bottom:6px; }
    .stage-upload-title { font-size:var(--fs-md, 15px); font-weight:600; color:var(--ink-900, #1D1D1F); }
    .stage-upload-desc { font-size:var(--fs-sm, 13px); color:var(--ink-500, #6E6E73); margin-top:4px; }
    .stage-metric-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
    .stage-metric { background:var(--color-surface, #FAF7F0); border-radius:var(--r-sm, 8px); padding:10px; }
    .stage-metric .k { font-size:11px; color:var(--ink-500, #6E6E73); }
    .stage-metric .v { font-size:18px; font-weight:700; color:var(--ink-900, #1D1D1F); margin-top:2px; }
    .stage-report-item { background:var(--color-surface, #FAF7F0); border:1px solid var(--line,rgba(0,0,0,0.06)); border-radius:var(--r-md, 12px); padding:10px; margin-bottom:8px; }
    .stage-report-item:last-child { margin-bottom:0; }
    .stage-report-row { display:flex; justify-content:space-between; gap:8px; align-items:center; }
    .stage-report-name { font-size:var(--fs-base, 14px); font-weight:600; color:var(--ink-900, #1D1D1F); }
    .stage-report-meta { font-size:var(--fs-sm, 13px); color:var(--ink-500, #6E6E73); margin-top:4px; }
    .stage-matrix { display:grid; grid-template-columns:1fr 1fr; gap:8px; }
    .stage-matrix-cell { border-radius:var(--r-md, 12px); padding:10px; }
    .stage-matrix-cell h5 { margin:0 0 6px; font-size:12px; font-weight:700; }
    .stage-matrix-cell p { margin:0; font-size:var(--fs-sm, 13px); color:var(--ink-500, #6E6E73); line-height:1.5; }
    .stage-fit { display:flex; flex-direction:column; gap:8px; }
    .stage-fit-item { display:flex; gap:10px; align-items:flex-start; }
    .stage-fit-dot { width:28px; height:28px; border-radius:50%; display:grid; place-items:center; color:#fff; font-weight:700; flex-shrink:0; background: var(--primary-700); }
    .stage-fit-item h5 { margin:0 0 2px; font-size:var(--fs-base, 14px); color:var(--ink-900, #1D1D1F); }
    .stage-fit-item p { margin:0; font-size:var(--fs-sm, 13px); color:var(--ink-500, #6E6E73); line-height:1.45; }
    .stage-dim-grid { display:grid; grid-template-columns:1fr; gap:10px; }
    .stage-dim-card { border-radius:var(--r-md, 12px); padding:12px; background:var(--color-surface, #FAF7F0); border:1px solid var(--line,rgba(0,0,0,0.06)); }
    .stage-dim-card h5 { margin:0 0 8px; font-size:var(--fs-base, 14px); font-weight:700; color:var(--ink-900, #1D1D1F); }
    .stage-dim-card ul { margin:0; padding-left:16px; color:var(--ink-700, #3A3A3C); font-size:var(--fs-sm, 13px); line-height:1.7; }
    .stage-table { width:100%; border-collapse:separate; border-spacing:0; overflow:hidden; border-radius:var(--r-md, 12px); border:1px solid var(--line,rgba(0,0,0,0.06)); font-size:var(--fs-sm, 13px); }
    .stage-table th { background:var(--primary-700, #287F66); color:#fff; padding:9px 10px; text-align:left; font-weight:600; }
    .stage-table td { padding:9px 10px; border-top:1px solid var(--line,rgba(0,0,0,0.06)); vertical-align:top; }
    .stage-table tr:nth-child(even) td { background:var(--color-surface, #FAF7F0); }
    .stage-diff { background:var(--warn-soft, #FBF1DC); font-weight:600; }
    .stage-btn-primary { width:100%; height:42px; border:none; border-radius:var(--r-md, 12px); background: var(--primary-700); color:#fff; font-size:var(--fs-md, 15px); font-weight:700; cursor:pointer; box-shadow:var(--sh-glow); }
    .stage-btn-primary:disabled { background:var(--ink-200, #D4D4D8); box-shadow:none; cursor:not-allowed; }
    .stage-btn-secondary { height:42px; border:none; border-radius:var(--r-md, 12px); background:var(--primary-50,var(--color-primary-lighter, #EDFAF5)); color:var(--primary, #3FB89B); font-size:var(--fs-md, 15px); font-weight:600; cursor:pointer; padding:0 18px; }
    .stage-btn-secondary:hover { background:var(--primary-100, #D6F5EC); }
    .stage-switch { width:42px; height:24px; border-radius:999px; background:var(--ink-200, #D4D4D8); position:relative; border:none; padding:0; cursor:pointer; flex-shrink:0; }
    .stage-switch.on { background:var(--primary, #3FB89B); }
    .stage-switch::after { content:''; position:absolute; top:3px; left:3px; width:18px; height:18px; background:#fff; border-radius:50%; transition:left var(--t-fast); box-shadow:var(--sh-sm); }
    .stage-switch.on::after { left:21px; }
    .stage-input { width:100%; height:38px; border:1px solid var(--ink-200, #D4D4D8); border-radius:var(--r-sm, 8px); padding:0 10px; font-size:var(--fs-base, 14px); color:var(--ink-900, #1D1D1F); background:#fff; box-sizing:border-box; }
    .chat-body { min-height: 0 !important; }
    .chat-input.proto-input { flex-shrink: 0; }
    .chat-head { display: flex; align-items: center; gap: 14px; padding: 18px 24px; border-bottom: 1px solid var(--color-border-light, #ECEEEA); background: rgba(255,255,255,0.6); backdrop-filter: blur(12px); }
    .chat-head .av { width: 42px; height: 42px; border-radius: 13px; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-weight: 600; }
    .chat-head .who b { font-size: 15px; font-weight: 600; display: block; }
    .chat-head .who span { font-size: 12px; color: var(--ink-400, #8E8E93); }
    .chat-head .spacer { flex: 1; }
    .chat-body { flex: 1; overflow-y: auto; padding: 16px 22px; display: flex; flex-direction: column; gap: 14px; min-height: 0; }
    .msg { max-width: 74%; padding: 14px 18px; border-radius: 18px; font-size: 14px; line-height: 1.6; white-space: pre-wrap; }
    .msg.ai { align-self: flex-start; background: var(--color-card, #F7FAF9); border: 1px solid var(--color-border-light, #ECEEEA); border-bottom-left-radius: 6px; color: var(--color-text-primary, #1D1D1F); box-shadow: 0 4px 12px rgba(20,48,43,0.06); }
    .msg.me { align-self: flex-end; background: var(--primary-grad-deep); color: #fff; border-bottom-right-radius: 6px; box-shadow: 0 8px 24px rgba(var(--primary-rgb), 0.3); }
    .msg .meta { font-size: 11px; opacity: .6; margin-top: 6px; }
    .msg .sources-tag { margin-top: 8px; font-size: 12px; opacity: .7; }
    .chat-input { display: flex; align-items: center; gap: 12px; padding: 10px 20px; border-top: 1px solid var(--color-border-light, #ECEEEA); background: rgba(255,255,255,0.6); backdrop-filter: blur(12px); }
    .chat-input .box { flex: 1; display: flex; align-items: center; gap: 10px; background: var(--color-card, #F7FAF9); border: 1px solid var(--color-border, #B8BFB9); border-radius: 999px; padding: 10px 18px; }
    .chat-input .box input { flex: 1; border: none; background: none; font-size: 14px; outline: none; color: var(--color-text-primary, #1D1D1F); }
    .chat-input .send { width: 44px; height: 44px; border-radius: 50%; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; cursor: pointer; box-shadow: 0 8px 24px rgba(var(--primary-rgb), 0.3); flex-shrink: 0; border: none; }
    .chat-aside { background: var(--color-card, #F7FAF9); border-left: 1px solid var(--color-border-light, #ECEEEA); overflow-y: auto; padding: 24px; }
    .chat-aside h4 { font-size: 13px; font-weight: 600; color: var(--ink-400, #8E8E93); text-transform: uppercase; letter-spacing: 1px; margin-bottom: 14px; }
    .chat-aside .prof { text-align: center; margin-bottom: 24px; }
    .chat-aside .prof .av { width: 72px; height: 72px; border-radius: 22px; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-size: 28px; font-weight: 600; margin: 0 auto 12px; box-shadow: 0 8px 24px rgba(var(--primary-rgb), 0.3); }
    .chat-aside .prof .nm { font-size: 18px; font-weight: 600; }
    .chat-aside .prof .mt { font-size: 12px; color: var(--ink-400, #8E8E93); }
    .chat-aside .stat { display: flex; justify-content: space-between; padding: 11px 0; border-bottom: 1px solid var(--color-border-light, #ECEEEA); font-size: 13px; }
    .chat-aside .stat .k { color: var(--ink-500, #6E6E73); }
    .chat-aside .stat .v { font-weight: 600; font-family: var(--font-num); }
    /* ===== Hotfix4: AI问询 CaseChatPage 原型风格 ===== */

    /* FIX 1: 左侧搜索框底色与原型一致 */
    .chat-list .chat-search-box {
      padding: 10px 12px 8px;
      border-bottom: 1px solid var(--color-border-light, #ECEEEA);
      background: var(--color-surface, #F7FAF9);
    }
    .chat-list .chat-search-box .ant-input-affix-wrapper {
      background: var(--color-card, #FFFFFF) !important;
      border: 1px solid var(--color-border-light, #ECEEEA) !important;
      border-radius: 12px !important;
      padding: 0 11px !important;
      height: 34px !important;
    }
    .chat-list .chat-search-box .ant-input-affix-wrapper:hover,
    .chat-list .chat-search-box .ant-input-affix-wrapper-focused {
      border-color: var(--color-primary, #3FB89B) !important;
      box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.1) !important;
    }
    .chat-list .chat-search-box .ant-input {
      font-size: 12px !important;
      background: transparent !important;
    }
    .chat-list .chat-search-box .ant-input-prefix {
      color: var(--color-text-quaternary, #8E8E93) !important;
      margin-right: 6px !important;
    }

    /* FIX 2+3: 用户列表时间分层 + 去掉状态标识 + 右侧显示最后联系时间 */
    .chat-list .time-section-label {
      font-size: 11px;
      font-weight: 600;
      color: var(--color-text-quaternary, #8E8E93);
      padding: 10px 12px 6px;
      text-transform: none;
      letter-spacing: 0;
    }
    .chat-list .cli .info .n {
      display: flex;
      justify-content: space-between;
      align-items: center;
    }
    .chat-list .cli .info .n .cli-name {
      font-size: 13px;
      font-weight: 600;
      color: var(--color-text-primary, #1D1D1F);
    }
    .chat-list .cli .info .n .cli-time {
      font-size: 11px;
      color: var(--color-text-quaternary, #8E8E93);
      font-weight: 400;
      flex-shrink: 0;
      margin-left: 8px;
    }
    .chat-list .cli .cli-del-btn { opacity: 1 !important; }
    .chat-list .cli .info .p {
      font-size: 12px;
      color: var(--color-text-tertiary, #6E6E73);
      margin-top: 2px;
    }

    /* FIX 4: 中间对话框面板上方用户名模块色调与原型一致 */
    .chat-head-proto {
      display: flex;
      align-items: center;
      gap: 14px;
      padding: 10px 18px;
      border-bottom: 1px solid var(--color-border-light, #ECEEEA);
      background: rgba(255,255,255,0.6);
      backdrop-filter: blur(12px);
      flex-shrink: 0;
    }
    .chat-head-proto .chat-av {
      width: 40px;
      height: 40px;
      border-radius: 12px;
      background: var(--primary-grad-deep);
      color: #fff;
      display: grid;
      place-items: center;
      font-weight: 600;
      font-size: 15px;
      flex-shrink: 0;
    }
    .chat-head-proto .chat-who {
      flex: 1;
      min-width: 0;
    }
    .chat-head-proto .chat-who b {
      font-size: 14px;
      font-weight: 600;
      color: var(--color-text-primary, #1D1D1F);
      display: block;
    }
    .chat-head-proto .chat-who span {
      font-size: 12px;
      color: var(--color-text-tertiary, #6E6E73);
    }
    .chat-head-proto .chat-mode-group {
      display: flex;
      align-items: center;
      gap: 14px;
      margin-right: 8px;
    }
    .chat-head-proto .chat-mode-group label {
      display: flex;
      align-items: center;
      gap: 6px;
      font-size: 12px;
      font-weight: 500;
      color: var(--color-text-tertiary, #6E6E73);
      cursor: pointer;
      margin: 0;
    }
    .chat-head-proto .chat-mode-group input[type="radio"] {
      accent-color: var(--color-primary, #3FB89B);
      width: 14px;
      height: 14px;
      cursor: pointer;
    }
    .chat-head-proto .chat-view-btn {
      font-size: 12px !important;
      border-radius: 10px !important;
      height: 30px !important;
      padding: 0 14px !important;
    }

    /* FIX 5: 右侧客户档案面板字段排版与原型一致 */
    .chat-aside.proto-aside {
      padding: 20px 18px;
      background: var(--color-card, #F7FAF9);
      border-left: 1px solid var(--color-border-light, #ECEEEA);
    }
    .chat-aside.proto-aside h4 {
      font-size: 12px;
      font-weight: 600;
      color: var(--color-text-quaternary, #8E8E93);
      text-transform: none;
      letter-spacing: 0;
      margin: 0 0 12px 0;
    }
    .chat-aside.proto-aside .aside-prof {
      text-align: center;
      margin-bottom: 20px;
    }
    .chat-aside.proto-aside .aside-prof .ap-av {
      width: 64px;
      height: 64px;
      border-radius: 20px;
      background: var(--primary-grad-deep);
      color: #fff;
      display: grid;
      place-items: center;
      font-size: 24px;
      font-weight: 600;
      margin: 0 auto 10px;
      box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.25);
    }
    .chat-aside.proto-aside .aside-prof .ap-nm {
      font-size: 16px;
      font-weight: 600;
      color: var(--color-text-primary, #1D1D1F);
    }
    .chat-aside.proto-aside .aside-prof .ap-mt {
      font-size: 12px;
      color: var(--color-text-tertiary, #6E6E73);
      margin-top: 2px;
    }
    .chat-aside.proto-aside .aside-stat {
      display: flex;
      justify-content: space-between;
      padding: 10px 0;
      border-bottom: 1px solid var(--color-border-light, #ECEEEA);
      font-size: 12px;
    }
    .chat-aside.proto-aside .aside-stat:last-child {
      border-bottom: none;
    }
    .chat-aside.proto-aside .aside-stat .k {
      color: var(--color-text-tertiary, #6E6E73);
    }
    .chat-aside.proto-aside .aside-stat .v {
      font-weight: 600;
      color: var(--color-text-primary, #1D1D1F);
      font-family: "SF Pro Display", -apple-system, sans-serif;
    }
    .chat-aside.proto-aside .aside-section {
      margin-bottom: 20px;
    }
    .chat-aside.proto-aside .aside-tags {
      display: flex;
      flex-wrap: wrap;
      gap: 6px;
    }
    .chat-aside.proto-aside .aside-tag {
      padding: 4px 10px;
      border-radius: 999px;
      background: var(--color-primary-lighter, #EDFAF5);
      color: var(--color-primary, #3FB89B);
      font-size: 11px;
      font-weight: 500;
    }

    /* FIX 6: 输入框比例、icon、文案与原型一致 */
    .chat-input.proto-input {
      display: flex;
      align-items: center;
      gap: 12px;
      padding: 14px 24px;
      border-top: 1px solid var(--color-border-light, #ECEEEA);
      background: rgba(255,255,255,0.6);
      backdrop-filter: blur(12px);
    }
    .chat-input.proto-input .proto-box {
      flex: 1;
      display: flex;
      align-items: center;
      gap: 10px;
      background: var(--color-card, #FFFFFF);
      border: 1px solid var(--color-border, #B8BFB9);
      border-radius: 999px;
      padding: 10px 20px;
      transition: all 0.2s;
    }
    .chat-input.proto-input .proto-box:focus-within {
      border-color: var(--color-primary, #3FB89B);
      box-shadow: 0 0 0 3px rgba(var(--primary-rgb), 0.1);
    }
    .chat-input.proto-input .proto-box input {
      flex: 1;
      border: none;
      background: none;
      font-size: 13px;
      outline: none;
      color: var(--color-text-primary, #1D1D1F);
    }
    .chat-input.proto-input .proto-send {
      width: 40px;
      height: 40px;
      border-radius: 50%;
      background: var(--primary-grad-deep);
      color: #fff;
      display: grid;
      place-items: center;
      cursor: pointer;
      box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.3);
      flex-shrink: 0;
      border: none;
      transition: all 0.2s;
    }
    .chat-input.proto-input .proto-send:hover {
      transform: scale(1.05);
      box-shadow: 0 6px 18px rgba(var(--primary-rgb), 0.4);
    }
    .chat-input.proto-input .proto-send svg {
      width: 18px;
      height: 18px;
    }

    /* ====== 智诊中枢 v3.0 蓝本样式（1:1 精确还原） ====== */
    .v3-app{
      --bg-app:#F2F8F4; --surface:#FFFFFF; --surface-2:#F7FAF9; --surface-3:#EEF5F2;
      --ink-900:#1D1D1F; --ink-700:#3A3A3C; --ink-500:#6E6E73; --ink-400:#8E8E93; --ink-300:#AEAEB2;
      --primary:#3FB89B; --primary-600:#2F9E83; --primary-700:#287F66; --primary-text:#267A63;
      --primary-grad:linear-gradient(135deg,#6FE0C8 0%,#3FB89B 100%);
      --primary-grad-deep:linear-gradient(135deg,#287F66 0%,#216D58 100%);
      --primary-grad-soft:linear-gradient(135deg,rgba(111,224,200,.16),rgba(63,184,155,.16));
      --accent:#FF9F68; --accent-grad:linear-gradient(135deg,#FFC9AE 0%,#FF9F68 100%);
      --ok:#4CD4A0; --ok-soft:#E3F7EF; --warn:#E0A33C; --warn-soft:#FBF1DC;
      --danger:#FF7A6B; --danger-soft:#FFE9E5; --info:#5AC8FA; --info-soft:#E6F5FE;
      --line:rgba(0,0,0,0.06); --line-strong:rgba(0,0,0,0.1);
      --font:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","PingFang SC","Helvetica Neue",sans-serif;
      --num:"SF Pro Display",-apple-system,"Helvetica Neue",sans-serif;
      --fs-xs:12px; --fs-sm:13px; --fs-base:14px; --fs-md:15px; --fs-lg:17px; --fs-xl:20px;
      --r-sm:8px; --r-md:12px; --r-lg:16px; --r-pill:999px;
      --sh-sm:0 1px 2px rgba(20,48,43,.04),0 1px 3px rgba(20,48,43,.03);
      --sh-md:0 4px 18px rgba(20,48,43,.07),0 2px 6px rgba(20,48,43,.04);
      --sh-glow:0 8px 28px rgba(63,184,155,.22);
      --ease:cubic-bezier(.4,0,.2,1); --t-fast:140ms var(--ease); --t-norm:260ms var(--ease);
      --lvl-up:#7C5CD6; --lvl-mid:#D98E2B; --lvl-down:#2FA8DC; --loop:#FF7A6B; --pf-c:#3FB89B;
      /* deploy18-D11：--lvl-* 三色已不再用于节点/边（改走 D1–D8 覆盖段），保留以便回滚；--loop 对齐系统 danger */
    }
    .v3-app {height:100%;min-height:0;display:flex;flex-direction:column;overflow:hidden}
/* 批 V2-24：干预思路卡 v2 样式（① 干预优先级 ② 阶段目标 ③ 三维度路径）
   ⚠️ 用 .v3-app 前缀提高特异性，以覆盖早前无前缀的旧 .ipc-gap/.ipc-sup 等全局规则 */
/* 批 V2-25：干预路径 · 4 步顺序（断 → 补 → 建与修 → 调）+ 关注重点
   ⚠️ 全部带 .v3-app 前缀提高特异性（覆盖早期无前缀的旧 .ipc-* 规则） */
/* 🔴 批V2-26：补回 V2-25 误删的样式（干预优先级 / 阶段目标 / 高杠杆）——
   上批替换 CSS 时把范围算错，导致这三组规则被删、两个区块完全无样式（用户 19:47 报「排版又错了」）。 */
.v3-app .ipc-pri{margin-bottom:14px}
.v3-app .ipc-pri-tbl{border:1px solid #E9EDEB;border-radius:11px;overflow:hidden;background:#fff}
.v3-app .ipc-pri-row{display:grid;grid-template-columns:106px 1fr;border-bottom:1px solid #F3F4F6}
.v3-app .ipc-pri-row:last-child{border-bottom:none}
.v3-app .ipc-pri-row.empty{opacity:.55}
.v3-app .ipc-pri-lv{background:#FAFBFB;border-right:1px solid #EEF1F0;padding:8px 9px;display:flex;flex-direction:column;gap:2px;justify-content:center}
.v3-app .ipc-pri-lv.l1{background:#FDF6F5}
.v3-app .ipc-pri-lvn{font-size:11.5px;font-weight:700;color:#4A4A4C;line-height:1.4}
.v3-app .ipc-pri-lv.l1 .ipc-pri-lvn{color:#B03A2E}
.v3-app .ipc-pri-lvc{font-size:10.5px;color:#9CA3AF}
.v3-app .ipc-pri-items{padding:8px 11px;display:flex;flex-direction:column;gap:8px;min-width:0}
.v3-app .ipc-pri-i{border-left:2px solid #E4EDE9;padding:2px 0 2px 9px;min-width:0}
.v3-app .ipc-pri-i:first-child{padding-top:0}
.v3-app .ipc-pri-line{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.v3-app .ipc-lev{font-size:10px;font-weight:700;color:var(--warn-700);background:#FDE9C8;border:1px solid #E8C88A;border-radius:5px;padding:0 5px;white-space:nowrap}
.v3-app .ipc-pri-p{font-size:12.5px;font-weight:600;color:#2A2A2C}
.v3-app .ipc-pri-med{font-size:10px;font-weight:700;color:#B03A2E;background:#FDECEA;border-radius:4px;padding:1px 5px;white-space:nowrap}
.v3-app .ipc-lev-edit{font-size:10px;color:var(--ink-400);border:1px solid #E4E7E6;border-radius:4px;padding:0 4px;cursor:pointer;margin-left:auto;white-space:nowrap;flex:none}
.v3-app .ipc-lev-edit:hover{color:var(--primary-deep);border-color:#CBE7DC;background:#F7FBF9}
.v3-app .ipc-pri-m{font-size:11.5px;color:#4A4A4C;margin-top:2px}
.v3-app .ipc-pri-lw{font-size:11px;color:var(--warn-700);margin-top:2px}
.v3-app .ipc-pri-r{font-size:11px;color:var(--ink-400);margin-top:2px}
.v3-app .ipc-pri-none{font-size:11.5px;color:#B0B6BB}
.v3-app .ipc-goals{margin-bottom:14px}
.v3-app .ipc-goal{border:1px solid #C9D8F2;border-radius:11px;overflow:hidden;margin-bottom:9px;background:#fff}
.v3-app .ipc-goal:last-child{margin-bottom:0}
.v3-app .ipc-goal-h{background:#EEF3FC;padding:8px 12px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;border-bottom:1px solid #C9D8F2}
.v3-app .ipc-goal-tag{font-size:10.5px;font-weight:700;color:#fff;background:#3B5EA8;border-radius:5px;padding:1px 7px;white-space:nowrap}
.v3-app .ipc-goal-tag.next{background:#9CA3AF}
.v3-app .ipc-goal-t{font-size:13px;font-weight:700;color:#2A3F6B}
.v3-app .ipc-goal-s{font-size:11.5px;color:#5A6E96;padding:5px 12px 0;background:#fff}
.v3-app .ipc-goal-body{display:grid;grid-template-columns:116px 1fr}
.v3-app .ipc-goal-row{display:contents}
.v3-app .ipc-goal-k{background:#FBFCFE;padding:8px 11px;font-size:11.5px;font-weight:700;color:#3B5EA8;border-right:1px solid #E4EBF8;border-bottom:1px solid #F0F4FB;line-height:1.5;overflow-wrap:anywhere}
.v3-app .ipc-goal-v{padding:8px 12px;font-size:12.5px;color:#4A4A4C;line-height:1.7;border-bottom:1px solid #F0F4FB;overflow-wrap:anywhere;min-width:0}
.v3-app .ipc-goal-lk{padding:7px 12px;display:flex;align-items:center;gap:5px;flex-wrap:wrap;background:#FAFCFF}
.v3-app .ipc-goal-lkk{font-size:10.5px;color:#5A6E96;font-weight:700;margin-right:2px}
/* 🔴 批V2-26b：继续补回 V2-25 误删的规则（上一步只补了 pri/goal/lev，
   本步用「V2-24 全量 CSS × 当前代码使用情况」对比法找出其余缺失项）。 */
.v3-app .ipc-v219{margin:10px 0 14px}
.v3-app .ipc-sec-h{display:flex;align-items:baseline;gap:8px;margin:0 0 9px;flex-wrap:wrap}
.v3-app .ipc-sec-t{font-size:13.5px;font-weight:700;color:var(--primary-deep)}
.v3-app .ipc-sec-s{font-size:11px;color:var(--ink-400)}
.v3-app .ipc-kbwarn{font-size:11px;color:var(--warn-text);background:var(--warn-soft);border-radius:5px;padding:4px 8px;margin-bottom:8px}
.v3-app .ipc-path{margin-bottom:4px}
/* 🔴 批V2-26b：idle 占位卡（原一直无专属样式，借用 .ipc-card 基础样式） */
.v3-app .ipc-card.ipc-idle{background:#FAFBFB;border-style:dashed}
.v3-app .ipc-px-list{display:flex;flex-direction:column;gap:10px}
.v3-app .ipc-px{border:1px solid #E9EDEB;border-radius:12px;overflow:hidden;background:#fff}
.v3-app .ipc-px-h{display:flex;align-items:baseline;gap:8px;padding:8px 12px;border-bottom:1px solid #EEF1F0;flex-wrap:wrap}
.v3-app .ipc-px-no{font-size:10.5px;font-weight:700;color:#fff;border-radius:5px;padding:1px 6px;white-space:nowrap;flex:none}
.v3-app .ipc-px-t{font-size:13px;font-weight:700}
.v3-app .ipc-px-for{font-size:10.5px;color:var(--ink-400);margin-left:auto;overflow-wrap:anywhere}
.v3-app .ipc-px-b{padding:9px 12px;font-size:12.5px;color:#4A4A4C;line-height:1.7;min-width:0}
.v3-app .ipc-px-cap{font-size:11.5px;font-weight:700;margin-bottom:6px}
.v3-app .ipc-px-item{display:grid;grid-template-columns:158px 1fr;gap:9px;padding:6px 0;border-bottom:1px dashed #F0F2F1;align-items:start}
.v3-app .ipc-px-item:last-child{border-bottom:none}
.v3-app .ipc-px-nm{font-weight:600;color:#2A2A2C;font-size:12.5px;overflow-wrap:anywhere}
.v3-app .ipc-px-bd{color:var(--ink-500);font-size:12px;line-height:1.65;overflow-wrap:anywhere;min-width:0}
.v3-app .ipc-px-dim{display:grid;grid-template-columns:52px 1fr;gap:9px;padding:6px 0;border-bottom:1px dashed #F0F2F1;align-items:start}
.v3-app .ipc-px-dim:last-child{border-bottom:none}
.v3-app .ipc-px-dn{font-size:11.5px;font-weight:700;color:var(--primary-deep);background:#EAF4F0;border-radius:6px;text-align:center;line-height:1.8}
.v3-app .ipc-px-db{color:var(--ink-500);font-size:12px;line-height:1.65;overflow-wrap:anywhere;min-width:0}
.v3-app .ipc-px-tx{color:#4A4A4C;overflow-wrap:anywhere}
.v3-app .ipc-px-none{color:#B0B6BB;font-size:11.5px}
.v3-app .ipc-px-why{font-size:11.5px;color:var(--ink-400);background:#FAFBFB;border-left:3px solid #E4EDE9;border-radius:0 6px 6px 0;padding:6px 9px;margin-top:8px}
.v3-app .ipc-px-edit{font-size:10px;color:var(--ink-400);border:1px solid #E4E7E6;border-radius:4px;padding:0 4px;cursor:pointer;margin-left:6px;white-space:nowrap}
.v3-app .ipc-px-edit:hover{color:var(--primary-deep);border-color:#CBE7DC;background:#F7FBF9}
.v3-app .ipc-px-stale{font-size:11.5px;color:var(--warn-text);background:var(--warn-soft);border:1px solid #E8CFA0;border-radius:8px;padding:7px 10px;margin-bottom:9px;display:flex;align-items:center;gap:8px;line-height:1.6}
.v3-app .ipc-px-stale-btn{margin-left:auto;font-size:11px;font-weight:700;color:#fff;background:var(--warn-text);border-radius:6px;padding:2px 9px;cursor:pointer;white-space:nowrap;flex:none}
/* 步骤配色（按顺序递减的视觉权重） */
.v3-app .ipc-px.s1 .ipc-px-h{background:#FDF6F5}
.v3-app .ipc-px.s1 .ipc-px-no{background:#A8443A}
.v3-app .ipc-px.s1 .ipc-px-t,.v3-app .ipc-px.s1 .ipc-px-cap{color:#A8443A}
.v3-app .ipc-px.s2 .ipc-px-h{background:#FFFCF6}
.v3-app .ipc-px.s2 .ipc-px-no{background:#8A6D2F}
.v3-app .ipc-px.s2 .ipc-px-t,.v3-app .ipc-px.s2 .ipc-px-cap{color:#8A6D2F}
.v3-app .ipc-px.s3 .ipc-px-h{background:#EEF3FC}
.v3-app .ipc-px.s3 .ipc-px-no{background:#3B5EA8}
.v3-app .ipc-px.s3 .ipc-px-t{color:#2A3F6B}
.v3-app .ipc-px.s4 .ipc-px-h{background:#EAF4F0}
.v3-app .ipc-px.s4 .ipc-px-no{background:var(--primary-deep)}
.v3-app .ipc-px.s4 .ipc-px-t{color:var(--primary-deep)}
.v3-app .ipc-px.focus .ipc-px-h{background:#F7FBF9}
.v3-app .ipc-px.focus .ipc-px-no{background:#5A7D72}
/* 补剂并入「补」这一步 */
.v3-app .ipc-sup-in{margin-top:10px;border-top:1px dashed #E8DEC8;padding-top:9px}
.v3-app .ipc-sup-h{font-size:11.5px;font-weight:700;color:#8A6D2F;margin-bottom:6px}
.v3-app .ipc-sup-tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:11.5px}
.v3-app .ipc-sup-tbl th{background:#FFFCF6;color:#8A6D2F;font-size:10.5px;font-weight:700;text-align:left;padding:5px 7px;border-bottom:1px solid #E8DEC8}
.v3-app .ipc-sup-tbl td{padding:6px 7px;border-bottom:1px solid #F3F4F6;vertical-align:top;line-height:1.55}
.v3-app .ipc-sup-tbl tr:last-child td{border-bottom:none}
.v3-app .ipc-sup-nm{font-weight:600;color:#2A2A2C;overflow-wrap:anywhere}
.v3-app .ipc-sup-nm.off{color:#8A93A0;text-decoration:line-through}
.v3-app .ipc-sup-ds{color:#4A4A4C;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.v3-app .ipc-sup-ds.na{color:#9CA3AF;font-style:italic}
.v3-app .ipc-sup-wy{color:var(--ink-500)}
/* 🔴 批V2-30：生成中/失败的顶部提示条（内容保留在下方） */
.v3-app .ipc-stale-note{font-size:11.5px;color:var(--warn-700);background:var(--warn-soft);border:1px solid #E8CFA0;border-radius:8px;padding:6px 10px;margin-bottom:9px}
/* 🔴 批V2-30：因果图维度基线统计 */
.causal-base{font-size:11.5px;color:#6B7280;padding:2px 0 8px}
.causal-base.warn{color:var(--warn-text);font-weight:600}
/* 🔴 批V2-29：补剂依据的「推导 / 来源」两行 */
.v3-app .ipc-sup-basis{display:block;font-size:11px;color:var(--ink-400);margin-top:2px}
.v3-app .ipc-sup-src{display:block;font-size:11px;color:#9CA3AF;margin-top:1px}
.v3-app .ipc-sup-al{color:var(--warn-text)}
.v3-app .ipc-bdg{display:inline-block;font-size:10px;font-weight:700;border-radius:4px;padding:0 5px;margin-right:5px;white-space:nowrap}
.v3-app .ipc-bdg.ok{background:#E8F5F0;color:#2E7D64}
.v3-app .ipc-bdg.med{background:var(--warn-soft);color:var(--warn-text)}
.v3-app .ipc-bdg.hold{background:#F1F3F5;color:#6B7280}

/* 待补资料与指标 —— 🔴 固定标签列（grid，非 flex）杜绝竖排 */
.v3-app .ipc-gap{margin-top:10px;border-top:1px dashed #D5E0DC;padding-top:8px}
.v3-app .ipc-gap-t{font-size:11.5px;font-weight:700;color:var(--primary-deep);margin-bottom:6px}
.v3-app .ipc-gap-blk{display:grid;grid-template-columns:66px 1fr;gap:7px;margin-bottom:5px;align-items:start}
.v3-app .ipc-gap-k{font-size:11px;font-weight:700;color:#5A7D72;line-height:1.5;overflow-wrap:anywhere;white-space:normal}
.v3-app .ipc-gap-v{font-size:11.5px;color:var(--ink-500);line-height:1.6;overflow-wrap:anywhere;min-width:0}
.v3-app .ipc-ref{display:inline-block;font-size:10.5px;color:#5A7D72;background:#EAF4F0;border-radius:4px;padding:0 5px;margin:1px 3px 1px 0}

    .v3-app * {margin:0;padding:0;box-sizing:border-box}
    .v3-app body {font-family:var(--font);background:linear-gradient(180deg,#FFF 0%,var(--bg-app) 60%,#EDF6F2 100%);color:var(--ink-900);min-height:100vh}
    
    /* 顶栏 */
    .v3-app .topbar {display:flex;align-items:center;height:52px;padding:0 16px;gap:10px;flex-shrink:0;background:rgba(255,255,255,.72);-webkit-backdrop-filter:blur(24px);backdrop-filter:blur(24px);border-bottom:1px solid rgba(var(--primary-rgb), .16);z-index:20}
    .v3-app .logo {width:32px;height:32px;border-radius:10px;background:var(--primary-grad-deep);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:15px;box-shadow:var(--sh-glow)}
    .v3-app .topbar .brand {font-size:var(--fs-lg);font-weight:600;letter-spacing:.3px}
    .v3-app .topbar .crumb {font-size:var(--fs-sm);color:var(--ink-500);margin-left:4px}
    .v3-app .topbar .spacer {flex:1}
    .v3-app .search {background:var(--surface-2);border-radius:var(--r-pill);padding:8px 16px;font-size:var(--fs-sm);color:var(--ink-400);border:1px solid transparent;width:220px}
    .v3-app .search:focus {outline:none;border-color:var(--primary);background:#fff}
    .v3-app .avatar {width:36px;height:36px;border-radius:50%;background:var(--accent-grad);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:13px}
    
    /* 主容器：三栏 */
    .v3-app .wrap {display:grid;grid-template-columns:236px minmax(0,1fr) 380px;grid-template-rows:minmax(0,100%);width:100%;height:calc(100vh - var(--nav-h));min-width:0;min-height:0;overflow:hidden}
    
    /* 左栏 客户 */
    .v3-app .side {display:none}
    .v3-app .side-item {width:56px;height:56px;border-radius:16px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:11px;color:var(--ink-500);cursor:pointer;transition:var(--t-fast)}
    .v3-app .side-item.active {background:var(--surface);color:var(--primary-text);box-shadow:var(--sh-sm);font-weight:600}
    .v3-app .side-item:hover {background:var(--surface-3)}
    .v3-app .side-item .ic {font-size:20px;line-height:1}
    
    .v3-app .clients {grid-column:1;width:236px;min-width:0;min-height:0;border-right:1px solid var(--line);background:rgba(255,255,255,.5);display:flex;flex-direction:column}
    .v3-app .clients .head {padding:16px 18px 10px;display:flex;align-items:center;justify-content:space-between}
    .v3-app .clients .head h2 {font-size:var(--fs-lg);font-weight:600}
    .v3-app .new-btn {width:28px;height:28px;border-radius:var(--r-sm);background:var(--primary-700);color:#fff;border:none;font-size:18px;cursor:pointer;box-shadow:var(--sh-glow);transition:var(--t-fast)}
    .v3-app .new-btn:hover {transform:translateY(-1px)}
    .v3-app .client-search-row {padding:4px 14px 10px;flex-shrink:0}
    .v3-app .client-search {width:100%;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-pill);padding:8px 14px;font-size:var(--fs-sm);color:var(--ink-700);outline:none;transition:var(--t-fast)}
    .v3-app .client-search:focus {border-color:var(--primary);background:#fff}
    .v3-app .cust-card .cust-text {flex:1;min-width:0}
    .v3-app .clist {width:236px;background:var(--surface);border-right:1px solid var(--line-strong);display:flex;flex-direction:column;flex:1 1 auto;min-height:0}
    .v3-app .clist-hd {display:flex;align-items:center;gap:8px;padding:14px 16px 10px}
    .v3-app .clist-hd .t {font-size:14px;font-weight:800}
    .v3-app .clist-hd .cnt {font-size:10.5px;color:var(--ink-400);background:var(--surface-2);border-radius:10px;padding:1px 7px}
    .v3-app .clist-hd .add {margin-left:auto;width:28px;height:28px;border-radius:9px;background: var(--primary-700);color:#fff;border:none;font-size:16px;display:flex;align-items:center;justify-content:center;transition:all .15s;box-shadow:0 2px 6px rgba(var(--primary-rgb), .3)}
    .v3-app .clist-hd .add:hover {background: var(--primary-800)}
    .v3-app .clist-search {margin:0 16px 10px}
    .v3-app .cs-ipt {display:flex;align-items:center;gap:7px;background:var(--surface-2);border:1px solid var(--line);border-radius:9px;padding:0 11px;height:32px;transition:all .15s}
    .v3-app .cs-ipt:focus-within {border-color:var(--primary);background:#fff}
    .v3-app .cs-ipt input {border:none;outline:none;background:transparent;flex:1;font-size:12px;color:var(--ink-900);font-family:inherit}
    .v3-app .cs-ipt input::placeholder {color:var(--ink-300)}
    .v3-app .clist-scroll {flex:1;overflow-y:auto;padding:0 8px 12px}
    .v3-app .citem {display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:11px;cursor:pointer;transition:background .12s;border:1px solid transparent;margin-bottom:2px;position:relative}
    .v3-app .citem:hover {background:var(--surface-2)}
    .v3-app .citem.active {background:var(--primary-soft, #E8F6F2);border-color:rgba(var(--primary-rgb), .28)}
    .v3-app .citem .cav {width:34px;height:34px;border-radius:50%;background:var(--accent-grad);color:#fff;display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0}
    .v3-app .citem .ct {flex:1;min-width:0}
    .v3-app .citem .cn {display:flex;align-items:center;gap:6px}
    .v3-app .citem .cn .nm {font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .citem .cn .tm {margin-left:auto;font-size:10px;color:var(--ink-400);font-family:var(--num);flex-shrink:0}
    .v3-app .citem .csb {display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-400);margin-top:1px;overflow:hidden}
    .v3-app .citem .csb .rcnt {font-size:10px;font-weight:700;color:var(--accent-600);background:var(--accent-soft, #FFF0E6);border-radius:10px;padding:0 7px;white-space:nowrap;flex-shrink:0}
    .v3-app .citem .more {width:24px;height:24px;border-radius:7px;border:none;background:transparent;color:var(--ink-300);font-size:14px;display:flex;align-items:center;justify-content:center;opacity:0;transition:all .12s;flex-shrink:0}
    .v3-app .citem:hover .more,.v3-app .citem.active .more {opacity:1;color:var(--ink-500)}
    .v3-app .citem .more:hover {background:#fff;color:var(--ink-900)}
    .v3-app .clist-foot {padding:10px 16px;border-top:1px solid var(--line);font-size:10.5px;color:var(--ink-400);display:flex;justify-content:space-between}
    .v3-app .cust-card {background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:14px;margin-bottom:10px;box-shadow:var(--sh-sm);cursor:pointer;transition:var(--t-norm)}
    .v3-app .cust-card:hover {box-shadow:var(--sh-md);transform:translateY(-2px)}
    .v3-app .cust-card.active {border-color:var(--primary);box-shadow:0 0 0 2px rgba(var(--primary-rgb), .15),var(--sh-md)}
    .v3-app .cust-card .top {display:flex;align-items:center;gap:10px}
    .v3-app .cust-card .av {width:40px;height:40px;border-radius:50%;background:var(--accent-grad);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;flex-shrink:0}
    .v3-app .cust-card .nm {font-size:var(--fs-base);font-weight:600}
    .v3-app .cust-card .mt {font-size:var(--fs-xs);color:var(--ink-500)}
    .v3-app .cust-card .tags {display:flex;gap:5px;margin-top:8px;flex-wrap:wrap}
    .v3-app .tag {background:var(--primary-grad-soft);color:var(--primary-text);border-radius:var(--r-pill);padding:3px 9px;font-size:11px;font-weight:500}
    .v3-app .badge {border-radius:var(--r-pill);padding:3px 9px;font-size:11px;font-weight:600;margin-left:auto}
    .v3-app .badge.danger {background:var(--danger-soft);color:#C14B3C}
    .v3-app .badge.warn {background:var(--warn-soft);color:var(--warn-600)}
    .v3-app .badge.ok {background:var(--ok-soft);color:var(--primary-text)}
    
    /* 中栏 对话 */
    .v3-app .v3-dialog {grid-column:3;width:380px;min-width:0;min-height:0;display:flex;flex-direction:column;overflow:hidden;border-left:1px solid var(--line);background:rgba(255,255,255,.5)}
    .v3-app .v3-dialog .dhead {padding:13px 16px 11px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;align-items:stretch;gap:0;background:rgba(255,255,255,.6)}
    .v3-app .v3-dialog .dhead .dt {font-size:14px;font-weight:800;color:var(--ink-900, #1D1D1F)}
    .v3-app .v3-dialog .dhead {position:relative}
    .v3-app .v3-dialog .dhead .coop {font-size:11px;color:var(--primary-text);background:var(--primary-grad-soft);border-radius:var(--r-pill);padding:2px 10px;margin-top:3px;display:inline-block}
    .v3-app .v3-dialog .dhead .coop span {font-weight:600}
    /* 右栏 对话 */
    .v3-app .v3-dialog .stage {display:none}
    .v3-app .stage-step {flex:1;min-height:50px;color:var(--ink-500);padding:8px 14px;border-radius:12px;position:relative;transition:var(--t-fast);display:flex;align-items:center;gap:9px;font-weight:500;border:1px solid transparent;background:transparent;text-align:left;min-width:0}
    .v3-app .stage-step.done {border-color:var(--ok-soft);background:transparent}
    .v3-app .stage-step.current {color:#fff;background: var(--primary-text);border-color: var(--primary-text);font-weight:600}
    .v3-app .stage-step .dot {width:24px;height:24px;border-radius:50%;background:var(--surface-3, #EEF5F2);color:var(--ink-400, #8E8E93);display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0}
    .v3-app .stage-step.done .dot {background:var(--ok);color:#fff}
    .v3-app .stage-step.current .dot {background:rgba(255,255,255,.22);color:#fff}
    .v3-app .stage-step .tx {display:flex;flex-direction:column;gap:2px;line-height:1.2;min-width:0}
    .v3-app .stage-step .nm {font-size:13px;font-weight:700;color:var(--ink-500);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .stage-step.done .nm {color:var(--ink-900)}
    .v3-app .stage-step.current .nm {color:#fff}
    .v3-app .stage-step .su {font-size:10px;color:var(--primary-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .stage-step.current .su {color:#fff}
    .v3-app .msgflow {flex:1;min-height:0;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px}
    .v3-app .msg {max-width:86%;padding:10px 14px;border-radius:var(--r-lg);font-size:var(--fs-sm);line-height:1.6}
    .v3-app .msg.nut {background:var(--surface);border:1px solid var(--line);border-top-right-radius:4px;align-self:flex-end;box-shadow:var(--sh-sm)}
    .v3-app .msg.ai {background:var(--primary-700);color:#fff;border-top-left-radius:4px;align-self:flex-start;box-shadow:var(--sh-glow)}
    .v3-app .msg.ai .bubble-tip {font-size:11px;opacity:.85;margin-top:4px}
    .v3-app .chat-input {padding:8px 14px 12px;border-top:1px solid var(--line);display:flex;gap:8px;background:rgba(255,255,255,.6)}
    .v3-app .chat-input .ci {flex:1;height:52px;display:flex;align-items:center;gap:8px;padding:8px 8px 8px 13px;background:var(--surface-2);border:1px solid var(--line-strong);border-radius:13px;min-width:0}
    .v3-app .chat-input .ci textarea {flex:1;height:100%;border:none;outline:none;resize:none;background:transparent;font-size:var(--fs-sm);line-height:1.5;padding:0;font-family:inherit;color:var(--ink-900);min-width:0}
    .v3-app .chat-input .ci textarea::placeholder {color:var(--ink-400)}
/* 批 V2-18：对话小结卡（写入客户档案确认） */
.v3-app .cfc{background:#F4FBF8;border:1px solid #CBE7DC;border-radius:11px;padding:10px 12px;margin:8px 0;font-size:12.5px;line-height:1.6}
.v3-app .cfc-hd{font-weight:700;color:#1F6E5C;font-size:12.5px;margin-bottom:6px}
.v3-app .cfc-list{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.v3-app .cfc-item{background:#fff;border:1px solid #E4F0EB;border-radius:8px;padding:6px 9px}
.v3-app .cfc-k{display:inline-block;font-size:10.5px;font-weight:700;color:#5A7D72;background:#E8F5F0;border-radius:4px;padding:1px 6px;margin-right:6px}
.v3-app .cfc-v{color:#2A2A2C;font-weight:600}
.v3-app .cfc-warn{font-size:10px;color:var(--warn-text);background:var(--warn-soft);border-radius:4px;padding:1px 5px;margin-left:6px}
.v3-app .cfc-q{font-size:11px;color:var(--ink-400);margin-top:3px}
.v3-app .cfc-btns{display:flex;gap:7px;flex-wrap:wrap}
.v3-app .cfc-b{background:#fff;border:1px solid #CBE7DC;color:#1F6E5C;border-radius:7px;padding:4px 12px;font-size:12px;cursor:pointer;font-weight:600}
.v3-app .cfc-b-yes{background: var(--primary-text);border-color: var(--primary-text);color:#fff}
.v3-app .cfc-b:disabled{opacity:.6;cursor:default}

    .v3-app .btn-send {width:34px;height:34px;border-radius:11px;background: var(--primary-700);color:#fff;border:none;font-size:15px;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:var(--t-fast)}
    .v3-app .btn-send:hover {opacity:.9}
    .v3-app .btn-send.disabled {opacity:.5;cursor:not-allowed}
    
    /* 中栏 工作区 */
    .v3-app .v3-work {grid-column:2;flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;border-right:1px solid var(--line)}
    /* ===== 复诊闭环 v1（2026-08-24）：快速回顾简化面板 + 复诊强化样式 ===== */
    .v3-app .v3-work.v3-review-pane {background:linear-gradient(180deg,#F7FBF9 0%,#F0F7F3 100%);align-items:center;justify-content:center;padding:24px}
    /* 临时智诊 v1.2：三栏布局动画（左栏收起 + 档案250px + 对话占满剩余） */
    .v3-app.v3-tmp .wrap {grid-template-columns:0 348px minmax(0,1fr);transition:grid-template-columns .38s cubic-bezier(.4,0,.2,1)}
    .v3-app .wrap {transition:grid-template-columns .38s cubic-bezier(.4,0,.2,1)}
    .v3-app.v3-tmp .v3-dialog {width:auto;min-width:0;border-left:none}
    .v3-app.v3-tmp .v3-work.v3-tmp-pane {display:block;width:100%;padding:0}
    .v3-app.v3-tmp .tmp-archive {width:250px;min-width:250px;max-width:250px;height:100%;border-right:1px solid var(--color-border-200, #e8ecee)}
    .v3-app.v3-tmp .tmp-chat-wrap {display:none}
    .v3-app.v3-tmp .clients {overflow:hidden;opacity:0;pointer-events:none;transition:opacity .38s ease-out}
    .v3-app .clients {opacity:1;transition:opacity .38s ease-out}
    .v3-app .profile-panel {width:348px;min-width:348px;max-width:348px;height:100%;background:#fff;border-right:1px solid var(--color-border-200, #e8ecee);display:flex;flex-direction:column;overflow:hidden;box-shadow:2px 0 8px rgba(0,0,0,0.02)}
    .v3-app .pf-body {flex:1;overflow-y:auto;padding:16px 18px;scrollbar-width:thin;scrollbar-color:var(--color-border-200) transparent}
    .v3-app .pf-hd {display:flex;align-items:center;gap:12px;padding-bottom:14px;border-bottom:1px solid var(--color-border-100, #f0f2f5)}
    .v3-app .pf-hd .cav {width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary, #3fb89b),#52c9b0);color:#fff;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;flex-shrink:0}
    .v3-app .pf-id {flex:1;min-width:0}
    .v3-app .pf-nm {font-size:15px;font-weight:700;color:var(--color-text-primary, #1f2329);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .pf-meta {font-size:12px;color:var(--color-text-secondary, #646a73);margin-top:2px}
    .v3-app .pf-exit {background:none;border:none;color:var(--color-text-tertiary, #8f959e);cursor:pointer;font-size:12px;padding:4px 8px;border-radius:6px;flex-shrink:0;transition:all .2s}
    .v3-app .pf-exit:hover {background:var(--color-danger-50, #fff1f0);color:var(--color-danger, #ff4d4f)}
    .v3-app .pf-sec {margin-top:16px}
    .v3-app .pf-sec-t {font-size:12px;color:var(--color-text-tertiary, #8f959e);font-weight:600;margin-bottom:8px;display:flex;align-items:center;gap:6px}
    .v3-app .pf-sec-t::before {content:'';width:3px;height:12px;background:var(--color-primary, #3fb89b);border-radius:2px}
    .v3-app .pf-grid {display:grid;grid-template-columns:1fr 1fr;gap:10px}
    .v3-app .pf-grid .pi {background:var(--color-bg-secondary, #f7f8fa);border-radius:10px;padding:10px 12px;min-width:0}
    .v3-app .pf-grid .pi .k {display:block;font-size:11px;color:var(--color-text-tertiary, #8f959e);margin-bottom:4px}
    .v3-app .pf-grid .pi .v {display:block;font-size:13px;font-weight:600;color:var(--color-text-primary, #1f2329);word-break:break-all}
    .v3-app .pf-grid .pi .v.warn {color:#D48806}
    .v3-app .pf-grid .pi .v.danger {color:#CF1322}
    .v3-app .pf-st {display:inline-flex;align-items:center;font-size:10px;font-weight:700;color:var(--color-primary, #3fb89b);background:#F0F7F3;border-radius:8px;padding:1px 6px;margin-left:6px;vertical-align:middle}
    .v3-app .pf-st.mut {color:#D48806;background:#FFF7E6}
    .v3-app .pf-tags {display:flex;flex-wrap:wrap;gap:6px}
    .v3-app .pf-tags .ptag {display:inline-flex;align-items:center;height:22px;padding:0 10px;border-radius:11px;font-size:11px;line-height:1;background:#F7FAFC;color:#666;border:1px solid #E8EAEE;white-space:nowrap}
    .v3-app .pf-tags .ptag-mut {background:var(--accent-100);color:#C2884A;border-color:#F0D9C8}
    .v3-app .pf-empty {color:var(--color-text-tertiary, #8f959e);font-size:12px;padding:8px 0;font-style:italic}
    .v3-app .pf-abn {display:flex;flex-direction:column;gap:6px}
    .v3-app .pf-abn .ai-row {display:flex;align-items:center;gap:8px;font-size:12px}
    .v3-app .pf-abn .ai-row .an {flex:1;min-width:0;color:var(--color-text-primary, #1f2329);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .pf-abn .ai-row .av2 {color:var(--color-text-secondary, #646a73);flex-shrink:0}
    .v3-app .pf-abn .ai-row .up {color:#CF1322;font-style:normal;font-weight:700}
    .v3-app .pf-abn .ai-row .dn {color:#2F9E7D;font-style:normal;font-weight:700}
    /* 临时智诊 v1：完整布局（左侧档案栏 + 右侧对话） */
    .v3-app .v3-work.v3-tmp-pane {display:flex;flex-direction:row;height:100%;min-height:0;padding:0;background:linear-gradient(180deg,#F7FBF9 0%,#F0F7F3 100%)}
    .v3-app .tmp-archive {width:340px;min-width:340px;background:#fff;border-right:1px solid var(--color-border-200, #e8ecee);display:flex;flex-direction:column;overflow:hidden;box-shadow:2px 0 8px rgba(0,0,0,0.02)}
    .v3-app .tmp-archive .ta-head {display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--color-border-100, #f0f2f5);background:linear-gradient(135deg,#F7FBF9 0%,#fff 100%)}
    .v3-app .tmp-archive .ta-title {font-size:14px;font-weight:600;color:var(--color-text-primary);display:flex;align-items:center;gap:6px}
    .v3-app .tmp-archive .ta-exit {background:none;border:none;color:var(--color-text-tertiary);cursor:pointer;font-size:12px;padding:4px 8px;border-radius:6px;transition:all .2s}
    .v3-app .tmp-archive .ta-exit:hover {background:var(--color-danger-50, #fff1f0);color:var(--color-danger, #ff4d4f)}
    .v3-app .tmp-archive .ta-body {flex:1;overflow-y:auto;padding:16px 18px;scrollbar-width:thin;scrollbar-color:var(--color-border-200) transparent}
    .v3-app .tmp-archive .ta-client-card {display:flex;align-items:center;gap:12px;margin-bottom:18px;padding:14px;background:linear-gradient(135deg,#F0F7F3 0%,#fff 100%);border-radius:12px;border:1px solid var(--color-border-100)}
    .v3-app .tmp-archive .tcc-avatar {width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,var(--color-primary, #3fb89b),#52c9b0);color:#fff;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:600;flex-shrink:0}
    .v3-app .tmp-archive .tcc-info {flex:1;min-width:0}
    .v3-app .tmp-archive .tcc-name {font-size:15px;font-weight:600;color:var(--color-text-primary);margin-bottom:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .tmp-archive .tcc-sub {font-size:12px;color:var(--color-text-secondary)}
    .v3-app .tmp-archive .ta-section {margin-bottom:16px}
    .v3-app .tmp-archive .ta-sec-title {font-size:12px;color:var(--color-text-tertiary);font-weight:500;margin-bottom:8px;display:flex;align-items:center;gap:6px}
    .v3-app .tmp-archive .ta-sec-title::before {content:'';width:3px;height:12px;background:var(--color-primary, #3fb89b);border-radius:2px}
    .v3-app .tmp-archive .ta-chips {display:flex;flex-wrap:wrap;gap:6px}
    .v3-app .tmp-archive .ta-chip {display:inline-flex;align-items:center;height:22px;padding:0 10px;border-radius:11px;font-size:11px;line-height:1;font-weight:400;white-space:nowrap;transition:transform .2s}
    .v3-app .tmp-archive .ta-chip:hover {transform:translateY(-1px)}
    .v3-app .tmp-archive .ta-chip-ok {background:#F0F7F3;color:#2F9E7D;border:1px solid #D4EAE2}
    .v3-app .tmp-archive .ta-chip-warn {background:#FFF7E6;color:#D48806;border:1px solid #FFE0A6}
    .v3-app .tmp-archive .ta-chip-danger {background:var(--color-danger-50);color:#CF1322;border:1px solid var(--color-danger-200)}
    .v3-app .tmp-archive .ta-chip-info {background:#F0F5FF;color:#597EF7;border:1px solid #D6E4FF}
    .v3-app .tmp-archive .ta-chip-tag {background:#F7FAFC;color:#666;border:1px solid #E8EAEE}
    .v3-app .tmp-archive .ta-empty {color:var(--color-text-tertiary);font-size:12px;padding:8px 0;font-style:italic}
    .v3-app .tmp-archive .ta-empty-big {text-align:center;padding:40px 0;font-size:13px;color:var(--color-text-tertiary)}
    .v3-app .tmp-archive .ta-report-list {display:flex;flex-direction:column;gap:4px}
    .v3-app .tmp-archive .ta-report-item {display:flex;justify-content:space-between;align-items:center;padding:6px 10px;border-radius:6px;font-size:12px;background:#fafbfc;transition:background .2s}
    .v3-app .tmp-archive .ta-report-item:hover {background:#f0f7f3}
    .v3-app .tmp-archive .ta-report-item.abn {background:#fff7e6}
    .v3-app .tmp-archive .ta-report-item .tri-name {color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}
    .v3-app .tmp-archive .ta-report-item .tri-val {color:var(--color-text-primary);font-weight:500;display:flex;align-items:center;gap:4px}
    .v3-app .tmp-archive .ta-report-item .tri-flag {color:var(--color-danger, #ff4d4f);font-weight:600;font-size:11px}
    .v3-app .tmp-archive .ta-diagnosis {font-size:12px;line-height:1.7;color:var(--color-text-secondary);background:#F7FAFC;padding:10px 12px;border-radius:8px;border-left:3px solid var(--color-primary, #3fb89b)}
    /* 对话头临时智诊风格 */
    .dhead-tmp {background:linear-gradient(135deg,#F0F7F3 0%,#fff 100%) !important;border-bottom:1px solid var(--color-border-100, #f0f2f5) !important}
    .tmp-src-label {display:flex;align-items:center;gap:12px;margin-right:12px}
    .tmp-src-label .tsl-item {display:flex;align-items:center;gap:4px;font-size:11px;color:var(--color-text-tertiary)}
    .tmp-src-label .tsl-item-dim {opacity:0.4}
    .tmp-src-label .tsl-ic {font-size:12px}
    .tmp-exit-btn {background:none;border:1px solid var(--color-border-200, #e8ecee);color:var(--color-text-tertiary);cursor:pointer;font-size:12px;padding:4px 12px;border-radius:16px;transition:all .2s;height:28px;display:flex;align-items:center;gap:4px}
    .tmp-exit-btn:hover {background:var(--color-danger-50, #fff1f0);color:var(--color-danger, #ff4d4f);border-color:var(--color-danger-200, #ffccc7)}
    /* 智诊页新UI：对话头 row1 + 权威模式 chip + 会话 tab + 退出临时会话（§7.1 定稿） */
    .v3-app .v3-dialog .dhead .row1 {display:flex;align-items:center;gap:8px;flex:1;min-width:0}
    .v3-app .v3-dialog .dhead .tag-on {font-size:10px;font-weight:700;color:var(--ok-700, #1F9E75);background:var(--ok-soft, #E3F7EF);border-radius:20px;padding:2px 9px;white-space:nowrap;flex-shrink:0}
    .v3-app .sess {display:flex;align-items:center;gap:2px;background:var(--surface-3, #EEF5F2);border-radius:9px;padding:2px;height:28px;flex-shrink:0;margin-left:auto}
    .v3-app .sess button {border:none;background:transparent;font-size:11px;font-weight:700;color:var(--ink-500, #6E6E73);border-radius:7px;padding:4px 11px;cursor:pointer;white-space:nowrap;height:24px;line-height:16px}
    .v3-app .sess button.on {background: var(--primary-700);color:#fff}
    .v3-app .exit-tmp {background:none;border:1px solid var(--color-border-200, #e8ecee);color:var(--ink-500, #6E6E73);cursor:pointer;font-size:11px;padding:3px 10px;border-radius:16px;white-space:nowrap;flex-shrink:0;height:24px}
    .v3-app .exit-tmp:hover {background:var(--color-danger-50, #fff1f0);color:var(--color-danger, #ff4d4f);border-color:var(--color-danger-200, #ffccc7)}
    /* 临时智诊对话区动画 */
    .tmp-enter {animation:tmpFadeIn .38s ease-out both}
    .tmp-chat-enter {animation:tmpSlideIn .38s ease-out both}
    @keyframes tmpFadeIn {from{opacity:0}to{opacity:1}}
    @keyframes tmpSlideIn {from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}
    /* 消息来源标注（AI 消息底部） */
    .msg-source-tag {display:inline-flex;align-items:center;gap:4px;margin-top:6px;font-size:10px;color:var(--color-text-tertiary);opacity:0.7;user-select:none}
    .msg-source-tag .mst-ic {font-size:11px}
    .v3-app .review-banner {max-width:380px;width:100%;background:#fff;border:1px solid var(--line);border-radius:16px;padding:28px 24px;text-align:center;box-shadow:var(--sh-md)}
    .v3-app .review-banner .rb-ic {font-size:40px;margin-bottom:12px}
    .v3-app .review-banner .rb-title {font-size:18px;font-weight:600;color:var(--ink-900);margin-bottom:8px}
    .v3-app .review-banner .rb-sub {font-size:13px;color:var(--ink-600);line-height:1.7;margin-bottom:8px}
    .v3-app .review-banner .rb-tip {font-size:12px;color:var(--primary-text);background:var(--primary-grad-soft);border-radius:8px;padding:8px 12px;line-height:1.6}
    .v3-app .review-banner .rb-client {margin-top:14px;font-size:12px;color:var(--ink-500)}
    .v3-app .dhead.dhead-review {background:linear-gradient(90deg,rgba(var(--primary-rgb), .10),rgba(255,255,255,.6))}
    .v3-app .v3-dialog .dhead .revisit-ctx {display:flex;align-items:center;gap:7px;padding:7px 10px;margin-top:8px;background:var(--primary-soft-2, #F0FAF7);border:1px solid rgba(var(--primary-rgb), .28);border-radius:9px;font-size:11.5px;white-space:nowrap}
    .v3-app .v3-dialog .dhead .revisit-ctx .rc-t {flex:0 0 auto;font-size:11.5px;font-weight:700;color:var(--primary-text);white-space:nowrap}
    .v3-app .v3-dialog .dhead .revisit-ctx .rc-sep {flex:0 0 auto;color:var(--ink-300, #AEAEB2);font-size:11.5px;white-space:nowrap}
    .v3-app .v3-dialog .dhead .revisit-ctx .rc-items {flex:1 1 auto;min-width:0;white-space:normal;overflow:visible;text-overflow:clip;color:var(--ink-500, #6E6E73)}
    .v3-app .v3-dialog .dhead .revisit-ctx .rc-item {display:inline;font-size:11.5px;color:var(--ink-500, #6E6E73)}
    .v3-app .v3-dialog .dhead .revisit-ctx .rc-item b {color:var(--ink-700, #3A3A3C);font-weight:700}
    .v3-app .v3-dialog .dhead .revisit-ctx .rc-tag {flex:0 0 auto;font-size:10.5px;font-weight:700;color:var(--primary-text);background:var(--primary-soft, #E8F6F2);border-radius:20px;padding:2px 8px;white-space:nowrap}
    .v3-app .evolution-block {background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin-bottom:16px;box-shadow:var(--sh-sm)}
    .v3-app .evolution-block .evo-t {display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--ink-900);margin-bottom:10px;flex-wrap:wrap}
    .v3-app .evolution-block .evo-tip {font-size:11px;font-weight:400;color:var(--ink-400)}
    .v3-app .evolution-block .evo-summary {font-size:12px;color:var(--ink-700);background:var(--surface-2, #F5EFE6);border-radius:8px;padding:8px 12px;margin-bottom:12px;line-height:1.7}
    .v3-app .evolution-block .evo-grid {display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px}
    .v3-app .evolution-block .evo-col {border-radius:10px;padding:10px;border:1px solid var(--line)}
    .v3-app .evolution-block .evo-col .evo-h {font-size:12px;font-weight:600;margin-bottom:6px}
    .v3-app .evolution-block .evo-col.good {background:rgba(var(--primary-rgb), .08);border-color:rgba(var(--primary-rgb), .25)}
    .v3-app .evolution-block .evo-col.good .evo-h {color:var(--primary-text)}
    .v3-app .evolution-block .evo-col.flat {background:rgba(120,120,120,.06)}
    .v3-app .evolution-block .evo-col.flat .evo-h {color:var(--ink-500)}
    .v3-app .evolution-block .evo-col.bad {background:rgba(var(--danger-rgb), .08);border-color:rgba(var(--danger-rgb), .25)}
    .v3-app .evolution-block .evo-col.bad .evo-h {color:#C14B3C}
    .v3-app .evolution-block .evo-col.new {background:rgba(255,184,0,.08);border-color:rgba(255,184,0,.3)}
    .v3-app .evolution-block .evo-col.new .evo-h {color:#B8860B}
    .v3-app .evolution-block .evo-item {font-size:12px;color:var(--ink-700);line-height:1.6;padding:3px 0;border-top:1px dashed rgba(0,0,0,.06)}
    .v3-app .evolution-block .evo-item:first-child {border-top:none}
    .v3-app .evolution-block .evo-empty {font-size:12px;color:var(--ink-400)}
    .v3-app .v3-work .stage {display:flex;padding:10px 22px 16px;gap:8px;border:1px solid var(--line-strong);border-top:none;border-radius:0 0 var(--r-lg) var(--r-lg);background:#fff;margin:0 28px 16px}
    .v3-app .v3-work .thead {background:#fff;border:1px solid var(--line-strong);border-bottom:none;border-radius:var(--r-lg) var(--r-lg) 0 0;padding:16px 22px 10px;margin:16px 28px 0;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
    .v3-app .v3-work .thead h1 {font-size:17px;font-weight:800;white-space:nowrap}
    .v3-app .v3-work .thead .sub {font-size:var(--fs-xs);color:var(--ink-400);margin-top:0;white-space:nowrap}
    .v3-app .v3-work .thead .tt {flex:1;min-width:0;display:flex;align-items:baseline;gap:14px}
    /* 模式切换 */
    .v3-app .mode-sw {position:relative;display:flex;align-items:center;gap:6px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-pill);padding:4px;font-size:var(--fs-sm)}
    .v3-app .mode-sw .m-btn {display:flex;align-items:center;gap:6px;padding:6px 14px;border-radius:var(--r-pill);cursor:pointer;color:var(--ink-500);transition:var(--t-fast);border:none;background:transparent;font-size:var(--fs-sm);font-weight:500}
    .v3-app .mode-sw .m-btn:hover {color:var(--primary-text)}
    .v3-app .mode-sw .m-btn.on {background:var(--primary-700);color:#fff;font-weight:600;box-shadow:var(--sh-glow)}
    .v3-app .mode-sw .m-btn .mdot {width:6px;height:6px;border-radius:50%;background:currentColor}
    .v3-app .mode-exp {font-size:var(--fs-xs);color:var(--ink-400);margin-top:4px;min-height:16px}
    /* 专家选择浮层（popover） */
    .v3-app .expert-pop {position:absolute;top:calc(100% + 8px);right:0;width:340px;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-lg);box-shadow:var(--sh-lg);padding:8px;display:none;z-index:60}
    .v3-app .expert-pop.show {display:block}
    .v3-app .epr-item {display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:var(--r-md);cursor:pointer;transition:var(--t-fast)}
    .v3-app .epr-item:hover {background:var(--surface-2)}
    .v3-app .epr-item.sel {background:var(--surface-3)}
    .v3-app .epr-item .eav {width:36px;height:36px;border-radius:50%;background:var(--accent-grad);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:600;flex-shrink:0}
    .v3-app .epr-item .etxt {flex:1;min-width:0}
    .v3-app .epr-item .enm {font-size:var(--fs-base);font-weight:600;color:var(--ink-900)}
    .v3-app .epr-item .esk {font-size:11px;color:var(--ink-500);margin-top:2px}
    .v3-app .epr-item .eck {width:18px;height:18px;color:#22C55E;flex-shrink:0}
    .v3-app .epr-div {height:1px;background:var(--line);margin:6px 4px}
    .v3-app .epr-add {display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:var(--r-md);cursor:pointer;color:var(--ink-500);font-size:var(--fs-sm);transition:var(--t-fast)}
    .v3-app .epr-add:hover {background:var(--surface-2);color:var(--primary-text)}
    .v3-app .workbody {flex:1;overflow-y:auto;padding:20px 20px}

    /* ===== v6 总览卡：客户信息头 + 身份地图 + 报告异常 + 主诉 ===== */
    .v3-app .overview {background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:16px 20px 14px;box-shadow:var(--sh-sm);margin-bottom:18px}
    .v3-app .overview .ov-head {display:flex;align-items:center;gap:12px;flex-wrap:wrap}
    .v3-app .ov-actions {display:flex;gap:8px;margin-left:auto;align-items:center;flex-wrap:wrap;justify-content:flex-end}
/* ── 批M1·F3：智诊页「患者问卷状态」徽标 + 展开清单 ─────────────────────────
   位置与优先级：它在 ov-actions 最左侧（客户名右侧），是「能不能开始分析」的前置信号。
   四态配色（互不混淆）：灰=读档中 / 淡灰=不可用(DDL) / 蓝=未提交(可继续分析) / 琥珀=已收到问卷事实。
   🔴 口径（批M1·G1）：问卷事实**直接进画像**，不存在「等营养师确认」这一步；确认是营养师自己的工作流，不是闸门。 */
.f3-wrap{position:relative;display:inline-flex;flex:0 0 auto}
.f3-badge{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border-radius:var(--r-pill, 999px);
  font-size:12px;font-weight:600;line-height:1.3;white-space:nowrap;border:1px solid transparent}
.f3-badge.is-loading{color:#8A9A93;background:#F4F7F5;border-color:#E4EBE7}
.f3-badge.is-degraded{color:#9AA5A0;background:#F7F9F8;border-color:#EBEFED;cursor:help}
.f3-badge.is-empty{color:var(--warn-text);background:#FFF3E0;border-color:#F0D9B5;cursor:help}
.f3-badge.is-open-btn{color:#8A6118;background:#FFF3E0;border-color:#EFC98A;cursor:pointer;transition:var(--t-fast, 140ms)}
.f3-badge.is-open-btn:hover{background:#FFE9CC;border-color:var(--warn)}
.f3-badge.is-open-btn.expanded{background:#FFE9CC;border-color:var(--warn)}
.f3-badge b{font-weight:800;font-size:12.5px}
.f3-box{position:absolute;top:calc(100% + 8px);right:0;z-index:60;width:340px;max-height:60vh;overflow:auto;
  background:var(--surface, #fff);border:1px solid var(--line, #E8ECE9);border-radius:12px;
  box-shadow:0 12px 32px rgba(15,43,38,.16);padding:12px;text-align:left}
.f3-sec{margin-bottom:12px}
.f3-sec:last-of-type{margin-bottom:8px}
.f3-sec-h{font-size:11.5px;font-weight:700;margin-bottom:6px;letter-spacing:.2px}
.f3-sec-h.warn{color:var(--warn-text)}
.f3-sec-h.ok{color:#2A6B5A}
.f3-item{display:flex;align-items:baseline;gap:8px;padding:5px 0;border-bottom:1px solid #F0F3F1;font-size:12px}
.f3-item:last-child{border-bottom:none}
.f3-k{flex:0 0 66px;color:var(--ink-500, #6E6E73);font-weight:600}
.f3-v{flex:1 1 auto;color:var(--ink-900, #1D1D1F);word-break:break-word;line-height:1.5}
.f3-src{flex:0 0 auto;font-size:10px;color:#9AA5A0;background:#F4F7F5;border-radius:4px;padding:1px 5px}
.f3-foot{font-size:11px;color:#8A9A93;line-height:1.6;border-top:1px solid #F0F3F1;padding-top:8px;margin-top:4px}
@media (max-width:768px){.f3-box{width:min(300px,calc(100vw - 32px));right:-40px}}
    /* 复诊闭环 v1：智诊工作台档案面板 复诊/快速回顾 按钮（与客户管理详情页 tbtn 视觉一致） */
    .v3-app .ov-actions .tbtn {display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:var(--r-pill);font-size:12px;font-weight:600;cursor:pointer;transition:var(--t-fast);border:1px solid var(--line);background:var(--surface);color:var(--ink-700);white-space:nowrap}
    .v3-app .ov-actions .tbtn:hover {border-color:var(--primary);color:var(--primary)}
    .v3-app .ov-actions .tbtn.revisit {background:#E6F5EE;color:var(--primary-text);border-color:#BFE3D4}
    .v3-app .ov-actions .tbtn.revisit:hover {background: var(--primary-800);color:#fff}
    .v3-app .ov-actions .tbtn.review {background:#FFF4E3;color:#D88B2C;border-color:#F5DDB5}
    .v3-app .ov-actions .tbtn.review:hover {background:var(--accent);color:#fff}
    .v3-app .ov-actions .tbtn:disabled {opacity:.55;cursor:not-allowed}
    .v3-app .btn-sm {padding:7px 14px;font-size:var(--fs-sm);border-radius:var(--r-sm)}
    .v3-app .btn-cnt {display:inline-block;background:rgba(255,255,255,.25);border-radius:var(--r-pill);padding:0 7px;margin-left:5px;font-size:11px;font-weight:600}
    /* 报告异常 */
    .v3-app .ov-abn {margin-top:14px;padding:14px 16px;border-radius:var(--r-md);background:var(--surface-2);min-width:0}
    .v3-app .ov-abn .hlabel {font-size:12px;color:var(--ink-500);margin-bottom:10px;display:flex;align-items:center;justify-content:space-between;font-weight:600}
    .v3-app .abn-grid {display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
    .v3-app .abn-tile {background:var(--surface);border:1px solid var(--danger-soft);border-left:3px solid var(--danger);border-radius:var(--r-sm);padding:7px 10px;cursor:pointer;transition:var(--t-fast);min-width:0}
    .v3-app .abn-tile:hover {border-color:var(--danger);box-shadow:var(--sh-sm);transform:translateY(-1px)}
    .v3-app .abn-tile.warn {border-left-color:var(--warn)}
    .v3-app .abn-tile .t-name {font-size:12px;color:var(--ink-700);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .abn-tile .t-val {font-family:var(--num);font-size:var(--fs-base);font-weight:700;color:#C14B3C;margin-top:1px;white-space:nowrap}
    .v3-app .abn-tile.warn .t-val {color:var(--warn-600)}
    .v3-app .abn-tile .t-unit {font-size:11px;color:var(--ink-500);font-weight:400;margin-left:2px}
    .v3-app .abn-tile .t-tag {display:inline-block;font-size:10px;line-height:1;padding:2px 6px;border-radius:var(--r-pill);background:var(--danger-soft);color:#C14B3C;margin-top:5px}
    .v3-app .abn-tile.warn .t-tag {background:var(--warn-soft);color:var(--warn-600)}
    .v3-app .abn-more {background:var(--surface-3);border:1px dashed var(--line-strong);border-radius:var(--r-md);padding:8px 14px;display:flex;align-items:center;justify-content:center;gap:6px;font-size:var(--fs-sm);color:var(--primary-text);cursor:pointer;transition:var(--t-fast);font-weight:600;width:100%;margin-top:8px}
    .v3-app .abn-more:hover {background:var(--primary-grad-soft);border-style:solid}
    .v3-app .abn-empty {background:transparent;border:1.5px dashed var(--line-strong);border-radius:var(--r-md);padding:16px 14px;text-align:center;color:var(--ink-400);font-size:var(--fs-sm)}
    .v3-app .abn-empty .tip {color:var(--ink-500);margin-top:4px;font-size:12px}
    .v3-app .abn-stable {background:var(--ok-soft);border-radius:var(--r-md);padding:14px;text-align:center;color:var(--primary-text);font-size:var(--fs-sm);font-weight:600}
    .v3-app .abn-full {display:none;margin-top:8px}
    .v3-app .abn-full.show {display:block}
    .v3-app .abn-full-tip {margin-top:8px;font-size:11px;color:var(--ink-400);text-align:center;padding:6px;border-top:1px dashed var(--line);line-height:1.5}
    /* ===== v6 方案卡：在线阅读 + 已选标签 ===== */
    .v3-app .compare-tip {background:var(--info-soft);border-radius:var(--r-md);padding:10px 14px;font-size:var(--fs-sm);color:#1E7FB0;margin-bottom:14px}
    .v3-app .ai-call {display:flex;align-items:center;gap:6px;margin-bottom:14px;padding:10px 14px;border-radius:var(--r-md);background:var(--primary-grad-soft);border:1px solid var(--primary-300);font-size:12px;color:var(--primary-text);cursor:pointer;transition:var(--t-fast)}
    .v3-app .ai-call:hover {box-shadow:var(--sh-sm);transform:translateY(-1px)}
    .v3-app .ai-call b {color:var(--primary-text)}
    .v3-app .legacy-tip {font-size:11px;color:#92400E;background:#FEF3C7;border-radius:var(--r-sm);padding:5px 8px;margin:6px 0;text-align:center;font-weight:500}
    .v3-app .plan-read {display:flex;align-items:center;justify-content:center;gap:6px;margin-top:12px;padding:7px;border:1px dashed var(--line-strong);border-radius:var(--r-sm);font-size:12px;color:var(--primary-text);cursor:pointer;transition:var(--t-fast);font-weight:600;background:var(--surface-2)}
    .v3-app .plan-read:hover {background:var(--primary-grad-soft);border-style:solid}
  .v3-app .ip-regen-note {font-size:11.5px;color:var(--ink-500);margin-left:2px}   /* 🔴 批V2-41 */
  .v3-app .ipc-px-stale-btn.is-loading {opacity:.6;cursor:default}   /* 🔴 批V2-41 */
    .v3-app .plan-sel-tag {display:none;font-size:11px;color:var(--primary-text);background:var(--ok-soft);border-radius:var(--r-pill);padding:2px 8px;font-weight:600}
    .v3-app .plan-card.sel .plan-sel-tag {display:inline-block}
    /* ==== v2 方案卡三步 UI ==== */
    .v3-app .v2-flow-bar {display:flex;align-items:center;gap:6px;margin-bottom:12px;padding:10px 14px;background:var(--surface-2);border-radius:var(--r-md);font-size:12px}
    .v3-app .v2-flow-step {flex-shrink:0;padding:4px 10px;border-radius:var(--r-pill);font-weight:500;color:var(--ink-400);background:var(--surface-3)}
    .v3-app .v2-flow-step.current {color:#fff;background:var(--primary-700);font-weight:600}
    .v3-app .v2-flow-step.done {color:var(--ok-700);background:var(--ok-soft)}
    .v3-app .v2-flow-step.pending {color:var(--ink-400)}
    .v3-app .v2-flow-line {flex:1;height:2px;border-radius:1px;background:var(--line)}
    .v3-app .v2-flow-line.done {background:var(--ok-500)}
    .v3-app .v2-tip {font-size:12px;color:var(--primary-text);background:var(--primary-grad-soft);border:1px solid var(--primary-200);padding:8px 12px;border-radius:var(--r-sm);margin-bottom:12px}
    .v3-app .v2-grid .plan-card {cursor:pointer;transition:all var(--t-fast)}
    .v3-app .plan-card.v2-card {display:flex;flex-direction:column}
    .v3-app .v2-grid .plan-card.v2-card.sel {border-color:var(--primary-500);box-shadow:0 0 0 3px var(--primary-100)}
    .v3-app .v2-card-desc {font-size:12px;color:var(--ink-500);margin-bottom:10px;padding-bottom:8px;border-bottom:1px dashed var(--line)}
    .v3-app .v2-compare {margin-bottom:10px}
    .v3-app .v2-cmp-row {display:flex;gap:8px;font-size:12px;padding:4px 0;border-bottom:1px solid var(--line-light)}
    .v3-app .v2-cmp-row:last-child {border-bottom:none}
    .v3-app .v2-cmp-k {color:var(--ink-400);width:40px;flex-shrink:0;font-weight:500}
    .v3-app .v2-cmp-v {color:var(--ink-700);flex:1;line-height:1.5}
    .v3-app .v2-preview {background:var(--surface-2);border-radius:var(--r-sm);padding:8px 10px;margin-top:8px}
    .v3-app .v2-preview-title {font-size:11px;color:var(--ink-400);margin-bottom:4px;font-weight:500}
    .v3-app .v2-preview-list {margin:0;padding-left:16px;font-size:11px;color:var(--ink-600);line-height:1.7}
    .v3-app .v2-preview-empty {font-size:11px;color:var(--ink-300);text-align:center;padding:4px}
    .v3-app .v2-card-btn {width:100%;margin-top:auto}
    .v3-app .btn-small {padding:6px 12px;font-size:12px;border-radius:var(--r-sm)}
    .v3-app .btn[disabled] {opacity:0.5;cursor:not-allowed}
    /* ==== v2 方案阅读器弹层 ==== */
    .plan-reader {font-family:var(--font-body);color:var(--ink-800);background:#fff}
    .pr-header {padding:14px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}
    .pr-title {font-size:16px;font-weight:600;color:var(--ink-800)}
    .pr-tabs {display:flex;gap:4px;background:var(--surface-2);padding:3px;border-radius:var(--r-md)}
    .pr-tab {padding:6px 14px;font-size:12px;border-radius:var(--r-sm);cursor:pointer;color:var(--ink-500);font-weight:500;transition:all var(--t-fast)}
    .pr-tab.active {background:#fff;color:var(--primary-text);box-shadow:var(--sh-sm);font-weight:600}
    .pr-body {display:flex;height:calc(92vh - 120px);min-height:500px}
    .pr-toc {width:152px;border-right:1px solid var(--line);padding:10px 0;overflow-y:auto;background:var(--surface-2)}   /* 批Q4(J1)：200→152，把红圈那份空白让给正文 */
    .pr-toc-group-title {font-size:10.5px;color:var(--ink-400);padding:6px 12px;font-weight:600;letter-spacing:0.3px;margin-top:4px}
    .pr-toc-item {padding:6px 12px;font-size:12px;color:var(--ink-600);cursor:pointer;transition:all var(--t-fast);border-left:2px solid transparent}
    .pr-toc-item:hover {background:var(--primary-grad-soft);color:var(--primary-text)}
    .pr-toc-item.active {color:var(--primary-text);background:var(--primary-50);border-left-color:var(--primary-500);font-weight:500}
    .pr-toc-divider {height:1px;background:var(--line);margin:8px 12px}
    .pr-main {flex:1;overflow-y:auto;padding:0}   /* 批L: 内边距下移到 .doc，sticky 周条贴满滚动口、消除「内容从缝里漏出」 */
    .pr-doc-head {text-align:center;padding-bottom:20px;border-bottom:2px solid var(--primary-500);margin-bottom:24px}
    .pr-doc-brand {font-size:20px;font-weight:700;color:var(--primary-text);font-family:var(--font-serif)}
    .pr-doc-meta {font-size:12px;color:var(--ink-400);margin-top:6px}
    .pr-sec {margin-bottom:24px}
    .pr-sec-h {font-size:15px;font-weight:600;color:var(--ink-800);margin-bottom:12px;padding-bottom:8px;border-bottom:1.5px solid var(--primary-300);display:flex;align-items:center;gap:8px}
    .pr-sec-h::before {content:'';width:4px;height:16px;background:var(--primary-grad);border-radius:2px}
    .pr-sub-title {font-size:13px;font-weight:600;color:var(--ink-700);margin:12px 0 6px}
    .pr-empty {text-align:center;padding:20px;color:var(--ink-300);font-size:13px}
    .pr-priority-band {background:linear-gradient(135deg,#FEF3C7,#FDE68A);border:1px solid #F59E0B;border-radius:var(--r-md);padding:12px 16px;color:#92400E;font-weight:500;font-size:13px;line-height:1.6}
    .pr-tag-row {display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}
    .pr-tag {padding:3px 10px;background:var(--primary-grad-soft);color:var(--primary-text);border-radius:var(--r-pill);font-size:11px;font-weight:500}
    .pr-tbl {width:100%;border-collapse:collapse;font-size:12px}
    .pr-tbl th,.pr-tbl td {border:1px solid var(--line);padding:8px 12px;text-align:left}
    .pr-tbl th {background:var(--surface-2);color:var(--ink-500);font-weight:500;width:100px}
    .pr-problems {display:flex;flex-direction:column;gap:8px}
    .pr-prob-item {display:flex;gap:10px;padding:10px;background:var(--surface-2);border-radius:var(--r-sm)}
    .pr-prob-rank {font-weight:700;color:var(--primary-text);font-size:14px;flex-shrink:0}
    .pr-prob-title {font-weight:600;font-size:13px;color:var(--ink-800)}
    .pr-prob-detail {font-size:12px;color:var(--ink-600);margin-top:2px;line-height:1.5}
    .pr-med-tbl {width:100%;border-collapse:collapse;font-size:12px}
    .pr-med-tbl th,.pr-med-tbl td {border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}
    .pr-med-tbl th {background:var(--surface-2);color:var(--ink-500);font-weight:500;font-size:11px;white-space:nowrap}
    .pr-med-tbl .ind-name {font-weight:600;color:var(--ink-800)}
    .pr-med-tbl .ind-val {font-weight:600;font-family:var(--font-mono)}
    .pr-med-tbl .ind-val.st-up {color:var(--danger-600)}
    .pr-med-tbl .ind-val.st-down {color:var(--warn-600)}
    .pr-med-tbl .ind-val.st-ok {color:var(--ok-600)}
    .pr-med-tbl .ind-risk {color:var(--danger-700);font-size:11px}
    .pr-causal {display:flex;align-items:center;flex-wrap:wrap;gap:4px;padding:16px;background:var(--surface-2);border-radius:var(--r-md)}
    .pr-causal-node {padding:8px 14px;border-radius:var(--r-sm);font-size:12px;font-weight:500;flex-shrink:0}
    .pr-causal-node.lvl-up {background:#FEE2E2;color:#B91C1C;border:1px solid #FCA5A5}
    .pr-causal-node.lvl-mid {background:#FEF3C7;color:#92400E;border:1px solid #FCD34D}
    .pr-causal-node.lvl-down {background:#DCFCE7;color:#15803D;border:1px solid #86EFAC}
    .pr-causal-arrow {font-size:16px;color:var(--ink-300);font-weight:700}
    .pr-vloop {display:flex;align-items:center;gap:10px;margin-top:12px;padding:10px 14px;background:#FEF2F2;border:1px solid #FECACA;border-radius:var(--r-sm)}
    .pr-vloop-icon {font-size:20px;color:var(--danger-500)}
    .pr-vloop-label {font-weight:600;color:var(--danger-700);font-size:12px;flex-shrink:0}
    .pr-vloop-nodes {font-size:12px;color:var(--danger-600);font-weight:500}
    .pr-vloop-note {font-size:11px;color:var(--ink-500);margin-top:4px;padding-left:34px;font-style:italic}
    .pr-breakpoints {margin-top:12px;padding:12px 16px;background:var(--ok-soft);border:1px solid var(--ok-200);border-radius:var(--r-sm)}
    .pr-bp-title {font-weight:600;color:var(--ok-700);font-size:12px;margin-bottom:6px}
    .pr-bp-item {font-size:12px;color:var(--ok-800);padding:3px 0;padding-left:16px;position:relative}
    .pr-bp-item::before {content:'✓';position:absolute;left:0;color:var(--ok-600);font-weight:700}
    .pr-goals-grid {display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
    .pr-goal-col {background:var(--surface-2);border-radius:var(--r-md);padding:14px;border-top:3px solid var(--primary-400)}
    .pr-goal-col.sec {border-top-color:var(--warn-400)}
    .pr-goal-col.exp {border-top-color:var(--ok-400)}
    .pr-goal-title {font-weight:600;font-size:13px;color:var(--ink-800);margin-bottom:8px}
    .pr-goal-desc {font-size:12px;color:var(--ink-700);line-height:1.6}
    .pr-goal-horizon {font-size:11px;color:var(--primary-text);margin-top:6px;font-weight:500}
    .pr-ul {margin:0;padding-left:18px;font-size:12px;line-height:1.8;color:var(--ink-700)}
    .pr-ul.danger li {color:var(--danger-700)}
    .pr-ul.warn li {color:var(--warn-700)}
    .pr-ul.ok li {color:var(--ok-700)}
    .pr-targets-row {display:flex;gap:8px;flex-wrap:wrap;margin-bottom:10px}
    .pr-targets-row.aux {opacity:0.85}
    .pr-tgt-card {background:var(--primary-grad-soft);border:1px solid var(--primary-200);border-radius:var(--r-sm);padding:8px 12px;flex:1;min-width:120px}
    .pr-tgt-card.aux {background:var(--surface-2);border-color:var(--line)}
    .pr-tgt-name {font-size:12px;font-weight:600;color:var(--primary-text)}
    .pr-tgt-meta {display:flex;gap:6px;margin-top:4px;font-size:10px}
    .pr-tgt-diff {padding:1px 6px;border-radius:var(--r-pill);font-weight:500}
    .pr-tgt-diff.diff-低 {background:var(--ok-soft);color:var(--ok-700)}
    .pr-tgt-diff.diff-中 {background:var(--warn-soft);color:var(--warn-700)}
    .pr-tgt-diff.diff-高 {background:var(--danger-soft);color:var(--danger-700)}
    .pr-tgt-time {color:var(--ink-500)}
    .pr-supp-tbl {width:100%;border-collapse:collapse;font-size:12px}
    .pr-supp-tbl th,.pr-supp-tbl td {border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}
    .pr-supp-tbl th {background:var(--surface-2);color:var(--ink-500);font-weight:500;font-size:11px}
    .supp-name {font-weight:600;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
    .supp-tag {font-size:10px;padding:1px 6px;border-radius:var(--r-pill);font-weight:500}
    .supp-tag.dir {background:var(--ok-soft);color:var(--ok-700)}
    .supp-tag.rx {background:var(--warn-soft);color:var(--warn-700)}
    /* 批F(F3): 营养师调整标记 + AI 原文划线 */
    .supp-tag.edited {background:#EAF1FD;color:#2C5FB8;margin-left:4px}
    .supp-orig {font-size:11px;color:var(--ink-300);text-decoration:line-through;margin-left:6px;font-weight:400}
    .supp-dose {font-weight:600;color:var(--primary-text);font-family:var(--font-mono)}
    .supp-rx {color:var(--warn-700);font-weight:500;font-size:11px}
    .supp-note {font-size:11px;line-height:1.6;color:var(--ink-600)}
    .supp-caution {color:var(--danger-600);display:block;margin-top:2px}
    .supp-footnote {font-size:11px;color:var(--ink-400);margin-top:8px;font-style:italic;text-align:right}
    .pr-sec-danger .pr-sec-h {border-bottom-color:var(--danger-400)}
    .pr-sec-danger .pr-sec-h::before {background:linear-gradient(135deg,var(--danger-500),var(--danger-600))}
    .pr-guard-grid {display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
    .pr-guard-col {background:var(--surface-2);border-radius:var(--r-sm);padding:10px 12px}
    .pr-guard-title {font-weight:600;font-size:12px;margin-bottom:6px;color:var(--ink-700)}
    .pr-guard-col .pr-ul {padding-left:16px}
    .pr-exec-divider {text-align:center;margin:28px 0 20px;position:relative}
    .pr-exec-divider::before {content:'';position:absolute;top:50%;left:0;right:0;height:1px;background:var(--line)}
    .pr-exec-divider span {background:#fff;padding:0 16px;font-size:12px;color:var(--primary-text);font-weight:600;position:relative;z-index:1}
    .pr-exec-tbl {width:100%;border-collapse:collapse;font-size:12px}
    .pr-exec-tbl th,.pr-exec-tbl td {border:1px solid var(--line);padding:8px 10px;text-align:left;vertical-align:top}
    .pr-exec-tbl th {background:var(--surface-2);color:var(--ink-500);font-weight:500;font-size:11px}
    .exec-item {font-weight:600;color:var(--primary-text)}
    .pr-ref-grid {display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:10px}
    .pr-ref-item {background:var(--surface-2);border-radius:var(--r-sm);padding:8px 10px;font-size:11px;text-align:center;color:var(--ink-600);display:flex;align-items:center;justify-content:center;gap:6px}
    .pr-ref-emoji {font-size:18px}
    .pr-rhythm-head {font-size:13px;font-weight:600;color:var(--primary-text);margin-bottom:12px}
    .pr-stages {display:flex;gap:10px}
    .pr-stage-card {flex:1;background:var(--surface-2);border-radius:var(--r-md);padding:12px;border-top:3px solid var(--primary-400)}
    .pr-stage-name {font-weight:600;font-size:13px;color:var(--ink-800)}
    .pr-stage-days {font-size:11px;color:var(--ink-400);margin-top:2px}
    .pr-stage-focus {font-size:12px;color:var(--primary-text);font-weight:500;margin-top:8px;line-height:1.5}
    .pr-stage-keep {font-size:11px;color:var(--ok-600);margin-top:4px}
    .pr-stage-anchor {font-size:11px;margin-top:8px;padding:6px 8px;border-radius:var(--r-sm);font-weight:500}
    .pr-stage-anchor.anchor-blood {background:#FEF2F2;color:var(--danger-700)}
    .pr-stage-anchor.anchor-review {background:#EFF6FF;color:#2563EB}
    .pr-stage-actions {margin:8px 0 0;padding-left:16px;font-size:11px;color:var(--ink-600);line-height:1.7}
    .pr-kit-grid {display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
    .pr-kit-card {background:var(--surface-2);border-radius:var(--r-md);padding:14px}
    .pr-kit-title {font-weight:600;font-size:13px;color:var(--primary-text);margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--line)}
    .pr-kit-section {margin-bottom:10px}
    .pr-kit-sec-title {font-size:11px;font-weight:600;color:var(--ink-500);margin-bottom:4px}
    .pr-kit-section .pr-ul {padding-left:16px;font-size:11px}
    .pr-kit-section.red .pr-ul li {color:var(--danger-700)}
    .pr-kit-section.green .pr-ul li {color:var(--ok-700)}
    .pr-kit-tip {font-size:11px;color:var(--primary-text);font-style:italic;margin-top:8px;padding:6px;background:var(--primary-grad-soft);border-radius:var(--r-sm)}
    .pr-checklist {font-size:12px}
    .pr-chk-row {display:flex;align-items:center;gap:8px;padding:4px 0}
    .pr-chk-box {width:16px;height:16px;border:1.5px solid var(--line);border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--ink-400)}
    .pr-chk-label {color:var(--ink-700)}
    .pr-chk-ph {font-size:11px;color:var(--ink-400);margin-top:10px;padding-top:8px;border-top:1px dashed var(--line)}
    .pr-menu-head {font-size:13px;font-weight:600;color:var(--primary-text);margin-bottom:12px}
    .pr-incomplete-tip {padding:10px 14px;background:#FFF4F2;border:1px solid #F2C6BC;border-radius:var(--r-sm);color:var(--danger-600);font-size:12px;font-weight:600;margin-bottom:12px}
    .pr-menu-tbl {width:100%;border-collapse:collapse;font-size:11px}
    .pr-menu-tbl th,.pr-menu-tbl td {border:1px solid var(--line);padding:8px;vertical-align:top}
    .pr-menu-tbl th {background:var(--surface-2);color:var(--ink-500);font-weight:500;text-align:center;width:16%}
    .pr-menu-tbl .menu-day {text-align:center;font-weight:600;color:var(--primary-text);background:var(--surface-2);width:40px}
    .pr-menu-tbl tr.menu-alt .menu-day {background:#FEF3C7}
    .menu-alt-tag {font-size:9px;color:#92400E;font-weight:500;display:block}
    .menu-cell {min-height:50px}
    .menu-dish {font-weight:600;color:var(--ink-800)}
    .menu-portion {font-size:10px;color:var(--primary-text);margin-top:2px}
    .menu-method {font-size:10px;color:var(--ink-500);margin-top:2px;font-style:italic}
    /* N1: 餐 items 明细（食材×克数×近似标注） */
    .menu-items {margin-top:4px;display:flex;flex-direction:column;gap:2px}
    .menu-it {font-size:10px;color:var(--ink-600);display:flex;align-items:center;gap:4px;flex-wrap:wrap;line-height:1.4}
    .menu-it-n {font-weight:600;color:var(--ink-700)}
    .menu-it-p {color:var(--ink-500)}
    .menu-it-g {color:var(--primary-text);font-weight:600}
    .menu-it-unc {font-size:9px;color:#B45309;background:#FEF3C7;border-radius:4px;padding:0 4px;line-height:1.5}
    .menu-edit-itemrow {display:flex;gap:4px;margin-top:4px}
    .menu-edit-in {flex:1.2}
    .menu-edit-ip {flex:1}
    .menu-edit-itlabel {font-size:10px;color:var(--ink-400);margin-top:6px}
    .menu-constraints {font-size:11px;color:var(--ink-500);margin-top:8px;padding:8px;background:var(--surface-2);border-radius:var(--r-sm);line-height:1.5}
    .menu-cell {position:relative}
    .menu-edit-btn {position:absolute;top:4px;right:4px;width:20px;height:20px;border:none;background:var(--surface-2);color:var(--ink-400);border-radius:4px;font-size:11px;cursor:pointer;opacity:0;transition:all var(--t-fast);padding:0;line-height:1;display:flex;align-items:center;justify-content:center}
    .menu-cell:hover .menu-edit-btn {opacity:1;background:var(--primary-grad-soft);color:var(--primary-text)}
    .menu-edit-form {display:flex;flex-direction:column;gap:4px}
    .menu-edit-input {width:100%;padding:4px 6px;border:1px solid var(--primary-300);border-radius:4px;font-size:11px;outline:none;font-family:inherit}
    .menu-edit-input:focus {border-color:var(--primary-500);box-shadow:0 0 0 2px var(--primary-100)}
    .menu-edit-btns {display:flex;gap:4px}
    .menu-edit-btn-save,.menu-edit-btn-cancel {flex:1;padding:4px 8px;border:none;border-radius:4px;font-size:11px;cursor:pointer;font-weight:500}
    .menu-edit-btn-save {background: var(--primary-700);color:#fff}
    .menu-edit-btn-save:hover {background: var(--primary-800)}
    .menu-edit-btn-cancel {background:var(--surface-3);color:var(--ink-600)}
    .menu-edit-btn-cancel:hover {background:var(--line)}
    .pr-note-band {padding:10px 14px;background:var(--primary-grad-soft);border:1px solid var(--primary-200);border-radius:var(--r-sm);color:var(--primary-text);font-size:12px;font-weight:500;margin-bottom:12px}
    .pr-swap-grid {display:grid;grid-template-columns:repeat(5,1fr);gap:8px}
    .pr-swap-col {background:var(--surface-2);border-radius:var(--r-sm);padding:10px}
    .pr-swap-title {font-size:11px;font-weight:600;color:var(--primary-text);margin-bottom:6px}
    .pr-swap-col .pr-ul {padding-left:14px;font-size:11px;line-height:1.7}
    .pr-shop-head {font-size:13px;font-weight:600;color:var(--primary-text);margin-bottom:12px}
    .pr-shop-grid {display:grid;grid-template-columns:2fr 1fr 1fr;gap:10px}
    .pr-shop-col {background:var(--surface-2);border-radius:var(--r-md);padding:14px}
    .pr-shop-title {font-weight:600;font-size:13px;margin-bottom:8px;color:var(--ink-800)}
    .pr-shop-title.danger {color:var(--danger-700)}
    .pr-shop-tbl {width:100%;border-collapse:collapse;font-size:12px}
    .pr-shop-tbl td {padding:4px 0;border-bottom:1px solid var(--line-light)}
    .pr-shop-qty {text-align:right;color:var(--primary-text);font-weight:600;white-space:nowrap;padding-left:10px}
    .pr-footer {margin-top:28px;padding:14px;background:var(--surface-2);border-radius:var(--r-md);font-size:11px;color:var(--ink-500);line-height:1.7;border-top:2px solid var(--primary-300)}
    .pr-actions {padding:12px 20px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:10px;background:#fff}
    /* 批C2 在线修改编辑态 */
    .pr-ver-badge {font-size:11.5px;color:var(--ink-500);padding:3px 10px;background:var(--surface-2, #F5EFE6);border-radius:10px;white-space:nowrap}
    .pr-tab.pr-edit-toggle {border:1px solid #B9E3D5;color:var(--primary-text)}
    /* 批Q2(C1) 可编辑态 = 方案 B：弱记号（淡下划线）管「能不能改」，强记号管「正在改哪个」 */
    .pr-edit-tip {position:sticky;top:0;z-index:60;padding:8px 20px;background:#F1F8F4;border-bottom:1px solid #DCEDE5;font-size:12.5px;color:var(--primary-text);display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
    .pr-edit-tip .pe-path {font-weight:600;color:#1E6B57}
    .pr-edit-tip .pe-cnt {background:#FFEFE4;color:#B4592A;border-radius:999px;padding:1px 9px;font-weight:600}
    .pr-edit-tip .pe-btn {border:none;background:transparent;color:var(--primary-text);cursor:pointer;font-size:12.5px;text-decoration:underline;padding:0 2px}
    .pr-change-list {position:sticky;top:36px;z-index:59;background:#FFFDF9;border-bottom:1px solid #F3E3D2;font-size:12px;color:#8A5A2B;padding:0 20px;line-height:1.7;max-height:0;overflow:hidden;transition:max-height 160ms,padding 160ms}
    .pr-change-list.on {max-height:240px;overflow:auto;padding:6px 20px}
    .pr-change-list .pcl-row {padding:1px 0}
    .pr-change-list del {color:#B9A99A}
    /* 批Q2(C4)：历史态置灰（非当前结果的块整体降权，徽章与提示条保持 1） */
    .fbody.is-stale > * {opacity:.72}
    .fbody.is-stale > .stage-badges, .fbody.is-stale > .diag-stale-note {opacity:1}
    .fbody.is-stale > .diag-stale-note {background:#F4F7FB;border-left:3px solid var(--info, #5B9EE8);color:#3A5678;font-size:12.5px;padding:8px 12px;border-radius:0 8px 8px 0;margin:4px 0 10px}
    /* 批Q2(C3)：单位选择（编辑菜弹窗） */
    .dh-row select.dh-i-u {flex:none;width:54px;font-size:12px;padding:5px 4px;border:1px solid var(--line, #E6E0D5);border-radius:8px;background:#fff;color:var(--ink-700, #333);font-family:inherit}
    .dh-raw {display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ink-500, #666);margin:2px 0 8px}
    .dh-raw input {margin:0}
    .menu-it-ed {font-size:10px;color:#7A8A82;background:#F1F5F3;border-radius:4px;padding:0 5px;margin-left:4px;flex-shrink:0;line-height:1.6}
    /* 默认态：零框线，只用 45% 透明度的薄荷下虚线（批量存在 → 不用强记号） */
    .plan-reader.pr-editing [contenteditable="true"] {outline:none;border-bottom-width:1px;border-bottom-style:dashed;border-bottom-color:#9FD6C4;border-radius:2px;padding-bottom:1px;cursor:text;min-width:24px;transition:background 140ms,border-color 140ms}
    .plan-reader.pr-editing [contenteditable="true"]:hover {background:#F4FAF7;border-bottom-color:transparent}
    /* 活动焦点：全页唯一（薄荷 2px + 外圈），并给所在行加左 3px 薄荷条 */
    .plan-reader.pr-editing [contenteditable="true"].pr-cur {outline:2px solid var(--primary, #3FB89B);outline-offset:2px;background:#fff;box-shadow:0 0 0 4px rgba(var(--primary-rgb), .14);border-radius:6px;border-bottom-color:transparent}
    .plan-reader.pr-editing .pr-cur-row {box-shadow:inset 3px 0 0 var(--primary, #3FB89B)}
    /* 已改未保存：字段右侧小琥珀点（靠清单与计数表达，不再用框线） */
    .plan-reader.pr-editing [contenteditable="true"].pr-changed {position:relative}
    .plan-reader.pr-editing [contenteditable="true"].pr-changed::after {content:"";position:absolute;right:-9px;top:50%;margin-top:-3px;width:6px;height:6px;border-radius:50%;background:var(--accent, #FF9F68)}
    /* N2 supplements 行级编辑 */
    .pr-supp-delbtn {position:absolute;top:4px;right:6px;font-size:11px;padding:2px 8px;border:1px solid #F0C9A8;border-radius:8px;background:#FFF;color:#C25E00;cursor:pointer;line-height:1.2}
    .pr-supp-delbtn:hover {background:#FFF3E8}
    tr.pr-supp-del {opacity:.45;text-decoration:line-through}
    tr.pr-supp-del .pr-supp-delbtn {background:#C25E00;color:#fff;text-decoration:none;border-color:#C25E00}
    tr[data-suppr] {position:relative}
    #pr-supp-add, .pr-supp-addbtn {margin:6px 0 2px;font-size:12px;padding:4px 12px;border:1px solid #B9E3D5;border-radius:999px;background:#F7FCFA;color:var(--primary-text);cursor:pointer}
    #pr-supp-add:hover, .pr-supp-addbtn:hover {background:#FFF7E6}
    .plan-reader.pr-editing [contenteditable="true"]:focus {outline:2px solid var(--primary, #3FB89B);outline-offset:2px;background:#fff}
    .pp-btn {padding:6px 14px;border-radius:8px;border:1px solid transparent;font-size:12.5px;cursor:pointer;margin-top:2px}
    .pp-btn-yes {background:var(--primary-deep);color:#fff}
    .pp-btn-no {background:transparent;border-color:var(--line, #E6E0D5);color:var(--ink-600, #555)}
    @media (max-width: 900px) {
      .pr-toc {display:none}
      .pr-goals-grid {grid-template-columns:1fr}
      .pr-stages {flex-direction:column}
      .pr-kit-grid {grid-template-columns:1fr}
      .pr-swap-grid {grid-template-columns:repeat(2,1fr)}
      .pr-shop-grid {grid-template-columns:1fr}
      .pr-guard-grid {grid-template-columns:1fr}
    }
    /* 方案全文弹窗 */
    .v3-app .plan-sec {margin-bottom:16px}
    .v3-app .plan-sec .sec-t {font-size:13px;font-weight:600;color:var(--ink-800);margin-bottom:8px;padding-bottom:5px;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:6px}
    .v3-app .plan-sec .sec-t .ic {width:20px;height:20px;border-radius:6px;background:var(--primary-grad-soft);color:var(--primary-text);display:flex;align-items:center;justify-content:center;font-size:11px;flex-shrink:0}
    .v3-app .plan-sec table {width:100%;border-collapse:collapse;font-size:12px}
    .v3-app .plan-sec th,.v3-app .plan-sec td {border:1px solid var(--line);padding:7px 10px;text-align:left;vertical-align:top}
    .v3-app .plan-sec th {background:var(--surface-2);color:var(--ink-500);font-weight:500;white-space:nowrap;width:64px}
    .v3-app .plan-sec ul {margin:0;padding-left:18px;font-size:12px;line-height:1.8;color:var(--ink-700)}
    .v3-app .plan-sec li {margin-bottom:3px}
    .v3-app .plan-meta {display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:18px}
    .v3-app .plan-meta .pm {background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:8px;text-align:center}
    .v3-app .plan-meta .pm .pk {font-size:11px;color:var(--ink-400)}
    .v3-app .plan-meta .pm .pv {font-size:13px;font-weight:600;color:var(--ink-800);margin-top:3px}
    /* ===== v6 统一弹窗框架 ===== */
    @keyframes v3FadeIn{from{opacity:0}to{opacity:1}}
    @keyframes v3ModalIn{from{transform:translateY(20px) scale(.96);opacity:0}to{transform:none;opacity:1}}
    .modal-mask {position:fixed;inset:0;background:rgba(15,23,42,.45);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:flex;align-items:flex-start;justify-content:center;z-index:9999;animation:v3FadeIn .2s;overflow-y:auto;padding:24px 16px}
    .modal-card {background:var(--surface);border-radius:var(--r-lg);box-shadow:var(--sh-lg);width:540px;max-width:90vw;max-height:none;display:flex;flex-direction:column;animation:v3ModalIn .25s;overflow:hidden;margin:auto}
    .modal-head {padding:18px 22px 14px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
    .modal-head .mt {font-size:var(--fs-md);font-weight:600;color:var(--ink-800)}
    .modal-head .close {width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--ink-400);font-size:22px;line-height:1;transition:var(--t-fast);background:transparent;border:none}
    .modal-head .close:hover {background:var(--surface-2);color:var(--ink-700)}
    .modal-body {padding:18px 22px;overflow-y:visible;flex:1 0 auto}
    .modal-foot {padding:12px 22px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px;flex-shrink:0}
    /* 表单元素 */
    .form-row {margin-bottom:14px}
    .form-label {font-size:12px;color:var(--ink-500);margin-bottom:6px;font-weight:500}
    .form-input,.form-select,.form-textarea {width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);font-size:var(--fs-sm);color:var(--ink-800);outline:none;transition:var(--t-fast);font-family:inherit}
    .form-input,.form-select {height:40px;line-height:20px}
    .form-input:focus,.form-select:focus,.form-textarea:focus {border-color:var(--primary);box-shadow:0 0 0 3px rgba(var(--primary-rgb), .15);background:var(--surface)}
    .form-input[readonly] {background:var(--surface-3);color:var(--ink-400)}
    .form-textarea {resize:vertical;min-height:60px;line-height:1.5}
    .form-row.spaced {margin-top:18px;padding-top:16px;border-top:1px dashed var(--line)}
    .form-row.col2 {display:grid;grid-template-columns:1fr 1fr;gap:12px}
    .form-row.col3 {display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
    .radio-group {display:flex;gap:6px;flex-wrap:wrap}
    .radio-opt {padding:6px 12px;border:1px solid var(--line);border-radius:var(--r-pill);font-size:12px;cursor:pointer;background:var(--surface-2);transition:var(--t-fast);user-select:none;color:var(--ink-700)}
    .radio-opt.sel {background:var(--primary-grad-soft);border-color:var(--primary);color:var(--primary-text);font-weight:600}
    .radio-opt:hover:not(.sel) {border-color:var(--primary-300);color:var(--primary-text)}
    .v3-app .tip-card {background:var(--warn-soft);border:1px solid var(--warn);border-radius:var(--r-sm);padding:10px 12px;font-size:12px;color:var(--warn-600);line-height:1.6;margin:10px 0}
    .v3-app .tip-card.ok {background:var(--ok-soft);border-color:var(--primary-300);color:var(--primary-text)}
    /* 上传区 / 报告列表 / 专家市场 */
    .v3-app .upload-zone {border:2px dashed var(--line-strong);border-radius:var(--r-md);padding:30px 20px;text-align:center;background:var(--surface-2);cursor:pointer;transition:var(--t-fast)}
    .v3-app .upload-zone:hover {border-color:var(--primary);background:var(--primary-grad-soft)}
    .v3-app .upload-zone .ico {font-size:32px;margin-bottom:8px;color:var(--ink-400)}
    .v3-app .upload-zone .tt {font-size:14px;font-weight:600;margin-bottom:4px;color:var(--ink-800)}
    .v3-app .upload-zone .sub {font-size:12px;color:var(--ink-400)}
    .v3-app .upload-list {margin-top:12px;display:flex;flex-direction:column;gap:8px}
    .v3-app .modal-report {display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2)}
    .v3-app .modal-report .fic {width:32px;height:32px;border-radius:var(--r-sm);background:var(--info-soft);display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0}
    .v3-app .modal-report .finfo {flex:1;min-width:0}
    .v3-app .modal-report .fname {font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .modal-report .fmeta {font-size:11px;color:var(--ink-500);margin-top:2px}
    .v3-app .modal-report .act {font-size:11px;color:var(--primary-text);padding:3px 8px;border-radius:var(--r-sm);cursor:pointer;font-weight:500}
    .v3-app .modal-report .act:hover {background:var(--primary-grad-soft)}
    .v3-app .modal-report .del {font-size:11px;color:#C14B3C;padding:3px 8px;border-radius:var(--r-sm);cursor:pointer}
    .v3-app .modal-report .del:hover {background:var(--danger-soft)}
    .v3-app .market-grid {display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:18px}
    .v3-app .market-card {display:flex;align-items:center;gap:10px;padding:12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);cursor:pointer;transition:var(--t-fast)}
    .v3-app .market-card:hover {border-color:var(--primary);background:var(--primary-grad-soft)}
    .v3-app .market-card .mav {width:36px;height:36px;border-radius:50%;background:var(--accent-grad);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;flex-shrink:0}
    .v3-app .market-card .mtxt {flex:1;min-width:0}
    .v3-app .market-card .mnm {font-size:13px;font-weight:600;color:var(--ink-800)}
    .v3-app .market-card .mtag {font-size:11px;color:var(--ink-500);margin-top:2px}
    /* ===== v6 右侧 AI 对话栏强化 ===== */
    .v3-app .live-dot {display:inline-block;width:7px;height:7px;border-radius:50%;background:#22C55E;margin-left:5px;vertical-align:2px;animation:livePulse 1.6s infinite}
    @keyframes livePulse{0%,100%{box-shadow:0 0 0 0 rgba(34,197,94,.4)}50%{box-shadow:0 0 0 4px rgba(34,197,94,0)}}
    .v3-app .ai-guide {margin:10px 14px 0;padding:9px 12px;border-radius:var(--r-md);background:var(--primary-grad-soft);border:1px solid var(--primary-300);font-size:12px;color:var(--primary-text);line-height:1.6;display:flex;gap:8px;align-items:flex-start;transition:var(--t-fast);flex-shrink:0}
    .v3-app .ai-guide .g-ic {flex-shrink:0;font-size:14px;line-height:1.4}
    .v3-app .ai-guide .g-tip {flex:1;min-width:0}
    .v3-app .ai-guide .g-tip b {color:var(--primary-text)}
    .v3-app .ai-guide .g-ex {color:var(--primary-text);font-size:11px;margin-top:3px}
    .v3-app .v3-dialog.glow {animation:dlgPulse 2.6s ease-out}
    @keyframes dlgPulse{
      0%,100%{box-shadow:0 0 0 0 rgba(var(--primary-rgb), 0);transform:scale(1)}
      12%{box-shadow:0 0 0 5px rgba(var(--primary-rgb), .55),0 0 34px 12px rgba(var(--primary-rgb), .4);transform:scale(1.014)}
      30%{box-shadow:0 0 0 2px rgba(var(--primary-rgb), .3),0 0 14px 4px rgba(var(--primary-rgb), .18);transform:scale(1)}
      48%{box-shadow:0 0 0 5px rgba(var(--primary-rgb), .55),0 0 34px 12px rgba(var(--primary-rgb), .4);transform:scale(1.014)}
      66%{box-shadow:0 0 0 2px rgba(var(--primary-rgb), .3),0 0 14px 4px rgba(var(--primary-rgb), .18);transform:scale(1)}
      84%{box-shadow:0 0 0 5px rgba(var(--primary-rgb), .55),0 0 34px 12px rgba(var(--primary-rgb), .4);transform:scale(1.014)}
      92%{box-shadow:0 0 0 2px rgba(var(--primary-rgb), .3),0 0 14px 4px rgba(var(--primary-rgb), .18);transform:scale(1)}
    }
    .v3-app .chat-input .ci textarea.hot {box-shadow:0 0 0 3px rgba(var(--primary-rgb), .25);border-radius:6px}
    .v6-toast {position:fixed;left:50%;bottom:48px;transform:translateX(-50%);background:rgba(15,23,42,.92);color:#fff;padding:10px 18px;border-radius:var(--r-pill);font-size:13px;z-index:300;box-shadow:var(--sh-lg);animation:v3FadeIn .2s;transition:opacity .4s}
    .v6-toast.out {opacity:0}
    .v3-app .diag-progress {background:linear-gradient(135deg, rgba(var(--primary-rgb), .10), rgba(var(--primary-rgb), .04));border:1px solid rgba(var(--primary-rgb), .35);border-radius:var(--r-md);padding:12px 14px;margin-bottom:14px}
    /* 报告上传进度链路 v2（2026-09）：单文件不确定态滑块（§3.1 禁止假百分比） */
    @keyframes v3Indet { 0% { left: -36%; } 100% { left: 100%; } }
    .v3-app .diag-progress .dp-head {display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
    .v3-app .diag-progress .dp-t {font-size:var(--fs-sm);font-weight:600;color:var(--ink-800)}
    .v3-app .diag-progress .dp-p {font-size:12px;font-weight:700;color:var(--primary);font-family:var(--num)}
    .v3-app .diag-progress .ant-progress {margin:0}
    .v3-app .v7-report-meta {font-size:11px;color:var(--ink-500);margin-bottom:8px}
    .v3-app .v7-report-meta .sep {margin:0 6px;color:var(--line-strong)}
    .v3-app .v7-report-summary {font-size:12px;color:var(--ink-600);padding:8px 10px;background:var(--surface-2);border-radius:var(--r-sm);margin-bottom:10px}
    .v3-app .v7-report-summary b.hi {color:#C14B3C}
    .v3-app .v7-report-list {display:flex;flex-direction:column;gap:6px}
    .v3-app .v7-item {display:grid;grid-template-columns:1fr 100px 130px 64px;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);font-size:12px}
    .v3-app .v7-item.hi {border-color:#e8b4ad;background:#fdf3f1}
    .v3-app .v7-item.lo {border-color:#c7d8f0;background:#f2f7fd}
    .v3-app .v7-item .it-nm {font-weight:600;color:var(--ink-800);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
    .v3-app .v7-item .it-nm .it-abbr {font-weight:400;font-size:10px;color:var(--ink-400);margin-left:3px}
    .v3-app .v7-item .it-val {color:var(--ink-700);font-family:var(--num)}
    .v3-app .v7-item .it-val .it-uni {font-size:10px;color:var(--ink-400);margin-left:2px}
    .v3-app .v7-item .it-ref {font-size:10px;color:var(--ink-400);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .v7-item .it-st {font-size:10px;text-align:center;padding:2px 4px;border-radius:var(--r-pill);color:var(--ink-400);background:var(--surface);white-space:nowrap}
    .v3-app .v7-item .it-st.hi {color:#C14B3C;background:#fbe5e1;font-weight:600}
    .v3-app .v7-item .it-st.lo {color:#2b6cb0;background:#e3eefb;font-weight:600}
    .v3-app .abn-count {font-size:11px;color:var(--ink-400);font-weight:500}
    .v3-app .bubble .b-del {font-style:normal;color:var(--ink-400);margin-left:4px;cursor:pointer;font-size:10px;padding:1px 3px;border-radius:50%}
    .v3-app .bubble .b-del:hover {color:#C14B3C;background:var(--danger-soft)}
    .v3-app .m-btn .ep-caret {font-size:9px;opacity:.7;margin-left:2px}
    .v3-app .v6-note {margin-top:12px;font-size:11px;color:var(--ink-400);line-height:1.6;padding:8px 12px;border-top:1px dashed var(--line)}

    
    /* 总览卡 */
    .v3-app .overview {background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:18px 22px;box-shadow:var(--sh-sm);margin-bottom:18px}
    .v3-app .overview .ov-head {display:flex;align-items:center;gap:12px;flex-wrap:wrap}
    .v3-app .overview .av-lg {width:48px;height:48px;border-radius:50%;background:var(--accent-grad);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:16px}
    .v3-app .overview .nm-lg {font-size:var(--fs-lg);font-weight:600}
    .v3-app .overview .mt-lg {font-size:var(--fs-sm);color:var(--ink-500)}
    .v3-app .ov-metrics {display:none}
    .v3-app .metric-row {display:grid;grid-template-columns:repeat(4,1fr);gap:1px;margin-top:14px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--line);overflow:hidden}
     .metric-row.five {grid-template-columns:repeat(5,1fr)}
     @media (max-width: 900px) { .metric-row, .metric-row.five {grid-template-columns:repeat(2,1fr)} }   /* 批Y7(I3)：窄屏两列自适应 */
    .v3-app .metric {background:var(--surface-2);padding:10px 6px;text-align:center;min-width:0;border-radius:0}
    .v3-app .metric .v {font-family:var(--num);font-size:var(--fs-md);font-weight:700;color:var(--ink-800)}
    .v3-app .metric .k {font-size:11px;color:var(--ink-500);margin-top:3px}
    .v3-app .metric .v .sub {display:block;font-size:10px;color:var(--ink-400);font-weight:400;margin-top:1px}
    .v3-app .metric .v.topic {color:var(--primary-text)}
    .v3-app .metric .v.warn {color:var(--warn-600)}
    .v3-app .metric .v.ok {color:var(--primary-text)}
    .v3-app .metric .v.danger {color:#C14B3C}
    .v3-app .ov-chief {margin-top:12px}
    .v3-app .ov-chief .lbl {font-size:12px;color:var(--ink-500);margin-bottom:6px}
    .v3-app .chief-bubbles {display:flex;gap:6px;flex-wrap:wrap}
    .v3-app .bubble {background:var(--primary-grad-soft);color:var(--primary-text);border-radius:var(--r-pill);padding:5px 14px;font-size:var(--fs-sm);font-weight:500;cursor:pointer;transition:var(--t-fast)}
    .v3-app .bubble:hover {transform:translateY(-1px);box-shadow:var(--sh-sm)}
    .v3-app .bubble.add {border:1px dashed var(--line-strong);background:transparent;color:var(--ink-400);font-weight:400}
    
    /* 流程卡 */
    .v3-app .flow-cards {display:flex;flex-direction:column;gap:12px}
    .v3-app .fcard {background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);overflow:hidden;transition:var(--t-norm)}
    .v3-app .fcard.open {box-shadow:var(--sh-md)}
    .v3-app .fcard .fhead {display:flex;align-items:center;gap:10px;padding:15px 20px;cursor:pointer;transition:var(--t-fast)}
    .v3-app .fcard .fhead:hover {background:var(--surface-2)}
    .v3-app .fstep {width:30px;height:30px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;flex-shrink:0;background:var(--surface-3, #EEF5F2);color:var(--ink-400, #8E8E93);border:1px solid transparent}
    .v3-app .fstep.done {background:var(--ok-soft, #E3F7EF);color:var(--ok-700, #1F9E75)}
    .v3-app .fstep.current {background:var(--ink-500, #6E6E73);color:#fff}
    .v3-app .fcard .ftitle {font-size:var(--fs-md);font-weight:600;flex:1}
    .v3-app .fcard .fsub {font-size:var(--fs-xs);color:var(--ink-400)}
/* 批 V2-23：PDF 导出区块（并入方案卡，不再占步骤编号） */
.v3-app .export-sec{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)/* 与方案内容分隔 */}
.v3-app .export-sec-t{font-size:13px;font-weight:700;color:var(--ink-900);margin-bottom:8px}
    .v3-app .fcard .fbody {display:none;padding:0 20px 18px;border-top:1px solid var(--line)}
    .v3-app .fcard.open .fbody {display:block;padding-top:16px}
    .v3-app .fcard .arrow {color:var(--ink-300);font-size:14px;transition:var(--t-norm)}
    .v3-app .fcard.open .arrow {transform:rotate(90deg);color:var(--primary)}
    /* 系统性修复 v1（2026-08-30）：重新解读按钮 + 状态徽章行 */
    .v3-app .fcard .fhead .btn-rediag {margin-left:auto;font-size:12px;padding:3px 10px;border-radius:14px;white-space:nowrap;flex-shrink:0;background:var(--surface-2);color:var(--primary-text);border:1px solid var(--line-strong)}
    .v3-app .fcard .fhead .btn-rediag:hover:not(.is-disabled) {background:var(--primary-soft);border-color:var(--primary)}
    .v3-app .fcard .fhead .btn-rediag.is-disabled {opacity:.55;cursor:not-allowed}
    .v3-app .stage-badges {display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 14px;padding:10px 12px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md)}
    /* 2026-10-24（用户拍板）：徽章降级为「仅失败时出现一行」——
       正常态不渲染，失败态去掉常驻容器的底色/边框，避免又占出一整条“状态栏”。 */
    .v3-app .stage-badges.is-failonly {background:transparent;border:0;padding:0;margin:0 0 12px}
    .v3-app .stage-badges .sb-item {display:inline-flex;align-items:center;gap:5px;font-size:12px;padding:3px 10px;border-radius:12px;background:var(--surface-3);color:var(--ink-400);border:1px solid var(--line);cursor:default}
    .v3-app .stage-badges .sb-item .sb-ic {font-size:12px;line-height:1}
    .v3-app .stage-badges .sb-item .sb-st {font-size:11px;opacity:.75}
    .v3-app .stage-badges .sb-item.ok {background:var(--ok-soft);color:var(--primary-text);border-color:transparent}
    .v3-app .stage-badges .sb-item.loading {background:var(--info-soft);color:#2A7BB5;border-color:transparent}
    /* 🔴 批V2-12：失败徽章与成功/未开始态同构（用户 22:23：失败提示要符合整体 UI 协调）。
       原为 danger-soft + 1px 实心 danger 描边，是整行唯一带硬边框的徽章 ⇒ 视觉上「跳出来」。*/
    .v3-app .stage-badges .sb-item.fail {background:var(--danger-soft);color:var(--danger);border-color:transparent;cursor:pointer}
    .v3-app .stage-badges .sb-item.fail:hover {box-shadow:var(--sh-sm);filter:brightness(.97)}
    .v3-app .stage-badges .sb-btn {font:inherit;line-height:inherit;appearance:none;-webkit-appearance:none;border:0;background:transparent;display:inline-flex;align-items:center;gap:5px;padding:3px 10px;color:inherit;cursor:pointer;border-radius:12px}
    .v3-app .stage-badges .sb-btn .sb-ic {font-size:12px;line-height:1}
    .v3-app .stage-badges .sb-btn .sb-st {font-size:11px;opacity:.75}
    
    /* 上传区 */
    .v3-app .drop {background:var(--surface-2);border:1.5px dashed var(--line-strong);border-radius:var(--r-md);padding:22px;text-align:center;color:var(--ink-500);font-size:var(--fs-sm);cursor:pointer;transition:var(--t-fast);margin-bottom:14px}
    .v3-app .drop:hover {border-color:var(--primary);background:var(--surface-3)}
    .v3-app .drop .big {font-size:22px;margin-bottom:6px}
    .v3-app .drop .sub {font-size:var(--fs-xs);color:var(--ink-400);margin-top:4px}
    .v3-app .deliver-note {display:flex;align-items:center;gap:6px;font-size:12px;color:var(--primary-text);background:var(--primary-soft-2);border:1px solid rgba(var(--primary-rgb), .28);border-radius:9px;padding:8px 12px;margin-bottom:12px}
    .v3-app .vtag {display:inline-flex;align-items:center;margin-left:6px;font-size:10px;font-weight:700;color:var(--accent-600, #F0854A);background:var(--accent-soft, #FFF0E6);border-radius:8px;padding:1px 7px;white-space:nowrap;flex-shrink:0;line-height:1.4}
    .v3-app .rep-list {display:flex;flex-direction:column;gap:8px;margin-bottom:14px}
    .v3-app .rep-item {display:flex;align-items:center;gap:12px;border:1px solid var(--line);border-radius:var(--r-md);padding:10px 14px;transition:var(--t-fast)}
    .v3-app .rep-item:hover {box-shadow:var(--sh-sm)}
    .v3-app .rep-item .fic {width:34px;height:34px;border-radius:var(--r-sm);background:var(--info-soft);display:flex;align-items:center;justify-content:center;font-size:15px}
    .v3-app .rep-item .finfo {flex:1;min-width:0}
    .v3-app .rep-item .fname {font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .rep-item .fmeta {font-size:11px;color:var(--ink-400);font-weight:400;margin-top:2px}
    .v3-app .rep-item .act {font-size:var(--fs-xs);color:var(--primary-text);cursor:pointer;padding:4px 8px;border-radius:var(--r-sm);transition:var(--t-fast)}
    .v3-app .rep-item .act:hover {background:var(--primary-grad-soft)}
    .v3-app .rep-item .act.act-disabled {color:var(--ink-300, #AEAEB2);cursor:not-allowed}
    .v3-app .rep-item .act.act-disabled:hover {background:transparent}
    .v3-app .rep-item .del {font-size:var(--fs-xs);color:#C14B3C;cursor:pointer;padding:4px 8px;border-radius:var(--r-sm);transition:var(--t-fast)}
    .v3-app .rep-item .del:hover {background:var(--danger-soft)}
    .v3-app .missing {background:var(--warn-soft);border-left:3px solid var(--warn);border-radius:var(--r-md);padding:10px 14px;margin-bottom:14px;font-size:var(--fs-sm)}
    .v3-app .missing b {color:var(--warn-600)}
    .v3-app .missing .fields {margin-top:4px;color:var(--ink-700);line-height:1.7}
    .v3-app .missing .fields .miss {color:#C14B3C;font-weight:600}
    .v3-app .btn-row {display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-start}
    .v3-app .btn-row > .btn {padding-left:12px;padding-right:12px}
    .v3-app .btn {display:inline-flex;align-items:center;gap:8px;font-weight:600;font-size:var(--fs-base);padding:10px 20px;border-radius:var(--r-md);border:none;cursor:pointer;transition:var(--t-fast)}
    .v3-app .btn:hover {transform:translateY(-1px)}
    .v3-app .btn-primary {background:var(--primary-700);color:#fff;box-shadow:var(--sh-glow)}
    .v3-app .btn-primary:hover {box-shadow:0 12px 32px rgba(var(--primary-rgb), .28)}
    .v3-app .btn-primary:disabled {opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}
    .v3-app .btn-secondary {background:var(--surface);color:var(--ink-700);border:1px solid var(--line-strong)}
    .v3-app .btn-secondary:hover {background:var(--surface-3)}
    .v3-app .btn-sm {padding:7px 14px;font-size:var(--fs-sm);border-radius:var(--r-sm)}
    
    /* 智诊 */
    .v3-app .diag-concl {background:var(--surface-2);border-radius:var(--r-md);padding:14px 16px;margin-bottom:14px}
    .v3-app .diag-concl .t {font-size:var(--fs-sm);font-weight:600;margin-bottom:8px}
    .v3-app .diag-row {display:flex;align-items:flex-start;gap:10px;padding:7px 0;border-bottom:1px dashed var(--line);font-size:var(--fs-sm)}
    .v3-app .diag-row:last-child {border-bottom:none}
    .v3-app .flag {font-size:11px;font-weight:600;border-radius:var(--r-sm);padding:2px 8px;flex-shrink:0;margin-top:1px}
    .v3-app .flag.hi {background:var(--danger-soft);color:#C14B3C}
    .v3-app .flag.gray {background:var(--warn-soft);color:var(--warn-600)}
    .v3-app .diag-row .txt {line-height:1.6;color:var(--ink-700)}
    .v3-app .diag-row .txt .ref {color:var(--ink-400);font-size:12px}
    .v3-app .diag-row .txt .desc {color:var(--ink-500);font-size:12px;display:block;margin-top:2px}
    
    /* 病程脑图 */
        /* 病程脑图 */
    .v3-app .causal {border:1px solid var(--line);border-radius:var(--r-md);padding:16px;margin-bottom:14px;background:var(--surface-2)}
    /* 🔴 批V2-0b·P5：图谱「本次分析基于…」来源条（虚线灰底，弱于图本体，不抢视觉） */
    .v3-app .causal .c-src{font-size:10.5px;color:#7A8B85;line-height:1.6;margin:0 0 8px;padding:5px 9px;border-radius:8px;background:#F5F8F6;border:1px dashed #CFE0D8}
    .v3-app .causal .c-t {font-size:var(--fs-sm);font-weight:600;margin-bottom:4px;display:flex;align-items:center;gap:8px}
    .v3-app .causal .c-t .tip {font-size:11px;color:var(--ink-400);font-weight:400}
    .v3-app .legend {display:flex;gap:12px;flex-wrap:wrap;font-size:11px;color:var(--ink-500);margin:10px 0 12px;align-items:center}
    .v3-app .legend .lg {display:flex;align-items:center;gap:4px}
    .v3-app .legend .dot {width:12px;height:12px;border-radius:50%;border:1.5px solid}
    .v3-app .legend .dot.up {background:rgba(124,92,214,.12);border-color:var(--lvl-up)}
    .v3-app .legend .dot.mid {background:rgba(217,142,43,.12);border-color:var(--lvl-mid)}
    .v3-app .legend .dot.down {background:rgba(47,168,220,.12);border-color:var(--lvl-down)}
    .v3-app .legend .lgline {width:30px;height:0;border-top:2.5px solid var(--primary)}
    .v3-app .legend .lgline.dash {border-top:1.5px dotted #B9BEC7}
    .v3-app .legend .lgline.loop {border-top:2.2px dashed var(--loop)}
    .v3-app .legend .lgline.flow {border-top:2.6px solid var(--primary);background:repeating-linear-gradient(90deg,var(--primary) 0 6px,transparent 6px 10px)}
    .v3-app .cgrid {display:grid;grid-template-columns:1fr 1fr 1fr;gap:22px 28px;position:relative;align-items:center;min-height:150px;z-index:1}
    .v3-app .cgroup {display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center;height:100%;position:relative;z-index:2}
    .v3-app .cgroup.mid {display:grid;grid-template-columns:1fr 1fr;gap:10px;align-content:center;align-items:center;width:100%}
    .v3-app .cgroup .glabel {text-align:center;font-size:11px;font-weight:600;margin-bottom:4px}
    .v3-app .cgroup.up .glabel {color:var(--lvl-up)}
    .v3-app .cgroup.mid .glabel {color:var(--lvl-mid)}
    .v3-app .cgroup.down .glabel {color:var(--lvl-down)}
    /* 节点：§二十 硬约束（矩形 r-md / 220×48-64 / ≤2行 / 仅边框+背景色，禁胶囊/色条/图标/角标） */
    .v3-app .cnode {width:220px;min-height:48px;max-height:64px;padding:8px 12px;border-radius:var(--r-md);text-align:center;cursor:pointer;transition:var(--t-norm);border:3px solid var(--line-strong);background:var(--surface);box-shadow:0 1px 2px rgba(20,48,43,.05);display:flex;flex-direction:column;justify-content:center;overflow:hidden}
    .v3-app .cnode:hover {transform:translateY(-1px);box-shadow:0 2px 6px rgba(20,48,43,.08)}
    .v3-app .cnode.up {border-color:var(--lvl-up);background:rgba(124,92,214,.08)}
    .v3-app .cnode.mid {border-color:var(--lvl-mid);background:rgba(217,142,43,.08)}
    .v3-app .cnode.down {border-color:var(--lvl-down);background:rgba(47,168,220,.08)}
    /* 批Y10.5b(N2)：待人工归因节点——可见化标记（挂空不再静默） */
    .v3-app .cnode.needs-review {border-style:dashed;border-color:#C9A227;background:rgba(201,162,39,.06)}
    .v3-app .cnode .nr-tag {display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;font-size:10px;background:#FBF3E2;color:#9A6B15;vertical-align:middle}
    .v3-app .cnode .n-label {font-size:14px;font-weight:600;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .cnode .n-val {font-size:11px;font-weight:400;color:var(--ink-500);margin-top:2px;font-family:var(--num);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
    .v3-app .cnode.active {border-width:3px;transform:translateY(-1px);font-weight:600}
    .v3-app .cnode.up.active {border-color:var(--lvl-up);box-shadow:0 0 0 3px rgba(124,92,214,.22),0 0 0 6px rgba(124,92,214,.08)}
    .v3-app .cnode.mid.active {border-color:var(--lvl-mid);box-shadow:0 0 0 3px rgba(217,142,43,.22),0 0 0 6px rgba(217,142,43,.08)}
    .v3-app .cnode.down.active {border-color:var(--lvl-down);box-shadow:0 0 0 3px rgba(47,168,220,.22),0 0 0 6px rgba(47,168,220,.08)}
    .v3-app .cnode.dim {opacity:.25}
    .v3-app .cnode.dim:hover {opacity:.62}
    /* 响应式：视窗 <1024px 中游 2×2 → 1×4 横向（§二十 #12） */
    @media (max-width:1024px) {
      .v3-app .cgrid {grid-template-columns:1fr 1fr 1fr;gap:14px}
      .v3-app .cgroup.mid {grid-template-columns:repeat(4,1fr)}
      .v3-app .cnode {width:100%;min-width:0;max-width:220px}
    }
        .v3-app .cpath {margin-top:10px;background:var(--surface-2);border-radius:var(--r-md);padding:10px 14px;font-size:var(--fs-sm);color:var(--ink-700);line-height:1.8;min-height:44px;border:1px solid var(--line)}
    .v3-app .cpath .path-label {font-size:11px;color:var(--ink-400);font-weight:600;display:block;margin-bottom:4px}
    .v3-app .path-hint {color:var(--ink-400)}
    .v3-app .pf-flow {display:flex;flex-wrap:wrap;align-items:center;gap:4px}
    .v3-app .pf-chip {font-size:11px;font-weight:600;padding:2px 9px;border-radius:var(--r-pill);background:#fff;background:color-mix(in srgb, var(--pf-c) 12%, #fff);color:var(--pf-c);border:1px solid color-mix(in srgb, var(--pf-c) 35%, #fff)}
    .v3-app .pf-arrow {font-size:9px;color:var(--ink-400)}
    
    /* 方案 */
    .v3-app .plan-grid {display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:14px}
    .v3-app .plan-card {border:1px solid var(--line);border-radius:var(--r-md);padding:16px;background:var(--surface);transition:var(--t-norm);cursor:pointer}
    .v3-app .plan-card:hover {box-shadow:var(--sh-md);transform:translateY(-2px)}
    .v3-app .plan-card.sel {border-color:var(--primary);box-shadow:0 0 0 2px rgba(var(--primary-rgb), .15),var(--sh-md)}
    .v3-app .plan-card .pt {font-size:var(--fs-md);font-weight:600;display:flex;align-items:center;gap:8px;margin-bottom:8px}
    .v3-app .plan-card .pd {font-size:var(--fs-sm);color:var(--ink-700);line-height:1.7}
    .v3-app .plan-card .pd .row {margin-top:5px}
    .v3-app .plan-card .pd .lbl {color:var(--ink-400);font-size:12px}
    .v3-app .plan-card .pk {font-size:12px;color:var(--primary-text);background:var(--primary-grad-soft);border-radius:var(--r-pill);padding:2px 8px;font-weight:600}
    .v3-app .compare-tip {background:var(--info-soft);border-radius:var(--r-md);padding:10px 14px;font-size:var(--fs-sm);color:#1E7FB0;margin-bottom:14px}
    
    @media(max-width:1100px){ .clients{width:220px} .v3-dialog{width:280px} }
    @media(max-width:860px){ .clients,.v3-dialog{display:none} }
    
    /* hotfix-1708: 会话加载失败降级提示条（局部提示，不卸载工作台） */
    .v3-app .session-load-error { display:flex; align-items:center; gap:10px; padding:8px 14px; margin:10px 14px 0; background:rgba(var(--danger-rgb), .08); border:1px solid rgba(var(--danger-rgb), .25); border-radius:10px; font-size:12px; color:#C14B3C; flex-shrink:0; }
    .v3-app .session-load-error .sle-text { flex:1; min-width:0; }
    .v3-app .session-load-error .sle-retry { padding:4px 12px; border-radius:8px; border:1px solid rgba(193,75,60,.4); background:#fff; color:#C14B3C; font-size:12px; cursor:pointer; flex-shrink:0; }
    .v3-app .session-load-error .sle-retry:hover { background:rgba(var(--danger-rgb), .1); }

    /* ===== v7 升级：报告异常卡独立可折叠 / 基本信息卡徽标 / AI解读 / SVG因果图 / 右栏头部 ===== */
    /* 报告异常卡（从总览拆出，独立可折叠） */
    /* 🔴 批V2-9：灰度卡片。沿用 ov-abn-card 的视觉语言，但用**琥珀色**主调（区别于异常的红色系），
       这样一眼能分清「需关注」与「异常」。*/
    /* 🔴 批V2-11：三段说明样式（为什么判为需关注 / 不及时干预 / 干预方向）*/
.v3-app .v7-gray-row .b, .v3-app .v7-gray-row .i, .v3-app .v7-gray-row .c {font-size:12px;line-height:1.65;color:#5A6B63;margin-top:4px;padding-left:9px;border-left:2px solid rgba(190,150,60,.30)}
.v3-app .v7-gray-row .c {border-left-color:rgba(198,108,58,.45);color:#6E5340;background:rgba(255,248,240,.5);border-radius:0 5px 5px 0}
.v3-app .v7-gray-row .bk {display:inline-block;font-weight:600;color:#8A6A22;margin-right:6px}
.v3-app .v7-gray-row .c .bk {color:#A85A2C}
.v3-app .v7-gray-row .i .bk {color:#2F6B57}
.v3-app .v7-gray-slot {margin:12px 0}
.v3-app .v7-gray-row .c2 {font-size:12px;line-height:1.65;color:#6E7B75;margin-top:4px;padding-left:9px;border-left:2px solid rgba(120,150,140,.35)}
.v3-app .v7-gray-row .c2 .bk {color:#3F6B5E}
.v3-app .v7-gray-note .dim {color:#8A7A5A;font-size:11.5px}
    .v3-app .ov-gray-card {background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);margin-bottom:18px;overflow:hidden}
    /* 🔴 批V2-12：与「异常指标解读」卡同构（用户 22:23：上下 UI 风格要一致，不是颜色问题）。
       标题字重 600、内边距 14px 20px、hover 态、圆形折叠按钮（旋转）、pill 徽章 —— 全部对齐 .ov-abn-*。*/
    .v3-app .ov-gray-head {display:flex;align-items:center;gap:10px;padding:14px 20px;cursor:pointer;user-select:none;transition:var(--t-fast)}
    .v3-app .ov-gray-head:hover {background:var(--surface-2)}
    .v3-app .ov-gray-head .abn-t {font-size:var(--fs-md);font-weight:600;display:flex;align-items:center;gap:8px;color:var(--ink-800)}
    .v3-app .ov-gray-head .abn-badge {font-size:11px;font-weight:600;border-radius:var(--r-pill);padding:2px 9px;line-height:1.6}
    .v3-app .ov-gray-head .abn-badge.attn {background:var(--warn-soft);color:var(--warn-600)}
    .v3-app .ov-gray-head .abn-fold {margin-left:auto;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--ink-400);background:var(--surface-2);transition:var(--t-fast);flex:none}
    .v3-app .ov-gray-head .abn-fold:hover {color:var(--primary-text);border-color:var(--primary-300)}
    .v3-app .ov-gray-head .abn-fold.collapsed {transform:rotate(180deg)}
    .v3-app .ov-gray-head .cs-badge {flex-shrink:0}
    .v3-app .ov-gray-body {padding:13px 15px}
    .v3-app .ov-gray-body.collapsed {display:none}
    .v3-app .v7-gray-note {font-size:var(--fs-xs);color:#8A6A38;line-height:1.7;margin-bottom:10px;padding:9px 11px;background:#FFFCF4;border:1px solid #F0DCB4;border-radius:var(--r-md)}
    .v3-app .v7-gray-note b {color:#8A5A00}
    .v3-app .v7-gray-row {padding:9px 0;border-top:1px dashed #EFE3CC}
    .v3-app .v7-gray-row:first-of-type {border-top:0}
    .v3-app .v7-gray-row .l {display:flex;flex-wrap:wrap;align-items:baseline;gap:8px}
    .v3-app .v7-gray-row .n {font-weight:700;color:#26403A;font-size:var(--fs-sm)}
    .v3-app .v7-gray-row .v {font-weight:700;color:var(--warn-text);font-size:var(--fs-sm);font-variant-numeric:tabular-nums}
    .v3-app .v7-gray-row .g {font-size:var(--fs-xs);color:#8A6A38;background:#FFFCF4;border:1px solid #F0DCB4;border-radius:999px;padding:1px 8px}
    .v3-app .v7-gray-row .a {font-size:var(--fs-xs);color:var(--danger-700)}
    .v3-app .v7-gray-row .e {font-size:var(--fs-xs);color:#2C5FB8;background:#EAF1FD;border-radius:999px;padding:1px 8px}
    .v3-app .v7-gray-row .b {font-size:var(--fs-xs);color:var(--ink-400);margin-top:4px;line-height:1.6}
    .v3-app .v7-gray-row .i {font-size:var(--fs-xs);color:#5A756D;margin-top:3px;line-height:1.65}
    .v3-app .ov-abn-card {background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);margin-bottom:18px;overflow:hidden}
    .v3-app .ov-abn-head {display:flex;align-items:center;gap:10px;padding:14px 20px;cursor:pointer;user-select:none;transition:var(--t-fast)}
    .v3-app .ov-abn-head:hover {background:var(--surface-2)}
    .v3-app .ov-abn-head .abn-t {font-size:var(--fs-md);font-weight:600;display:flex;align-items:center;gap:8px}
    .v3-app .ov-abn-head .abn-badge {font-size:11px;font-weight:600;border-radius:var(--r-pill);padding:2px 9px;line-height:1.6}
    .v3-app .ov-abn-head .abn-badge.risk {background:var(--danger-soft);color:#C14B3C}
    .v3-app .ov-abn-head .abn-badge.stable {background:var(--ok-soft);color:var(--primary-text)}
    .v3-app .ov-abn-head .abn-badge.none {background:var(--surface-3);color:var(--ink-400)}
    .v3-app .ov-abn-head .abn-fold {margin-left:auto;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--ink-400);background:var(--surface-2);border:1px solid var(--line);cursor:pointer;transition:var(--t-norm);flex-shrink:0;line-height:1}
    .v3-app .ov-abn-head .abn-fold:hover {color:var(--primary-text);border-color:var(--primary-300)}
    .v3-app .ov-abn-head .abn-fold.collapsed {transform:rotate(180deg)}
    .v3-app .ov-abn-body {padding:0 20px 16px;border-top:1px solid var(--line)}
    .v3-app .ov-abn-body.collapsed {display:none}
    .v3-app .ov-abn-body .abn-tip {margin-top:10px;font-size:11px;color:var(--ink-400);text-align:center;padding:8px;border-top:1px dashed var(--line);line-height:1.6}
    .v3-app .ov-abn-body .abn-tip b {color:var(--primary-text)}
    /* 基本信息卡：上传报告徽标 + 身份地图 */
    .v3-app .ov-head .btn-cnt.badge {background: var(--primary-700);color:#fff;border-radius:6px;padding:0 5px;margin-left:5px;font-size:10px;font-weight:700;line-height:18px;min-width:18px;height:18px;text-align:center;display:inline-flex;align-items:center;justify-content:center}
    .v3-app .ov-head .btn-cnt.badge.zero {background:var(--surface-3, #EEF5F2);color:var(--ink-400, #8E8E93)}
    .v3-app .metric .v .sp-tag {display:inline-block;font-size:10px;font-weight:500;border-radius:var(--r-pill);padding:0 5px;margin-left:3px;background:var(--primary-grad-soft);color:var(--primary-text);vertical-align:1px}
    .v3-app .metric .v.safe {color:var(--primary-text)}
    .v3-app .metric .v.risk {color:#C14B3C}
    .v3-app .metric .v.warn {color:var(--warn-600)}
    /* AI 解读：综合判断 3 段 + 重点解读 Top3 */
        /* 🔴 批V2-0b·P5：diag-focus 样式已随「重点关注 Top3」下线 */
.v3-app .diag-sum {background:var(--surface-2);border-radius:var(--r-md);padding:14px 16px;margin-bottom:14px}
    .v3-app .diag-sum .ds-t {font-size:var(--fs-sm);font-weight:600;margin-bottom:10px;display:flex;align-items:center;gap:8px}
    .v3-app .diag-sum .ds-t .ds-warn {font-size:10px;color:var(--ink-400);font-weight:400;border:1px dashed var(--line-strong);border-radius:var(--r-pill);padding:1px 7px}
    .v3-app .diag-sum-item {border-left:3px solid var(--primary);background:var(--surface);border-radius:var(--r-sm);padding:10px 12px;margin-bottom:8px;line-height:1.65;font-size:var(--fs-sm);color:var(--ink-700)}
    .v3-app .diag-sum-item:last-child {margin-bottom:0}
    .v3-app .diag-sum-item .ds-it {font-weight:600;color:var(--ink-800);margin-bottom:3px;font-size:12px}
/* 🔴 批V2-3（PM 14:55 盘点）：核心失衡 + 衍生信号样式 */
.diag-sum-item.is-core {border-left-color:var(--warn-500,var(--amber-500, #BA7517));background:var(--surface-2)}
.diag-sum-item.is-core .ds-it {color:var(--warn-700,var(--amber-700, #854F0B))}
.dv-row {display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.dv-chip {display:inline-flex;align-items:baseline;gap:6px;border:1px solid var(--line);background:var(--surface-2);border-radius:var(--r-pill);padding:3px 10px;font-size:12px;color:var(--ink-700);cursor:help}
.dv-chip .dv-n {font-weight:600;color:var(--ink-800)}
.dv-chip .dv-v {font-weight:600;color:var(--primary)}
.dv-chip .dv-u {color:var(--ink-400);font-size:11px}
.dv-src {font-size:11px;color:var(--ink-400);margin-top:6px}
    /* 🔴 批V2-0b·P5：Top3 已下线，对应样式一并移除 */
    .v3-app .df-item {display:flex;gap:10px;padding:10px 12px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:8px;align-items:flex-start}
    .v3-app .df-item .df-pri {flex-shrink:0;font-size:11px;font-weight:600;border-radius:var(--r-sm);padding:2px 8px;line-height:1.6}
    .v3-app .df-item .df-pri.high {background:var(--danger-soft);color:#C14B3C}
    .v3-app .df-item .df-pri.mid {background:var(--warn-soft);color:var(--warn-600)}
    .v3-app .df-item .df-body {flex:1;min-width:0}
    .v3-app .df-item .df-name {font-size:var(--fs-sm);font-weight:600;color:var(--ink-800)}
    .v3-app .df-item .df-meaning {font-size:12px;color:var(--ink-600);margin-top:2px;line-height:1.6}
    .v3-app .df-item .df-adv {font-size:12px;color:var(--primary-text);margin-top:4px;line-height:1.6;background:var(--ok-soft);border-radius:var(--r-sm);padding:6px 10px}
    /* 🔴 批V2-0b·P5：Top3 已下线，对应样式一并移除 */
    /* SVG 因果脑图：神经网质感 */
        /* SVG 因果脑图 v9：三色边 + 3 箭头 marker + 流光 + elabel 白描边 + 恶性循环 ⟳（§十六） */
    .v3-app .causal-wrap {position:relative}
    .v3-app .csvg {position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;overflow:visible}
    /* 🔴 批C6c：节点「来源」**可见**徽标（原生 title 悬浮在真机上不一定触发 ⇒ 直接可见更可靠） */
    .v3-app .cgroup .src-tag { font-size: 9px; line-height: 1.7; padding: 0 4px; border-radius: 4px; margin-left: 5px; vertical-align: middle; white-space: nowrap; }
    .v3-app .cgroup.up .src-tag { background: #E7F5EF; color: #1F7A63; }
    .v3-app .cgroup.mid .src-tag { background: #EAF1FB; color: #33598F; }
    .v3-app .edge {fill:none;stroke-linecap:round;transition:stroke-width .25s,opacity .25s}
    .v3-app .edge.solid {stroke:var(--primary);stroke-width:2.6;opacity:.85}
    .v3-app .edge.dash {stroke:#B9BEC7;stroke-width:1.6;stroke-dasharray:1.5 5;stroke-linecap:round;opacity:.9}
    .v3-app .edge.loop {stroke:var(--loop);stroke-width:2.4;stroke-dasharray:9 6;stroke-linecap:round;opacity:.95}
    .v3-app .edge.hi {stroke-width:3.4;opacity:1;filter:drop-shadow(0 0 4px rgba(var(--primary-rgb), .45))}
    .v3-app .edge.hi.solid {stroke:var(--primary);filter:drop-shadow(0 0 5px rgba(var(--primary-rgb), .55))}
    .v3-app .edge.hi.dash {stroke:var(--ink-700);filter:drop-shadow(0 0 3px rgba(58,58,60,.35))}
    .v3-app .edge.hi.loop {stroke:var(--loop);filter:drop-shadow(0 0 6px rgba(214,69,69,.6))}
    .v3-app .edge.dim {opacity:.06}
    @keyframes flowDash {to {stroke-dashoffset:-32}}
    .v3-app .edge.hi.loop,.v3-app .edge.hi.solid,.v3-app .edge.hi.dash {animation:flowDash .9s linear infinite}
    .v3-app .elabel {font-size:10px;fill:var(--ink-400);text-anchor:middle;transition:opacity .25s;paint-order:stroke;stroke:#fff;stroke-width:2.5px;stroke-linejoin:round;font-weight:500}
    .v3-app .loop-knot {filter:drop-shadow(0 1px 4px rgba(214,69,69,.45));pointer-events:none}
    .v3-app .loop-knot-ic {pointer-events:none}
    .v3-app .cnode.lit-up {border-color:var(--lvl-up);box-shadow:0 0 0 2px rgba(124,92,214,.14);transform:translateY(-1px)}
    .v3-app .cnode.lit-mid {border-color:var(--lvl-mid);box-shadow:0 0 0 2px rgba(217,142,43,.14);transform:translateY(-1px)}
    .v3-app .cnode.lit-down {border-color:var(--lvl-down);box-shadow:0 0 0 2px rgba(47,168,220,.14);transform:translateY(-1px)}
    /* 🔴 批V2-16 弱关联高亮：可达但仅弱边支撑。虚线描边 + 更浅的底色 = 看得见但"力度弱"，
       避免营养师把弱关联误读成确定因果。覆盖 v3-app 与 pdf-export 两处作用域。 */
    .v3-app .cnode.lit-weak{border-style:dashed !important;box-shadow:none !important;transform:none !important;opacity:.92}
    .v3-app .cnode.lit-weak::before{opacity:.4 !important}
    /* ====== 健康分析卡（IA 重构：5 块平铺，取消 3 Tab） ====== */
    /* IA 3Bug 修复 v1：风险评估五态块（immediate 红 / refer 橙 / attention 蓝 / ok 绿 / empty 灰） */
    .v3-app .risk-block {border-radius:var(--r-md);padding:14px 16px;margin-bottom:14px;border:1px solid}
    .v3-app .risk-block.immediate, .v3-app .risk-block.risk {background:rgba(214,69,69,.10);border-color:rgba(214,69,69,.45)}
    .v3-app .risk-block.refer {background:rgba(var(--warn-rgb), .10);border-color:rgba(var(--warn-rgb), .45)}
    .v3-app .risk-block.attention {background:rgba(90,200,250,.10);border-color:rgba(90,200,250,.45)}
    .v3-app .risk-block.ok {background:rgba(var(--ok-rgb), .10);border-color:rgba(var(--ok-rgb), .45)}
    .v3-app .risk-block.empty {background:var(--surface-2);border-color:var(--line)}
    .v3-app .risk-head {display:flex;align-items:flex-start;gap:10px}
    .v3-app .risk-ic {font-size:20px;line-height:1.2}
    .v3-app .risk-t {flex:1;min-width:0}
    .v3-app .risk-title {font-size:15px;font-weight:700;color:var(--ink-900)}
    .v3-app .risk-level {font-size:12px;font-weight:600;margin-top:2px}
    .v3-app .risk-block.immediate .risk-level {color:#D64545}
    .v3-app .risk-block.refer .risk-level {color:var(--warn)}
    .v3-app .risk-block.attention .risk-level {color:#1C7FB3}
    .v3-app .risk-block.ok .risk-level {color:#1F8A6D}
    .v3-app .risk-block.empty .risk-level {color:#8A93A0}
    .v3-app .risk-body {margin-top:10px}
    .v3-app .risk-reason {font-size:13px;color:var(--ink-700);line-height:1.7;margin-bottom:8px}
    .v3-app .risk-clinic {font-size:13px;font-weight:600;color:#C14B3C;background:rgba(var(--danger-rgb), .12);border:1px solid rgba(var(--danger-rgb), .35);border-radius:var(--r-sm);padding:8px 12px;line-height:1.6;margin-bottom:8px}
    .v3-app .risk-ref {margin-top:8px;padding:10px 12px;background:rgba(var(--warn-rgb), .1);border:1px dashed rgba(var(--warn-rgb), .5);border-radius:var(--r-sm)}
    .v3-app .rr-t {font-size:12px;font-weight:700;color:var(--warn-600)}
    .v3-app .rr-d {font-size:12px;color:var(--ink-600);line-height:1.6;margin-top:2px}
    .v3-app .risk-fixed {font-size:13px;color:var(--ink-700);line-height:1.7}
    /* 资料卡 · 复诊回写（renderCaseSummary） */
    .v3-app .case-summary {border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;margin-bottom:12px;background:var(--surface)}
    .v3-app .cs-head {display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;flex-wrap:wrap;gap:6px}
    .v3-app .cs-t {font-size:13px;font-weight:700;color:var(--ink-900)}
    .v3-app .cs-badge {font-size:11px;font-weight:600;color:var(--primary-text);background:var(--ok-soft);border-radius:var(--r-pill);padding:2px 8px}
    .v3-app .cs-tags {display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}
    .v3-app .cs-tag {font-size:11px;color:var(--ink-500);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-pill);padding:1px 7px}
    .v3-app .cs-body {display:flex;flex-direction:column;gap:5px}
    .v3-app .cs-row {display:flex;gap:8px;font-size:12px;line-height:1.6}
    .v3-app .cs-k {color:var(--ink-400);flex-shrink:0;width:64px}
    .v3-app .cs-v {color:var(--ink-700)}
    /* 体征补录（renderVital） */
    .v3-app .vital {border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;margin-bottom:12px;background:var(--surface)}
    .v3-app .vital-warn {display:flex;align-items:center;gap:8px;font-size:12px;color:var(--warn-600);background:var(--warn-soft);border:1px solid rgba(var(--warn-rgb), .4);border-radius:var(--r-sm);padding:6px 10px;margin-bottom:10px;flex-wrap:wrap}
    .v3-app .vw-t {flex:1;min-width:120px}
    .v3-app .vital-grid {display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
    .v3-app .vg-cell {border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 10px;background:var(--surface-2)}
    .v3-app .vg-k {font-size:11px;color:var(--ink-400)}
    .v3-app .vg-v {font-size:14px;font-weight:700;color:var(--ink-900);margin-top:2px}
    .v3-app .vital-ok {font-size:12px;color:var(--primary-text);background:var(--ok-soft);border-radius:var(--r-sm);padding:6px 10px}
    /* 🔴 批V2-0b·P5：key-signals 样式已随「关键信号」块下线 */
    .v3-app .ks-t {font-size:13px;font-weight:700;display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
    .v3-app .ks-tip {font-size:11px;color:var(--ink-400);font-weight:400}
    .v3-app .ks-head {display:grid;grid-template-columns:1fr 90px 1.4fr;gap:8px;font-size:11px;color:var(--ink-400);font-weight:600;padding:4px 10px;background:var(--surface-2);border-radius:var(--r-sm) var(--r-sm) 0 0}
    .v3-app .ks-row {display:grid;grid-template-columns:1fr 90px 1.4fr;gap:8px;align-items:center;padding:8px 10px;font-size:12px;border-bottom:1px solid var(--line)}
    .v3-app .ks-row:last-child {border-bottom:none}
    .v3-app .ks-name {font-weight:600;color:var(--ink-800)}
    .v3-app .ks-val {font-family:var(--num);font-weight:600;color:var(--primary-text)}
    .v3-app .ks-mean {color:var(--ink-600);line-height:1.5}
    .v3-app .ks-wait {color:var(--ink-400);font-weight:400}
    /* 异常指标解读卡（≤7 张 × 4 要素） */
    .v3-app .health-cards {display:flex;flex-direction:column;gap:10px}
    .v3-app .hc-empty {background:var(--surface-2);border:1.5px dashed var(--line-strong);border-radius:var(--r-md);padding:16px 14px;text-align:center;color:var(--ink-400);font-size:var(--fs-sm)}
    .v3-app .hc-title {display:flex;align-items:center;gap:8px;font-size:13px;font-weight:700;margin-bottom:2px}
    .v3-app .hc-cnt {font-size:11px;color:var(--ink-400);font-weight:400}
    .v3-app .hc-card {border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;background:var(--surface);border-left:3px solid}
    .v3-app .hc-card.risk {border-left-color:var(--danger)}
    .v3-app .hc-card.warn {border-left-color:var(--warn)}
    /* 批M7-1（附A v2）：解读卡逐项折叠 —— 收起态只显示标题行，展开态显示四要素 */
    .v3-app .hc-card .hc-head { user-select:none; }
    .v3-app .hc-card .hc-fold { margin-left:auto; font-size:11px; font-weight:500; color:var(--ink-400); flex-shrink:0; }
    .v3-app .hc-card.is-open .hc-fold { color:var(--primary-text); }
    .v3-app .hc-card .hc-body { width:100%; }
    .v3-app .hc-head {display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}
    .v3-app .hc-name {font-size:14px;font-weight:700;color:var(--ink-900)}
    .v3-app .hc-val {font-size:13px;font-weight:600;font-family:var(--num);color:var(--ink-700)}
    .v3-app .hc-tag {font-size:11px;font-weight:600;border-radius:var(--r-sm);padding:1px 7px;margin-left:auto}
    .v3-app .hc-card.risk .hc-tag {background:var(--danger-soft);color:#C14B3C}
    .v3-app .hc-card.warn .hc-tag {background:var(--warn-soft);color:var(--warn-600)}
    .v3-app .hc-sec {margin-top:6px}
    .v3-app .hc-k {font-size:11px;color:var(--ink-400);font-weight:600;margin-bottom:1px}
    .v3-app .hc-v {font-size:13px;color:var(--ink-700);line-height:1.7}
    .v3-app .hc-v.adv {color:var(--primary-text);background:var(--ok-soft);border-radius:var(--r-sm);padding:6px 10px}
    .v3-app .hc-cause {margin-top:8px;font-size:12px;color:var(--primary-text);background:none;border:none;cursor:pointer;padding:0;font-weight:600}
    .v3-app .hc-cause:hover {text-decoration:underline}

    /* ===== deploy13 精修样式块（18 项合并单）===== */
    /* P0 · R2/R15/R18 根因：线上 body 无 line-height（normal≈1.15）→ 对齐原型权威值 1.55 */
    .v3-app{line-height:1.55}
    /* P3 · R3 客户列表头像多色（原型 5 色内联渐变）
       🔴 2026-10-20 用户要求改为「男=蓝底+♂ / 女=橙底+♀」，取消姓氏首字与多色轮换。
       原 6 条 nth-child 轮换渐变已删除（会让性别无法识别），改为 .cav.male / .cav.female 两态。
       蓝＝--info(#5AC8FA，系统既有语义色)；橙＝--accent(#FF9F68，薄荷雾强调色)。 */
    .v3-app .clist-scroll .citem .cav.male{background:var(--info)}
    .v3-app .clist-scroll .citem .cav.female{background:var(--accent)}
    .v3-app .clist-scroll .citem .cav.unknown{background:var(--ink-300)}
    .v3-app .clist-scroll .citem .cav .gsex{font-size:15px;line-height:1;display:block;text-align:center;font-weight:400}
    /* P6 · R6 4 步条：副文案全显 + 选中白点 */
    .v3-app .stage-step .spy-dot{position:absolute;top:8px;right:9px;width:6px;height:6px;border-radius:50%;display:none}
    .v3-app .stage-step.current .spy-dot{display:block;background:#fff}
    /* P7 · R7 资料模块对齐原型（.fcard-hd / .upbox / .rpt） */
    .v3-app .fcard .fhead{padding:16px 22px;cursor:default}
    .v3-app .fcard .fhead:hover{background:transparent}
    .v3-app .fcard .fstep{width:30px;height:30px;border-radius:10px;font-size:14px;font-weight:800}
    .v3-app .fcard .ftitle{font-size:16px;font-weight:800}
    .v3-app .fcard .fsub{font-size:12px;color:var(--ink-400);font-weight:400;margin-top:1px}
    .v3-app .fbody .drop{border:2px dashed #C9DDD4;background:var(--primary-soft-2);border-radius:var(--r-md);padding:26px}
    .v3-app .fbody .drop:hover{border-color:var(--primary);background:var(--primary-soft);color:var(--primary-text)}
    .v3-app .fbody .drop .big{font-size:14px;font-weight:700;color:var(--ink-700)}
    .v3-app .fbody .drop .sub{font-size:11.5px;color:var(--ink-400);margin-top:5px}
    .v3-app .rep-item{padding:11px 14px;background:#fff}
    /* P9 · R9 转诊按钮上沿留白 */
    .v3-app .risk-block .risk-body > .btn{margin-top:10px}
    /* P10b · R10 因果图降噪（起步方案）：自适应列宽 + 未关联节点强降透明 */
    .v3-app .cgrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 18px;min-height:0}
    .v3-app .cgrid .cnode{width:100%;min-width:0;max-width:220px}
    .v3-app .cnode.dim{opacity:.18}
    .v3-app .edge.dim{opacity:.03}
    /* P11 · R11 异常指标解读：对齐原型 .focus「左标签 + 右内容」行式 */
    .v3-app .health-cards{background:#fff;border:1px solid var(--line-strong);border-radius:var(--r-md);padding:16px;margin-bottom:14px;gap:9px}
    .v3-app .hc-title{font-size:13.5px;font-weight:700;margin-bottom:3px}
    .v3-app .hc-card{display:flex;gap:11px;background:var(--surface-2);border:1px solid var(--line);border-left:3px solid;border-radius:10px;padding:11px 13px;flex-wrap:wrap}
    .v3-app .hc-head{margin-bottom:3px;gap:6px;width:100%}
    .v3-app .hc-name{font-size:13px;font-weight:700}
    .v3-app .hc-val{font-size:13px}
    .v3-app .hc-sec{margin-top:4px;display:flex;align-items:flex-start;gap:7px;width:100%}
    .v3-app .hc-k{flex-shrink:0;width:86px;font-size:12px;color:var(--ink-400);font-weight:600;margin-bottom:0}
    .v3-app .hc-v{flex:1;font-size:12px;line-height:1.75;color:var(--ink-700)}
    .v3-app .hc-v.adv{background:none;border-radius:0;padding:0;color:var(--primary-text)}
    .v3-app .hc-cause{margin-top:7px;font-size:9px;background:var(--primary-soft);border-radius:20px;padding:1px 7px;font-weight:400;width:100%}
    /* P12 · R12「展开查看更多」按钮（线上原无 .btn-ghost） */
    .v3-app .btn-ghost{background:transparent;border:1px solid var(--line-strong);color:var(--ink-500);font-weight:600}
    .v3-app .btn-ghost:hover{border-color:var(--primary);color:var(--primary-text);background:transparent}

    /* ===== deploy14 · 资料卡按原型结构重排（⑨ / R7 补做结构层） ===== */
    /* D1 · 卡头两行式：原 .ftitle/.fsub 为 .fhead 的兄弟（flex 同行）⇒ 副文被顶着跑到最右；
            原型 .fcard-hd 是 <div><div class="t"></div><div class="sub"></div></div> 上下两行。 */
    .v3-app .fcard .fhead-main{flex:1;min-width:0}
    /* D3 · 「上传报告」带竖条小标题（原型 .zt/.bar） */
    .v3-app .fcard .zt{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:800;color:var(--ink-900);margin-bottom:12px}
    .v3-app .fcard .zt .bar{width:3px;height:15px;border-radius:2px;background:var(--primary);flex-shrink:0}
    /* D4 · 「已上传报告」折叠栏（原型 .upfold 全套；.upfold-toggle 线上已有，勿重复声明） */
    .v3-app .upfold.up-upload{margin-bottom:14px}
    .v3-app .upfold-btn{display:flex;align-items:center;gap:8px;width:100%;padding:11px 14px;background:var(--surface-2);border:none;font-size:13px;color:var(--ink-700);font-weight:600;cursor:pointer;transition:background .15s;font-family:inherit;text-align:left}
    .v3-app .upfold-btn:hover{background:var(--surface-3)}
    .v3-app .upfold-label{color:var(--ink-700);font-weight:600}
    .v3-app .upfold-meta{font-size:11px;font-weight:600;background:var(--surface-3);color:var(--ink-500);border-radius:10px;padding:1px 8px}
    .v3-app .upfold-arrow{color:var(--primary);font-size:12px;transition:transform .2s;display:inline-block}
    .v3-app .upfold.open .upfold-arrow{transform:rotate(180deg)}
    .v3-app .upfold-toggle .tt-close{display:none}
    .v3-app .upfold.open .upfold-toggle .tt-open{display:none}
    .v3-app .upfold.open .upfold-toggle .tt-close{display:inline}
    .v3-app .upfold-body{display:none;padding:12px 14px;border-top:1px solid var(--line);background:#fff}
    .v3-app .upfold.open .upfold-body{display:block}
    .v3-app .upfold-body .rlist{margin-bottom:0}
    /* D6 · 报告异常卡头部：「✅已回写客户管理」徽标（自 .case-summary 迁入，保留功能信息） */
    .v3-app .ov-abn-head .cs-badge{flex-shrink:0}
    /* D7 · 客户标签行（原 .case-summary 的 tags，按「线上独有信息不按原型删」保留） */
    .v3-app .ov-tags{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:12px}
    /* deploy27：主诉不再借用 tags ⇒ 本行需自带标题，标明其为「健康标签」（此前是一排无标题 chip，
       与主诉行的边界靠猜）。规格对齐方案模板「关注标签」：11.5px / 700 / ink-400 / ls .4px。 */
    .v3-app .ov-tags-lbl{font-size:11.5px;font-weight:700;letter-spacing:.4px;color:var(--ink-400);flex-shrink:0;margin-right:2px;line-height:1}

    /* 🔴 批V2-0b·P5：key-signals 样式已随「关键信号」块下线 */
    /* P14 · R14 引用依据模块（线上原先无任何样式） */
    .v3-app .upfold{border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:14px;overflow:hidden;background:#fff}
    .v3-app .upfold-hd{display:flex;align-items:center;gap:8px;padding:11px 14px;background:var(--surface-2);font-size:13px;color:var(--ink-700);font-weight:600;cursor:pointer;transition:background .15s}
    .v3-app .upfold-hd:hover{background:var(--surface-3)}
    .v3-app .upfold-t{color:var(--ink-700)}
    .v3-app .upfold-toggle{margin-left:auto;display:inline-flex;align-items:center;gap:4px;color:var(--primary);font-weight:600;font-size:12px}
    .v3-app .upfold-body{padding:12px 14px;border-top:1px solid var(--line);background:#fff}
    /* P17 · R17 对话框角色名 */
    .v3-app .msg{display:flex;flex-direction:column}
    .v3-app .msg .who{font-size:10.5px;color:var(--ink-400);margin-bottom:3px;font-weight:600}
    .v3-app .msg.ai .who{color:rgba(255,255,255,.85)}
    /* P18 · R18 临时会话左栏对齐原型 .profile-panel */
    .v3-app .pf-hd{gap:11px}
    .v3-app .pf-nm{font-weight:800}
    .v3-app .pf-meta{font-size:11px;color:var(--ink-400)}
    .v3-app .pf-sec-t{font-size:10.5px;font-weight:700;color:var(--ink-400);letter-spacing:.5px}
    .v3-app .pf-sec-t::before{height:10px;opacity:.55}
    .v3-app .pf-grid{gap:7px}
    .v3-app .pf-grid .pi{border-radius:8px;padding:7px 10px;display:flex;flex-direction:column;gap:1px}
    .v3-app .pf-grid .pi .k{font-size:10px;color:var(--ink-400);margin-bottom:0}
    .v3-app .pf-grid .pi .v{font-size:12px;font-weight:700;font-family:var(--num)}
    .v3-app .pf-st{font-size:9.5px;margin-left:2px;vertical-align:1px}
    .v3-app .pf-st.mut{color:var(--ink-400);background:var(--surface-3)}
    .v3-app .pf-tags .ptag{height:auto;padding:3px 10px;border-radius:20px;background:var(--surface-3);color:var(--ink-500);border:none;font-weight:600}
    .v3-app .pf-tags .ptag-mut{background:var(--surface-3);color:var(--ink-500)}
    .v3-app .pf-abn{border:1px solid var(--line);border-radius:10px;overflow:hidden;gap:0}
    .v3-app .pf-abn .ai-row{justify-content:space-between;padding:7px 12px;border-bottom:1px solid var(--line);gap:0}
    .v3-app .pf-abn .ai-row:last-child{border-bottom:none}
    .v3-app .pf-abn .ai-row .an{flex:0 1 auto;color:var(--ink-500);overflow:visible;text-overflow:clip;white-space:normal}
    .v3-app .pf-abn .ai-row .av2{font-weight:700;font-family:var(--num);flex-shrink:0}
    /* ===== /deploy13 ===== */
    /* 本步分析依据（renderEvidence） */
    .v3-app .evidence {margin-top:12px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 14px}
    .v3-app .ev-t {font-size:11px;color:var(--ink-400);font-weight:600;margin-bottom:6px}
    .v3-app .ev-list {display:flex;flex-direction:column;gap:4px}
    .v3-app .ev-item {font-size:12px;color:var(--ink-600);line-height:1.6}
    .v3-app .ev-dot {color:var(--primary);margin-right:4px}
/* ═══════ 批M7-2.3：与上一轮对比 · 双段结构（卡片流） ═══════
       * 上段 = 事实层（服务端 /compare 端点算的逐项核对，实心绿徽标）
       * 下段 = 本轮总结（既有 diagnosis_json.evolution，虚线橙框，**不出现 AI 字样**）
       * 两层允许结论不一致 —— 这是刻意保留的：一个是算的，一个是综合判断。
       * 配色纪律：事实层的数值变化用**中性色 + 箭头**，不用红绿
       *   （红绿在本产品已代表"建议/警示"，数值变化本身是中性的）。*/
    .v3-app .hb-head {display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:4px}
    .v3-app .hb-title {font-size:var(--fs-md, 14px);font-weight:700;display:flex;align-items:center;gap:7px}
    .v3-app .badge-fact {font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--primary-700, #287F66);color:#fff}
    .v3-app .hb-sub {font-size:11px;color:var(--ink-400);margin-bottom:11px}
    .v3-app .hb-sub b {color:var(--ink-500)}
    .v3-app .hb-summary {display:flex;gap:7px;flex-wrap:wrap;margin-bottom:11px}
    .v3-app .hb-sum-item {font-size:11px;padding:4px 10px;border-radius:8px;background:var(--surface-2);border:1px solid var(--line);color:var(--ink-700)}
    .v3-app .hb-sum-item b {font-weight:700;color:var(--ink-900)}
    .v3-app .hb-sum-item.impr b {color:var(--primary-text)}
    .v3-app .hb-sum-item.deg {background:rgba(232,163,61,.09);border-color:rgba(232,163,61,.3);color:#8A5D12}
    .v3-app .hb-warn {display:flex;gap:9px;align-items:flex-start;font-size:11px;line-height:1.65;background:rgba(232,163,61,.1);border:1px solid rgba(232,163,61,.32);border-left:3px solid #E8A33D;border-radius:8px;padding:9px 11px;margin-bottom:11px;color:#7A5410}
    .v3-app .hb-warn .ic {flex-shrink:0;font-size:13px}
    .v3-app .hb-warn b {font-weight:700}
    .v3-app .hb-empty {text-align:center;padding:20px 14px;font-size:var(--fs-sm, 13px);color:var(--ink-400);background:var(--surface-2);border:1.5px dashed var(--line-strong);border-radius:10px;line-height:1.75}
    .v3-app .hb-empty .t {font-weight:600;color:var(--ink-500);margin-bottom:4px}
    /* 指标卡片流 */
    .v3-app .mc-list {display:flex;flex-direction:column;gap:8px}
    .v3-app .mc {border:1px solid var(--line);border-radius:10px;padding:11px 13px;background:var(--surface, #fff)}
    .v3-app .mc.unmatched {background:var(--surface-2);opacity:.8}
    .v3-app .mc-top {display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:7px}
    .v3-app .mc-nm {font-size:var(--fs-sm, 13px);font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
    .v3-app .mc-alias {font-size:10px;color:var(--ink-400);font-weight:400;padding:1px 5px;border-radius:4px;background:var(--surface-2);border:1px solid var(--line)}
    .v3-app .mc-ref {font-size:10px;color:var(--ink-400);margin-top:2px;font-weight:400;line-height:1.5}
    .v3-app .mc-ref b {color:var(--primary-text)}
    .v3-app .mc-flow {display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:7px 10px;background:var(--surface-2);border-radius:8px}
    .v3-app .mc-step {display:flex;align-items:baseline;gap:5px}
    .v3-app .mc-step .lb {font-size:10px;color:var(--ink-400)}
    .v3-app .mc-step .vl {font-size:var(--fs-sm, 13px);font-weight:700;font-variant-numeric:tabular-nums}
    .v3-app .mc-step .vl small {font-size:10px;color:var(--ink-400);font-weight:400;margin-left:2px}
    .v3-app .mc-arrow {color:var(--ink-400);font-size:12px}
    .v3-app .mc-out {margin-left:auto;display:flex;align-items:center;gap:6px}
    .v3-app .mc-skips {display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
    .v3-app .mc-skip {font-size:10px;padding:2px 7px;border-radius:999px;border:1px solid var(--line);background:var(--surface, #fff);color:var(--ink-500)}
    /* 变化量：中性色 + 箭头 */
    .v3-app .hb-chg {display:inline-flex;align-items:center;gap:3px;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums;padding:2px 6px;border-radius:8px}
    .v3-app .hb-chg.down {background:rgba(var(--primary-rgb), .1);color:var(--primary-text)}
    .v3-app .hb-chg.up {background:rgba(255,106,94,.09);color:#C14B3C}
    .v3-app .hb-chg.flat {background:var(--surface-2);color:var(--ink-500);border:1px solid var(--line)}
    /* 判定标签（用户拍板：缺失上一轮数据一律显示 "-"，不给任何文字） */
    .v3-app .hb-verdict {font-size:11px;font-weight:700;padding:3px 8px;border-radius:999px;text-align:center;white-space:nowrap}
    .v3-app .hb-verdict.improved {background:rgba(var(--primary-rgb), .13);color:var(--primary-text);border:1px solid rgba(var(--primary-rgb), .32)}
    .v3-app .hb-verdict.worse {background:rgba(255,106,94,.11);color:#C14B3C;border:1px solid rgba(255,106,94,.3)}
    .v3-app .hb-verdict.same {background:var(--surface-2);color:var(--ink-500);border:1px solid var(--line)}
    .v3-app .hb-verdict.unknown {background:transparent;color:var(--ink-400);border:1px dashed var(--line-strong);min-width:44px}
    /* 两层分隔 */
    /* 🔴 批V2-0b·P5：sum-block 样式已随「本轮总结」下线 */
    .v3-app .sum-head {display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;margin-bottom:9px}
    .v3-app .sum-title {font-size:var(--fs-sm, 13px);font-weight:700;color:#B5642F;display:flex;align-items:center;gap:7px}
    .v3-app .badge-sum {font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;border:1px dashed var(--accent, #FF9F68);color:#B5642F;background:rgba(var(--accent-rgb), .1)}
    .v3-app .sum-tip {font-size:10px;color:var(--ink-400)}
    .v3-app .sum-body {font-size:var(--fs-sm, 13px);color:var(--ink-700);background:var(--surface-2);border-radius:8px;padding:9px 12px;line-height:1.75}
    .v3-app .sum-tags {display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
    .v3-app .sum-tag {font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink-700)}
    .v3-app .sum-tag.good {border-color:rgba(var(--primary-rgb), .28);background:rgba(var(--primary-rgb), .07);color:var(--primary-text)}
    .v3-app .sum-tag.bad {border-color:rgba(255,106,94,.26);background:rgba(255,106,94,.07);color:#C14B3C}
    .v3-app .sum-tag.new {border-color:rgba(255,184,0,.3);background:rgba(255,184,0,.08);color:#B8860B}
    /* 方案卡「与上一轮差异」一行 */
    .v3-app .plan-diff {display:flex;align-items:flex-start;gap:9px;padding:10px 13px;border-radius:10px;background:rgba(var(--primary-rgb), .08);border:1px solid rgba(var(--primary-rgb), .26);border-left:3px solid var(--primary, #3FB89B);font-size:var(--fs-sm, 13px);line-height:1.65;margin-bottom:12px}
    .v3-app .plan-diff .ic {flex-shrink:0}
    .v3-app .plan-diff .lb {font-size:11px;color:var(--primary-text);font-weight:700;margin-bottom:3px}
    .v3-app .plan-diff .ct {color:var(--ink-700);font-size:11px;line-height:1.7}
    .v3-app .plan-diff .ct b {color:var(--ink-900)}
    .v3-app .tk {display:inline-flex;align-items:center;gap:3px;font-size:11px;padding:1px 6px;border-radius:5px;font-weight:600;margin:0 2px}
    .v3-app .tk.up {background:rgba(var(--primary-rgb), .13);color:var(--primary-text)}
    .v3-app .tk.down {background:rgba(255,106,94,.1);color:#C14B3C}
    /* 窄屏：卡片流天然自适应，仅收紧间距 */
    @media (max-width:760px) {
      .v3-app .mc-flow {gap:6px;padding:6px 8px}
      .v3-app .mc-out {margin-left:0;width:100%;justify-content:flex-start;margin-top:4px}
    }
    /* 与上次对比（comparePane） */
    .v3-app .compare-empty {background:var(--surface-2);border:1.5px dashed var(--line-strong);border-radius:var(--r-md);padding:16px 14px;text-align:center;color:var(--ink-400);font-size:var(--fs-sm);margin-bottom:12px}
    .v3-app .compare-list {display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
    .v3-app .cp-item {display:flex;gap:8px;align-items:flex-start;border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px;background:var(--surface);border-left:3px solid var(--line-strong)}
    .v3-app .cp-item.good {border-left-color:var(--ok)}
    .v3-app .cp-item.bad {border-left-color:var(--danger)}
    .v3-app .cp-item.new {border-left-color:var(--info)}
    .v3-app .cp-item.flat {border-left-color:var(--ink-300)}
    .v3-app .cp-ic {font-size:14px;line-height:1.4}
    .v3-app .cp-body {flex:1;min-width:0}
    .v3-app .cp-name {font-size:13px;font-weight:600;color:var(--ink-800)}
    .v3-app .cp-desc {font-size:12px;color:var(--ink-600);line-height:1.6;margin-top:2px}
    /* 转诊建议卡（genReferral 弹窗） */
    .v3-app .referral-card {background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:4px 2px}
    .v3-app .rf-lbl {font-size:11px;color:var(--ink-400);font-weight:600;margin-top:10px}
    .v3-app .rf-lbl:first-child {margin-top:0}
    .v3-app .rf-val {font-size:13px;color:var(--ink-800);line-height:1.6;margin-top:2px}
    .v3-app .rf-note {margin-top:12px;font-size:12px;color:var(--ink-500);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 10px;line-height:1.6}

    /* 右栏头部同行走位 */
    .v3-app .v3-dialog .dhead {flex-wrap:nowrap;align-items:stretch}
    .v3-app .v3-dialog .dhead .dt {flex-shrink:0}
    .v3-app .v3-dialog .dhead .dt-line {display:inline-flex;align-items:center;gap:4px}
    .v3-app .v3-dialog .dhead .dsub {display:block;font-size:11px;color:var(--ink-400);font-weight:400;line-height:1.4;margin-top:1px}
    .v3-app .v3-dialog .dhead .coop {margin-left:auto;margin-top:0;flex-shrink:0;white-space:nowrap}
    /* 弹窗：特殊人群单选组 */
    .special-radio .radio-opt.sel {border-color:var(--primary);color:var(--primary-text)}
    .spec-hint {font-size:11px;color:var(--ink-400);margin-top:4px;line-height:1.5}
    .spec-hint.gray {color:var(--ink-300)}

    /* ===== 客户管理页 UI 对齐（四统计卡/双视图/高危配置/待办清单） ===== */
    .page-customers .cust-stat-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin: 18px 0 22px; }
    .page-customers .cust-stat-card { position: relative; overflow: hidden; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 16px 18px; box-shadow: var(--sh-sm); min-height: 92px; display: flex; flex-direction: column; justify-content: space-between; }
    .page-customers .cust-stat-card.clickable { cursor: pointer; transition: box-shadow var(--t-norm), transform var(--t-norm), border-color var(--t-fast); }
    .page-customers .cust-stat-card.clickable:hover { box-shadow: var(--sh-lg); transform: translateY(-2px); border-color: rgba(var(--primary-rgb), .4); }
    .page-customers .cust-stat-card::after {
      content: ""; position: absolute; right: -32px; top: -32px; width: 130px; height: 130px;
      background: radial-gradient(circle, rgba(var(--primary-rgb), .18) 0%, rgba(var(--primary-rgb), 0) 70%);
      pointer-events: none; border-radius: 50%;
    }
    .page-customers .cust-stat-card .stat-urg { position: absolute; right: 14px; top: 12px; background: var(--danger); color: #fff; font-size: 10px; font-weight: 700; padding: 2px 8px; border-radius: var(--r-pill); letter-spacing: .5px; box-shadow: 0 2px 6px rgba(var(--danger-rgb), .4); z-index: 1; }
    .page-customers .cust-stat-card .stat-title { font-size: 13px; color: var(--ink-500); font-weight: 500; }
    .page-customers .cust-stat-card .stat-body { display: flex; align-items: flex-end; justify-content: space-between; margin-top: 2px; }
    .page-customers .cust-stat-card .stat-num { font-family: var(--num); font-size: 28px; font-weight: 700; line-height: 1; color: var(--ink-900); letter-spacing: -.5px; }
    .page-customers .cust-stat-card .stat-foot { font-size: 12px; color: var(--ink-400); display: inline-flex; align-items: center; gap: 5px; }
    .page-customers .cust-stat-card .stat-foot .dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
    .page-customers .cust-stat-card .stat-foot .dot.g { background: var(--ok); }
    .page-customers .cust-stat-card .stat-foot .dot.r { background: var(--danger); }
    @media (max-width: 1100px) { .page-customers .cust-stat-strip { grid-template-columns: repeat(2, 1fr); } }


    .page-customers .cust-table-wrap { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--sh-sm); overflow: hidden; padding: 6px; }

    .page-customers .cust-overlay { position: fixed; inset: 0; background: rgba(20,48,43,.42); z-index: 1000; display: flex; align-items: center; justify-content: center; padding: 24px; }
    .page-customers .cust-modal { background: var(--surface); border-radius: var(--r-xl); box-shadow: var(--sh-lg); width: 520px; max-width: 100%; max-height: 82vh; display: flex; flex-direction: column; overflow: hidden; }
    .page-customers .cust-modal-head { display: flex; align-items: center; padding: 18px 22px; border-bottom: 1px solid var(--line); }
    .page-customers .cust-modal-head h3 { margin: 0; font-size: 17px; font-weight: 600; color: var(--ink-900); }
    .page-customers .cust-modal-head .x { margin-left: auto; width: 32px; height: 32px; border-radius: 10px; border: none; background: var(--surface-2); color: var(--ink-500); cursor: pointer; display: grid; place-items: center; font-size: 18px; transition: var(--t-fast); }
    .page-customers .cust-modal-head .x:hover { background: var(--surface-3); color: var(--ink-900); }
    .page-customers .cust-modal-body { padding: 18px 22px; overflow-y: auto; }
    .page-customers .cust-modal-foot { padding: 12px 22px; border-top: 1px solid var(--line); display: flex; justify-content: flex-end; gap: 10px; }

    .page-customers .cfg-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 14px; }
    .page-customers .cfg-item { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border: 1px solid var(--line); border-radius: var(--r-md); cursor: pointer; transition: var(--t-fast); background: var(--surface); }
    .page-customers .cfg-item:hover { border-color: var(--line-strong); }
    .page-customers .cfg-item input { accent-color: var(--primary); width: 15px; height: 15px; }
    .page-customers .cfg-item .cfg-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
    .page-customers .cfg-item .ci-main { flex: 1; font-size: 13px; color: var(--ink-700); font-weight: 600; }
    .page-customers .alert-clients-list { border-top: 1px solid var(--line); padding-top: 8px; max-height: 240px; overflow-y: auto; }
    .page-customers .alert-client-row { display: flex; align-items: center; gap: 10px; padding: 8px 4px; font-size: 13px; }

    .page-customers .todo-seg { display: inline-flex; gap: 4px; background: var(--surface-3); border-radius: var(--r-pill); padding: 3px; }
    .page-customers .todo-seg button { appearance: none; border: none; background: transparent; color: var(--ink-500); font-size: 12px; font-weight: 600; padding: 5px 12px; border-radius: var(--r-pill); cursor: pointer; transition: var(--t-fast); }
    .page-customers .todo-seg button:hover { color: var(--ink-900); }
    .page-customers .todo-seg button.active { background: var(--surface); color: var(--ink-900); box-shadow: var(--sh-sm); }
    .page-customers .todo-list { margin-top: 10px; max-height: 240px; overflow-y: auto; }
    .page-customers .todo-row { display: flex; align-items: flex-start; gap: 10px; padding: 10px 6px; border-bottom: 1px solid var(--line); font-size: 13px; }
    .page-customers .todo-row:last-child { border-bottom: none; }
    .page-customers .todo-row .t-ic { width: 14px; height: 14px; flex-shrink: 0; line-height: 1.4; display: inline-flex; align-items: center; justify-content: center; }
    .page-customers .todo-row .t-ic::before { content: ""; display: block; }
    .page-customers .todo-row .t-ic.prio-urgent::before { width: 9px; height: 9px; border-radius: 50%; background: var(--danger); }
    .page-customers .todo-row .t-ic.prio-warning::before { width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-bottom: 9px solid var(--warn); }
    .page-customers .todo-row .t-ic.prio-normal::before { width: 8px; height: 8px; border-radius: 2px; background: var(--primary); }
    .page-customers .todo-row .t-main { flex: 1; min-width: 0; }
    .page-customers .todo-row .t-title { font-weight: 600; color: var(--ink-900); }
    .page-customers .todo-row .t-sub { font-size: 12px; color: var(--ink-400); margin-top: 2px; }
    .page-customers .todo-row .t-when { font-size: 12px; color: var(--ink-400); flex-shrink: 0; line-height: 1.4; }
    .page-customers .todo-row .t-act { display: flex; gap: 4px; flex-shrink: 0; }
    .page-customers .todo-row .mini-btn { width: 24px; height: 24px; border-radius: 8px; border: none; cursor: pointer; font-size: 13px; line-height: 1; display: grid; place-items: center; transition: var(--t-fast); }
    .page-customers .todo-row .mini-btn.ok { background: var(--ok-soft); color: var(--ok); }
    .page-customers .todo-row .mini-btn.ok:hover { background: var(--ok); color: #fff; }
    .page-customers .todo-row .mini-btn.del { background: var(--danger-soft); color: var(--danger); }
    .page-customers .todo-row .mini-btn.del:hover { background: var(--danger); color: #fff; }
    /* 第九批: 待办项右侧 已完成/删除 文字按钮（薄荷雾规范） */
    .page-customers .todo-row .todo-btn { font-size: 12px; font-weight: 600; border: none; cursor: pointer; padding: 5px 10px; border-radius: 8px; transition: all 0.15s; white-space: nowrap; line-height: 1.4; }
    .page-customers .todo-row .todo-btn.ok { background: var(--primary-soft); color: var(--primary-text); }
    .page-customers .todo-row .todo-btn.ok:hover { background: var(--primary-700); color: #fff; }
    .page-customers .todo-row .todo-btn.del { background: rgba(var(--danger-rgb), 0.12); color: var(--danger); }
    .page-customers .todo-row .todo-btn.del:hover { background: var(--danger); color: #fff; }
    .page-customers .todo-add-form .todo-client-select { width: 100%; margin-bottom: 8px; }
    .page-customers .todo-empty { text-align: center; padding: 26px 0; color: var(--ink-400); font-size: 13px; }
    .page-customers .todo-add-form { border-top: 1px dashed var(--line); margin-top: 10px; padding-top: 14px; }
    .page-customers .todo-input { width: 100%; border: 1px solid var(--line); border-radius: var(--r-md); padding: 9px 12px; font-size: 13px; color: var(--ink-900); background: var(--surface-2); outline: none; transition: var(--t-fast); margin-bottom: 8px; box-sizing: border-box; }
    .page-customers .todo-input:focus { border-color: var(--primary); background: var(--surface); box-shadow: 0 0 0 3px rgba(var(--primary-rgb), .12); }
    .page-customers .todo-input::placeholder { color: var(--ink-300); }
    .page-customers .seg-prio { display: inline-flex; gap: 4px; background: var(--surface-3); border-radius: var(--r-pill); padding: 3px; }
    .page-customers .seg-prio button { appearance: none; border: none; background: transparent; color: var(--ink-500); font-size: 12px; font-weight: 600; padding: 5px 12px; border-radius: var(--r-pill); cursor: pointer; transition: var(--t-fast); }
    .page-customers .seg-prio button.active { background: var(--surface); color: var(--ink-900); box-shadow: var(--sh-sm); }
    .page-customers .seg-prio button.active.urgent { color: var(--danger); }
    .page-customers .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 8px 16px; border-radius: var(--r-pill); font-size: 13px; font-weight: 600; cursor: pointer; transition: var(--t-fast); border: 1px solid var(--line); background: var(--surface); color: var(--ink-700); }
    .page-customers .btn:hover { border-color: var(--line-strong); background: var(--surface-2); }
    .page-customers .btn.primary { background: var(--primary-700); color: #fff; border-color: transparent; box-shadow: 0 6px 16px rgba(42,148,121,.26); }
    .page-customers .btn.primary:hover { filter: brightness(1.04); }
    .page-customers .btn.block { width: 100%; margin-top: 8px; }

    /* ===== 客户详情页 UI 对齐（detail-tools/client-head/tabs-bar/侧边锚点） ===== */
    .client-detail-page .detail-tools { display: flex; align-items: center; gap: 10px; padding: 14px 0 0; flex-wrap: wrap; }
    .client-detail-page .detail-tools .spacer { flex: 1; }
    .client-detail-page .back-link { display: inline-flex; align-items: center; gap: 4px; font-size: 13px; color: var(--ink-500); cursor: pointer; transition: var(--t-fast); }
    .client-detail-page .back-link:hover { color: var(--primary); }
    .client-detail-page .tbtn { display: inline-flex; align-items: center; gap: 6px; padding: 7px 14px; border-radius: var(--r-pill); font-size: 13px; font-weight: 600; cursor: pointer; transition: var(--t-fast); border: 1px solid var(--line); background: var(--surface); color: var(--ink-700); }
    .client-detail-page .tbtn:hover { border-color: var(--primary); color: var(--primary); }
    .client-detail-page .tbtn.primary { background: var(--primary-700); color: #fff; border-color: transparent; box-shadow: 0 4px 12px rgba(var(--primary-rgb), .22); }
    .client-detail-page .tbtn.primary:hover { background: var(--primary-800); color: #fff; }
    .client-detail-page .tbtn.accent { background: var(--accent); color: #fff; border-color: transparent; }
    .client-detail-page .tbtn.accent:hover { background: var(--accent-600); color: #fff; }
    .client-detail-page .tbtn.danger { color: var(--danger); border-color: var(--danger-soft); background: var(--danger-soft); }
    .client-detail-page .tbtn.danger:hover { background: var(--danger); color: #fff; }
    /* 复诊闭环 v1（2026-08-24）：复诊/快速回顾按钮 + 干预周期时间轴 */
    .client-detail-page .tbtn.revisit { background: #E6F5EE; color: var(--primary-text); border-color: #BFE3D4; }
    .client-detail-page .tbtn.revisit:hover { background: var(--primary-800); color: #fff; }
    .client-detail-page .tbtn.review { background: #FFF4E3; color: #D88B2C; border-color: #F5DDB5; }
    .client-detail-page .tbtn.review:hover { background: var(--accent); color: #fff; }
    .client-detail-page .tbtn:disabled { opacity: .55; cursor: not-allowed; }
    .client-detail-page .cycle-timeline { background: var(--surface-warm); border: 1px solid #E8E0D0; border-radius: 14px; padding: 14px 16px; margin: 6px 0 4px; }
    .client-detail-page .cycle-timeline .cycle-title { font-size: 14px; font-weight: 700; color: var(--ink-900); margin-bottom: 10px; display: flex; align-items: center; gap: 6px; }
    .client-detail-page .cycle-list { display: flex; flex-wrap: wrap; gap: 10px; }
    .client-detail-page .cycle-item { background: #fff; border: 1px solid #E8E4DF; border-radius: 12px; padding: 10px 12px; cursor: pointer; transition: all .2s; min-width: 150px; }
    .client-detail-page .cycle-item:hover { border-color: var(--primary-text); box-shadow: 0 3px 10px rgba(var(--primary-600-rgb), .12); }
    .client-detail-page .cycle-item.open { border-color: var(--primary-text); background: #F4FBF7; }
    .client-detail-page .cycle-main { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
    .client-detail-page .cycle-badge { font-size: 12px; font-weight: 700; padding: 2px 8px; border-radius: 999px; }
    .client-detail-page .cycle-badge.first { background: var(--primary-100); color: var(--primary-text); }
    .client-detail-page .cycle-badge.revisit { background: #E8EFF9; color: #4A7DC4; }
    .client-detail-page .cycle-type { font-size: 12px; color: var(--ink-500); }
    .client-detail-page .cycle-type.t-revisit { color: #4A7DC4; }
    .client-detail-page .cycle-date { font-size: 12px; color: var(--ink-400); }
    .client-detail-page .cycle-ver { font-size: 11px; color: #B07A2A; background: #FFF4E3; border-radius: 6px; padding: 1px 6px; }
    .client-detail-page .cycle-now { font-size: 11px; color: var(--primary-text); font-weight: 600; }
    .client-detail-page .cycle-arrow { margin-left: auto; color: #B8B8BC; font-size: 11px; }
    .client-detail-page .cycle-detail { margin-top: 8px; border-top: 1px dashed #E8E4DF; padding-top: 8px; display: flex; flex-direction: column; gap: 4px; }
    .client-detail-page .cycle-detail-row { font-size: 12px; color: var(--ink-700); line-height: 1.6; }
    .client-detail-page .cycle-review { margin-top: 10px; font-size: 12px; color: #D88B2C; background: #FFF7EA; border-radius: 8px; padding: 6px 10px; }
    .client-detail-page .client-head { display: flex; align-items: center; gap: 16px; padding: 18px 0; }
    .client-detail-page .client-av { width: 56px; height: 56px; border-radius: 50%; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-weight: 700; font-size: 20px; box-shadow: 0 4px 12px rgba(var(--primary-rgb), .22); flex-shrink: 0; }
    .client-detail-page .client-info { line-height: 1.4; flex: 1; min-width: 0; }
    .client-detail-page .client-name-row { display: flex; align-items: center; gap: 10px; }
    .client-detail-page .client-name { font-size: 20px; font-weight: 700; color: var(--ink-900); }
    .client-detail-page .client-tag { display: inline-flex; align-items: center; gap: 4px; padding: 3px 10px; border-radius: var(--r-pill); background: var(--danger-soft); color: var(--danger); font-size: 12px; font-weight: 600; }
    .client-detail-page .client-sub { font-size: 13px; color: var(--ink-400); margin-top: 3px; }
    .client-detail-page .client-tabs-card { border-radius: var(--r-lg); overflow: hidden; }
    .client-detail-page .pane-body { display: flex; gap: 20px; padding: 16px 0 24px; align-items: flex-start; }
    .client-detail-page .side-nav { width: 190px; flex-shrink: 0; position: sticky; top: 20px; align-self: flex-start; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 14px 8px; box-shadow: var(--sh-sm); max-height: calc(100vh - 240px); overflow-y: auto; }
    .client-detail-page .side-nav-head { padding: 0 10px 10px; border-bottom: 1px solid var(--line); margin-bottom: 8px; }
    .client-detail-page .side-nav-title { font-size: 12px; font-weight: 700; color: var(--ink-900); margin-bottom: 2px; }
    .client-detail-page .side-nav-tip { font-size: 11px; color: var(--ink-400); }
    .client-detail-page .side-nav a { display: flex; align-items: center; gap: 8px; padding: 8px 10px; border-radius: 10px; font-size: 13px; color: var(--ink-500); cursor: pointer; transition: var(--t-fast); text-decoration: none; }
    .client-detail-page .side-nav a:hover { background: var(--primary-grad-soft); color: var(--primary-text); }
    .client-detail-page .side-nav a.active { background: var(--primary-grad-soft); color: var(--primary-text); font-weight: 600; }
    .client-detail-page .side-nav a .ic { width: 16px; height: 16px; display: grid; place-items: center; opacity: .85; }
    .client-detail-page .profile-content { flex: 1; min-width: 0; }
    .client-detail-page .sec { margin-bottom: 16px; scroll-margin-top: 24px; }
    .client-detail-page .sec .sec-head { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; padding: 0 2px; }
    .client-detail-page .sec .sec-head h2 { font-size: 14px; font-weight: 700; color: var(--ink-900); margin: 0; }
    .client-detail-page .sec.flow-note > div { background: var(--primary-grad-soft); border: 1px solid rgba(var(--primary-rgb), .28); border-radius: var(--r-md); padding: 12px 14px; font-size: 12px; color: var(--ink-500); line-height: 1.7; }
    @media (max-width: 900px) { .client-detail-page .pane-body { flex-direction: column; } .client-detail-page .side-nav { width: 100%; position: static; max-height: none; } }
    /* ===== C线：账户页（我的）+ 系统设置 视觉落地 · 物料映射（限定容器前缀，外壳不动） ===== */
    .profile-page { --primary-soft: #E8F6F2; --primary-soft-2: #F0FAF7; --accent-soft: #FFF0E6; }
    .profile-page .page-head { margin-bottom: 22px; }
    .profile-page .page-title { font-size: var(--fs-2xl); font-weight: 700; letter-spacing: -.2px; line-height: 1.3; }
    /* deploy25 F4：系统设置页标题补齐同规格（原先无作用域规则 ⇒ 落到通用 .page-title = 28px/600） */
    .settings-proto-wrap > .page-title { font-size: var(--fs-2xl); font-weight: 700; letter-spacing: -.2px; line-height: 1.3; }
    .profile-page .page-desc { color: var(--ink-400); font-size: 13px; margin-top: 4px; }
    .profile-page .card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--sh-sm); padding: 20px; }
    .profile-page .card-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; }
    .profile-page .card-title { font-size: 16px; font-weight: 600; color: var(--ink-900); }
    .profile-page .card-sub { font-size: 12px; color: var(--ink-400); margin-top: 2px; }
    .profile-page .grid { display: grid; gap: 18px; }
    .profile-page .grid-2 { grid-template-columns: 1fr 1fr; }
    .profile-page .grid-2 > .card { height: 100%; display: flex; flex-direction: column; }
    .profile-page .grid-2 > .card .btn-row { margin-top: auto; }
    @media (max-width: 980px) { .profile-page .grid-2 { grid-template-columns: 1fr; } }
    /* 资料横幅 */
    .profile-page .profile-banner { background: var(--primary-grad-deep); border-radius: var(--r-xl); padding: 26px 28px; color: #fff; display: flex; align-items: center; gap: 20px; box-shadow: var(--sh-glow); position: relative; overflow: hidden; }
    .profile-page .profile-banner::after { content: ""; position: absolute; right: -40px; top: -40px; width: 200px; height: 200px; border-radius: 50%; background: rgba(255,255,255,.12); }
    .profile-page .avatar { width: 32px; height: 32px; border-radius: 50%; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-weight: 600; font-size: 13px; flex: 0 0 32px; }
    .profile-page .avatar.lg { width: 72px; height: 72px; font-size: 28px; flex-basis: 72px; background: rgba(255,255,255,.22); border: 2px solid rgba(255,255,255,.5); }
    .profile-page .pb-name { font-size: 22px; font-weight: 700; }
    .profile-page .pb-role { font-size: 13px; opacity: .92; margin-top: 3px; }
    .profile-page .tags { display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap; }
    .profile-page .tag-chip { font-size: 12px; font-weight: 600; padding: 4px 12px; border-radius: var(--r-pill); background: rgba(255,255,255,.22); backdrop-filter: blur(4px); }
    .profile-page .pb-spacer { flex: 1; }
    .profile-page .pb-stat { text-align: right; z-index: 1; }
    .profile-page .pb-stat .k { font-size: 12px; opacity: .85; }
    .profile-page .pb-stat .v { font-size: 20px; font-weight: 700; font-family: var(--num); }
    /* 套餐 / 用量 */
    .profile-page .kv { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 16px; }
    .profile-page .kv .k { color: var(--ink-500); }
    .profile-page .kv .v { color: var(--ink-900); font-weight: 600; font-family: var(--num); }
    .profile-page .metric { margin-bottom: 16px; }
    .profile-page .metric:last-child { margin-bottom: 0; }
    .profile-page .metric .top { display: flex; justify-content: space-between; font-size: 13px; margin-bottom: 7px; }
    .profile-page .metric .top .label { color: var(--ink-500); }
    .profile-page .metric .top .val { color: var(--ink-900); font-weight: 600; font-family: var(--num); }
    .profile-page .bar { height: 8px; border-radius: var(--r-pill); background: var(--surface-3); overflow: hidden; }
    .profile-page .bar > i { display: block; height: 100%; border-radius: var(--r-pill); background: var(--primary-grad); }
    .profile-page .bar.warn > i { background: var(--accent-grad); }
    /* 快捷操作 */
    .profile-page .quick-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; }
    @media (max-width: 980px) { .profile-page .quick-grid { grid-template-columns: repeat(2, 1fr); } }
    .profile-page .quick-mini { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 18px 12px; border-radius: var(--r-lg); background: var(--surface); border: 1px solid var(--line); box-shadow: var(--sh-sm); transition: transform var(--t-fast), box-shadow var(--t-fast), border-color var(--t-fast); text-align: center; width: 100%; }
    .profile-page .quick-mini:hover { transform: translateY(-2px); box-shadow: var(--sh-md); border-color: var(--primary-soft); }
    .profile-page .quick-mini .ico { width: 42px; height: 42px; border-radius: 12px; display: grid; place-items: center; background: var(--primary-soft); color: var(--primary-text); }
    .profile-page .quick-mini.accent .ico { background: var(--accent-soft); color: var(--accent-600); }
    .profile-page .quick-mini .t { font-size: 14px; font-weight: 600; color: var(--ink-900); }
    .profile-page .quick-mini .d { font-size: 12px; color: var(--ink-400); }
    /* 账户信息 */
    .profile-page .info-row { display: flex; justify-content: space-between; align-items: center; padding: 13px 0; border-bottom: 1px solid var(--line); }
    .profile-page .info-row:last-child { border-bottom: none; }
    .profile-page .info-row .k { color: var(--ink-500); font-size: 13px; }
    .profile-page .info-row .v { color: var(--ink-900); font-weight: 600; font-size: 13px; font-family: var(--num); }
    .profile-page .status-dot { display: inline-flex; align-items: center; gap: 6px; color: var(--ok); font-weight: 600; width: auto; height: auto; }
    .profile-page .status-dot::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--ok); }
    /* 按钮 */
    .profile-page .btn { font-family: inherit; font-size: 14px; font-weight: 600; padding: 10px 18px; border-radius: var(--r-md); transition: filter var(--t-fast), background var(--t-fast), box-shadow var(--t-fast), transform var(--t-fast); display: inline-flex; align-items: center; gap: 8px; }
    .profile-page .btn:active { transform: translateY(1px); }
    .profile-page .btn-primary { background: var(--primary-700); color: #fff; box-shadow: var(--sh-glow); }
    .profile-page .btn-primary:hover { filter: brightness(1.04); }
    .profile-page .btn-accent { background: var(--accent-grad); color: #fff; box-shadow: 0 8px 24px rgba(var(--accent-rgb), .28); }
    .profile-page .btn-accent:hover { filter: brightness(1.04); }
    .profile-page .btn-sm { padding: 7px 13px; font-size: 13px; }
    .profile-page .btn-row { display: flex; gap: 12px; margin-top: 18px; flex-wrap: wrap; }
    .profile-page .mt-16 { margin-top: 16px; }
    /* VB20: 当前套餐第三行间距由上一 .kv 的 margin-bottom 承担，避免 margin-top 叠加导致行距不一致 */
    .profile-page .metric.mt-16 { margin-top: 0; }
    .profile-page .mt-20 { margin-top: 20px; }

    /* ===== deploy16 · 布局让位 + 未选客户空态引导页 ===== */
    /* A/B · 智诊中枢两侧缝隙收敛，让出的宽度给 AI 助手栏（.v3-dialog 有硬 width，须与 .wrap 列宽同步改）
            ⚠ .v3-app.v3-tmp .wrap 优先级更高，临时会话模式布局不受影响。 */
    .v3-app .wrap{grid-template-columns:236px minmax(0,1fr) 380px}
    .v3-app .v3-dialog{width:380px}
    .v3-app .workbody{padding:20px 20px}

    /* C · 未选客户空态引导页（原型 #zzEmpty 1:1；原型 min-height:calc(100vh-120px) 改为 flex:1 以适配线上 .v3-work 弹性容器）
            ⚠ 令牌坑：--primary-soft / --primary-soft-2 只定义在 .profile-page（L3181），**不在 .v3-app 作用域**；
              故此处必须带 fallback，否则 background:var(--primary-soft) 整条声明失效（图标无底色）。
              同类隐患（线上既有，非本单范围）：.v3-app 内 .fcard .btn-rediag:hover / .fbody .drop:hover 亦无 fallback。 */
    .v3-app .zz-empty{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:40px 24px;text-align:center}
    .v3-app .zz-empty .ze-ic{width:72px;height:72px;border-radius:22px;background:var(--primary-soft, #E8F6F2);display:flex;align-items:center;justify-content:center;font-size:34px}
    .v3-app .zz-empty .ze-t{font-size:20px;font-weight:800;color:var(--ink-900)}
    .v3-app .zz-empty .ze-d{font-size:13px;color:var(--ink-500)}
    .v3-app .zz-empty .ze-steps{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap;justify-content:center}
    .v3-app .zz-empty .ze-step{display:flex;flex-direction:column;align-items:center;gap:4px;background:#fff;border:1px solid var(--line-strong);border-radius:14px;padding:16px 18px;min-width:126px;box-shadow:var(--sh-sm)}
    .v3-app .zz-empty .ze-step .zdot{width:28px;height:28px;border-radius:9px;background: var(--primary-700);color:#fff;font-weight:800;font-size:13px;display:flex;align-items:center;justify-content:center}
    .v3-app .zz-empty .ze-step .zn{font-size:13px;font-weight:800;color:var(--ink-900)}
    .v3-app .zz-empty .ze-step .zs{font-size:10.5px;color:var(--ink-400)}
    .v3-app .zz-empty .zarr{color:var(--ink-300);font-size:15px;font-weight:700}

    /* ===== deploy15 · 资料卡 / 健康分析 / 引用依据 / AI助手 按原型对齐 ===== */
    /* Y1 · 智诊中枢标题 + 4 步流程条随中间页面滚动
            结构：.thead / renderStageBar() 已从 .workbody 之外移入其内（见 renderWork）。
            .workbody 自带 padding:20px 28px ⇒ 原 16px/28px 外边距必须归零，否则左边缘会再错位 28px。 */
    .v3-app .v3-work .thead{margin:0}
    .v3-app .v3-work .stage{margin:0 0 16px}

    /* Y2 · 客户头一行式：姓名 / 性别·年龄 / 头像 与操作按钮同排
            ⚠根因：原规则写的是 `.v3-app .overview .ov-head/.av-lg/.nm-lg/.mt-lg`，
            而线上 DOM 是 .fbody > .ov-head（无 .overview 祖先）⇒ 四条规则全部失配，
            于是 display 落回 block（头像退化成裸文字、姓名 16px/400），按钮被挤到下一行。 */
    .v3-app .ov-head{display:flex;align-items:center;gap:14px;padding-bottom:18px;margin-bottom:16px;border-bottom:1px solid var(--line);flex-wrap:wrap}
    .v3-app .ov-head > div:nth-child(2){min-width:0}
    .v3-app .ov-head .av-lg{width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#7ED4FF,var(--info));color:#fff;display:flex;align-items:center;justify-content:center;font-size:21px;font-weight:700;flex-shrink:0}
    .v3-app .ov-head .nm-lg{font-size:17px;font-weight:800;line-height:1.25}
    .v3-app .ov-head .mt-lg{font-size:12.5px;color:var(--ink-400);margin-top:2px}

    /* Y3 · 操作按钮对齐原型 .bn（r10 / 13.5px / 10px 22px）；「⚡ 临时智诊」已删（入口改由 AI 助手栏「临时会话」承载）
            注：不放大 .fbody 内其余按钮 —— deploy12⑫ 的 .btn-row 四钮单行约束会被顶破。 */
    .v3-app .ov-actions{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
    .v3-app .ov-actions .tbtn,
    .v3-app .ov-actions .btn{padding:10px 22px;border-radius:10px;font-size:13.5px;font-weight:600}

    /* Y4 · 4 格指标：四个横排独立小模块（原为 gap:1px + 底色透视做出来的"连体分隔条"，且值在上、标签在下、居中） */
    .v3-app .metric-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:14px;border:none;background:none;border-radius:0;overflow:visible}
    .v3-app .metric{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;text-align:left;min-width:0}
    .v3-app .metric .k{font-size:11.5px;color:var(--ink-400);margin-bottom:6px;font-weight:400;display:flex;align-items:center;gap:4px}
    .v3-app .metric .v{font-size:15px;font-weight:800;line-height:1.3;color:var(--ink-900)}
    .v3-app .metric .v .tag-inline{display:inline-flex;align-items:center;gap:3px;margin-left:7px;padding:2px 8px;border-radius:20px;font-size:10.5px;font-weight:600;vertical-align:2px}
    .v3-app .tag-inline.ok{background:var(--ok-soft);color:var(--primary-text)}
    .v3-app .tag-inline.warn{background:var(--warn-soft);color:var(--warn-600)}
    .v3-app .tag-inline.risk{background:var(--danger-soft);color:#C14B3C}
    .v3-app .tag-inline.muted{background:var(--surface-3);color:var(--ink-400)}
    .v3-app .metric .v.warn-txt{color:var(--warn-600)}
    .v3-app .metric .v.risk-txt{color:#C14B3C}
    .v3-app .metric .v .small{font-size:11px;color:var(--ink-400);font-weight:500}

    /* Y5 · 主诉模块：浅底模块 + 左标签 + 白底胶囊（原型 .chief） */
    .v3-app .ov-chief{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;background:var(--surface-2);border-radius:var(--r-md);margin:14px 0}
    .v3-app .ov-chief .lbl{font-size:12.5px;color:var(--ink-500);font-weight:600;white-space:nowrap;margin:3px 0 0;line-height:1.4}
    .v3-app .chief-bubbles{display:flex;flex-wrap:wrap;gap:6px}
    .v3-app .bubble{display:inline-flex;align-items:center;gap:5px;background:#fff;border:1px solid var(--line-strong);border-radius:20px;padding:4px 11px;font-size:12px;color:var(--ink-700);font-weight:400;cursor:pointer}
    .v3-app .bubble:hover{transform:none;box-shadow:var(--sh-sm)}
    .v3-app .bubble.add{border:1px dashed rgba(var(--primary-rgb), .4);background:var(--primary-soft-2);color:var(--primary-text);font-weight:400}
    .v3-app .ov-tags{margin-top:2px}

    /* Y6 · 报告异常卡：删掉标题（.ov-abn-head）下方的横线 —— 该线来自 .ov-abn-body 的 border-top */
    .v3-app .ov-abn-body{padding:0 20px 16px;border-top:none}

    /* Z1/Z2/Z3/Z4/Z5 · 健康分析「异常指标解读」 */
    .v3-app .hc-card{row-gap:5px}                     /* 4 行字段间距 11px(卡片 gap) → 5px（原型 .fm-fields gap） */
    .v3-app .hc-head{margin-bottom:3px}
    .v3-app .hc-val{font-size:13px;font-weight:600;font-family:var(--num);color:var(--ink-700)}
    .v3-app .hc-val.hc-up{color:#C14B3C}              /* 涨红 */
    .v3-app .hc-val.hc-dn{color:var(--primary-text)}   /* 跌绿 */
    .v3-app .hc-tag{margin-left:0}                    /* 原 margin-left:auto 把「偏高/偏低」推到最右 ⇒ 收到数值后面 */
    .v3-app .hc-sec{margin-top:0}
    .v3-app .hc-k{position:relative;padding-left:11px}         /* 让出 3px 色标位 */
    .v3-app .hc-k::before{content:"";position:absolute;left:0;top:7px;width:3px;height:12px;border-radius:2px;background:var(--primary);opacity:.55}
    .v3-app .hc-k.risk{color:#C14B3C}
    .v3-app .hc-k.risk::before{background:var(--danger);opacity:1}
    .v3-app .hc-k.adv{color:var(--primary-text)}
    .v3-app .hc-k.adv::before{background:var(--primary);opacity:1}
    .v3-app .hc-sec-plain{padding-left:11px}          /* 原「意味着什么」正文：与下方标签文字同起点 */
    .v3-app .hc-cause{margin-top:7px;width:auto;align-self:flex-start;display:inline-flex;align-items:center;gap:3px;font-size:9px;line-height:1.6;letter-spacing:.2px;background:var(--primary-soft, #E8F6F2);color:var(--primary-text);border:none;border-radius:20px;padding:1px 7px;font-weight:400;cursor:pointer}
    .v3-app .hc-cause:hover{background: var(--primary-800);color:#fff}
    .v3-app .hc-cause .cg-s{font-size:9px;line-height:1}

    /* W · 引用依据正文：R14 只给了外壳（.upfold*），正文/图标/字号此前完全没有规则
            ⇒ 展开后按浏览器默认 16px 黑字 + 文字「✦」渲染。此处补齐原型 .refitem 全套。 */
    .v3-app .refstack{display:flex;flex-direction:column;gap:0}
    .v3-app .refitem{display:flex;align-items:center;gap:7px;padding:5px 2px;font-size:11.5px;border-bottom:1px dashed var(--line)}
    .v3-app .refitem:last-child{border-bottom:none}
    .v3-app .refitem .star4{flex-shrink:0;fill:var(--primary);opacity:.9}
    .v3-app .refitem .rname{color:var(--ink-500);font-weight:400;flex:1;min-width:0;line-height:1.5}
    .v3-app .refitem .rusage{color:var(--ink-400);font-size:10.5px;flex-shrink:0;font-weight:400;white-space:nowrap}
    .v3-app .refnote{margin-top:7px;font-size:10.5px;color:var(--ink-400)}

    /* V · AI 助手：角色名移到气泡上沿
            原结构 .msg 自身就是气泡（带底色/内边距），.who 在其内部 ⇒ 角色名被气泡底色包住。
            新结构：.msg（外层行容器）> .bub > （.who + .ball），气泡外观整体下沉到 .ball。 */
    .v3-app .msg{display:block;padding:0;max-width:86%}
    .v3-app .msg.nut,
    .v3-app .msg.ai{background:none;border:none;box-shadow:none;border-radius:0;padding:0}
    .v3-app .msg.nut{align-self:flex-end}
    .v3-app .msg.ai{align-self:flex-start}
    .v3-app .msg .bub{min-width:0;max-width:100%}
    .v3-app .msg .who{font-size:10.5px;color:var(--ink-400);margin-bottom:3px;font-weight:600;padding:0 2px}
    .v3-app .msg.ai .who{color:var(--ink-400)}
    .v3-app .msg.nut .who{text-align:right}
    .v3-app .msg .ball{padding:10px 14px;border-radius:var(--r-lg);font-size:var(--fs-sm);line-height:1.6;overflow-wrap:break-word}
    .v3-app .msg.nut .ball{background:var(--surface);border:1px solid var(--line);border-top-right-radius:4px;box-shadow:var(--sh-sm)}
    /* AI 气泡改白底 + 主题色描边（2026-10-20 用户报：渐变底上白字对比不足、读不清）
       连带：.who / .bubble-tip / sources 分隔线都要从"白字系"改回"深字系"，
       否则角色名与来源分隔线在白底上会淡到看不见。 */
    .v3-app .msg.ai .ball{background:var(--surface);color:var(--ink-900);border:1px solid var(--primary);border-top-left-radius:4px;box-shadow:var(--sh-sm)}
    .v3-app .msg.ai .ball .bubble-tip{font-size:11px;opacity:.85;margin-top:4px}
    .v3-app .msg.ai .ball .msg-sources-div{border-top:1px solid var(--line) !important}
    .v3-app .msg.ai .ball .msg-src-label{color:var(--ink-500)}
    .v3-app .msg.ai .ball .msg-src-note{color:var(--ink-400)}

    /* ===== deploy17 · 因果图方案B（保真实数据 + 套聚焦范式）===== */
    /* B4 · 中游废除 2×2 网格，恢复竖排 4 行
       原 `.cgroup.mid{display:grid;grid-template-columns:1fr 1fr}` ⇒ 单节点仅 94px 宽，
       「甲状腺/皮质醇」(6字×16px≈96px) 必然截断。改为与 up/down 一致的 flex 竖排。 */
    .v3-app .cgroup.mid{display:flex;flex-direction:column;gap:10px;align-content:normal;align-items:center;justify-content:center;width:100%}
    /* B6 · 列标题钉舞台顶部（原型 .col-title 做法）
       放进 .cgrid 首行（grid-column:1/-1），随 fitCausal 的 grid.style.zoom 一起缩放 ⇒ 天然对齐；
       若放 grid 外做绝对定位则不随 zoom 缩放 ⇒ 与列错位（已避坑）。 */
    .v3-app .cgrid .crow-titles{grid-column:1 / -1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 18px;margin-bottom:-4px}
    .v3-app .crow-titles .ct{text-align:center;font-size:11px;font-weight:700;letter-spacing:1px}
    .v3-app .crow-titles .ct.up{color:var(--lvl-up)}
    .v3-app .crow-titles .ct.mid{color:var(--lvl-mid)}
    .v3-app .crow-titles .ct.down{color:var(--lvl-down)}
    /* 三列顶部对齐（原 align-items:center 会在列高不等时把中间列整体下移，与钉顶标题冲突） */
    .v3-app .cgrid{align-items:start}
    .v3-app .cgrid .cgroup{justify-content:flex-start;height:auto}
    /* B7 · 节点回归轻量：边框 3px→1.5px（原 3px 使视觉重量翻倍；原型 .node 为 1px）
       注：实测线上 .n-label 已是 14px（原型 14.5px）。此前报告「字号 16px」是误读节点容器的继承值，特此更正。 */
    .v3-app .cgrid .cnode{border-width:1.5px}
    .v3-app .cgrid .cnode.active{border-width:3px}
    /* B5 · 下游紧凑档（≥5 项时）：单行节点，向原型 .node 单行样式（.nm + .tag 同行）回归，非为美观打折 */
    .v3-app .cgroup.down.compact{gap:7px}
    .v3-app .cgroup.down.compact .cnode{width:100%;min-width:0;min-height:0;height:34px;max-height:34px;padding:4px 11px;flex-direction:row;align-items:center;justify-content:space-between;gap:8px;text-align:left}
    .v3-app .cgroup.down.compact .cnode .n-label{font-size:12.5px;font-weight:600;flex:1;min-width:0}
    .v3-app .cgroup.down.compact .cnode .n-val{font-size:12px;margin-top:0;color:var(--ink-400);flex:none}
    /* B9 · 恶性循环语义化：原为孤立裸红点（<circle r=11> + 白 ⟳，无文字无外框），改为带文字的徽标。
       不加 .v3-app 作用域 + 带 fallback —— 因为 PDF 导出/交付卡预览用的是另一处渲染器（.pr-causal-g），
       它不在 .v3-app 内，且 --loop 令牌在彼处可能未定义。 */
    .loop-badge{fill:#fff;stroke:var(--loop, #E05252);stroke-width:1.4}
    .loop-badge-tx{font-size:10.5px;font-weight:700;fill:var(--loop, #E05252);text-anchor:middle;pointer-events:none}
    /* B8 · 底部「当前因果链」条（原型 .chain-bar 做法） */
    .v3-app .chain-bar{display:flex;align-items:center;gap:10px;margin-top:12px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
    .v3-app .chain-bar .lbl{flex:none;font-size:11px;font-weight:600;color:var(--ink-500)}
    .v3-app .chain-bar .pf-flow{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
    .v3-app .chain-bar .pf-flow .pf-flow{display:inline-flex;gap:4px}
    .v3-app .pf-arrow{color:var(--ink-300);font-size:10px;font-weight:700}

    /* ===== deploy18 · 因果图视觉对齐原型（owner 拍板 1A + 2A）=====
       1A 色彩语义＝原型「因=绿 / 果=珊瑚」2 色：上游与中游同色（绿），下游珊瑚；
          未选中一律白卡 + 淡边（去掉原按列 3 色 tint：紫/橙/蓝）。
       2A 采纳原型链路态左侧 4px 竖条（上游/中游绿、下游珊瑚）。
       ⚠️ 本段是**覆盖段**：不改上方旧规则（保留可回滚）；同特异性时后置生效，
          故所有选择器均比被覆盖规则多带一级（.cgrid），确保稳定压过旧声明。
       依据：病程因果图_原型.html `.node` / `.node.sel` / `.node.chain-mid` /
             `.node.chain-down` / `.node.dim` / `.legend` / `.col-title` / `.chain-bar` */
    /* D1 · 节点本体回归原型：白卡 + 1px 淡边 + 左对齐 + 原型字色字重（去掉 3px 厚边与按列 tint） */
    .v3-app .cgrid .cnode{position:relative;border:1px solid rgba(20,48,43,.08);background:var(--surface);border-radius:12px;text-align:left;align-items:flex-start;padding:0 18px;color:var(--ink-700);font-weight:500;box-shadow:var(--sh-sm)}
    .v3-app .cgrid .cnode:hover{box-shadow:var(--sh-md);transform:translateY(-2px)}
    /* D2 · 节点文字（原型 .nm 14.5px/500、.tag 10.5px/ink-400） */
    .v3-app .cgrid .cnode .n-label{font-size:14.5px;font-weight:500;color:var(--ink-700)}
    .v3-app .cgrid .cnode .n-val{font-size:10.5px;color:var(--ink-400);font-weight:500}
    /* D3 · 选中态（原型 .sel）：绿渐变底 + 2px #247A66 边 + ink-900/600 + 绿光晕 */
    .v3-app .cgrid .cnode.active{background:linear-gradient(135deg,#E6F7F1,var(--primary-100));border:2px solid var(--primary-700);color:var(--ink-900);font-weight:600;box-shadow:0 6px 18px rgba(var(--primary-rgb), .22);transform:translateY(-1px)}
    .v3-app .cgrid .cnode.active .n-label{font-weight:600;color:var(--ink-900)}
    /* D4 · 链路态（原型 .chain-mid / .chain-down）：因=绿 / 果=珊瑚，1.5px 边 + sh-md */
    .v3-app .cgrid .cnode.lit-up,.v3-app .cgrid .cnode.lit-mid{border:1.5px solid var(--primary);box-shadow:var(--sh-md);transform:translateY(-1px)}
    .v3-app .cgrid .cnode.lit-down{border:1.5px solid var(--accent);box-shadow:var(--sh-md);transform:translateY(-1px)}
    .v3-app .cgrid .cnode.lit-up .n-label,.v3-app .cgrid .cnode.lit-mid .n-label,.v3-app .cgrid .cnode.lit-down .n-label{font-weight:600;color:var(--ink-900)}
    /* D5 · 2A：链路态左侧 4px 竖条（原型 .chain-mid/::before、.chain-down/::before） */
    .v3-app .cgrid .cnode.lit-up::before,.v3-app .cgrid .cnode.lit-mid::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;background:var(--primary);border-radius:0 3px 3px 0}
    .v3-app .cgrid .cnode.lit-down::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;background:var(--accent);border-radius:0 3px 3px 0}
    /* D6 · 弱化（原型 .dim）：.34 + 去饱和（原 .18 且无 grayscale ⇒ 看着像禁用而非「非本链」） */
    .v3-app .cnode.dim{opacity:.34;filter:grayscale(.4);box-shadow:none}
    .v3-app .cnode.dim:hover{opacity:.8;filter:grayscale(0)}
/* ═══ 批K：思路卡生成进度条（后端一次性返回，进度为估算并如实标注）═══ */
.ipc-prog{padding:6px 0 2px}
.ipc-prog-h{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:8px}
.ipc-prog-t{font-size:13.5px;font-weight:600;color:var(--ink-900)}
.ipc-prog-s{font-size:11.5px;color:var(--ink-400)}
.ipc-prog-bar{height:8px;border-radius:999px;background:#EDF1F6;overflow:hidden}
.ipc-prog-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--primary),var(--info));transition:width 500ms linear}
.ipc-prog-p{font-size:12px;color:var(--ink-500);margin-top:8px}
/* ═══ 批K：成因图多维层 —— 病因模块带 + 节点维度徽章（角标绝对定位，不改盒子高度）═══ */
.pr-causal-g .cmod-band{position:relative;z-index:3;background:#FBFDFC;border:1px solid #E6EFE9;border-radius:12px;padding:10px 12px;margin-bottom:12px}
.pr-causal-g .cmod-band-t{font-size:11.5px;font-weight:600;color:var(--ink-500);margin-bottom:8px;letter-spacing:.3px}
.pr-causal-g .cmod-list{display:flex;flex-wrap:wrap;gap:8px}
.pr-causal-g .cmod{flex:1 1 190px;min-width:170px;background:#fff;border:1px solid #EAF1EC;border-left:4px solid #CBD5D0;border-radius:10px;padding:7px 10px}
.pr-causal-g .cmod.hub{border-left-color:var(--warn);background:#FFFBF4}
.pr-causal-g .cmod.bad{border-left-color:var(--danger);background:#FFF7F6}
.pr-causal-g .cmod.ok{border-left-color:var(--ok)}
.pr-causal-g .cmod-h{display:flex;align-items:center;justify-content:space-between;gap:6px}
.pr-causal-g .cmod-n{font-size:12.5px;font-weight:600;color:var(--ink-900);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pr-causal-g .cmod-s{font-size:10.5px;font-weight:500;color:var(--ink-500);background:#F1F5F2;border-radius:4px;padding:0 5px;flex:none}
.pr-causal-g .cmod.hub .cmod-s{color:#B4762A;background:#FBF3E4}
.pr-causal-g .cmod.bad .cmod-s{color:var(--danger-600);background:#FDEEEC}
.pr-causal-g .cmod-i{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.pr-causal-g .cmod-tag{font-size:10.5px;color:var(--ink-500);background:#F4F8F5;border-radius:4px;padding:0 5px;white-space:nowrap}
.pr-causal-g .cmod-b{font-size:10.5px;color:var(--ink-400);margin-top:5px;line-height:1.5}
.cnode{position:relative}
/* 维度行：流式一行（不遮字）；带维度行的节点放开 max-height（标签恒单行省略，实测内容 ≤62px） */
.cnode .n-dims{display:flex;flex-wrap:wrap;gap:3px;margin-top:4px}
.cnode .nd{font-size:9.5px;line-height:1.5;border-radius:4px;padding:0 4px;white-space:nowrap;pointer-events:none}
.cnode .nd-lv{color:var(--ink-400);background:#F1F5F2}
.cnode .nd-lv-up{color:#5B4BB8;background:#F1EEFB}
.cnode .nd-lv-mid{color:#9A6A1E;background:#FBF3E4}
.cnode .nd-lv-down{color:#1F6E96;background:#EAF5FB}
.cnode .nd-sys{color:var(--ink-500);background:#F4F8F5;max-width:112px;overflow:hidden;text-overflow:ellipsis}
.cnode .nd-hub{color:#B4762A;background:#FBF3E4;font-weight:600}
.cnode .nd-bad{color:var(--danger-600);background:#FDEEEC;font-weight:600}
.cgrid .cnode.with-dims{max-height:none}
/* 下游紧凑行模式（高 34px、横向排列）容不下维度行 → 自动隐藏，信息仍在 title 里 */
.cgroup.down.compact .cnode .n-dims{display:none}
    /* D7 · 连线按方向着色（原型 up→mid 绿 / mid→down 珊瑚）+ 弱关联 55% 虚线（原型 1.6px dashed 6 5） */
    .v3-app .edge.solid.e-um{stroke:var(--primary)}
    .v3-app .edge.solid.e-md{stroke:var(--accent)}
    .v3-app .edge.dash{stroke-width:1.6;stroke-dasharray:6 5;opacity:.55}
    .v3-app .edge.dash.e-um{stroke:var(--primary)}
    .v3-app .edge.dash.e-md{stroke:var(--accent)}
    .v3-app .edge.hi.solid.e-um{stroke:var(--primary);filter:drop-shadow(0 0 5px rgba(var(--primary-rgb), .55))}
    .v3-app .edge.hi.solid.e-md{stroke:var(--accent);filter:drop-shadow(0 0 5px rgba(var(--accent-rgb), .55))}
    .v3-app .edge.hi.dash.e-um{stroke:var(--primary);filter:drop-shadow(0 0 3px rgba(var(--primary-rgb), .35))}
    .v3-app .edge.hi.dash.e-md{stroke:var(--accent);filter:drop-shadow(0 0 3px rgba(var(--accent-rgb), .35))}
    .v3-app .edge.dim{opacity:.05}
    /* D8 · 图例（原型 .legend）：方形 10px dot + 三层级 soft 色 + 55% 绿虚线样例 */
    .v3-app .legend{gap:18px;font-size:12.5px}
    .v3-app .legend .dot{width:10px;height:10px;border-radius:3px;border:1px solid}
    .v3-app .legend .dot.up{background:var(--ok-soft);border-color:rgba(var(--ok-rgb), .5)}
    .v3-app .legend .dot.mid{background:#FDE9D9;border-color:rgba(var(--warn-rgb), .45)}
    .v3-app .legend .dot.down{background:var(--info-soft);border-color:rgba(90,200,250,.5)}
    .v3-app .legend .lgline.dash{border-top:1.6px dashed rgba(var(--primary-rgb), .55)}
    /* D9 · 列标题（原型 .col-title）：中性灰 ink-500 / 12px / 600（原三色 11px/700） */
    .v3-app .crow-titles .ct,.v3-app .crow-titles .ct.up,.v3-app .crow-titles .ct.mid,.v3-app .crow-titles .ct.down{font-size:12px;font-weight:600;letter-spacing:1px;color:var(--ink-500)}
    /* D10 · 底部「当前因果链」条（原型 .chain-bar）：珊瑚浅底 + #F0854A 文字 */
    .v3-app .chain-bar{background:linear-gradient(135deg,#FFF5F0,#FFEEE6);border:1px solid rgba(var(--accent-rgb), .35);border-radius:12px;padding:13px 20px;font-size:13.5px;color:var(--accent-600);font-weight:600}
    .v3-app .chain-bar .lbl{font-size:12px;color:var(--ink-400);font-weight:500}
    .v3-app .chain-bar .pf-chip{background:#fff;border-color:rgba(var(--accent-rgb), .35)}
    /* D11 · 恶性循环色统一为系统语义色 danger（原型无此项，owner 决定保留）——
       两处渲染器（主图 .v3-app 内 / PDF 预览 .pr-causal-g 外）都吃这条 */
    .loop-badge{stroke:var(--danger)}
    .loop-badge-tx{fill:var(--danger)}
    .v3-app .edge.hi.loop{stroke:var(--loop);filter:drop-shadow(0 0 6px rgba(var(--danger-rgb), .6))}

    /* ═══════════════════════════════════════════════════════════════
       【deploy21】智诊页 · 方案详情页 / PDF 详情页 改造 —— 新文档体系
       来源：智诊页_方案详情页+PDF详情页_改造原型_20260925.html（CSS 段 41-302）
       作用域：.doc / .sec / .ind-card / .issue-card / .guard / ... / .menu-tbl
       ⚠️ 令牌依赖：全部使用线上已有变量（:root 与 .v3-app 双作用域均定义，实测齐备）
       ═══════════════════════════════════════════════════════════════ */
/* ═══════════ 2. 文档主体（复刻原型 v3 视觉，作用域 .doc） ═══════════ */
.doc{max-width:980px;margin:0 auto;padding:22px 16px 40px}
.doc .cover{background:var(--surface);border:1px solid var(--line);border-radius:20px;overflow:hidden;box-shadow:var(--sh-md);margin-bottom:22px}
.doc .cover-head{background:var(--primary-grad-deep);padding:30px 36px 24px;color:#fff;position:relative}
.doc .cover-head::after{content:"";position:absolute;inset:0;background:radial-gradient(420px 180px at 88% -20%,rgba(255,255,255,.28),transparent 70%)}
.doc .cover-brand{display:flex;align-items:center;gap:10px;margin-bottom:18px;position:relative;z-index:1}
.doc .logo{width:34px;height:34px;border-radius:10px;background:rgba(255,255,255,.92);display:flex;align-items:center;justify-content:center;font-size:17px;font-weight:800;color:var(--primary-text);box-shadow:0 4px 14px rgba(0,0,0,.14)}
.doc .brand-name{font-size:15px;font-weight:700;letter-spacing:.5px}
.doc .cover h1{font-size:27px;font-weight:800;letter-spacing:1px;position:relative;z-index:1}
.doc .cover-sub{font-size:13px;opacity:.92;margin-top:7px;position:relative;z-index:1}
.doc .cover-meta{display:flex;flex-wrap:wrap;gap:10px;padding:14px 36px;background:rgba(255,255,255,.7);border-top:1px solid var(--line)}
.doc .meta-chip{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-pill);padding:6px 14px;font-size:12.5px;color:var(--ink-700);display:inline-flex;align-items:center;gap:6px}
.doc .meta-chip b{color:var(--ink-900);font-weight:700}
.doc .meta-chip .dot{width:6px;height:6px;border-radius:50%;background:var(--primary)}

.doc .sec{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-sm);padding:20px 22px;margin-bottom:16px;scroll-margin-top:70px}   /* 批Q4(J1)：30→22，正文宽度 743→约 990 */
.doc .sec-head{display:flex;align-items:center;gap:12px;margin-bottom:18px}
.doc .sec-ico{width:38px;height:38px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:19px;flex:none}
.doc .sec-title{font-size:19px;font-weight:800;letter-spacing:.3px}
.doc .sec-sub{font-size:12.5px;color:var(--ink-500);margin-top:2px;font-weight:400}
.doc .sec-body{line-height:1.75;font-size:14.5px;color:var(--ink-700)}
.doc .sec-body p{margin-bottom:10px}
.doc .sec-body p:last-child{margin-bottom:0}

.doc .badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:var(--r-pill);font-size:11px;font-weight:700;letter-spacing:.3px;white-space:nowrap}
/* deploy26（用户反馈④）：标签行统一左对齐、从左到右排列。
   真因：PDF 预览挂 .v3-app 作用域下（v6 弹窗 portal 带 class="v3-app"），
   裸规则 .v3-app .badge{margin-left:auto}（L2090，为卡片头部徽标靠右而设）同样命中文档内徽标，
   在 flex 行内把剩余空间均分到各徽标左侧 ⇒ 视觉呈「分散对齐 / 不规则分散」。
   此处按 .doc .tag-row 作用域（特异性更高）把 margin-left 归零，不影响卡片头部靠右的徽标。 */
.doc .tag-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;justify-content:flex-start;margin-top:10px}
.doc .tag-row .badge{margin-left:0}
.doc .b-danger{background:var(--danger-soft);color:#C14B3C}
.doc .b-warn{background:var(--warn-soft);color:var(--warn-600)}
.doc .b-ok{background:var(--ok-soft);color:var(--primary-text)}
.doc .b-info{background:var(--info-soft);color:#1E7FB0}
.doc .b-neutral{background:var(--surface-3);color:var(--ink-500)}

.doc table{width:100%;border-collapse:collapse;font-size:13.5px;margin:6px 0 4px}
.doc th{background:var(--surface-3);color:var(--ink-500);font-weight:700;text-align:left;padding:9px 13px;font-size:12.5px;letter-spacing:.4px}
.doc td{padding:10px 13px;border-top:1px solid var(--line);color:var(--ink-700);vertical-align:top}
.doc tr:first-child td{border-top:none}
.doc td:first-child{font-weight:600;color:var(--ink-900)}

.doc .ind-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:6px 0}
.doc .ind-card{border:1px solid var(--line);border-radius:var(--r-md);padding:14px 16px;background:var(--surface);position:relative}
.doc .ind-card .nm{font-size:13px;color:var(--ink-500);font-weight:600;margin-bottom:7px;display:flex;justify-content:space-between;align-items:center;gap:6px}
.doc .ind-card .val{font-family:var(--num);font-size:25px;font-weight:800;letter-spacing:-.5px;line-height:1.1}
.doc .ind-card .unit{font-size:12px;color:var(--ink-500);font-weight:500;margin-left:2px}
.doc .ind-card .ref{font-size:11px;color:var(--ink-400);margin-top:4px}
.doc .ind-card .trend{font-size:11.5px;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line);color:var(--ink-500);line-height:1.6}
.doc .ind-card.dng{border-color:rgba(var(--danger-rgb), .45);background:linear-gradient(180deg,#FFF,#FFF8F7)}
.doc .ind-card.dng .val{color:#E2513F}
.doc .ind-card.wrn{border-color:rgba(var(--warn-rgb), .45);background:linear-gradient(180deg,#FFF,#FFFBF3)}
.doc .ind-card.wrn .val{color:#C98A1F}
.doc .ind-card.ok{border-color:rgba(var(--ok-rgb), .4)}
.doc .ind-card.ok .val{color:var(--primary-text)}

.doc .issue{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:8px}
.doc .issue-card{border:1px solid var(--line);border-radius:var(--r-md);padding:16px 18px;background:var(--surface-2)}
.doc .issue-card .ih{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.doc .issue-card .ih .dot{width:9px;height:9px;border-radius:50%;flex:none;background:var(--ink-400)}
.doc .issue-card .ih .t{font-size:14.5px;font-weight:800}
.doc .issue-card .ih .lv{margin-left:auto}
.doc .issue-card ul{list-style:none}
.doc .issue-card li{font-size:13px;color:var(--ink-700);line-height:1.7;padding-left:15px;position:relative;margin-bottom:5px}
.doc .issue-card li::before{content:"";position:absolute;left:2px;top:9px;width:5px;height:5px;border-radius:50%;background:var(--primary)}
.doc .issue-card li b{color:var(--ink-900)}
.doc .issue-card li:last-child{margin-bottom:0}
.doc .issue-card.lv-dng{border-color:rgba(var(--danger-rgb), .35)}
.doc .issue-card.lv-dng .dot{background:var(--danger)}
.doc .issue-card.lv-wrn{border-color:rgba(var(--warn-rgb), .35)}
.doc .issue-card.lv-wrn .dot{background:var(--warn)}
.doc .issue-card.lv-ok .dot{background:var(--ok)}

.doc .goal-row{display:flex;gap:0;border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;margin-top:8px}
.doc .goal-col{flex:1;padding:15px 18px}
.doc .goal-col+.goal-col{border-left:1px solid var(--line)}
.doc .goal-col .ph{font-size:12px;font-weight:800;letter-spacing:1px;color:var(--ink-400);margin-bottom:8px;display:flex;align-items:center;gap:6px}
.doc .goal-col.core{background:linear-gradient(180deg,rgba(var(--accent-rgb), .08),transparent)}
.doc .goal-col ul{list-style:none}
.doc .goal-col li{font-size:13px;color:var(--ink-700);line-height:1.7;padding-left:14px;position:relative;margin-bottom:6px}
.doc .goal-col li::before{content:"";position:absolute;left:0;top:9px;width:5px;height:5px;border-radius:50%;background:var(--accent)}
.doc .goal-col li:last-child{margin-bottom:0}

.doc .point-core,.doc .point-aux{margin-bottom:6px}
.doc .point-title{font-size:14px;font-weight:800;margin:14px 0 4px;display:flex;align-items:center;gap:8px}
.doc .point-title .ptag{font-size:11px;padding:2px 9px;border-radius:var(--r-pill);font-weight:700;display:inline-flex;align-items:center;gap:4px}
.doc .pt-core{background:var(--accent-grad);color:#fff}
.doc .pt-aux{background:var(--surface-3);color:var(--ink-500)}

.doc .step-num{display:flex;align-items:center;gap:12px;margin:22px 0 12px}
.doc .step-num:first-of-type{margin-top:4px}
.doc .step-badge{width:30px;height:30px;border-radius:9px;background:var(--primary-700);color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:800;flex:none}
.doc .step-num .st{font-size:16px;font-weight:800}
.doc .step-num .sd{font-size:12px;color:var(--ink-500);margin-left:2px;font-weight:400}
.doc .rule-item{display:flex;gap:11px;padding:9px 0;border-bottom:1px dashed var(--line);font-size:13.5px;color:var(--ink-700);align-items:flex-start}
.doc .rule-item:last-child{border-bottom:none}
.doc .rule-item .rk{flex:none;font-weight:800;color:var(--primary-text);width:44px}
.doc .rule-item .rb{line-height:1.7}
.doc .rule-item .rb b{color:var(--ink-900)}
.doc .rule-item .why{color:var(--ink-400);font-size:12.5px}
.doc .exec-tbl td:first-child{white-space:nowrap}

.doc .cause-wrap{border:1px solid var(--line);border-radius:var(--r-md);background:linear-gradient(180deg,#FFF,var(--surface-2));padding:8px;overflow-x:auto;margin-top:4px}
.doc .cause-wrap svg{display:block;margin:0 auto}
/* ═══ 批Q4(J3)：方案页因果图布局适配 ═══
   问题：.pr-causal-g 里的 .cgrid/.cnode 只吃到 .v3-app 的通用规则，列宽与阅读页正文宽度不匹配、
   节点盒与列不同步（真机反馈「排版不协调不适配」）。这里补一组文档域规则（多带一级祖先类，
   稳定压过 .v3-app 的同特异性声明）。
   ⚠️ 批Q4b 修（用户实测反馈「空白太多导致线条不明显，看着很乱」）：
     ① 列间距 16px 太小 ⇒ 同一行的 up→mid 连线只有 15px，视觉上就是个点。
        实测连线段宽 min/中位/max = 15/104/214px（极不均匀）⇒ 列间距放大到 64px，连线才有长度。
     ② down 列 6 个节点 507px，而 up/mid 只有 4 个节点 345px ⇒ 左两列下方 162px 纯空白。
        把 down 列改「紧凑单行」（label 左 / 值右 / 归属+状态右对齐），三列高度拉平。
     ③ 行距与节点内边距收窄，减少节点内部空余。 */
.doc .sec .cause-wrap{padding:12px 14px}
.doc .sec .cause-wrap .cgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px 64px;align-items:start;position:relative;z-index:1}
.doc .sec .cause-wrap .cgroup,.doc .sec .cause-wrap .cgroup.mid{display:flex;flex-direction:column;gap:10px;align-items:stretch;justify-content:flex-start;height:auto;width:100%}
.doc .sec .cause-wrap .cgroup .glabel{text-align:center;font-size:11.5px;font-weight:700;letter-spacing:.5px;margin-bottom:0}
.doc .sec .cause-wrap .cnode{width:100%;max-width:none;min-height:0;max-height:none;padding:8px 11px;text-align:left;align-items:flex-start;justify-content:center}
.doc .sec .cause-wrap .cnode .n-label{font-size:13px;line-height:1.35;white-space:normal;overflow:visible;text-overflow:clip}
.doc .sec .cause-wrap .cnode .n-val{font-size:11px;line-height:1.4;white-space:normal;overflow:visible;text-overflow:clip}
.doc .sec .cause-wrap .cnode .n-dims{margin-top:2px}
/* 下游列：紧凑单行 —— 三列高度拉平（消掉底部的 162px 空白），信息改为横向排布 */
.doc .sec .cause-wrap .cgroup.down{gap:12px}   /* 实测：12px 时右列与左两列等高（22px 会把右列拉散） */
.doc .sec .cause-wrap .cgroup.down .cnode{flex-direction:row;align-items:center;justify-content:space-between;gap:8px;min-height:34px;padding:5px 11px}
.doc .sec .cause-wrap .cgroup.down .cnode .n-label{flex:1;min-width:0;font-size:12.5px;font-weight:600}
.doc .sec .cause-wrap .cgroup.down .cnode .n-val{flex:none;font-size:11.5px;font-weight:600;color:var(--ink-600)}
.doc .sec .cause-wrap .cgroup.down .cnode .n-dims{margin-top:0;flex:none;flex-wrap:nowrap}
.doc .sec .cause-wrap .cgroup.down .cnode .nd-lv{display:none}   /* 「下游」与列标题重复，省掉一列宽度 */
.doc .sec .cause-wrap .cmod-band{grid-column:1/-1}
/* 连线视觉层级（批Q4b）：16 条边若同权重就是一团乱麻。按「最强视觉预算只给最重要的对象」：
   强因果 = 粗实线 + 实心箭头（唯一主体）；弱关联 = 细虚线 + 低不透明度（只作背景关系，不抢读）。 */
.doc .sec .cause-wrap .edge.solid{stroke-width:2.6;opacity:.92}
.doc .sec .cause-wrap .edge.dash{stroke-width:1.3;stroke-dasharray:4 4;opacity:.3}
.doc .sec .cause-wrap .csvg{top:0;left:0}
.doc .legend{display:flex;gap:18px;flex-wrap:wrap;margin:10px 4px 2px;font-size:12px;color:var(--ink-500)}
.doc .legend .lg{display:inline-flex;align-items:center;gap:6px}
.doc .legend .ln{width:22px;height:0}
.doc .ln-strong{border-top:2px solid var(--primary)}
.doc .ln-weak{border-top:2px dashed #B7C4BF}
.doc .ln-vice{border-top:2px dashed #C9CDD1}
.doc .ln-red{border-top:3px solid var(--danger)}

.doc .supp-table td:nth-child(3){font-family:var(--num)}
.doc .supp-tag{display:inline-block;font-size:10px;padding:1px 7px;border-radius:var(--r-pill);margin-left:6px;font-weight:700;vertical-align:middle}
.doc .supp-tag.rx{background:var(--warn-soft);color:var(--warn-600)}
.doc .supp-tag.dir{background:var(--ok-soft);color:var(--primary-text)}
.doc .supp-caution{color:#C14B3C}
.doc .supp-footnote{font-size:11.5px;color:var(--ink-400);margin-top:8px;line-height:1.7}

.doc .guard{border-left:4px solid var(--danger);background:var(--danger-soft);border-radius:0 var(--r-md) var(--r-md) 0;padding:13px 16px;margin-bottom:9px;font-size:13.5px;color:var(--ink-700);line-height:1.7}
.doc .guard b{color:#C14B3C}
.doc .guard .gw{display:block;color:var(--ink-400);font-size:12.5px;margin-top:2px}
.doc .guard.info{border-left-color:var(--info);background:var(--info-soft)}
.doc .guard.info b{color:#1E7FB0}
/* 明确禁用：多条并列 → 双列紧凑网格（原单列堆叠占版面过大） */
/* 明确禁用：单列堆叠（双列会让「一行文字」与「两行文字」的卡片高度不齐、模块下沿参差） */
.doc .guard-list .guard{margin-bottom:8px;padding:11px 15px;font-size:13px;line-height:1.6;border-left-width:3px}
.doc .guard-list .guard:last-child{margin-bottom:0}
.doc .guard-list .guard .gw-ph{font-size:12px;margin-top:2px}
/* ❌ 提为固定图标列 → 标题折行后仍与首行同一轴线对齐 */
.doc .guard.has-ico{display:flex;gap:8px;align-items:flex-start}
.doc .guard .gi{flex:none;width:14px;font-size:12px;font-weight:900;color:var(--danger);line-height:1.6}
.doc .guard.has-ico .gtx{flex:1;min-width:0}
.doc .herb{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:6px}
.doc .herb-card{border:1px solid rgba(var(--primary-rgb), .3);background:var(--primary-grad-soft);border-radius:var(--r-md);padding:11px 15px;font-size:13px;color:var(--ink-700);line-height:1.6}
.doc .herb-card b{color:var(--primary-text)}
.doc .herb-card .gw{display:block;color:var(--ink-400);font-size:12px;margin-top:3px}
.doc .herb-card .gw::before{content:"⬚ ";font-size:10px}
.doc .herb-card .gw-ph{display:block;color:var(--ink-400);font-size:12px;margin-top:3px}

.doc .stage-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.doc .stage-card{border:1px solid var(--line);border-radius:var(--r-md);padding:16px 18px}
.doc .stage-card .sh{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.doc .stage-card .sh .ph{font-size:12px;font-weight:800;letter-spacing:.5px;padding:3px 10px;border-radius:var(--r-pill)}
.doc .stage-card .sh .tt{font-size:14px;font-weight:800}
.doc .stage-card.s1 .ph{background:var(--info-soft);color:#1E7FB0}
.doc .stage-card.s2 .ph{background:var(--ok-soft);color:var(--primary-text)}
.doc .stage-card.s3 .ph{background:var(--warn-soft);color:var(--warn-600)}
.doc .stage-card ul{list-style:none}
.doc .stage-card li{font-size:13px;color:var(--ink-700);line-height:1.7;padding-left:15px;position:relative;margin-bottom:6px}
.doc .stage-card li::before{content:"";position:absolute;left:1px;top:9px;width:5px;height:5px;border-radius:50%;background:var(--primary)}
.doc .stage-card li b{color:var(--ink-900)}
.doc .stage-card li:last-child{margin-bottom:0}
.doc .stage-card .fc{font-size:11.5px;color:var(--ink-400);border-top:1px dashed var(--line);margin-top:8px;padding-top:6px;line-height:1.6}
.doc .stage-card .fc b{color:#C14B3C}
.doc .stage-lead{font-size:12px;color:var(--ink-500);margin-bottom:6px;font-weight:600}

.doc .tl{list-style:none;margin-top:6px}
.doc .tl li{display:flex;gap:14px;padding:9px 0;border-bottom:1px dashed var(--line);align-items:flex-start}
.doc .tl li:last-child{border-bottom:none}
.doc .tl .t-tag{flex:none;width:76px;font-family:var(--num);font-size:12.5px;font-weight:800;color:var(--primary-text);background:var(--primary-grad-soft);border-radius:var(--r-pill);padding:4px 0;text-align:center;margin-top:2px}
.doc .tl .t-tx{font-size:13.5px;color:var(--ink-700);line-height:1.7}

.doc .footer{text-align:center;font-size:12px;color:var(--ink-400);line-height:1.9;padding:8px 20px 2px}
.doc .footer .bar{width:44px;height:3px;border-radius:2px;background:var(--primary-grad);margin:0 auto 14px}

/* ═══════════ 6. 执行物层：A/B 分界 + B 侧（食谱版）三段 ═══════════ */
.doc .exec-divider{display:flex;align-items:center;gap:12px;margin:32px 0 20px;color:var(--ink-500);font-size:12px;font-weight:800;letter-spacing:.6px}
.doc .exec-divider::before,.doc .exec-divider::after{content:"";height:1px;background:var(--line);flex:1}
.doc .exec-divider span{padding:5px 15px;border:1px solid var(--line);border-radius:var(--r-pill);background:var(--surface-2);white-space:nowrap}

/* B① 7 日菜单 */
.doc .menu-head{font-size:13px;font-weight:800;color:var(--primary-text);background:var(--primary-grad-soft);border-radius:var(--r-md);padding:9px 15px;margin-bottom:12px}
.doc .tbl-scroll{overflow-x:auto}
.doc .menu-tbl{width:100%;min-width:660px;border-collapse:collapse;font-size:12.5px;table-layout:fixed}
.doc .menu-tbl th{background:var(--surface-2);border:1px solid var(--line);padding:8px 9px;font-size:11.5px;color:var(--ink-500);font-weight:800;letter-spacing:.3px}
.doc .menu-tbl td{border:1px solid var(--line);padding:9px;vertical-align:top}
.doc .menu-day{text-align:center;font-weight:800;color:var(--ink-700);background:var(--surface-2);white-space:nowrap}
.doc .menu-alt{background:#FFFBF2}
.doc .menu-alt .menu-day{background:var(--warn-soft);color:#8A5E0E}
.doc .menu-alt-tag{display:block;font-size:10px;font-weight:700;color:#8A5E0E;margin-top:3px}
.doc .menu-dish{font-weight:700;color:var(--ink-900);line-height:1.5}
.doc .menu-portion{color:var(--primary-text);font-size:11.5px;margin-top:3px;line-height:1.5}
.doc .menu-method{color:var(--ink-400);font-size:11px;margin-top:3px;line-height:1.5}
.doc .menu-cell.empty{background:#FAFAFA}
.doc .menu-constraints{margin-top:10px;font-size:11.5px;color:var(--ink-500);background:var(--surface-2);border-left:3px solid var(--primary);border-radius:6px;padding:9px 14px;line-height:1.7}

/* 批A-1d: 日合计供能比环图（P/F/C donut） */
.doc .menu-total .pfc-line{display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px;vertical-align:middle}
.doc .pfc-ring-box{display:inline-flex;align-items:center}
.doc .pfc-ring-svg{display:block;flex:none}
.doc .pfc-ring-legend{display:inline-flex;align-items:center;gap:5px;margin-left:10px;font-size:11px;color:#64748B;white-space:nowrap}
.doc .pfc-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:2px}

/* ═══ 批B: 7日菜单卡（日卡布局 + 周总览吸顶 + 行内编辑 + 替换面板）═══ */
/* 周总览条：sticky 吸顶（滚动容器 .pr-main；chip 不换行不截断 → 7 列 + 窄屏 4 列换行） */
/* 批N(N-2/N-3)：恢复拍板稿（批B v4 / 批I 稿）与线上原版口径 —— 1 行 7 天；
   并去掉 sticky 冻结（用户：不需要下滑冻结，一直冻到浏览完才上去是不对的）。
   ⚠️ 批L 曾把「7天食谱没有呈现四宫格2行的要求」误读为「没做到四宫格2行」→ 改成 4 列；此处回退。 */
.doc .week-strip{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;background:#fff;border-radius:var(--r-md);padding:10px 10px 9px;box-shadow:0 6px 18px rgba(36,80,64,.10);margin-bottom:6px}
.doc .day-chip{border:1px solid var(--line);border-radius:var(--r-md);padding:8px 4px 7px;text-align:center;cursor:pointer;background:#FBFDFC;transition:all 140ms;min-width:0;min-height:66px;overflow:hidden;position:relative;z-index:0;isolation:isolate}
.doc .day-chip:hover{border-color:var(--primary)}
.doc .day-chip.active{border-color:var(--primary);background:#F0F8F4}
.doc .day-chip .d{font-size:12px;font-weight:600;color:var(--ink-900);letter-spacing:.5px}
.doc .day-chip .k{font-size:12.5px;font-weight:500;margin-top:2px;color:var(--ink-900);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.doc .day-chip .st{font-size:11px;margin-top:2px;line-height:1.25}
.doc .st-ok{color:#3E9B7C}.doc .st-warn{color:var(--warn)}.doc .st-danger{color:var(--danger)}
.doc .strip-legend{font-size:11.5px;color:var(--ink-400);margin:2px 0 16px;line-height:1.7}
/* 日卡：左轨 + 四餐右区 */
.doc .day-card{border:1px solid var(--line);border-radius:16px;overflow:hidden;margin-bottom:14px;background:#fff}
/* 批N(N-4)：日卡改「顶部横条 + 下方四餐」单列布局 —— 用户口径：把左轨那个大数字（kcal + 环图 + 图例）
   从左侧竖栏改成卡片顶部横条。 */
.doc .day-grid{display:grid;grid-template-columns:1fr}
/* ═══ 批Q2 日卡顶部横条：左四行信息板 + 右环图（选择器统一加 .day-card 前缀，保证覆盖旧规则）═══ */
.doc .day-card .day-rail{background:#F6FAF8;border-bottom:1px solid var(--line);padding:10px 14px;display:flex;flex-direction:row;flex-wrap:nowrap;align-items:stretch;gap:14px}
.doc .day-card .rail-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px;justify-content:space-between}
.doc .day-card .rail-line{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px}
.doc .day-card .rail-day{font-size:12px;color:var(--ink-400);letter-spacing:1.5px;font-weight:600}
.doc .day-card .rail-day .menu-alt-tag{display:inline-block;letter-spacing:normal;margin-left:6px;margin-top:0}
.doc .day-card .rail-kcal{font-size:23px;font-weight:600;line-height:1.15;color:var(--ink-900)}
.doc .day-card .rail-kcal small{font-size:11.5px;font-weight:400;color:var(--ink-400);margin-left:2px}
.doc .day-card .rail-band{font-size:11.5px;font-weight:400;border-radius:999px;padding:2px 10px}
.doc .day-card .rail-band-sub{font-size:11px;color:var(--ink-400)}
.doc .day-card .b-ok{color:#3E9B7C;background:#E9F5EF}.doc .day-card .b-warn{color:var(--warn);background:#FBF3E4}.doc .day-card .b-danger{color:var(--danger);background:#FDEEEC}
.doc .day-card .rail-legend{display:flex;flex-direction:row;flex-wrap:wrap;gap:4px 14px;width:auto;margin-top:0}
.doc .day-card .lg-row{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--ink-500)}
.doc .day-card .lg-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.doc .day-card .lg-row b{color:var(--ink-900);font-weight:500;margin-left:0}
.doc .day-card .rail-side{flex:none;margin-left:auto;display:flex;align-items:center}
.doc .day-card .rail-ring{margin:0;display:flex;align-items:center}
.doc .day-card .rail-ring svg{display:block}
.doc .day-card .rail-ring .pfc-ring-legend{display:none}
.doc .day-card .rail-status{display:flex;flex-wrap:wrap;gap:5px 14px;font-size:11.5px;color:var(--ink-400);border-top:1px solid #EAF1ED;padding-top:6px}
/* 能量达成区间条 */
.doc .day-card .eq-wrap{display:flex;align-items:center;gap:9px;font-size:11.5px;color:var(--ink-400)}
.doc .day-card .eq-track{position:relative;flex:none;width:230px;height:8px;border-radius:5px;background:#E9F0EC}
.doc .day-card .eq-band{position:absolute;top:0;bottom:0;background:#CFE9DE;border-radius:5px}
.doc .day-card .eq-dot{position:absolute;top:-3px;width:3px;height:14px;border-radius:2px;background:var(--primary-700);transform:translateX(-1.5px)}
.doc .day-card .eq-num{font-variant-numeric:tabular-nums}
/* ═══ 批Q2 四餐卡片化（方案 A：零新色相，餐次头浅薄荷横条 + 右角本餐 kcal）═══ */
.doc .day-card .meals{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:12px}
.doc .day-card .meal-col{padding:0 12px 10px;border:1px solid var(--line);border-radius:12px;min-width:0;position:relative;background:#fff}
.doc .day-card .meals .meal-col:nth-child(2n){border-right:1px solid var(--line)}
.doc .day-card .meals .meal-col:nth-child(-n+2){border-bottom:1px solid var(--line)}
.doc .day-card .meal-col:last-child{border-right:1px solid var(--line)}
.doc .day-card .meal-head{display:flex;align-items:center;gap:8px;background:#F1F8F4;border-bottom:1px solid var(--line);border-radius:11px 11px 0 0;padding:7px 12px;margin:0 -12px 9px}
.doc .day-card .meal-name{font-size:12px;font-weight:600;color:var(--primary-text);letter-spacing:1px;margin-bottom:0}
.doc .day-card .meal-kcal{margin-left:auto;font-size:11.5px;color:var(--ink-400);font-variant-numeric:tabular-nums}
/* ═══ 批Q2 补剂区（方案 C）：一行一项 + 依据气泡 ═══ */
.doc .supp-exp-btn{margin:0;font-size:11.5px;padding:1px 9px;border:1px solid #B9E3D5;border-radius:999px;background:#F7FCFA;color:var(--primary-text);cursor:pointer;font-family:inherit;line-height:1.7;white-space:nowrap}
.doc .supp-exp-btn:hover{background:#EFF7F3}
.doc .supp-basis-pop{position:absolute;left:8px;right:8px;top:calc(100% - 2px);z-index:40;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(23,46,38,.12);padding:9px 12px;font-size:12px;line-height:1.65;color:var(--ink-600);text-align:left}
.doc .pr-supp-tbl tr[data-suppr] td:last-child{padding-right:34px}
/* ═══ 批Q3(I2)：补剂表列宽重配 —— 让「补充项 / 参考剂量 / 禁忌」各自在一行内读完 ═══
   原 24/20/30/26 四列等宽，把「Omega-3 脂肪酸（EPA+DHA）」挤成两行、类别标签掉到第三行。
   新配比：名称 30% / 剂量 14% / 依据 12% / 禁忌 44%，并对名称与剂量加 nowrap。 */
.doc .pr-supp-tbl{table-layout:fixed}
.doc .pr-supp-tbl td.supp-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.doc .pr-supp-tbl td.supp-dose{white-space:nowrap}
.doc .pr-supp-tbl td.supp-name .supp-tag{vertical-align:middle}
.doc .pr-supp-tbl td.supp-note{white-space:nowrap}
.doc .pr-supp-tbl td:last-child{white-space:normal}
.doc .pr-supp-tbl tr[data-suppr] td{vertical-align:middle;padding-top:10px;padding-bottom:10px}
/* ═══ 批Q2 配平留痕条 ═══ */
.doc .menu-amdr-note{margin:8px 0 4px;font-size:12px;color:var(--primary-text);background:var(--info-soft);border-radius:var(--r-md);padding:8px 14px;line-height:1.7}
.doc .menu-caliber-note{margin:8px 0 4px;font-size:11.5px;color:#7A8A82;background:#F6F8F7;border-radius:var(--r-md);padding:8px 14px;line-height:1.75}
/* ═══ 批Q3(I6)：方案文档里的因果图是「静态文档」，不是探索工具 —— 全部节点正常显色，不用灰色未点亮态 ═══ */
.doc .cause-wrap .cnode{opacity:1;filter:none}
.doc .cause-wrap .cnode .n-label,.doc .cause-wrap .cnode .n-val{opacity:1;color:var(--ink-800)}
.doc .cause-wrap .cnode.up{border-color:#CFE9DE;background:#F6FBF9}
.doc .cause-wrap .cnode.mid{border-color:#FFE0C7;background:#FFFCF8}
.doc .cause-wrap .cnode.down{border-color:#D8E4F5;background:#F8FBFF}
.doc .meals{display:grid;grid-template-columns:1fr 1fr}   /* 批L: 四餐改「四宫格 2 行」（2×2） */
/* 批N(N-2)：批M 的「铺满滚动区 + 12 列栅格」随 sticky 一并作废 —— 周条已 1 行 7 天且不冻结，
   回到原版的圆角卡片形态（不再负 margin 通栏、不再需要 92px 偏移）。 */
.doc .day-card{scroll-margin-top:16px}
/* 批Q2(B6)：四餐卡片化 —— 边框由「单元格分割线」改为「卡片外框」，餐次边界靠卡片间隙表达 */
.doc .meal-col{padding:0 12px 10px;border:1px solid var(--line);border-radius:12px;min-width:0;position:relative}
.doc .meal-name{font-size:12px;font-weight:500;color:var(--ink-400);margin-bottom:10px;letter-spacing:1px}
.doc .dish{padding:2px 0 10px;margin-bottom:10px;border-bottom:1px solid #F0F6F2}
.doc .dish:last-child{border-bottom:none;margin-bottom:0;padding-bottom:2px}
.doc .dish-name{font-size:14px;font-weight:500;line-height:1.5;color:var(--ink-900)}
.doc .dish-items{margin-top:5px}
.doc .dish-item{display:flex;align-items:center;gap:8px;padding:2.5px 9px 2.5px 11px;border-radius:6px;position:relative;font-size:13px;color:var(--ink-500);line-height:1.7;flex-wrap:wrap}
.doc .dish-item .menu-it-n{color:var(--ink-700)}
.doc .in.can-swap{cursor:pointer;border-bottom:1px dashed #C9DDD3;padding-bottom:1px;transition:color 140ms}
.doc .in.can-swap:hover{color:var(--primary)}
/* 批N(N-6)：食材名就地改名输入框 + 行尾替换按钮 */
.doc .mitem-input{width:104px;font-size:13px;padding:1px 6px;border:1px solid var(--primary);border-radius:6px;outline:none;font-family:inherit}
.doc .it-swap{margin-left:auto;border:none;background:transparent;color:var(--ink-400);cursor:pointer;font-size:12px;line-height:1;padding:2px 4px;border-radius:5px}
.doc .it-swap:hover{color:var(--primary);background:#EFF7F3}
/* 批Q4(J6)：配料 / 调味标记 */
.doc .cond-tag{font-size:10.5px;color:#7C8C85;background:#F1F5F2;border:1px solid #E2EBE6;border-radius:4px;padding:0 5px;margin-left:5px;white-space:nowrap;line-height:1.6}
.doc .dish-item .mcal{min-width:58px;text-align:right}
.doc .dish-item .mcal:not(.manual){color:var(--ink-500)}
.doc .igg-tag{font-size:10.5px;font-weight:500;color:var(--warn);background:#FBF3E4;border-radius:4px;padding:0 5px;margin-left:2px;flex-shrink:0;line-height:1.6}
.doc .rename-tag{font-size:11px;font-weight:400;color:var(--warn);background:#FBF3E4;border-radius:4px;padding:1px 7px;margin-left:6px;vertical-align:1px;white-space:nowrap}
.doc .dish-kcal{font-size:12px;color:var(--ink-400);margin-top:6px;padding-left:11px}
.doc .dish-kcal b{color:var(--ink-700);font-weight:500}
/* 可编辑份数：全卡唯一强调色 #3FB89B，专属「可编辑份数/可替换食材」动作 */
.doc .mqty{color:var(--primary);font-weight:500;cursor:pointer;padding:0 3px;border-radius:4px;transition:background 140ms;white-space:nowrap;flex-shrink:0}
.doc .mqty:hover{background:rgba(var(--primary-rgb), .13)}
.doc .mqty.editing{background:rgba(var(--primary-rgb), .18)}
.doc .mqty input{width:46px;font-size:13px;color:var(--primary);border:none;outline:none;background:transparent;border-bottom:1px solid var(--primary);text-align:center;font-family:inherit;font-weight:500}
/* 底部合计行 + P/F/C % 徽章 */
/* 批E4: row-gap 防 wrap 后行间重叠；sum-sep 在 wrap 后会孤立成竖线，移除改用 gap 分隔 */
.doc .day-sum{display:flex;align-items:center;gap:8px 14px;row-gap:6px;border-top:1px solid var(--line);padding:11px 18px;font-size:13px;flex-wrap:wrap;background:#FBFDFC}
.doc .day-sum .sum-kcal{font-weight:500;font-size:13.5px;color:var(--ink-900)}
.doc .day-sum .sum-sep{display:none}
.doc .sum-item{display:flex;align-items:center;gap:6px;color:var(--ink-500);white-space:nowrap}
.doc .sum-item b{color:var(--ink-900);font-weight:500}
.doc .sum-item .pp{font-size:12px;font-weight:500}
.doc .pp-p{color:#1FA37F}.doc .pp-f{color:#F2A43C}.doc .pp-c{color:#5B9EE8}   /* 批I: 数据色与界面色分离（禁界面薄荷绿 --primary） */
.doc .sum-flag{margin-left:auto;font-size:12px;font-weight:400}
/* 批I: 能量判定第二行（拿什么比）+ 热量人工修订标记（凡不是算出来的数，一眼看出是人定的） */
.doc .rail-band-sub{font-size:11px;color:var(--ink-400);line-height:1.5;margin-top:2px;text-align:left}   /* 批N(N-4) 横排后左对齐 */
.doc .mcal{color:var(--ink-400);font-size:12px;cursor:pointer;border-bottom:1px dashed #D8E3DC;padding:0 2px;white-space:nowrap;flex-shrink:0;border-radius:4px;transition:background 140ms,color 140ms}
.doc .mcal:hover{color:var(--primary);background:rgba(var(--primary-rgb), .10)}
.doc .mcal.manual{color:#B4762A;border-bottom-color:#E8CDA6}
.doc .mcal-tag{font-style:normal;font-size:10px;font-weight:500;color:#B4762A;background:#FBF3E4;border-radius:3px;padding:0 4px;margin-left:3px}
.doc .mcal input{width:58px;font-size:12px;color:#B4762A;border:none;outline:none;background:transparent;border-bottom:1px solid #B4762A;text-align:center;font-family:inherit}
.doc .sum-manual{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:#B4762A;background:#FBF3E4;border-radius:999px;padding:1px 9px}
.doc .sum-manual .sum-reset{cursor:pointer;font-weight:600;padding:0 3px;border-radius:4px;transition:background 140ms}
.doc .sum-manual .sum-reset:hover{background:rgba(180,118,42,.16)}
/* 批I-2: 菜为中心（每道菜一块 + 添加新菜 + 编辑）+ 份量待定黄标 + 菜表格弹窗 */
.doc .dish{position:relative}
.doc .dish-empty{color:var(--ink-400);font-size:13px;padding:2px 0 6px}
.doc .dish-cat{display:inline-block;font-size:10px;line-height:1;padding:3px 7px;border-radius:20px;margin-right:6px;vertical-align:1px}
      .dish-cat.cat-staple{background:#F5EFDD;color:#B07A2A}
      .dish-cat.cat-meat{background:#FBEFE7;color:#C0662F}
      .dish-cat.cat-veg{background:#EAF3EE;color:#3E9B7C}
      .dish-cat.cat-other{background:#EEF2F0;color:#7C8F86}
      .dish-del{position:absolute;top:0;right:22px;width:18px;height:18px;line-height:15px;text-align:center;border:1px solid var(--line-200, #E3EDE7);border-radius:4px;background:#fff;color:#C77E6C;cursor:pointer;font-size:10px;padding:0}
      .dish-del:hover{background:#FBEFE7}
      .dish-edit{position:absolute;top:0;right:0;width:18px;height:18px;line-height:16px;text-align:center;border:1px solid var(--line);background:#fff;border-radius:5px;color:var(--ink-400);font-size:11px;cursor:pointer;opacity:0;transition:opacity 140ms}
.doc .dish:hover .dish-edit{opacity:1}
.doc .dish-edit:hover{border-color:var(--primary);color:var(--primary)}
.doc .dish-add{display:block;width:100%;margin-top:2px;padding:5px 0;border:1px dashed #C9DDD3;border-radius:8px;background:#FBFDFC;color:var(--primary);font-size:12px;cursor:pointer;transition:all 140ms}
/* 批Y9：草稿态（编辑未保存）中性标 + 菜谱元信息行 —— 刻意不用红黄绿，避免"未保存的草稿"被读成"系统算错" */
.doc .st-draft{color:#5B7A6C;background:#EEF5F1;border:1px solid #C9DDD3;border-radius:6px;padding:1px 6px;font-size:11px}
.doc .st-draft-diff{color:#8A94A6;font-size:11px;margin-top:2px}
.doc .day-chip.is-draft{background:#FAFCFB;border-style:dashed}
.doc .rail-band.b-draft{color:#5B7A6C;background:#EEF5F1;border:1px solid #C9DDD3}
.doc .sum-flag.st-draft{color:#5B7A6C;background:#EEF5F1;border:1px solid #C9DDD3}
.doc .dish-meta{display:flex;flex-wrap:wrap;gap:8px;margin:2px 0 4px;font-size:11px;color:#5B7A6C}
.doc .dish-meta span{background:var(--bg-app);border:1px solid #DCEAE3;border-radius:4px;padding:0 6px}
/* ═══ 批Y10(G/H)：图标尺寸 + A版执行细节三层结构 ═══ */
.doc .sec-ico svg.ic-svg{width:30px;height:30px;display:block}
.doc .m-ico svg.ic-svg{width:34px;height:34px;display:block;margin:0 auto}
.doc .rk-ico{width:16px;height:16px;display:inline-block;vertical-align:-3px;margin-right:2px}
.doc .rk.rk-hasico{display:flex;align-items:center;gap:4px;flex-direction:column;align-items:flex-start}
.doc .rk.rk-hasico svg.rk-ico{width:20px;height:20px;margin:0 0 2px}
.doc .rk-tx{font-weight:700}
/* 三层①每日能量框架 */
.doc .ef-band{margin:8px 0;padding:10px 14px;background:var(--primary-grad-soft,var(#EAF6F1));border:1px solid #CBE7DC;border-radius:10px;font-size:14px}
.doc .ef-table{width:100%;border-collapse:collapse;font-size:13.5px;margin:4px 0 6px}
.doc .ef-table th{background:var(--bg-app);color:var(--ink-700);font-weight:700;padding:7px 12px;text-align:left;border-bottom:1px solid var(--line)}
.doc .ef-table td{padding:8px 12px;border-bottom:1px dashed var(--line)}
.doc .ef-table td.ef-meal{font-weight:700;width:20%}
.doc .ef-note{font-size:12px;color:var(--ink-500);margin-top:6px;line-height:1.6}
/* 三层②每餐结构量化：4 列网格吃满宽度（排版修复主项——内容从窄列改为网格铺满容器） */
.doc .ms-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:8px 0 4px}
.doc .ms-card{background:#FBFDFC;border:1px solid #DCEAE3;border-radius:12px;padding:10px 12px}
.doc .ms-card .ms-h{font-weight:800;font-size:13.5px;margin-bottom:6px;color:var(--primary-text)}
.doc .ms-line{display:flex;align-items:baseline;flex-wrap:wrap;gap:3px;font-size:12.5px;color:var(--ink-700);padding:2px 0;line-height:1.5}
.doc .ms-line b{color:var(--ink-900)}
.doc .ms-sub{color:var(--ink-500);font-size:11.5px}
@media (max-width:900px){ .doc .ms-grid{grid-template-columns:repeat(2,1fr)} }
@media (max-width:560px){ .doc .ms-grid{grid-template-columns:1fr} }
/* 排版压缩（P2）：量具/结构卡间距收紧，rule-item 行高微调 */
/* 批Y10.1(K)：饮食五律/生活四律双列网格（排版修复——短行内容铺满容器宽） */
.doc .rules-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 18px;margin:6px 0}
/* 批Y10.4(R5)：规则行改「标题一行 + 说明缩进换行」块状——修复「精制糖绝对禁止」窄列竖排（真机截图） */
.doc .rule-item{display:flex;gap:10px;align-items:flex-start}
.doc .rule-item>.rk{white-space:nowrap;flex-shrink:0;max-width:46%}
.doc .rule-item>.rk .rk-tx,.doc .rule-item>.rk{word-break:keep-all;overflow-wrap:normal}
.doc .rule-item>.rb{flex:1;min-width:0}
@media (max-width:760px){ .doc .rules-grid{grid-template-columns:1fr} }
.doc .measure-grid{gap:8px}
.doc .measure-card{padding:8px 6px}
.doc .dish-add:hover{border-color:var(--primary);background:#F2FAF6}
.doc .menu-it-unc.tbd{color:#B4762A;background:#FBF3E4}
.doc .menu-it-unc.est{color:#2A7D6B;background:#EAF7F2}   /* 批M追加: 按类别估重（已计入合计，但非量出） */
.doc .sum-est{font-size:11.5px;color:#2A7D6B;background:#EAF7F2;border:1px solid #CCE8DE;border-radius:999px;padding:2px 9px}   /* 批M追加 */
.dh-head{display:grid;grid-template-columns:1fr 74px 86px 26px;gap:6px;font-size:11px;color:var(--ink-400);margin:12px 0 4px;padding:0 2px}
.dh-head .dh-h-kcal{text-align:right}
.dh-rows{display:flex;flex-direction:column;gap:6px}
.dh-row{display:grid;grid-template-columns:1fr 62px 12px 86px 26px;gap:6px;align-items:center}
.dh-row input{width:100%;min-width:0;padding:6px 8px;border:1px solid var(--line);border-radius:8px;font-size:13px;font-family:inherit;outline:none}
.dh-row input:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(var(--primary-rgb), .12)}
.dh-row .dh-i-u{font-size:12px;color:var(--ink-400)}
.dh-row .dh-i-kcal{font-size:12px;color:var(--ink-500);text-align:right;white-space:nowrap}
.dh-row .dh-i-del{border:none;background:transparent;color:var(--ink-400);font-size:15px;cursor:pointer;border-radius:6px}
.dh-row .dh-i-del:hover{color:var(--danger);background:#FDEEEC}
.dh-name{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:8px;font-size:13.5px;font-family:inherit;outline:none}
.dh-name:focus{border-color:var(--primary);box-shadow:0 0 0 2px rgba(var(--primary-rgb), .12)}
.dh-addrow{margin-top:8px;padding:6px 12px;border:1px dashed #C9DDD3;border-radius:8px;background:#FBFDFC;color:var(--primary);font-size:12px;cursor:pointer}
.dh-addrow:hover{background:#F2FAF6}
.dh-sum{margin-top:12px;font-size:13px;color:var(--ink-500);display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}
.dh-sum b{font-size:17px;color:var(--ink-900)}
.dh-sum .dh-hint{font-size:11px;color:var(--ink-400)}
.dh-foot{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}
.dh-foot button{padding:7px 16px;border-radius:9px;font-size:13px;cursor:pointer;border:1px solid var(--line);background:#fff;color:var(--ink-600)}
.dh-foot .dh-save{background: var(--primary-text);border-color: var(--primary-text);color:#fff;font-weight:500}
/* 替换候选：成分库现算标记 */
.mcr-cand .c-src{font-style:normal;font-size:10px;color:var(--primary);background:#E9F5EF;border-radius:3px;padding:0 4px;margin-left:4px}
/* 整餐编辑（✎）在日卡上的落位 */
.doc .meal-col .menu-edit-btn{position:absolute;top:10px;right:10px}
.doc .meal-col .menu-edit-form{display:flex;flex-direction:column;gap:6px;margin-top:2px;position:relative}
.doc .meal-col .menu-edit-form .menu-edit-btn{position:absolute;top:0;right:0}
.doc .meal-col .menu-edit-row{display:flex;align-items:center;gap:6px}
.doc .meal-col .menu-edit-row .menu-edit-input{flex:1;min-width:0}
/* 替换食材面板（fixed 遮罩，作用域外层） */
.mcr-mask{position:fixed;inset:0;background:rgba(36,50,48,.32);z-index:10050;display:flex;align-items:center;justify-content:center;animation:mcrFade 140ms}
@keyframes mcrFade{from{opacity:0}to{opacity:1}}
.mcr-panel{background:#fff;border-radius:16px;box-shadow:0 12px 48px rgba(36,80,64,.18);width:min(440px,92vw);max-height:80vh;overflow:auto;padding:20px 22px}
.mcr-panel h4{font-size:15px;font-weight:600;margin-bottom:2px;color:var(--ink-900)}
.mcr-sub{font-size:12px;color:var(--ink-400);margin-bottom:12px;line-height:1.6}
.mcr-cur{font-size:12.5px;color:var(--ink-500);background:#F6FAF8;border-radius:8px;padding:8px 12px;margin-bottom:12px;line-height:1.7}
.mcr-cand{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:12px;margin-bottom:8px;cursor:pointer;transition:all 140ms;background:#fff}
.mcr-cand:hover{border-color:var(--primary);background:#F7FBF9}
.mcr-cand.off{cursor:not-allowed;background:#FAFAF9;border-color:var(--line);opacity:.62}
.mcr-cand.off:hover{border-color:var(--line);background:#FAFAF9}
.mcr-cand .c-name{font-size:13.5px;font-weight:500;color:var(--ink-900);flex-shrink:0}
.mcr-cand .c-gram{font-size:12px;color:var(--ink-500);flex:1;text-align:right}
.mcr-cand .c-kcal{font-size:12px;color:var(--ink-400);flex-shrink:0}
.mcr-cand .c-tag{font-size:10.5px;font-weight:500;color:var(--warn);background:#FBF3E4;border-radius:4px;padding:0 5px;flex-shrink:0;white-space:nowrap}
.mcr-cand .c-off{font-size:10.5px;color:var(--ink-400);flex-shrink:0;white-space:nowrap}
.mcr-note{font-size:11px;color:var(--ink-400);line-height:1.7;margin-top:10px}
/* 批F(F4): 自选食材检索区 + 待核对徽章 */
.mcr-custom{border-top:1px dashed var(--line);margin-top:12px;padding-top:12px}
.mcr-custom .mcr-c-title{font-size:12px;font-weight:500;color:var(--ink-700);margin-bottom:8px}
.mcr-custom .mcr-c-row{display:flex;gap:8px;align-items:center}
.mcr-custom .mcr-c-row .form-input{flex:1;min-width:0;height:30px;font-size:12.5px;padding:0 9px}
.mcr-custom .mcr-c-row input[type="number"]{flex:0 0 74px}
.mcr-custom .mcr-c-hint{font-size:11px;color:var(--ink-400);margin-top:7px;line-height:1.6}
/* 批S(S7)：运动建议卡 —— 复用既有卡片语汇（网格 + 弱记号），
   刻意**不给实线框/发光**：视觉预算只给全页唯一对象，运动是并列段之一，用清单表达即可。 */
.doc .mv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px}
.doc .mv-cell{background:var(--surface-2);border-radius:var(--r-md);padding:11px 13px}
.doc .mv-k{font-size:11.5px;color:var(--ink-400);margin-bottom:4px}
.doc .mv-v{font-size:13.5px;font-weight:500;color:var(--ink-900);line-height:1.5}
.doc .mv-ok{font-style:normal;font-size:10.5px;color:#3E9B7C;margin-left:7px}
.doc .mv-no{font-style:normal;font-size:10.5px;color:var(--warn);margin-left:7px}
.doc .mv-prog{font-size:11.5px;color:var(--ink-500);margin-top:11px;line-height:1.7}
.doc .mv-note{font-size:11.5px;color:var(--ink-500);margin-top:8px;line-height:1.7;
  padding-left:9px;border-left:2px solid var(--primary, #3FB89B)}
.doc .mv-note + .menu-caliber-note{margin-top:8px}
/* 批S(S6-2)：替换留痕标（食材行内"替换自 X"）—— 弱记号，不抢主视觉 */
.doc .menu-it-rp{font-size:10.5px;color:var(--ink-400);background:var(--surface-3);
  border-radius:3px;padding:0 4px;margin-left:4px}
/* 批G(G6/G8): 份量单位后缀 + 当前食材营养卡 + 候选换算预览 */
.mcr-custom .g-inp{position:relative;display:inline-flex;align-items:center;flex:0 0 84px}
.mcr-custom .g-inp input{flex:1;min-width:0;height:30px;font-size:12.5px;padding:0 22px 0 9px}
.mcr-custom .g-inp i{position:absolute;right:8px;font-style:normal;font-size:11.5px;color:var(--ink-400);pointer-events:none}
.mcr-cand .c-nut{font-size:11px;color:var(--ink-400);flex-shrink:0;white-space:nowrap}
.mcr-nut-card{border:1px solid #D9EFE8;background:#F4FBF8;border-radius:12px;padding:10px 12px;margin-bottom:12px}
.mcr-nut-card .mcr-nc-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:8px}
.mcr-nut-card .mcr-nc-head b{font-size:13px;color:var(--ink-900)}
.mcr-nut-card .mcr-nc-g{font-size:11.5px;color:var(--ink-500);white-space:nowrap}
.mcr-nut-card .mcr-nc-grid{display:flex;gap:0;border-top:1px solid #D9EFE8;border-bottom:1px solid #D9EFE8;padding:6px 0;margin-bottom:7px}
.mcr-nut-card .mcr-nc-cell{flex:1;text-align:center}
.mcr-nut-card .mcr-nc-cell b{display:block;font-size:14px;color:var(--ink-900);font-weight:600}
.mcr-nut-card .mcr-nc-cell b small{font-size:10px;font-weight:400;color:var(--ink-400);margin-left:1px}
.mcr-nut-card .mcr-nc-cell i{font-style:normal;font-size:10.5px;color:var(--ink-400)}
.mcr-nut-card .mcr-nc-empty{font-size:11.5px;color:#B4741F;padding:6px 0}
.mcr-nut-card .mcr-nc-per{font-size:11px;color:var(--ink-500);line-height:1.6;margin-bottom:4px}
.mcr-nut-card .mcr-nc-src{font-size:10.5px;color:var(--ink-400)}
.mcr-nut-card .mcr-nc-src .mcr-nc-pend{color:#B4741F;font-weight:500}
.doc .sum-pend{font-size:11.5px;color:#B4741F;background:#FFF7E8;border:1px solid #F2E2C4;border-radius:999px;padding:2px 9px}
.menu-it-unc.pend{color:#B4741F;background:#FFF7E8;border-color:#F2E2C4}
.mcr-close{float:right;font-size:12px;color:var(--ink-400);cursor:pointer;border:1px solid var(--line);border-radius:999px;padding:3px 12px;background:#fff;margin-left:10px}
.mcr-empty{font-size:13px;color:var(--ink-400);text-align:center;padding:18px 0}
.mcr-panel .c-gram b{font-weight:600;color:var(--ink-900)}
/* 批B: 整餐编辑表单（日卡内嵌版：标题 + 4 行食材） */
.doc .meal-col .menu-edit-title{font-size:12px;font-weight:600;color:var(--ink-700);letter-spacing:.5px}
.doc .meal-col .menu-edit-items{display:flex;flex-direction:column;gap:4px;border-top:1px dashed var(--line);padding-top:7px;margin-top:2px}
.doc .meal-col .menu-edit-item-row{display:flex;gap:5px}
.doc .meal-col .menu-edit-input.sm{font-size:12px;padding:4px 6px;flex:1;min-width:0}
/* 窄屏：四餐纵向堆叠（§0-4 单卡不做横向滚动） */
/* 批E4: 900~1200px 中屏四列过挤 → 两列；≤560px 单列 */
@media (max-width:1200px) and (min-width:901px){
  .doc .meals{grid-template-columns:1fr 1fr}
  .doc .meal-col:nth-child(2n){border-right:1px solid var(--line)}
  .doc .meal-col:nth-child(-n+2){border-bottom:1px solid var(--line)}
}
@media (max-width:900px){
  .doc .day-grid{grid-template-columns:1fr}
  .doc .day-rail{flex-direction:row;flex-wrap:wrap;justify-content:flex-start;border-right:none;border-bottom:1px solid var(--line);gap:10px}
  .doc .rail-legend{width:auto;flex-direction:row;gap:12px}
  .doc .meals{grid-template-columns:1fr 1fr}
  .doc .meal-col:nth-child(2n){border-right:1px solid var(--line)}
  .doc .meal-col:nth-child(-n+2){border-bottom:1px solid var(--line)}
  .doc .week-strip{grid-template-columns:repeat(4,1fr)}
}
@media (max-width:560px){
  .doc .meals{grid-template-columns:1fr}
  .doc .meal-col{border-right:1px solid var(--line)}
  .doc .meal-col:not(:last-child){border-bottom:1px solid var(--line)}
  .doc .week-strip{grid-template-columns:repeat(4,1fr)}
}

/* 批B(§7): 资料编辑·规避清单录入器 */
.avoid-editor .av-row{display:flex;align-items:center;gap:8px;padding:5px 10px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px;font-size:12.5px}
.avoid-editor .av-type{flex-shrink:0;color:var(--primary-text);font-weight:500;background:var(--primary-soft);border-radius:4px;padding:1px 7px}
.avoid-editor .av-item{color:var(--ink-900);font-weight:500}
.avoid-editor .av-level{flex-shrink:0;color:var(--warn);font-size:11.5px}
.avoid-editor .av-src{flex-shrink:0;color:var(--ink-400);font-size:11px;margin-left:auto}
.avoid-editor .av-del{flex-shrink:0;color:var(--danger);cursor:pointer;font-size:11.5px;padding:1px 6px}
.avoid-editor .av-add{display:flex;align-items:center;gap:7px;margin-top:7px}

/* 批C: 配餐校验卡（DRIs 对照） */
.doc .mstd-tabs{display:flex;gap:6px;flex-wrap:wrap;margin:10px 0 12px}
.doc .mstd-tab{border:1px solid var(--line);background:#fff;border-radius:999px;font-size:12px;color:var(--ink-500);padding:4px 12px;cursor:pointer;transition:all 140ms}
.doc .mstd-tab:hover{border-color:var(--primary);color:var(--primary)}
.doc .mstd-tab.on{background: var(--primary-text);border-color: var(--primary-text);color:#fff;font-weight:500}
.doc .mstd-panel{display:none}
.doc .mstd-panel.on{display:block;animation:mcrFade 260ms}
.doc .mstd-grid{display:flex;gap:22px;align-items:flex-start}
.doc .mstd-left{flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:6px;min-width:150px}
.doc .mstd-left .kr{width:96px;height:96px}
.doc .mstd-kcal{font-size:12.5px;color:var(--ink-500)}
.doc .mstd-kcal b{font-size:19px;font-weight:600;color:var(--ink-900)}
.doc .mstd-band{font-size:11px;color:var(--ink-400)}
.doc .mstd-right{flex:1;min-width:0}
.doc .mstd-right-title{font-size:12px;font-weight:600;color:var(--ink-700);letter-spacing:.5px;margin-bottom:8px}
.doc .mstd-bar{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.doc .mstd-bar-name{width:34px;flex-shrink:0;font-size:12.5px;color:var(--ink-700)}
.doc .mstd-bar-track{flex:1;position:relative;height:14px;background:#F2F6F4;border-radius:7px}
.doc .mstd-bar-range{position:absolute;top:0;bottom:0;background:rgba(var(--ok-rgb), .38);border-radius:7px}
.doc .mstd-bar-pin{position:absolute;top:-3px;bottom:-3px;width:3px;background:var(--primary);border-radius:2px;transform:translateX(-50%)}
.doc .mstd-bar-pin.bad{background:var(--danger)}
.doc .mstd-bar-val{width:64px;flex-shrink:0;font-size:12px;color:var(--ink-500);text-align:right}
.doc .mstd-bar-val.bad{color:var(--danger);font-weight:500}
.doc .mstd-flags{display:flex;gap:6px;flex-wrap:wrap;margin-top:4px}
.doc .mstd-flag{font-size:11.5px;color:var(--ink-400);border:1px solid var(--line);border-radius:6px;padding:2px 8px}
.doc .mstd-flag.warn{color:#8A6D1F;background:#FBF3E4;border-color:#EAD9AE}
.doc .mstd-warnlist{margin-top:10px;border-top:1px dashed var(--line);padding-top:8px}
.doc .mstd-wi{font-size:12px;color:#8A6D1F;line-height:1.7}
.doc .mstd-hardflag{background:#FDEEEC;border:1px solid #F5C6BE;color:#B4382A;font-size:12.5px;border-radius:8px;padding:7px 12px;margin-bottom:10px}
/* 批F(F5): 能量校验未达标降级条（重新生成/接受留痕） */
.mstd-degbar{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:space-between;border:1px solid #F5C6BE;background:#FDEEEC;border-radius:10px;padding:10px 14px;margin-bottom:10px}
.mstd-deg-txt{font-size:12.5px;color:#B4382A;line-height:1.6;flex:1;min-width:220px}
.mstd-deg-btns{display:flex;gap:8px;flex:none}
.doc .mstd-mini{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.doc .mstd-mini-chip{font-size:11.5px;color:var(--ink-500);background:#F2F6F4;border-radius:6px;padding:2px 8px}
@media (max-width:900px){
  .doc .mstd-grid{flex-direction:column;align-items:stretch}
  .doc .mstd-left{flex-direction:row;justify-content:flex-start}
}
.avoid-editor .av-add .form-select{width:110px;flex-shrink:0}
.avoid-editor .av-add-btn{flex-shrink:0;color:var(--primary);font-weight:500;cursor:pointer;font-size:12.5px;padding:5px 12px;border:1px dashed var(--primary);border-radius:8px;transition:background 140ms}
.avoid-editor .av-add-btn:hover{background:rgba(var(--primary-rgb), .10)}
/* 🔴 2026-10-21 规避清单交互（用户实测：名称为空点"添加"只弹 1~2 秒 toast，看不到 ⇒ 以为按钮坏了）
   新增三个类，**不覆盖** .av-add-btn 的基础定义（A55/A56：同选择器后定义会覆盖前定义） */
.avoid-editor .av-add-disabled{color:#B4B2A9;border-color:#D8D6CF;background:#F7F7F5;cursor:not-allowed}
.avoid-editor .av-add-disabled:hover{background:#F7F7F5}
.avoid-editor .av-hint{margin-top:6px;font-size:12px;color:var(--ink-400);line-height:1.5}
.avoid-editor .av-hint-err{color:#B4382A;font-weight:500}
.avoid-editor #v6avItem.av-err{border-color:#E24B4A;box-shadow:0 0 0 2px rgba(226,75,74,.12)}

/* 批D(§5): 干预思路卡 */
.ipc-card{background:#fff;border:1px solid var(--line);border-radius:var(--r-lg, 16px);padding:15px 18px;margin-bottom:12px;box-shadow:0 1px 3px rgba(23,46,38,.04)}
.ipc-loading{font-size:13px;color:var(--ink-500);text-align:center;padding:16px 0}
.ipc-head{display:flex;align-items:baseline;gap:10px;margin-bottom:10px;flex-wrap:wrap}
.ipc-t{font-size:14.5px;font-weight:700;color:var(--ink-800)}
.ipc-sub{font-size:12px;color:var(--ink-400)}
.ipc-badge{font-size:11.5px;border-radius:6px;padding:2px 8px;background:var(--info-soft);color:var(--primary-text)}
.ipc-badge.err{background:#FDEEEC;color:#B4382A}
.ipc-badge.off{background:#F0F1F0;color:var(--ink-400)}
/* 批F(F2): 教学优先级徽章 + 个人化说明 + 理由改写 */
.ipc-badge.pri.first{background:#FDEEEC;color:#B4382A}
.ipc-badge.pri.focus{background:#FBF3E2;color:#9A6B15}
.ipc-badge.pri.parallel{background:#EAF1FD;color:#2C5FB8}
.ipc-personal{font-size:12px;color:var(--ink-300);margin-top:3px;line-height:1.5}
/* 批Y10.5(I1): 干预卡展开详细说明 */
.ipc-detail-wrap{margin-top:6px}
.ipc-detail-toggle{font-size:11.5px;color:var(--primary);cursor:pointer;user-select:none}
.ipc-detail{margin-top:6px;padding:10px 12px;background:var(--bg-app, #F2F8F4);border-radius:10px;display:flex;flex-direction:column;gap:8px}
.ipc-dsec{display:flex;flex-direction:column;gap:2px}
.ipc-dk{font-size:11.5px;font-weight:600;color:var(--primary)}
.ipc-dv{font-size:12.5px;color:var(--ink-700);line-height:1.65}
.ipc-op.r-edit{margin-left:8px;font-size:11px;color:var(--primary);opacity:.75}
.ipc-op.r-edit:hover{opacity:1}
.ipc-err{font-size:13px;color:#B4382A;background:#FDEEEC;border-radius:8px;padding:9px 13px;margin-bottom:10px;line-height:1.6}
.ipc-k{flex-shrink:0;font-size:12px;font-weight:700;color:var(--ink-500);width:34px}
.ipc-chief{display:flex;align-items:flex-start;gap:8px;font-size:13px;color:var(--ink-800);background:#F7FAF8;border:1px solid var(--line);border-radius:var(--r-md, 12px);padding:9px 13px;line-height:1.6}
.ipc-chief .ipc-v{flex:1}
.ipc-chief.empty .ipc-v{color:#8A6D1F}
.ipc-sig-row{display:flex;align-items:flex-start;gap:8px;margin-top:9px;flex-wrap:wrap}
/* 大迭代(B) 风险信号硬门控提示条：置顶、硬信号红底、待溯源项琥珀底 */
.ipc-risk{margin:10px 0 2px;border:1px solid #E0B7A8;background:#FFF6F1;border-radius:var(--r-md, 12px);padding:9px 12px;line-height:1.6}
.ipc-risk.soft{border-color:#E3CE9A;background:#FFFBF2}
.ipc-risk-t{font-size:13px;font-weight:600;color:#B4431F}
.ipc-risk.soft .ipc-risk-t{color:#8A6D1F}
.ipc-risk-list{margin-top:6px;display:flex;flex-direction:column;gap:5px}
.ipc-risk-i{font-size:12.5px;color:var(--ink-800);display:flex;gap:8px;align-items:baseline}
.ipc-risk-n{font-weight:600;white-space:nowrap}
.ipc-risk-a{color:#6B625C;flex:1}
.ipc-sup{margin:12px 0 2px;border:1px solid #DDD5C6;background:#FFFCF6;border-radius:var(--r-md, 12px);padding:9px 12px}
.ipc-sup-i{display:flex;gap:8px;align-items:baseline;font-size:12.5px;line-height:1.65;padding:2px 0}
.ipc-sup-n{font-weight:600;color:var(--ink-900);white-space:nowrap}
.ipc-sup-n.off{color:#8A93A0;text-decoration:line-through}
.ipc-sup-d{color:#3A7C68;white-space:nowrap;font-size:12px}
.ipc-sup-a{color:#6B625C;flex:1}
.ipc-gap{margin:12px 0 2px;border:1px solid #D5E0DC;background:#F7FBF9;border-radius:var(--r-md, 12px);padding:9px 12px}
.ipc-gap-blk{display:flex;gap:8px;align-items:baseline;font-size:12.5px;line-height:1.7}
.ipc-gap-l{color:var(--ink-800);flex:1}
.ipc-note-err{margin:12px 0 2px;font-size:12px;color:var(--warn-text)}
.ipc-refs{display:flex;gap:6px;flex-wrap:wrap;margin-top:7px}
.ipc-ref{font-size:11.5px;color:var(--ink-500);background:#F2F6F4;border:1px solid var(--line);border-radius:6px;padding:2px 9px}
.ipc-ref-lab{color:#8A5A16;background:#FFF7E8;border-color:#F2E2C4}   /* 批G-G9: 体检异常指标线索徽章 */
.ipc-sec-t{font-size:12px;font-weight:800;color:var(--primary-text);margin:13px 0 8px;letter-spacing:.3px}
.ipc-targets{display:flex;flex-direction:column;gap:7px}
.ipc-target{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-700);line-height:1.6}
.ipc-dot{flex-shrink:0;width:6px;height:6px;border-radius:50%;background:var(--primary)}
.ipc-tv{flex:1}
.ipc-edit{flex:1;height:30px;font-size:13px;padding:4px 10px}
.ipc-op{flex-shrink:0;font-size:12px;color:var(--ink-400);cursor:pointer;padding:2px 7px;border-radius:6px;transition:all 140ms;user-select:none}
.ipc-op:hover{background:#F2F6F4;color:var(--ink-700)}
.ipc-op.danger:hover{background:#FDEEEC;color:#B4382A}
.ipc-op.restore:hover{background:var(--info-soft);color:var(--primary-text)}
.ipc-ops{margin-left:auto;display:flex;gap:2px;flex-shrink:0}
.ipc-steps{display:flex;flex-direction:column;gap:8px}
.ipc-step{border:1px solid var(--line);border-radius:var(--r-md, 12px);padding:10px 13px;background:#fff;cursor:grab;transition:border-color 140ms,box-shadow 140ms}
.ipc-step:hover{border-color:#BFE3D6;box-shadow:0 2px 6px rgba(23,46,38,.05)}
.ipc-step.off{background:#FAFAFA;cursor:default;opacity:.72}
.ipc-step.off:hover{border-color:var(--line);box-shadow:none}
.ipc-step-row{display:flex;align-items:center;gap:9px}
.ipc-no{flex-shrink:0;width:20px;height:20px;border-radius:50%;background:var(--info-soft);color:var(--primary-text);font-size:11.5px;font-weight:700;display:flex;align-items:center;justify-content:center}
.ipc-step.off .ipc-no{background:#F0F1F0;color:var(--ink-400)}
.ipc-name{font-size:13.5px;font-weight:600;color:var(--ink-800)}
.ipc-point{font-size:12.5px;color:var(--ink-700);margin-top:6px;line-height:1.65}
.ipc-reason{font-size:12px;color:var(--ink-400);margin-top:4px;line-height:1.6}
.ipc-meta{margin-top:12px;font-size:12px;color:var(--ink-400);border-top:1px dashed var(--line);padding-top:9px}
.ipc-summary{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:var(--r-md, 12px);padding:10px 15px;margin-bottom:12px;cursor:pointer;flex-wrap:wrap;transition:border-color 140ms}
.ipc-summary:hover{border-color:#BFE3D6}
.ipc-summary.open{align-items:flex-start}
.ipc-summary.open .ipc-sum-a{margin-left:auto}
.ipc-sum-t{font-size:13px;font-weight:600;color:var(--ink-700)}
.ipc-sum-a{font-size:12px;color:var(--ink-400);margin-left:auto;flex-shrink:0}
.ipc-summary .ipc-mini{width:100%;font-size:12px;color:var(--ink-500);line-height:1.8;padding-left:10px;border-left:2px solid var(--info-soft);margin-top:6px}
.ipc-summary .ipc-mini.off{text-decoration:line-through;color:var(--ink-400)}
.ipc-summary .btn-row{width:100%;margin-top:8px}
.ipc-summary .ipc-mini + .btn-row{margin-top:8px}

/* 段间引导条 */
.doc .note-band{margin-top:13px;font-size:12.5px;color:var(--primary-text);background:var(--info-soft);border-radius:var(--r-md);padding:10px 15px;line-height:1.7}

/* B② 循环互换 */
.doc .swap-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(186px,1fr));gap:11px}
.doc .swap-col{border:1px solid var(--line);border-radius:var(--r-md);padding:12px 15px;background:#fff}
.doc .swap-title{font-size:12px;font-weight:800;color:var(--primary-text);margin-bottom:7px;letter-spacing:.3px}
.doc .swap-col ul{margin:0;padding-left:17px}
.doc .swap-col li{font-size:12.5px;color:var(--ink-700);line-height:1.9}

/* B③ 采购单 */
.doc .shop-head{font-size:13px;font-weight:800;color:var(--ink-700);margin-bottom:12px}
.doc .shop-grid{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:11px;align-items:start}
.doc .shop-col{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;background:#fff}
.doc .shop-title{font-size:12px;font-weight:800;padding:9px 14px;background:var(--surface-2);color:var(--ink-700);border-bottom:1px solid var(--line)}
.doc .shop-title.danger{background:var(--danger-soft);color:#C14B3C}
.doc .shop-tbl{width:100%;border-collapse:collapse;font-size:12px}
.doc .shop-tbl td{padding:7px 14px;border-bottom:1px solid #F0F2F1;color:var(--ink-700)}
.doc .shop-tbl tr:last-child td{border-bottom:none}
.doc .shop-qty{text-align:right;color:var(--ink-500);white-space:nowrap}
.doc .shop-list{margin:0;padding:10px 14px 10px 31px}
.doc .shop-list li{font-size:12px;line-height:1.95;color:var(--ink-700)}
.doc .shop-list.danger li{color:#C14B3C}

/* 目录分组分隔 */
.rs-toc-divider{height:1px;background:var(--line);margin:9px 4px}
@media(max-width:900px){ .doc .shop-grid{grid-template-columns:1fr} }
.doc .flag{background:var(--warn-soft);border:1px dashed rgba(var(--warn-rgb), .5);border-radius:var(--r-md);padding:10px 16px;font-size:12.5px;color:var(--warn-600);margin-top:14px;line-height:1.7}
.doc .exec-tip{background:var(--info-soft);border:1px dashed rgba(90,200,250,.55);border-radius:var(--r-md);padding:10px 16px;font-size:12.5px;color:#1E7FB0;line-height:1.7;margin-bottom:14px}

.doc .v3-banner{display:flex;align-items:center;gap:10px;background:var(--ink-900);color:#fff;border-radius:var(--r-md);padding:12px 18px;margin:4px 0 16px;font-size:13px;font-weight:700}
.doc .v3-banner .bt{background:var(--primary);border-radius:var(--r-pill);padding:2px 10px;font-size:11px;font-weight:800;flex:none}
.doc .print-sec{background:linear-gradient(180deg,#fff,#F4FAF7);border:1.5px dashed rgba(var(--primary-rgb), .4)}
.doc .kitchen{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.doc .kcard{border-radius:var(--r-md);padding:14px 18px;font-size:13.5px}
.doc .kcard .kh{font-size:13.5px;font-weight:800;margin-bottom:8px;letter-spacing:.4px;display:flex;align-items:center;gap:7px}
.doc .kcard ul{list-style:none}
.doc .kcard li{line-height:1.75;padding-left:18px;position:relative;margin-bottom:5px;color:var(--ink-700)}
.doc .kcard li b{color:var(--ink-900)}
.doc .k-red{background:#FFF3F1;border:1px solid rgba(var(--danger-rgb), .4)}
.doc .k-red .kh{color:#C14B3C}
.doc .k-red li::before{content:"✕";position:absolute;left:0;font-weight:800;color:var(--danger)}
.doc .k-green{background:var(--ok-soft);border:1px solid rgba(var(--ok-rgb), .45)}
.doc .k-green .kh{color:var(--primary-text)}
.doc .k-green li::before{content:"✓";position:absolute;left:0;font-weight:800;color:var(--primary-text)}
.doc .measure-anchor{grid-column:1/-1;border-top:1px dashed var(--line);padding-top:12px;margin-top:2px}
.doc .measure-anchor .ma-t{font-size:12px;font-weight:800;color:var(--ink-500);margin-bottom:6px;letter-spacing:.4px}
.doc .measure-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:8px 0 4px}
.doc .measure-card{border:1px solid var(--line);border-radius:var(--r-md);padding:11px 14px;background:var(--surface-2);text-align:center}
.doc .measure-card .m-ico{font-size:22px;line-height:1.2}
.doc .measure-card .m-name{font-size:13px;font-weight:800;color:var(--ink-900);margin:4px 0 2px}
.doc .measure-card .m-val{font-family:var(--num);font-size:15px;font-weight:800;color:var(--primary-text)}
.doc .measure-card .m-use{font-size:11px;color:var(--ink-500);line-height:1.5;margin-top:3px}
.doc .focus-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:4px}
.doc .focus-card{border-radius:var(--r-md);padding:13px 15px;border:1px solid var(--line);background:var(--surface)}
.doc .focus-card .fw{font-size:11.5px;font-weight:800;color:var(--primary-text);display:flex;align-items:center;gap:6px;margin-bottom:7px}
.doc .focus-card .fw .badge{background:var(--primary-700);color:#fff}
.doc .focus-card ol{margin-left:16px}
.doc .focus-card li{font-size:12.5px;color:var(--ink-700);line-height:1.65;margin-bottom:4px}
.doc .focus-card .fc{font-size:11px;color:var(--ink-400);border-top:1px dashed var(--line);margin-top:7px;padding-top:6px;line-height:1.5}
.doc .focus-card.f1{border-top:3px solid var(--info)}
.doc .focus-card.f2{border-top:3px solid var(--primary)}
.doc .focus-card.f3{border-top:3px solid var(--accent)}
.doc .checklist{border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;margin-top:4px}
.doc .chk-row{display:flex;gap:10px;align-items:center;padding:8px 14px;border-bottom:1px dashed var(--line);font-size:13px;color:var(--ink-700)}
.doc .chk-row:last-child{border-bottom:none}
.doc .chk-box{color:var(--ink-400);font-size:14px}
.doc .chk-ph{padding:8px 14px;background:var(--surface-2);font-size:11.5px;color:var(--ink-500);border-top:1px solid var(--line)}

.doc .monthbar{display:flex;align-items:center;gap:0;margin:38px 0 6px;position:relative}
.doc .mb-seg{flex:1;height:10px}
.doc .mb-0,.doc .mb-1{background:var(--info)}
.doc .mb-2{background:var(--primary)}
.doc .mb-seg.end{border-radius:0 5px 5px 0}
.doc .mb-pin{position:absolute;top:-34px;transform:translateX(-50%);font-size:11px;font-weight:800;color:var(--ink-700);text-align:center;white-space:nowrap;line-height:1.35}
.doc .mb-pin .mb-d{font-family:var(--num);color:var(--primary-text);font-size:12px}
.doc .mb-pin .mb-l{font-weight:500;color:var(--ink-400);font-size:10px}
.doc .mb-pin.pin-med,.doc .mb-pin.pin-med .mb-d{color:#C14B3C}


/* ═══════ 【deploy21 外壳激活】阅读器/PDF 复用线上壳，仅换正文 ─══════
   原则：外层弹窗结构与按钮语义全部沿用线上（.plan-reader/.pr-actions），
        只把 .pr-main 的正文换成新文档体系（.doc），并把目录换成双组结构。 */
/* ① 正文容器：内容区底色用浅色 tint，白色卡片浮起（三层色彩层级） */
.pr-main{background:var(--bg-app)}
/* 批Q3(I3)：收窄阅读页左右留白，把宽度让给方案主体（原 32px 左右内边距太宽，
   加上四餐区内边距后正文被压窄，用户红圈标出的就是这条空白带）。 */
.pr-main .doc{max-width:none;margin:0;padding:14px 12px 20px;background:transparent}   /* 批Q4(J1)：18→12，正文再让出 12px */
.pr-main .doc .day-card .meals{padding:8px 10px}
.mcr-panel,.dh-panel{max-width:min(760px,95vw)}
/* ② 形态切换 Tab：选中态＝ink-500 浅灰 + 白字（薄荷雾纪律，同原型 .rs-form） */
.pr-tab.active{background:var(--ink-500);color:#fff;box-shadow:none}
.pr-tab.active:hover{background:var(--ink-500)}
/* ③ 目录选中态：柔和主色底 + 主色字（同原型 .rs-toc-item.active） */
.pr-toc .pr-toc-item.active{background:var(--primary-grad-soft);color:var(--primary-text);border-left-color:transparent;border-radius:8px;font-weight:700}
/* ④ 新体系菜单单元格：保留线上 hover 编辑按钮的热区（.menu-edit-btn 全局 opacity:0→hover:1） */
.doc .menu-cell{position:relative}
.doc .menu-tbl td.menu-cell{padding:9px 24px 9px 9px}
.doc .menu-cell .menu-edit-btn{top:5px;right:5px}
/* ⑤ PDF 详情页：根节点仍是线上 .pdf-container（PDF 引擎按此选择器取画布），
     内层换成同一套 .doc；纸面底色承托白卡，字号随新体系 14.5px（用户拍板） */
.pdf-container.pdf-doc-page{background:var(--bg-app);font-size:14.5px}
.pdf-container.pdf-doc-page .doc{max-width:none;margin:0;padding:0;background:transparent}
.pdf-container.pdf-doc-page .doc .sec{box-shadow:none}
/* 预览态（弹窗内）：限制到 720px 阅读宽度，与打印同为 12mm 10mm 页边距 */
#v6PdfPreview .doc{max-width:none;margin:0;padding:0;background:transparent}
#v6PdfPreview .doc .sec{box-shadow:none}
/* ═══════ 【deploy21 新文档体系 · 结束】 ═══════ */

/* ═══════ 【deploy22 · PDF 修复①】PDF 导出容器设计作用域镜像 ─══════
   背景：#pdf-export-container 挂在 document.body 下，不在 .v3-app 作用域内，
        而 .v3-app 上有全部设计 token 与 884 条作用域规则 ⇒ 因果图组件
        （cnode/cgrid/cgroup/edge/solid/mid/glabel/n-label/n-val/causal-wrap/csvg）
        在 PDF 里样式全失效：节点退化为裸文本堆叠、.csvg 失去绝对定位，
        画面表现为「因果图区域一片空白 + 文本竖排 + 图例孤立」。
   做法：把命中因果图族白名单的 .v3-app 规则，前缀改写为 #pdf-export-container，
        保留原 @media 包裹（媒体查询按 viewport 判定，与阅读器一致）。
        未采用「给容器加 .v3-app 类」：实测会因同名类互相污染把文档总高压掉 54%。
   生成：.workbuddy/tmp/build/mk_pdf_scope_css.mjs（幂等，可重放）
   共 69 条规则。 */
  #pdf-export-container .legend .lgline{width:30px;height:0;border-top:2.5px solid var(--primary)}
  #pdf-export-container .legend .lgline.dash{border-top:1.5px dotted #B9BEC7}
  #pdf-export-container .legend .lgline.loop{border-top:2.2px dashed var(--loop)}
  #pdf-export-container .legend .lgline.flow{border-top:2.6px solid var(--primary);background:repeating-linear-gradient(90deg,var(--primary) 0 6px,transparent 6px 10px)}
  #pdf-export-container .cgrid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:22px 28px;position:relative;align-items:center;min-height:150px;z-index:1}
  #pdf-export-container .cgroup{display:flex;flex-direction:column;gap:10px;align-items:center;justify-content:center;height:100%;position:relative;z-index:2}
  #pdf-export-container .cgroup.mid{display:grid;grid-template-columns:1fr 1fr;gap:10px;align-content:center;align-items:center;width:100%}
  #pdf-export-container .cgroup .glabel{text-align:center;font-size:11px;font-weight:600;margin-bottom:4px}
  #pdf-export-container .cgroup.up .glabel{color:var(--lvl-up)}
  #pdf-export-container .cgroup.mid .glabel{color:var(--lvl-mid)}
  #pdf-export-container .cgroup.down .glabel{color:var(--lvl-down)}
  #pdf-export-container .cnode{width:220px;min-height:48px;max-height:64px;padding:8px 12px;border-radius:var(--r-md);text-align:center;cursor:pointer;transition:var(--t-norm);border:3px solid var(--line-strong);background:var(--surface);box-shadow:0 1px 2px rgba(20,48,43,.05);display:flex;flex-direction:column;justify-content:center;overflow:hidden}
  #pdf-export-container .cnode:hover{transform:translateY(-1px);box-shadow:0 2px 6px rgba(20,48,43,.08)}
  #pdf-export-container .cnode.up{border-color:var(--lvl-up);background:rgba(124,92,214,.08)}
  #pdf-export-container .cnode.mid{border-color:var(--lvl-mid);background:rgba(217,142,43,.08)}
  #pdf-export-container .cnode.down{border-color:var(--lvl-down);background:rgba(47,168,220,.08)}
  #pdf-export-container .cnode .n-label{font-size:14px;font-weight:600;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #pdf-export-container .cnode .n-val{font-size:11px;font-weight:400;color:var(--ink-500);margin-top:2px;font-family:var(--num);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  #pdf-export-container .cnode.active{border-width:3px;transform:translateY(-1px);font-weight:600}
  #pdf-export-container .cnode.up.active{border-color:var(--lvl-up);box-shadow:0 0 0 3px rgba(124,92,214,.22),0 0 0 6px rgba(124,92,214,.08)}
  #pdf-export-container .cnode.mid.active{border-color:var(--lvl-mid);box-shadow:0 0 0 3px rgba(217,142,43,.22),0 0 0 6px rgba(217,142,43,.08)}
  #pdf-export-container .cnode.down.active{border-color:var(--lvl-down);box-shadow:0 0 0 3px rgba(47,168,220,.22),0 0 0 6px rgba(47,168,220,.08)}
  #pdf-export-container .cnode.dim{opacity:.25}
  #pdf-export-container .cnode.dim:hover{opacity:.62}
  #pdf-export-container .causal-wrap{position:relative}
  #pdf-export-container .csvg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0;overflow:visible}
  #pdf-export-container .edge{fill:none;stroke-linecap:round;transition:stroke-width .25s,opacity .25s}
  #pdf-export-container .edge.solid{stroke:var(--primary);stroke-width:2.6;opacity:.85}
  #pdf-export-container .edge.dash{stroke:#B9BEC7;stroke-width:1.6;stroke-dasharray:1.5 5;stroke-linecap:round;opacity:.9}
  #pdf-export-container .edge.loop{stroke:var(--loop);stroke-width:2.4;stroke-dasharray:9 6;stroke-linecap:round;opacity:.95}
  #pdf-export-container .edge.hi{stroke-width:3.4;opacity:1;filter:drop-shadow(0 0 4px rgba(var(--primary-rgb), .45))}
  #pdf-export-container .edge.hi.solid{stroke:var(--primary);filter:drop-shadow(0 0 5px rgba(var(--primary-rgb), .55))}
  #pdf-export-container .edge.hi.dash{stroke:var(--ink-700);filter:drop-shadow(0 0 3px rgba(58,58,60,.35))}
  #pdf-export-container .edge.hi.loop{stroke:var(--loop);filter:drop-shadow(0 0 6px rgba(214,69,69,.6))}
  #pdf-export-container .edge.dim{opacity:.06}
  #pdf-export-container .edge.hi.loop,#pdf-export-container .edge.hi.solid,#pdf-export-container .edge.hi.dash{animation:flowDash .9s linear infinite}
  #pdf-export-container .loop-knot{filter:drop-shadow(0 1px 4px rgba(214,69,69,.45));pointer-events:none}
  #pdf-export-container .loop-knot-ic{pointer-events:none}
  #pdf-export-container .cnode.lit-up{border-color:var(--lvl-up);box-shadow:0 0 0 2px rgba(124,92,214,.14);transform:translateY(-1px)}
  #pdf-export-container .cnode.lit-mid{border-color:var(--lvl-mid);box-shadow:0 0 0 2px rgba(217,142,43,.14);transform:translateY(-1px)}
  #pdf-export-container .cnode.lit-down{border-color:var(--lvl-down);box-shadow:0 0 0 2px rgba(47,168,220,.14);transform:translateY(-1px)}
  /* 🔴 批V2-16：与 .v3-app 同口径，PDF 导出须一致，否则打印件丢失弱关联区分 */
  #pdf-export-container .cnode.lit-weak{border-style:dashed !important;box-shadow:none !important;transform:none !important;opacity:.92}
  #pdf-export-container .cnode.lit-weak::before{opacity:.4 !important}
  #pdf-export-container .cgrid .cnode{width:100%;min-width:0;max-width:220px}
  #pdf-export-container .cgrid .crow-titles{grid-column:1 / -1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 18px;margin-bottom:-4px}
  #pdf-export-container .cgrid .cgroup{justify-content:flex-start;height:auto}
  #pdf-export-container .cgrid .cnode.active{border-width:3px}
  #pdf-export-container .cgroup.down.compact{gap:7px}
  #pdf-export-container .cgroup.down.compact .cnode{width:100%;min-width:0;min-height:0;height:34px;max-height:34px;padding:4px 11px;flex-direction:row;align-items:center;justify-content:space-between;gap:8px;text-align:left}
  #pdf-export-container .cgroup.down.compact .cnode .n-label{font-size:12.5px;font-weight:600;flex:1;min-width:0}
  #pdf-export-container .cgroup.down.compact .cnode .n-val{font-size:12px;margin-top:0;color:var(--ink-400);flex:none}
  #pdf-export-container .cgrid .cnode:hover{box-shadow:var(--sh-md);transform:translateY(-2px)}
  #pdf-export-container .cgrid .cnode .n-label{font-size:14.5px;font-weight:500;color:var(--ink-700)}
  #pdf-export-container .cgrid .cnode .n-val{font-size:10.5px;color:var(--ink-400);font-weight:500}
  #pdf-export-container .cgrid .cnode.active .n-label{font-weight:600;color:var(--ink-900)}
  #pdf-export-container .cgrid .cnode.lit-up,#pdf-export-container .cgrid .cnode.lit-mid{border:1.5px solid var(--primary);box-shadow:var(--sh-md);transform:translateY(-1px)}
  #pdf-export-container .cgrid .cnode.lit-down{border:1.5px solid var(--accent);box-shadow:var(--sh-md);transform:translateY(-1px)}
  #pdf-export-container .cgrid .cnode.lit-up .n-label,#pdf-export-container .cgrid .cnode.lit-mid .n-label,#pdf-export-container .cgrid .cnode.lit-down .n-label{font-weight:600;color:var(--ink-900)}
  #pdf-export-container .cgrid .cnode.lit-up::before,#pdf-export-container .cgrid .cnode.lit-mid::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;background:var(--primary);border-radius:0 3px 3px 0}
  #pdf-export-container .cgrid .cnode.lit-down::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:4px;background:var(--accent);border-radius:0 3px 3px 0}
  #pdf-export-container .edge.solid.e-um{stroke:var(--primary)}
  #pdf-export-container .edge.solid.e-md{stroke:var(--accent)}
  #pdf-export-container .edge.dash.e-um{stroke:var(--primary)}
  #pdf-export-container .edge.dash.e-md{stroke:var(--accent)}
  #pdf-export-container .edge.hi.solid.e-um{stroke:var(--primary);filter:drop-shadow(0 0 5px rgba(var(--primary-rgb), .55))}
  #pdf-export-container .edge.hi.solid.e-md{stroke:var(--accent);filter:drop-shadow(0 0 5px rgba(var(--accent-rgb), .55))}
  #pdf-export-container .edge.hi.dash.e-um{stroke:var(--primary);filter:drop-shadow(0 0 3px rgba(var(--primary-rgb), .35))}
  #pdf-export-container .edge.hi.dash.e-md{stroke:var(--accent);filter:drop-shadow(0 0 3px rgba(var(--accent-rgb), .35))}
@media @media (max-width:1024px) {
  #pdf-export-container .cgrid{grid-template-columns:1fr 1fr 1fr;gap:14px}
  #pdf-export-container .cgroup.mid{grid-template-columns:repeat(4,1fr)}
  #pdf-export-container .cnode{width:100%;min-width:0;max-width:220px}
}

/* 【deploy22 · PDF 修复②】导出容器上下 padding 归零：改由分页器逐页统一施加 12mm 页边距，
   否则上下 12mm 只出现在第一页顶部与最后一页底部，中间页内容会顶到纸张边缘；左右仍保留 10mm 内容留白。 */
#pdf-export-container .pdf-container{padding-top:0;padding-bottom:0}

  /* ==================================================================
     【deploy23 · 客户页列表页 NewUI v2】呈现层新类名规则集
     来源：delivery/客户管理UI_完整套壳预览稿.html（第16轮定稿）
          ＋ delivery/客户管理UI_极限多数量_演示页.html（.vswitch + 组级表格视图）
     ⚠️ 作用域：全部限定在 .page-customers 内。
        线上已存在同名泛用类（.group 79 / .banner 12 / .legend 27 / .card 13 /
        .chips 23 / .ops 140 / .avatar 48 处），不加前缀会污染全局
        —— 落点清单 §A 作用域陷阱（根因库 23）。
     ================================================================== */

  /* ---- 页头 ---- */
  .page-customers .page-head { margin-bottom: 18px; }
  /* deploy25 F4：三页页头大标题统一（客户管理 / 我的 / 系统设置）—— 原为 34 / 26 / 28 三值不一 */
  .page-customers .page-head h1 { margin: 0; font-size: var(--fs-2xl); font-weight: 700; letter-spacing: -.2px; line-height: 1.3; color: var(--ink-900); }
  .page-customers .page-head .sub { margin: 7px 0 0; font-size: var(--fs-md); color: var(--ink-500); line-height: 1.6; }
  .page-customers .page-head .sub b { color: var(--primary-text); font-weight: 600; }

  /* ---- 顶部四统计卡 ---- */
  .page-customers .stat-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin: 18px 0 24px; }
  .page-customers .stat-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: 16px 18px; box-shadow: var(--sh-sm); position: relative; overflow: hidden; transition: var(--t-norm); min-height: 92px; display: flex; flex-direction: column; align-items: stretch; justify-content: space-between; gap: 0; }
  .page-customers .stat-card::after { content: ""; position: absolute; right: -32px; top: -32px; width: 130px; height: 130px; background: radial-gradient(circle, rgba(var(--primary-rgb), .18) 0%, rgba(var(--primary-rgb), 0) 70%); pointer-events: none; border-radius: 50%; }
  .page-customers .stat-card.clickable { cursor: pointer; }
  .page-customers .stat-card.clickable:hover { box-shadow: var(--sh-md); transform: translateY(-2px); border-color: var(--primary-soft); }
  .page-customers .stat-card.clickable:active { transform: translateY(0); }
  .page-customers .stat-urg { position: absolute; right: 14px; top: 12px; background: var(--danger); color: #fff; font-size: 10px; font-weight: 700; padding: 2px 8px; border-radius: var(--r-pill); letter-spacing: .5px; box-shadow: 0 2px 6px rgba(var(--danger-rgb), .4); z-index: 1; }
  /* deploy25 F1：统计卡内文案行距 —— 行高自 1.15 提到 1.5，三块间距 2px/0px 提到 8px/8px（实测原为贴死） */
  .page-customers .stat-title { font-size: 13px; line-height: 1.5; color: var(--ink-500); font-weight: 500; }
  .page-customers .stat-body { display: flex; align-items: flex-end; justify-content: space-between; margin-top: 8px; }
  .page-customers .stat-num { font-family: var(--num); font-size: 28px; font-weight: 700; line-height: 1; color: var(--ink-900); letter-spacing: -.5px; }
  .page-customers .stat-foot { font-size: 12px; line-height: 1.5; margin-top: 8px; color: var(--ink-400); display: inline-flex; align-items: center; gap: 5px; }
  .page-customers .stat-foot .dot { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
  .page-customers .stat-foot .dot.g { background: var(--ok); }
  .page-customers .stat-foot .dot.r { background: var(--danger); }
  .page-customers .stat-foot .arrow { font-size: 11px; font-weight: 700; line-height: 1; }
  .page-customers .stat-foot .arrow.up { color: var(--ok); }
  .page-customers .stat-foot .arrow.down { color: var(--ok); }
  .page-customers .stat-foot.warn { color: var(--accent-600); font-weight: 600; }
  .page-customers .stat-foot .triangle { color: var(--accent); font-size: 11px; }
  .page-customers .stat-foot .triangle::before { content: "▲"; }
  .page-customers .stat-cfg-hint { position: absolute; right: 14px; bottom: 12px; display: inline-flex; align-items: center; gap: 3px; font-size: 11px; font-weight: 600; color: var(--primary-text); background: var(--primary-soft); padding: 3px 9px; border-radius: var(--r-pill); transition: var(--t-fast); }
  .page-customers .stat-card.clickable:hover .stat-cfg-hint { background: var(--primary-800); color: #fff; }
  .page-customers .stat-cfg-hint svg { width: 12px; height: 12px; }
  @media (max-width: 1100px) { .page-customers .stat-strip { grid-template-columns: repeat(2, 1fr); } }

  /* ---- 工具栏 ---- */
  .page-customers .toolbar { display: flex; align-items: center; gap: 12px; margin: 0 0 16px; flex-wrap: wrap; }
  .page-customers .toolbar .spacer { flex: 1; }
  .page-customers .search-bar { display: inline-flex; align-items: center; gap: 8px; background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--r-pill); padding: 6px 14px; color: var(--ink-400); transition: var(--t-fast); min-width: 220px; }
  .page-customers .search-bar:focus-within { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb), .12); color: var(--primary); }
  .page-customers .search-bar input { border: none; outline: none; background: transparent; flex: 1; font-family: var(--font); font-size: 13px; color: var(--ink-900); }
  .page-customers .search-bar input::placeholder { color: var(--ink-300); }
  .page-customers .btn { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; border: 1px solid var(--line); background: var(--surface); color: var(--ink-700); padding: 8px 14px; border-radius: var(--r-pill); cursor: pointer; transition: var(--t-fast); }
  .page-customers .btn:hover { border-color: var(--primary); color: var(--primary); }
  .page-customers .btn.ghost { background: transparent; }
  .page-customers .btn.primary { background: var(--primary-text); color: #fff; border-color: var(--primary-text); }
  .page-customers .btn.primary:hover { background: var(--primary-text); border-color: var(--primary-text); color: #fff; box-shadow: var(--sh-glow); }

  /* ---- 图例 ---- */
  .page-customers .legend { display: flex; gap: 18px; flex-wrap: wrap; margin-bottom: 18px; padding: 11px 16px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); font-size: 12px; color: var(--ink-500); }
  .page-customers .legend .lg { display: inline-flex; align-items: center; gap: 6px; }
  .page-customers .legend .dot { width: 10px; height: 10px; border-radius: 3px; }
  .page-customers .legend .sw { width: 22px; height: 8px; border-radius: 4px; }

  /* ---- 头像 / chips / 状态 ---- */
  .page-customers .avatar { width: 44px; height: 44px; border-radius: 13px; flex-shrink: 0; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-weight: 700; font-size: 16px; box-shadow: 0 4px 12px rgba(var(--primary-rgb), .2); }
  .page-customers .avatar.sm { width: 34px; height: 34px; border-radius: 10px; font-size: 13px; box-shadow: none; }
  .page-customers .chips { display: flex; flex-wrap: wrap; gap: 5px; }
  .page-customers .chip-tag { padding: 3px 9px; border-radius: 999px; font-size: 11px; font-weight: 600; white-space: nowrap; }
  .page-customers .chip-tag.good { background: var(--ok-soft); color: var(--ok); }
  .page-customers .chip-tag.orange { background: var(--warn-soft); color: var(--warn); }
  .page-customers .chip-tag.red { background: var(--danger-soft); color: var(--danger); }
  .page-customers .chip-tag.teal { background: var(--primary-soft); color: var(--primary-text); }
  .page-customers .status-pill { font-size: 11px; font-weight: 700; padding: 3px 10px; border-radius: 999px; display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }
  .page-customers .status-pill.ok { background: var(--ok-soft); color: var(--ok); }
  .page-customers .status-pill.warn { background: var(--warn-soft); color: var(--warn); }
  .page-customers .status-pill.danger { background: var(--danger-soft); color: var(--danger); }
  .page-customers .status-pill.info { background: var(--primary-soft); color: var(--primary-text); }
  .page-customers .todo-pill { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 600; color: var(--primary-text); background: var(--primary-soft); padding: 3px 9px; border-radius: 999px; white-space: nowrap; }
/* 批M1·E2：待确认档案事实角标 —— 用琥珀色与「待办」（绿）区分，避免营养师误认成待办事项 */
.facts-pending-pill{color:var(--warn-text);background:#FFF3E0;border:1px solid #F0D9B5;flex:0 0 auto}
.facts-pending-pill .todo-badge{background:var(--warn);color:#fff}
.facts-pending-pill.mini{font-size:10px;padding:2px 7px}
.page-customers .tagline .facts-pending-pill{margin-right:6px}
  .page-customers .todo-badge { display: inline-grid; place-items: center; min-width: 16px; height: 16px; padding: 0 5px; border-radius: 999px; background: var(--danger); color: #fff; font-size: 10px; font-weight: 700; line-height: 1; }
  .page-customers .c-status { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ink-500); flex-wrap: wrap; }
  .page-customers .c-status .sd { width: 7px; height: 7px; border-radius: 50%; flex-shrink: 0; }
  .page-customers .c-status .contact { margin-left: auto; color: var(--ink-400); font-size: 11px; }
  /* φ3 · 生命周期徽标：中性描边 chip（无强调色 · 视觉重量低于主状态位）*/
  .page-customers .c-status .c-flag { font-size: 10px; font-weight: 600; line-height: 1.5; padding: 1px 6px; border-radius: 999px; border: 1px solid var(--line); color: var(--ink-400); background: transparent; white-space: nowrap; }
  .page-customers .act { font-size: 12px; font-weight: 600; color: var(--ink-500); background: transparent; border: none; cursor: pointer; padding: 6px 8px; border-radius: var(--r-sm); display: inline-flex; align-items: center; gap: 4px; transition: var(--t-fast); }
  .page-customers .act:hover { background: var(--surface-2); color: var(--primary); }
  .page-customers .bmi-track { height: 6px; background: var(--surface-3); border-radius: 999px; overflow: hidden; min-width: 80px; }
  .page-customers .bmi-fill { display: block; height: 100%; border-radius: 999px; }
  .page-customers .metric-sm { font-size: 11px; color: var(--ink-400); }
  .page-customers .metric-sm b { font-family: var(--num); font-size: 15px; color: var(--ink-900); font-weight: 700; }
  .page-customers .bmi-block { display: inline-flex; flex-direction: column; align-items: stretch; gap: 6px; line-height: 1.15; vertical-align: top; }
  .page-customers .bmi-block .brow { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
  .page-customers .bmi-block .bl { font-size: 13px; font-weight: 700; color: var(--ink-500); }
  .page-customers .bmi-block .bv { font-family: var(--num); font-size: 13px; font-weight: 700; color: var(--ink-900); }
  .page-customers .bmi-block .wt { display: block; text-align: center; font-size: 12.5px; font-weight: 700; line-height: 1.4; padding: 4px 10px; border-radius: 8px; white-space: nowrap; box-sizing: border-box; }
  .page-customers .bmi-block .wt.orange { background: var(--warn-soft); color: var(--warn); }
  .page-customers .bmi-block .wt.good { background: var(--ok-soft); color: var(--ok); }

  /* ---- 分组框架 ---- */
  .page-customers .group { margin-bottom: 24px; }
  .page-customers .group:last-child { margin-bottom: 0; }
  .page-customers .ghead { display: flex; align-items: center; gap: 11px; padding: 11px 16px; background: var(--surface); border: 1px solid var(--line); border-bottom: none; border-radius: var(--r-md) var(--r-md) 0 0; }
  .page-customers .ghead .gi { width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; color: #fff; font-size: 13px; flex-shrink: 0; }
  .page-customers .ghead .gtitle { font-size: 14px; font-weight: 600; color: var(--ink-900); }
  .page-customers .ghead .gcnt { font-size: 12px; color: var(--ink-500); background: var(--surface-2); padding: 2px 10px; border-radius: 999px; font-family: var(--num); }
  .page-customers .ghead .gdesc { margin-left: auto; font-size: 11px; color: var(--ink-400); }
  .page-customers .gbody { padding: 14px; background: var(--surface); border: 1px solid var(--line); border-radius: 0 0 var(--r-lg) var(--r-lg); }
  .page-customers .gbody .banners { display: flex; flex-direction: column; gap: 12px; margin-bottom: 14px; }
  .page-customers .gbody .grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
  @media (max-width: 1280px) { .page-customers .gbody .grid { grid-template-columns: repeat(3, 1fr); } }
  @media (max-width: 920px) { .page-customers .gbody .grid { grid-template-columns: repeat(2, 1fr); } }
  @media (max-width: 620px) { .page-customers .gbody .grid { grid-template-columns: 1fr; } }
  .page-customers .gbody .sec-tag { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--ink-500); font-weight: 600; margin: 4px 0 12px; }
  .page-customers .gbody .sec-tag::after { content: ""; flex: 1; height: 1px; background: var(--line); }
  .page-customers .gbody .sec-tag .cnt { color: var(--ink-400); font-weight: 500; }
  .page-customers .gbody .expand-all { margin-top: 12px; border: 1px dashed var(--line); background: var(--surface-2); color: var(--primary); font-size: 12px; text-align: center; padding: 9px; border-radius: var(--r-md); cursor: pointer; }
  .page-customers .gbody .hide { display: none !important; }

  /* ---- 组级视图切换（.vswitch · 源：极限多数量稿） ---- */
  .page-customers .vswitch { margin-left: auto; font-size: 11px; font-weight: 600; color: var(--primary-text); background: var(--primary-soft); border: 1px solid transparent; padding: 3px 10px; border-radius: 999px; cursor: pointer; transition: var(--t-fast); white-space: nowrap; }
  .page-customers .vswitch:hover { background: var(--primary-800); color: #fff; }
  .page-customers .ghead .vswitch { margin-left: 0; flex-shrink: 0; }
  /* 子类目行内反向开关（需关注组 · §4.3 第16轮）：排在 .sec-tag::after 分隔线之后，贴右 */
  .page-customers .gbody .sec-tag .vswitch { order: 3; margin-left: 0; flex-shrink: 0; }

  /* ---- 组级表格视图（源：极限多数量稿） ---- */
  .page-customers .tblwrap { margin-bottom: 14px; background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); overflow: auto; }
  .page-customers table.tbl { width: 100%; border-collapse: separate; border-spacing: 0; font-size: 12.5px; }
  .page-customers table.tbl th { font-size: 11px; font-weight: 600; color: var(--ink-400); text-align: left; padding: 9px 14px; background: var(--surface-2); border-bottom: 1px solid var(--line); white-space: nowrap; }
  .page-customers table.tbl td { padding: 9px 14px; border-bottom: 1px solid var(--line); vertical-align: middle; color: var(--ink-900); }
  .page-customers table.tbl tbody tr:last-child td { border-bottom: none; }
  .page-customers table.tbl tbody tr { transition: background var(--t-fast); cursor: pointer; }
  .page-customers table.tbl tbody tr:hover { background: var(--surface-2); }
  .page-customers .tbl .c-name { display: flex; align-items: center; gap: 9px; min-width: 150px; }
  .page-customers .tava { width: 28px; height: 28px; border-radius: 9px; flex-shrink: 0; background: var(--primary-grad-deep); color: #fff; display: grid; place-items: center; font-size: 12px; font-weight: 700; }
  .page-customers .tnm { font-weight: 600; font-size: 12.5px; line-height: 1.35; white-space: nowrap; }
  .page-customers .tmeta { font-size: 10.5px; color: var(--ink-400); line-height: 1.35; white-space: nowrap; font-family: var(--num); }
  .page-customers .tbl .tchips { display: flex; flex-wrap: wrap; gap: 4px; }
  .page-customers .tbl .c-bmi { white-space: nowrap; }
  .page-customers .tbl .tbv { font-family: var(--num); font-weight: 700; font-size: 13px; }
  .page-customers .wt-mini { font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 999px; margin-left: 6px; white-space: nowrap; }
  .page-customers .wt-mini.orange { background: var(--warn-soft); color: var(--warn); }
  .page-customers .wt-mini.good { background: var(--ok-soft); color: var(--ok); }
  .page-customers .tbl .c-fu { color: var(--ink-500); white-space: nowrap; font-size: 12px; }
  .page-customers .tbl .todo-pill { font-size: 10.5px; padding: 2px 8px; }
  .page-customers .tbl .c-status { font-size: 11.5px; white-space: nowrap; }
  .page-customers .tbl .c-ops { text-align: right; white-space: nowrap; }
  .page-customers .tbl .act { font-size: 11.5px; padding: 4px 6px; }
  .page-customers .tbl .trig { width: 24px; height: 24px; font-size: 14px; vertical-align: middle; }

  /* ---- 横幅卡 ---- */
  .page-customers .banner { display: flex; align-items: center; gap: 18px; background: var(--surface-2); border: 1px solid var(--line); border-radius: var(--r-md); padding: 14px 18px; cursor: pointer; transition: box-shadow var(--t-norm), background var(--t-fast), border-color var(--t-fast); position: relative; }
  .page-customers .banner:hover { box-shadow: var(--sh-md); border-color: var(--primary-soft); background: var(--surface); }
  .page-customers .banner.high-risk { border-left: 4px solid var(--danger); background: var(--danger-soft); }
  .page-customers .banner.high-risk:hover { background: #fff; }
  .page-customers .banner.warn { border-left: 4px solid var(--accent); background: var(--accent-soft); }
  .page-customers .banner.warn:hover { background: #fff; }
  .page-customers .banner .b-head { display: flex; align-items: center; gap: 12px; flex: 1.5; min-width: 0; }
  .page-customers .banner .nm { font-size: 15px; font-weight: 600; line-height: 1.3; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
  .page-customers .banner .nm .contact { font-size: 12px; color: var(--ink-400); font-weight: 500; font-family: var(--num); white-space: nowrap; }
  .page-customers .banner .sb { font-size: 12px; color: var(--ink-400); margin-top: 2px; }
  .page-customers .banner .b-mid { flex: 1.6; min-width: 0; display: flex; flex-direction: column; gap: 7px; border-left: 1px solid var(--line); padding-left: 18px; }
  .page-customers .banner .b-mid .chips { flex-wrap: wrap; }
  .page-customers .banner .b-bmi { flex: 1; min-width: 0; display: flex; align-items: center; border-left: 1px solid var(--line); padding-left: 18px; }
  .page-customers .banner .status-pill.lg { font-size: 13px; padding: 4px 12px; align-self: center; flex-shrink: 0; }
  .page-customers .banner .b-right { margin-left: auto; display: flex; align-items: center; gap: 12px; flex-shrink: 0; }

  /* ---- 半高卡 ---- */
  .page-customers .card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); padding: 14px; cursor: pointer; transition: box-shadow var(--t-norm), transform var(--t-norm), border-color var(--t-fast); }
  .page-customers .card:hover { box-shadow: var(--sh-md); transform: translateY(-2px); border-color: var(--primary-soft); }
  .page-customers .card .top { display: flex; align-items: center; gap: 10px; margin-bottom: 9px; }
  .page-customers .card .nm { font-size: 13.5px; font-weight: 600; line-height: 1.25; }
  .page-customers .card .sb { font-size: 11px; color: var(--ink-400); margin-top: 2px; }
  .page-customers .card .tagline { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
  .page-customers .card .foot { display: flex; align-items: center; justify-content: space-between; border-top: 1px solid var(--line); margin-top: 10px; padding-top: 8px; gap: 8px; }
  .page-customers .card .foot .c-status { font-size: 11px; }
  .page-customers .card.mini .tagline { font-size: 11px; color: var(--ink-400); }

  /* ---- ⋯ 操作菜单 ---- */
  .page-customers .ops { position: relative; display: inline-flex; }
  .page-customers .ops .trig { width: 28px; height: 28px; border-radius: var(--r-sm); border: 1px solid transparent; background: transparent; color: var(--ink-400); font-size: 16px; font-weight: 700; line-height: 1; cursor: pointer; display: grid; place-items: center; transition: var(--t-fast); font-family: var(--num); }
  .page-customers .ops:hover .trig { background: var(--surface-2); border-color: var(--line-strong); color: var(--ink-900); }
  .page-customers .ops .menu { position: absolute; right: 0; top: calc(100% + 6px); background: var(--surface); border: 1px solid var(--line-strong); border-radius: var(--r-md); box-shadow: var(--sh-md); padding: 5px; min-width: 138px; z-index: 60; opacity: 0; visibility: hidden; transform: translateY(-4px); transition: var(--t-fast); display: flex; flex-direction: column; gap: 1px; }
  .page-customers .ops:hover .menu { opacity: 1; visibility: visible; transform: translateY(0); }
  .page-customers .ops .menu button { display: flex; align-items: center; gap: 8px; width: 100%; text-align: left; font-size: 12px; font-weight: 500; color: var(--ink-700); background: transparent; border: none; cursor: pointer; padding: 7px 10px; border-radius: var(--r-sm); transition: var(--t-fast); white-space: nowrap; }
  .page-customers .ops .menu button:hover { background: var(--surface-2); color: var(--primary); }
  .page-customers .ops .menu button.danger { color: var(--ink-400); }
  .page-customers .ops .menu button.danger:hover { background: var(--danger-soft); color: var(--danger); }
  .page-customers .ops .menu button .ic { width: 14px; height: 14px; flex-shrink: 0; color: var(--ink-400); }
  .page-customers .ops .menu button:hover .ic { color: var(--primary); }
  .page-customers .ops .menu button.danger:hover .ic { color: var(--danger); }

  /* ---- 空态 ---- */
  .page-customers .gempty { padding: 22px 14px; text-align: center; color: var(--ink-400); font-size: 13px; }

  /* =====================================================================
     四模块横切（10-23 · 智诊中枢 UI 改造）—— .flow-cards → .pane-wrap + .pane
     ⚠️ 追加在文件末尾：需后置覆盖 2145 / 3426 行的 .v3-app .workbody 既有规则。
     内容零改动：四个模块各自搬进 .pane，一次只显 activePane 那一个；
     滚动下移给 .pane-wrap ⇒ 「智诊中枢」标题 + 步骤条钉住不动。
     ⚠️ 步骤条样式（.stage-step / .current 主色绿）**一行未改**，仅加了 cursor:pointer。
     ===================================================================== */
  .v3-app .workbody { overflow: hidden; display: flex; flex-direction: column; }
  .v3-app .pane-wrap { flex: 1; min-height: 0; overflow-y: auto; padding-bottom: 20px; }
  .v3-app .pane { display: none; }
  .v3-app .pane.pane-active { display: block; }
  .v3-app .stage-step { cursor: pointer; }


/* ══ 干预思路 · 五问结构（2026-10-25）═════════════════════════════════════
   ① 干预边界（四档 + 禁区）· ② 靶点 · ③ 五步 · ④ 动作表 · ⑤ 解释口径
   颜色沿用现有语义：绿=能管 / 琥珀=有条件 / 红=请医生·禁区 / 灰=先观察 */
.ipc-bd-wrap { display: grid; grid-template-columns: repeat(auto-fit, minmax(268px, 1fr)); gap: 10px; margin-top: 8px; }
.ipc-bd-g { background: var(--surface); border: 1px solid #E3F0EA; border-radius: 10px; padding: 9px 12px; }
.ipc-bd-g.is-forbid { background: #FDF4F4; border-color: #F0C9C9; }
.ipc-bd-gh { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 6px; }
.ipc-bd-tag { display: inline-block; border: 1px solid currentColor; border-radius: 999px; padding: 0 7px; font-size: 11.5px; line-height: 18px; font-weight: 600; }
.ipc-bd-n { font-size: 11.5px; color: #6B7C77; }
.ipc-bd-h { font-size: 11.5px; color: #8A9A95; }
.ipc-bd-i { padding: 5px 0; border-top: 1px dashed #EDF5F1; }
.ipc-bd-i:first-of-type { border-top: 0; }
.ipc-bd-p { font-size: 13px; color: var(--ink-deep); font-weight: 600; line-height: 1.5; }
.ipc-bd-f { margin-left: 6px; font-size: 11px; color: #7A8C86; font-weight: 400; }
.ipc-bd-auto { margin-left: 6px; font-size: 10.5px; color: #8A5A00; background: #FFF3E0; border: 1px solid #F0D4A8; border-radius: 4px; padding: 0 4px; }
.ipc-bd-sub { font-size: 12px; color: #5C6E68; line-height: 1.6; margin-top: 2px; }
.ipc-bd-cond { font-size: 12px; color: var(--amber-700); line-height: 1.6; margin-top: 2px; }

.ipc-tg-core { display: inline-block; margin-right: 5px; padding: 0 5px; font-size: 10.5px; font-weight: 600; color: #0F6E56; background: #E4F5EF; border-radius: 4px; vertical-align: 1px; }
.ipc-tg-from { margin-top: 3px; font-size: 11.5px; color: #7A8C86; line-height: 1.5; }
.ipc-tg-from.na { color: var(--danger-700); }

.ipc-reasoning { margin-top: 12px; border: 1px solid #E3F0EA; border-radius: 10px; background: #FAFDFB; }
.ipc-reasoning-s { cursor: pointer; padding: 9px 12px; font-size: 12.5px; color: #4E625C; list-style: none; }
.ipc-reasoning-s::-webkit-details-marker { display: none; }
.ipc-reasoning-s::before { content: '▸ '; color: #8A9A95; }
.ipc-reasoning[open] .ipc-reasoning-s::before { content: '▾ '; }
.ipc-reasoning-b { padding: 0 12px 10px; }

.ipc-px.s5 { border-left-color: #6C7FD8; }
.ipc-px-win { margin-left: 6px; font-size: 11.5px; color: #7A8C86; }
.ipc-act-tbl { width: 100%; border-collapse: collapse; font-size: 12.5px; margin: 4px 0 2px; }
.ipc-act-tbl th { text-align: left; font-weight: 600; font-size: 11.5px; color: #6B7C77; padding: 4px 8px 5px 0; border-bottom: 1px solid #E3F0EA; }
.ipc-act-tbl td { padding: 7px 8px 7px 0; border-bottom: 1px dashed #EDF5F1; vertical-align: top; color: #26403A; line-height: 1.6; }
.ipc-act-tbl tr.is-bad td { background: #FFFAF6; }
.ipc-act-ty { display: inline-block; margin-right: 5px; padding: 0 5px; font-size: 10.5px; color: #1F5E4C; background: #EFF9F5; border: 1px solid #CFE9DF; border-radius: 4px; }
.ipc-act-na { color: var(--danger-700); font-size: 11.5px; }
.ipc-act-fq { color: #6B7C77; font-size: 11.5px; }
.ipc-act-contra { margin-top: 2px; font-size: 11.5px; color: var(--danger-700); }
.ipc-act-alt { margin-top: 2px; font-size: 11.5px; color: #7A8C86; }

.ipc-say-item { padding: 8px 0; border-top: 1px dashed #EDF5F1; }
.ipc-say-item:first-child { border-top: 0; }
.ipc-say-t { font-size: 12px; font-weight: 600; color: var(--ink-deep); margin-bottom: 3px; }
.ipc-say-q { font-size: 13.5px; color: #1F5E4C; line-height: 1.7; }
.ipc-say-m { margin-top: 3px; font-size: 12px; color: #5C6E68; }
.ipc-say-a { margin-top: 3px; font-size: 12px; color: #7A8C86; }

/* ══════════════════════════════════════════════════════════════════
 * 方案 v3 卡片（2026-10-26）
 * 设计约束：沿用后台既有卡片语言（.fcard/.fbody/.btn），只补新结构需要的类；
 *          不去做"设计感改造"——样式方向等用户定，这里先保证结构能读。
 * ══════════════════════════════════════════════════════════════════ */
.pv3c-head { padding: 2px 0 12px; border-bottom: 1px solid var(--line, #E6E0D5); margin-bottom: 12px; }
.pv3c-title { font-size: 17px; font-weight: 600; color: var(--ink-deep); }
.pv3c-meta { margin-top: 4px; font-size: 12px; color: #7A8B85; }

.pv3c-week { border: 1px solid #D7EDE2; background: #F5FBF8; border-radius: 10px; padding: 12px 14px; margin-bottom: 14px; }
.pv3c-week-h { font-size: 13.5px; font-weight: 600; color: #1F5E4C; margin-bottom: 6px; }
.pv3c-todo { margin: 0 0 8px; padding-left: 0; list-style: none; counter-reset: pv3t; }
.pv3c-todo li { counter-increment: pv3t; position: relative; padding: 6px 0 6px 28px; font-size: 13.5px; color: var(--ink-deep); border-bottom: 1px dashed #DFEDE6; }
.pv3c-todo li:last-child { border-bottom: 0; }
.pv3c-todo li:before { content: counter(pv3t); position: absolute; left: 0; top: 6px; width: 20px; height: 20px; border-radius: 50%; background: #E3F4EB; color: #2E7D5B; font-size: 11.5px; display: flex; align-items: center; justify-content: center; }
.pv3c-week-f { font-size: 12px; color: #5C6B66; line-height: 1.9; }
.pv3c-week-f b { color: var(--ink-deep); font-weight: 600; }

.pv3c-sec { border: 1px solid var(--line, #E6E0D5); border-radius: 10px; padding: 10px 14px; margin-bottom: 10px; background: #fff; }
.pv3c-sec > summary { cursor: pointer; font-size: 13.5px; font-weight: 600; color: var(--ink-deep); outline: none; list-style: none; }
.pv3c-sec > summary::-webkit-details-marker { display: none; }
.pv3c-sec > summary:before { content: '▸'; display: inline-block; width: 16px; color: #9AB0A7; font-size: 11px; }
.pv3c-sec[open] > summary:before { content: '▾'; }
.pv3c-sec[open] > summary { margin-bottom: 10px; padding-bottom: 8px; border-bottom: 1px solid #EEF3F1; }
.pv3c-sec.danger { border-color: #F0D3D1; background: #FFFCFC; }

.pv3c-sub { font-size: 12px; font-weight: 600; color: #5C7A6C; margin: 12px 0 6px; }
.pv3c-muted { font-size: 12px; color: #93A39C; }
.pv3c-note { margin-top: 8px; font-size: 11.5px; color: #8A9A94; line-height: 1.7; }

.pv3c-verdict { border-left: 3px solid #D9A24A; background: #FDF9F1; padding: 9px 12px; border-radius: 0 8px 8px 0; margin-bottom: 10px; font-size: 12.5px; color: #3C4A45; }
.pv3c-verdict.ok { border-color: var(--primary); background: #F3FBF7; }
.pv3c-verdict.bad { border-color: #D9534F; background: #FDF4F4; }
.pv3c-verdict-h { font-size: 13.5px; font-weight: 600; color: var(--ink-deep); margin-bottom: 3px; }

.pv3c-lights { display: flex; flex-direction: column; gap: 4px; margin-bottom: 10px; }
.pv3c-light { display: flex; align-items: baseline; gap: 8px; font-size: 12.5px; }
.pv3c-dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 8px; background: #D9A24A; }
.pv3c-dot.ok { background: var(--primary); } .pv3c-dot.bad { background: #D9534F; }
.pv3c-ln { flex: 0 0 118px; font-weight: 600; color: var(--ink-deep); }
.pv3c-lv { flex: 0 0 76px; font-family: var(--font-mono, Menlo, monospace); color: #26403A; }
.pv3c-ls { flex: 1; color: #5C6B66; }

.pv3c-signals { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.pv3c-signal { border: 1px solid #EEF3F1; border-radius: 8px; padding: 8px 10px; background: #FCFDFC; }
.pv3c-sf { font-size: 12.5px; font-weight: 600; color: var(--ink-deep); margin-bottom: 2px; }
.pv3c-sb { font-size: 12px; color: #5C6B66; }

.pv3c-prio { background: #F7FAF8; border-radius: 8px; padding: 10px 12px; margin-bottom: 10px; }
.pv3c-prio-t { font-size: 13.5px; font-weight: 600; color: var(--ink-deep); margin-bottom: 3px; }
.pv3c-prio-w { font-size: 12px; color: #5C6B66; }

.pv3c-tbl { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.pv3c-tbl th { text-align: left; font-weight: 600; font-size: 11.5px; color: #7A8B85; padding: 6px 8px; border-bottom: 1px solid #DCE5E1; background: #FAFCFB; }
.pv3c-tbl td { padding: 7px 8px; border-bottom: 1px solid #EEF3F1; vertical-align: top; color: #3C4A45; }
.pv3c-tbl td.n { font-weight: 600; color: #1F332C; }
.pv3c-how { margin-bottom: 2px; }

.pv3c-tl { display: flex; flex-direction: column; }
.pv3c-tl-row { display: flex; gap: 12px; padding: 7px 0; border-bottom: 1px dashed #EEF3F1; font-size: 12.5px; }
.pv3c-tl-row:last-child { border-bottom: 0; }
.pv3c-tl-row.now { background: #F5FBF8; margin: 0 -14px; padding-left: 14px; padding-right: 14px; }
.pv3c-tl-w { flex: 0 0 62px; font-weight: 600; color: #1F332C; }
.pv3c-tl-b { flex: 1; }
.pv3c-tl-a { color: var(--ink-deep); }
.pv3c-tl-x { margin-top: 2px; font-size: 11.5px; color: #8A9A94; }

.pv3c-rhythm { margin-top: 10px; }
.pv3c-rhythm-i { display: flex; gap: 10px; font-size: 12.5px; padding: 3px 0; }
.pv3c-rhythm-m { flex: 0 0 52px; font-weight: 600; color: var(--ink-deep); }
.pv3c-rhythm-t { flex: 0 0 92px; font-family: var(--font-mono, Menlo, monospace); color: #2E7D5B; }

.pv3c-life { margin-bottom: 6px; }
.pv3c-life-i { font-size: 12.5px; padding: 2px 0; color: #3C4A45; }

.pv3c-ul { margin: 4px 0 8px; padding-left: 18px; font-size: 12.5px; color: #3C4A45; }
.pv3c-ul li { margin-bottom: 2px; }
.pv3c-ul.danger li { color: #A23B38; }
.pv3c-ul.warn li { color: #8A6212; }

.pv3c-app-i { font-size: 12.5px; color: #3C4A45; padding: 3px 0; line-height: 1.7; }

.pv3c-actions { margin-top: 4px; }
.pv3c-empty { padding: 14px 4px; }
.pv3c-empty-t { font-size: 14px; font-weight: 600; color: var(--ink-deep); margin-bottom: 6px; }
.pv3c-empty-d { font-size: 12.5px; color: #6B7B74; line-height: 1.8; margin-bottom: 12px; }

/* 阅读弹窗：文档自带 .pv3-doc 作用域样式，这里只放开滚动 */
.pv3-reader-scroll { padding: 2px 6px 4px; }

/* 方案 v3 · 月度节奏与上游缺口（2026-10-26） */
.pv3c-month-note { font-size: 12px; color: #5C6B66; background: #F7FAF8; border-radius: 8px; padding: 8px 11px; margin-bottom: 10px; line-height: 1.75; }
.pv3c-month-h { font-size: 12px; font-weight: 600; color: #5C7A6C; margin: 6px 0 4px; }
.pv3c-month-tag { font-size: 10.5px; font-weight: 400; padding: 1px 7px; border-radius: 10px; background: #FDF6E9; color: #9A6212; margin-left: 8px; vertical-align: 1px; }
.pv3c-phase { border: 1px dashed #E0E8E4; border-radius: 9px; padding: 9px 11px; margin: 8px 0 6px; background: #FCFDFC; }
.pv3c-phase-h { font-size: 12.5px; font-weight: 600; color: #1F332C; margin-bottom: 4px; }
.pv3c-phase-b { font-size: 12.5px; color: #3C4A45; }
.pv3c-phase-r { font-size: 11.5px; color: #8A9A94; margin-top: 4px; }

.pv3c-gaps { border: 1px solid #F0E0C8; background: #FDF9F1; border-radius: 9px; padding: 10px 12px; margin-bottom: 12px; }
.pv3c-gaps-h { font-size: 12.5px; font-weight: 600; color: #8A6212; margin-bottom: 5px; }
.pv3c-gaps-l { margin: 0; padding-left: 16px; font-size: 12px; color: #6B5A38; line-height: 1.8; }

/* ══════════════════════════════════════════════════════════════════
 * 方案 v3 · 卡片=文档（2026-10-26）
 * 「后台看到的等于客户看到的」⇒ 卡片里放的就是交付文档本体，
 * 这里只补"纸面"外观与编辑态的可见性（A79：小到看不见等于没写）。
 * ══════════════════════════════════════════════════════════════════ */
.pv3-tools {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 8px 10px; margin-bottom: 10px;
  background: #FAFCFB; border: 1px solid #E6EEE9; border-radius: 9px;
}
.pv3-tools.is-editing { background: #FDF9F1; border-color: #F0E0C8; }
.pv3-tools-flag { font-size: 12px; color: #8A6212; font-weight: 600; margin-right: 2px; }
.v3-rewrite-sel {
  height: 28px; font-size: 12.5px; padding: 0 8px; border-radius: 6px;
  border: 1px solid #D9E3DE; background: #fff; color: #26403A; cursor: pointer;
}

/* 文档纸面：直接承载 buildPlanV3DocHtml 的产物 */
.pv3-host {
  background: #fff; border: 1px solid #EDF1EF; border-radius: 10px;
  padding: 0; max-height: 78vh; overflow: auto;
}
.pv3-host .pv3-doc.pdf-container { margin: 0 auto; box-shadow: none; min-height: 60vh; }

/* 编辑态：能改的地方必须一眼看出来 */
.pv3-editing [data-p] {
  cursor: text; border-radius: 3px;
  box-shadow: inset 0 -1px 0 0 #CBE8DB;
  transition: background .12s ease;
}
.pv3-editing [data-p]:hover { background: #EAF7F1; box-shadow: inset 0 0 0 1px #9FD8C2; }
.pv3-editing [data-li] { position: relative; }
.pv3-editing [data-li]:hover { background: #FBFDFC; }

.v3-rmbtn, .v3-mvbtn {
  font: 12px/1 -apple-system, sans-serif; cursor: pointer;
  border: 1px solid #E3D5D3; background: #fff; color: #A23B38;
  border-radius: 5px; padding: 1px 5px; margin-left: 6px; vertical-align: 1px;
}
.v3-rmbtn:hover { background: #FBEDEC; }
.v3-mvbtn { color: #2E7D5B; border-color: #CBE8DB; }
.v3-mvbtn:hover { background: #EAF7F1; }
.v3-addbtn {
  font: 12px/1 -apple-system, sans-serif; cursor: pointer;
  margin: 6px 0 10px; padding: 5px 10px; border-radius: 6px;
  border: 1px dashed #9FD8C2; background: #F5FBF8; color: #2E7D5B;
}
.v3-addbtn:hover { background: #EAF7F1; }
tr.v3-addrow td { border-bottom: 0 !important; padding: 4px 0 10px !important; }
tr.v3-addrow:hover { background: transparent !important; }

/* 就地编辑浮层 */
.v3-pop {
  position: fixed; left: 50%; bottom: 26px; transform: translateX(-50%);
  width: min(680px, 92vw); z-index: 2147483000;
  background: #fff; border: 1px solid #D9E3DE; border-radius: 12px;
  box-shadow: 0 16px 48px rgba(20, 40, 34, .18); padding: 14px 16px;
}
.v3-pop-h { font-size: 13.5px; font-weight: 600; color: #1F332C; margin-bottom: 8px; }
.v3-pop-ta {
  width: 100%; box-sizing: border-box; font-size: 14px; line-height: 1.7; color: var(--ink-900);
  border: 1px solid #D9E3DE; border-radius: 8px; padding: 9px 11px; resize: vertical; outline: none;
}
.v3-pop-ta:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb), .14); }
.v3-pop-f { display: flex; align-items: center; gap: 8px; margin-top: 10px; }
.v3-pop-tip { flex: 1; font-size: 11.5px; color: #93A39C; }
.v3-wkgrid { display: flex; flex-wrap: wrap; gap: 6px; }
.v3-wk {
  font-size: 12.5px; padding: 5px 10px; border-radius: 6px; cursor: pointer;
  border: 1px solid #D9E3DE; background: #fff; color: #26403A;
}
.v3-wk:hover { background: #F5FBF8; border-color: #9FD8C2; }
.v3-wk.on { background: #EAF7F1; border-color: var(--primary); color: #1F5E4C; font-weight: 600; }

.pv3c-edited {
  margin-top: 10px; padding: 8px 11px; border-radius: 8px;
  background: #F7FAF8; border: 1px solid #E6EEE9;
  font-size: 12px; color: #5C6B66;
}
