/* ============================================================
   DS_UNIFY_V1（20261022 老板需求：所有功能模块打开页面统一设计）
   —— 全局设计规范化层，必须最后加载（index.html 里排在 mobile-v21 之后）
   原则：
   1) 只动皮不动肉：不碰任何业务逻辑/JS 渲染，纯 CSS 覆盖（必要时 !important 压内联样式）；
   2) 字号阶梯唯一：徽标 11px / 次要 12px / 正文 13px / 强调 14px / 小标题 15px / 页标题 18px / 统计数字 ≥20px；
   3) 工作台首页(全息指挥舱)是展示面，视觉特例全部 :not(#panel-dashboard) 排除；
   4) 断点：桌面 >1100 全规格；平板 769~1100 表格紧凑；手机 ≤768 交由 mobile-v21 + 本文件兜底
      （POOL_FIX_V1 铁律：≤768 必须显式回退 td 换行，禁 nth-child）。
   ============================================================ */

:root {
  --dsu-bg: #f4f7fc;            /* 模块页面底色（蓝灰，BLUE_WALL_V1 蓝色基调） */
  --dsu-card: #ffffff;
  --dsu-line: #e6ebf4;          /* 卡片/表格描边 */
  --dsu-head: #f3f6fb;          /* 表头底色 */
  --dsu-ink: #26344d;           /* 主文字 */
  --dsu-ink2: #5b6b85;          /* 次要文字 */
  --dsu-ink3: #8b98ad;          /* 辅助小字 */
  --dsu-accent: #1667d9;        /* 品牌蓝（按钮/链接/焦点） */
  --dsu-accent-weak: #e8f1fe;
  --dsu-fz-xs: 11px;
  --dsu-fz-sm: 12px;
  --dsu-fz-md: 13px;
  --dsu-fz-lg: 14px;
  --dsu-fz-title: 15px;
  --dsu-fz-page: 18px;
  --dsu-radius: 10px;
  --dsu-shadow: 0 1px 3px rgba(16, 42, 80, 0.06);
  --dsu-shadow-hover: 0 4px 14px rgba(16, 42, 80, 0.10);
}

/* ---------- 0. 模块页面底子 ---------- */
.page-panel:not(#panel-dashboard) {
  background: var(--dsu-bg);
}
/* 工作台首页与价格看板等全屏展示模块保留原样式，不做底色覆盖 */

/* ---------- 1. 表格统一（正文 13px / 表头 12px） ---------- */
.page-panel:not(#panel-dashboard) table {
  border-collapse: collapse;
}
.page-panel:not(#panel-dashboard) table th {
  font-size: var(--dsu-fz-sm) !important;
  font-weight: 600 !important;
  color: var(--dsu-ink2) !important;
  background: var(--dsu-head) !important;
  padding: 9px 10px !important;
  border-bottom: 1px solid var(--dsu-line) !important;
  white-space: nowrap;
}
.page-panel:not(#panel-dashboard) table td {
  font-size: var(--dsu-fz-md) !important;
  line-height: 1.6 !important;
  color: var(--dsu-ink) !important;
  padding: 9px 10px !important;
  border-bottom: 1px solid var(--dsu-line) !important;
  vertical-align: middle;
}
.page-panel:not(#panel-dashboard) table tbody tr:nth-child(even) td {
  background: rgba(243, 246, 251, 0.55);
}
.page-panel:not(#panel-dashboard) table tbody tr:hover td {
  background: var(--dsu-accent-weak);
  transition: background 0.12s ease;
}
/* 表格内嵌小字（状态列补充行等）统一 11px 辅助灰 */
.page-panel:not(#panel-dashboard) table td div[style*="font-size:11px"],
.page-panel:not(#panel-dashboard) table td span[style*="font-size:11px"] {
  color: var(--dsu-ink3);
}

/* ---------- 2. 徽标/标签统一（11px 圆角胶囊） ---------- */
.page-panel:not(#panel-dashboard) .tag,
.page-panel:not(#panel-dashboard) .badge {
  font-size: var(--dsu-fz-xs) !important;
  line-height: 1.5 !important;
  border-radius: 999px !important;
  padding: 1px 8px !important;
  font-weight: 600 !important;
}

/* ---------- 3. 按钮统一 ---------- */
.page-panel:not(#panel-dashboard) .btn {
  font-size: var(--dsu-fz-md) !important;
  border-radius: 7px !important;
  padding: 7px 14px !important;
  transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;
}
.page-panel:not(#panel-dashboard) .btn-primary,
.page-panel:not(#panel-dashboard) button.btn-primary {
  background: var(--dsu-accent) !important;
  border-color: var(--dsu-accent) !important;
}
.page-panel:not(#panel-dashboard) .btn-primary:hover:not(:disabled) {
  transform: translateY(-1px);
  box-shadow: 0 3px 10px rgba(22, 103, 217, 0.28);
}
/* 表格行内小图标按钮（查看/编辑/网签等）触控达标 */
.page-panel:not(#panel-dashboard) .table-actions button,
.page-panel:not(#panel-dashboard) .table-actions .btn {
  min-width: 30px;
  min-height: 30px;
  border-radius: 7px !important;
}

/* ---------- 4. 表单控件统一（13px，聚焦蓝色光环） ---------- */
.page-panel:not(#panel-dashboard) input[type="text"],
.page-panel:not(#panel-dashboard) input[type="number"],
.page-panel:not(#panel-dashboard) input[type="date"],
.page-panel:not(#panel-dashboard) input[type="search"],
.page-panel:not(#panel-dashboard) input[type="password"],
.page-panel:not(#panel-dashboard) select,
.page-panel:not(#panel-dashboard) textarea,
.page-panel:not(#panel-dashboard) .form-control {
  font-size: var(--dsu-fz-md) !important;
  padding: 7px 10px !important;
  border: 1px solid #d7dfeb !important;
  border-radius: 6px !important;
  background: #fff !important;
  color: var(--dsu-ink) !important;
  transition: border-color 0.12s ease, box-shadow 0.12s ease;
}
.page-panel:not(#panel-dashboard) input:focus,
.page-panel:not(#panel-dashboard) select:focus,
.page-panel:not(#panel-dashboard) textarea:focus,
.page-panel:not(#panel-dashboard) .form-control:focus {
  outline: none !important;
  border-color: var(--dsu-accent) !important;
  box-shadow: 0 0 0 3px rgba(22, 103, 217, 0.12) !important;
}
.page-panel:not(#panel-dashboard) .form-group > label,
.page-panel:not(#panel-dashboard) label {
  font-size: var(--dsu-fz-sm) !important;
  color: var(--dsu-ink2) !important;
}

/* ---------- 5. 卡片/统计卡统一 ---------- */
.page-panel:not(#panel-dashboard) .contract-stats > div,
.page-panel:not(#panel-dashboard) [class*="stat-card"],
.page-panel:not(#panel-dashboard) .card {
  background: var(--dsu-card) !important;
  border: 1px solid var(--dsu-line) !important;
  border-radius: var(--dsu-radius) !important;
  box-shadow: var(--dsu-shadow) !important;
}
.page-panel:not(#panel-dashboard) [class*="stat-card"]:hover,
.page-panel:not(#panel-dashboard) .card:hover {
  box-shadow: var(--dsu-shadow-hover) !important;
}

/* ---------- 6. 弹窗统一（标题 15px / 正文 13px / 标签 12px） ---------- */
.modal .modal-header b,
.modal .modal-header h3 {
  font-size: var(--dsu-fz-title) !important;
}
.modal .modal-body {
  font-size: var(--dsu-fz-md) !important;
}
.modal .modal-body label {
  font-size: var(--dsu-fz-sm) !important;
}

/* ---------- 7. 内联字号长尾归一（桌面）：≤10px 一律 11px，17/19px 归 18/20 附近 ---------- */
.page-panel [style*="font-size:9px"],
.page-panel [style*="font-size:10px"] {
  font-size: var(--dsu-fz-xs) !important;
}

/* ---------- 8. 平板 769~1100：表格紧凑（12px），统计卡自适应换行 ---------- */
@media (min-width: 769px) and (max-width: 1100px) {
  .page-panel:not(#panel-dashboard) table th {
    font-size: var(--dsu-fz-xs) !important;
    padding: 7px 8px !important;
  }
  .page-panel:not(#panel-dashboard) table td {
    font-size: var(--dsu-fz-sm) !important;
    padding: 7px 8px !important;
  }
  .page-panel:not(#panel-dashboard) .contract-stats,
  .page-panel:not(#panel-dashboard) [class*="stat"] {
    flex-wrap: wrap !important;
  }
  .page-panel:not(#panel-dashboard) .contract-stats > div,
  .page-panel:not(#panel-dashboard) [class*="stat-card"] {
    min-width: 132px !important;
    box-sizing: border-box;
  }
}

/* ---------- 9. 手机 ≤768：POOL_FIX 铁律兜底（未卡片化的表必须恢复换行+可横滑） ---------- */
@media (max-width: 768px) {
  .page-panel:not(#panel-dashboard) {
    padding: 10px !important;
  }
  /* 未被 _applyMobileTables 卡片化的表格：显式回退换行，防裁切 */
  .page-panel:not(#panel-dashboard) table:not(.mobile-cards) td,
  .page-panel:not(#panel-dashboard) table:not(.mobile-cards) th {
    white-space: normal !important;
    word-break: break-word;
  }
  .page-panel:not(#panel-dashboard) table:not(.mobile-cards) {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  /* 卡片化表格行内小字不低于 11px */
  .page-panel:not(#panel-dashboard) table.mobile-cards td {
    font-size: var(--dsu-fz-sm) !important;
  }
  .page-panel:not(#panel-dashboard) .modal {
    width: 94% !important;
    max-width: 94% !important;
  }
}

/* ---------- 10. 统一滚动条（桌面） ---------- */
@media (min-width: 769px) {
  .page-panel ::-webkit-scrollbar { width: 8px; height: 8px; }
  .page-panel ::-webkit-scrollbar-thumb { background: #c9d4e6; border-radius: 4px; }
  .page-panel ::-webkit-scrollbar-thumb:hover { background: #aebdd6; }
  .page-panel ::-webkit-scrollbar-track { background: transparent; }
}

/* ---------- 11. CS_ONE_ROW_V1（20261022 老板口径：平板签约列表所有订单一行显示） ----------
   平板(769~1400)签约合同列表保持表格形态（JS 端 _applyMobileTables 已跳过本模块）：
   .cs-scroll 为 render() 里的滚动容器，单元格不换行 → 每单一行，超宽横向滑动。
   手机 ≤768 仍走卡片模式（.mobile-cards 的 min-width:auto 优先级不受影响）。 */
/* CS_FIT_V3（20261022 老板实测）：.main-content 是 flex，.page-container 无 min-width:0
   被表格 nowrap 最小宽度撑爆（1024 平板实测 page-container 1250px → 整页被裁「显示不全」）。
   flex 子项必须 min-width:0，让 .cs-scroll 真正接管横向滚动。 */
.main-content > .page-container {
  min-width: 0;
}
.main-app > .main-content {
  min-width: 0;
}
@media (min-width: 769px) and (max-width: 1400px) {
  .cs-scroll {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: thin;
  }
  .cs-scroll .data-table {
    min-width: 760px;   /* CS_NAME_COL_GONE_V1：名称列删除后 1024 平板可一屏放下 */
  }
  .cs-scroll .data-table th,
  .cs-scroll .data-table td {
    white-space: nowrap !important;
  }
  .cs-scroll .data-table .table-actions {
    display: inline-flex;
    flex-wrap: nowrap;
    gap: 4px;
    vertical-align: middle;
  }
  /* CS_FIT_V2（20261022 老板实测「还是显示不全」）：真实数据下表格 1367px 撑爆 1024 平板。
     甲方/乙方长公司名截断（悬停 title 看全名）+ 隐藏来源小标签 + 操作按钮收紧 + 单元格收边。 */
  .cs-scroll .cs-ellip {
    display: inline-block;
    max-width: 55px;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: bottom;
  }
  .cs-scroll .cs-exp {
    display: inline-block;
    max-width: 96px;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: bottom;
  }
  .cs-scroll .cs-cid {
    max-width: 92px;
    font-size: 10.5px;
  }
  .cs-scroll .cs-originwrap { display: none; }
  .cs-scroll .data-table .tag {
    font-size: 10px !important;
    padding: 0 4px !important;
  }
  /* 状态列的改价重签长提示行等（cap 150px 防撑爆，悬停无 title 但可进详情看） */
  .cs-scroll .data-table td > div:not(.table-actions) {
    max-width: 130px;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .cs-scroll .data-table .table-actions {
    gap: 1px;
  }
  .cs-scroll .data-table .table-actions button {
    width: 20px;
    padding: 2px 0 !important;
    min-width: 18px;
    font-size: 10.5px !important;
  }
  .cs-scroll .data-table th,
  .cs-scroll .data-table td {
    padding: 5px 3px !important;
    font-size: 11px !important;
  }
  /* PERF_ONE_ROW_V1（20261022 老板口径）：业绩核算平板同样一单一行。
     CS_FIT_V3：table-layout:fixed + width:100% 强制贴合容器（真实数据实测 1311px 撑爆 948px 容器），
     单元格 ellipsis 截断；inline 列宽提示（名额 62px）仍生效。 */
  .card-body .performance-table {
    table-layout: fixed;
    width: 100%;
    min-width: 0 !important;
  }
  .card-body .performance-table th,
  .card-body .performance-table td {
    white-space: nowrap !important;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .card-body .performance-table .table-actions {
    display: inline-flex;
    flex-wrap: nowrap;
    gap: 2px;
  }
  .card-body .performance-table .table-actions button {
    padding: 2px 4px !important;
    min-width: 22px;
    font-size: 11px !important;
  }
}

/* ==================== CS_EDIT_SYNC_ONE_ROW_V1（20261023 老板口径） ==================== */
/* 编辑弹窗「收款账户 / 持证人」自动同步卡：字段各压成一行（3 列），手机回退单列 */
.cs-sync-row{grid-template-columns:repeat(3,minmax(0,1fr)) !important;gap:8px !important;}
.cs-sync-row .form-group{min-width:0;margin:0;}
.cs-sync-row .form-group>label{font-size:11px !important;color:#888;}
.cs-sync-row input.form-control{font-size:12px;padding:4px 8px;height:auto;}
@media(max-width:768px){.cs-sync-row{grid-template-columns:1fr !important;}}

/* ==================== QY_FWIN_V1（20261023 老板口径） ==================== */
/* 合同编辑/详情弹窗悬浮窗化：标题栏拖动、八向斜拉缩放、最大化占满全屏、多开窗口 */
/* FWIN_POINTER_V2（20261023）：遮罩恢复可点 → 点窗口外空白 = 保存并退出（modal-autosave 接管）；浮窗本身仍 auto */
.modal-overlay.qy-float{background:transparent !important;pointer-events:auto !important;display:block !important;padding:0 !important;touch-action:none;}
.modal-overlay.qy-float .modal{pointer-events:auto;box-shadow:0 16px 60px rgba(15,23,42,.4);}
.qy-fwin{display:flex !important;flex-direction:column;overflow:hidden;pointer-events:auto !important;
  /* FWIN_NO_TRANSITION_V1（20261023 真凶）：style.css 的 .modal{transition:.3s} 把 left/top/width/height
     全部缓动了 300ms —— 拖动时窗体一直「追手指」，平板横向拖动尤其明显。悬浮窗一律瞬时跟随。 */
  transition:none !important;}
.qy-fwin-bar{display:flex;align-items:center;gap:4px;height:34px;flex:0 0 34px;padding:0 6px 0 12px;background:linear-gradient(90deg,#1D4ED8,#3B82F6);color:#fff;cursor:move;user-select:none;border-radius:8px 8px 0 0;touch-action:none;-webkit-user-select:none;}
.qy-fwin-bar:active{cursor:grabbing;}
.qy-fwin-tt{flex:1;font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.qy-fwin-btn{width:30px;height:26px;border:none;background:transparent;color:#fff;border-radius:6px;cursor:pointer;font-size:12px;display:inline-flex;align-items:center;justify-content:center;}
.qy-fwin-btn:hover{background:rgba(255,255,255,.22);}
.qy-fwin .modal-body,.qy-fwin .modal-content{flex:1 1 auto;overflow:auto;min-height:0;}
.qy-fwin-iframe{display:flex;flex-direction:column;background:#fff;border-radius:10px;box-shadow:0 16px 60px rgba(15,23,42,.4);overflow:hidden;}
.qy-fwin-iframe .qy-fwin-bar{border-radius:10px 10px 0 0;}
.qy-fwin-frame{flex:1 1 auto;width:100%;border:none;background:#F1F5F9;}
.qy-fwin-rz{position:absolute;z-index:6;touch-action:none;}
.qy-fwin.qy-fwin-act{will-change:left,top,width,height;}
.qy-fwin.qy-fwin-act .qy-fwin-frame,.qy-fwin.qy-fwin-act iframe{pointer-events:none;}
/* FWIN_RZ_INSIDE_V1（20261023）：缩放条必须在窗体「里面」——原来挂在 -3px 外面被 overflow:hidden 剪掉，
   只剩 4px 能抓，稍微点偏就落到遮罩上被当成「点外侧」直接存盘关闭。现在全部内缩到边框内 8px。 */
.qy-fwin-rz-n{top:34px;left:16px;right:16px;height:10px;cursor:ns-resize;}
.qy-fwin-rz-s{bottom:0;left:16px;right:16px;height:10px;cursor:ns-resize;}
.qy-fwin-rz-e{right:0;top:40px;bottom:16px;width:12px;cursor:ew-resize;}
.qy-fwin-rz-w{left:0;top:40px;bottom:16px;width:12px;cursor:ew-resize;}
.qy-fwin-rz-ne{top:34px;right:0;width:18px;height:18px;cursor:nesw-resize;}
.qy-fwin-rz-nw{top:34px;left:0;width:18px;height:18px;cursor:nwse-resize;}
.qy-fwin-rz-se{bottom:0;right:0;width:18px;height:18px;cursor:nwse-resize;}
.qy-fwin-rz-sw{bottom:0;left:0;width:18px;height:18px;cursor:nesw-resize;}
/* 多开小窗口模式：隐藏侧栏/页签，给编辑区最大空间 */
body.qy-fwin-mode .sidebar,body.qy-fwin-mode .tabbar,body.qy-fwin-mode .sidebar-overlay{display:none !important;}
body.qy-fwin-mode .main-content{margin-left:0 !important;}
body.qy-fwin-mode{background:#F1F5F9 !important;}
/* 复制按钮图标化（老板口径：只显示图标不显示文字，悬停看提示） */
.qy-copy-btn{padding:4px 7px !important;}

/* ===== PARTY_CARD_SYMMETRY_V1（20261023）：编辑合同甲乙双方对称卡片 ===== */
.edit-party-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:stretch;margin:4px 0 10px;}
.edit-party-card{border:1px solid #DBE7FB;border-radius:10px;padding:12px 14px;background:linear-gradient(180deg,#FBFDFF,#F6F9FF);display:flex;flex-direction:column;gap:8px;min-width:0;}
.edit-party-card.edit-party-a{border-top:3px solid #1F5FBF;}
.edit-party-card.edit-party-b{border-top:3px solid #0E9F8A;}
.edit-party-card .edit-party-title{font-size:13px;font-weight:700;margin:0 0 2px;display:flex;align-items:center;gap:4px;}
.edit-party-card.edit-party-a .edit-party-title{color:#1F5FBF;}
.edit-party-card.edit-party-b .edit-party-title{color:#0E9F8A;}
.edit-party-sub{display:grid;grid-template-columns:1fr 1fr;gap:8px;}
.edit-party-card .form-group{margin-bottom:0;min-width:0;}
@media (max-width:768px){.edit-party-grid{grid-template-columns:1fr;}.edit-party-sub{grid-template-columns:1fr;}}
