/* 大管家 · 通用模块样式（recon/bim/wecom-archive/ai-learning 等独立模块共用） */
.dgj-mod{background:#fff;border-radius: var(--radius-md);padding:14px 16px;min-height:200px;box-shadow:0 1px 3px rgba(0,0,0,.06)}
.dgj-mod-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.dgj-mod-title{font-size:17px;font-weight:700;color:#1f1f1f}
.dgj-btn{background:var(--primary);color:#fff;border:0;border-radius:6px;padding:7px 14px;font-size:13px;cursor:pointer}
.dgj-btn:hover{background:var(--primary-dark)}
.dgj-btn:disabled{opacity:.55;cursor:default}
.dgj-btn-ghost{background:#fff;color:var(--primary);border:1px solid var(--primary);text-decoration:none;display:inline-block;line-height:1.2}
.dgj-btn-ghost:hover{background:var(--primary-ultra-light)}
.dgj-tabs{display:flex;gap: var(--space-1);border-bottom:2px solid #f0f0f0;margin-bottom: var(--space-3);flex-wrap:wrap}
.dgj-tab{padding:7px 14px;font-size:14px;color:#666;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px}
.dgj-tab:hover{color:var(--primary)}
.dgj-tab.on{color:var(--primary);font-weight:700;border-bottom-color:var(--primary)}
.dgj-mod-body{padding-top:4px}
.dgj-cards{display:flex;flex-wrap:wrap;gap: var(--space-3)}
.dgj-card{flex:1 1 120px;min-width:120px;background:var(--surface-3);border:1px solid #eee;border-radius: var(--radius);padding: var(--space-3)}
.dgj-card-t{font-size:12px;color:#999;margin-bottom:6px}
.dgj-card-v{font-size:20px;font-weight:700;color:#1f1f1f}
.dgj-cards-row{display:flex;gap:10px;flex-wrap:wrap}
.dgj-tbl{width:100%;border-collapse:collapse;font-size:13px;margin-top:6px}
.dgj-tbl th,.dgj-tbl td{border:1px solid #eee;padding:7px 9px;text-align:left;vertical-align:top}
.dgj-tbl th{background:#f7f7f7;color:#555;font-weight:600;white-space:nowrap}
.dgj-tbl tr:nth-child(even) td{background:#fcfcfc}
.dgj-tip{color:#999;font-size:12px;margin:8px 0;line-height:1.6}
.dgj-form{display:flex;flex-direction:column;gap: var(--space-3);max-width:520px}
.dgj-form label{font-size:14px;color:#444;display:flex;align-items:center;gap: var(--space-2)}

/* =========================================================
   大管家 · 统一搜索框（Design D）· 全系统复用
   搜索按钮在输入框【外部】；输入框左侧 🔍 图标；高度/圆角与按钮一致
   ========================================================= */
.dg-search-group{ display:flex; align-items:center; gap: var(--space-2); flex-wrap:wrap; }
.dg-select{
  height:36px; padding:0 10px; border:1px solid var(--gray-200,#E5E5E5);
  border-radius:8px; background:#fff; color:var(--gray-700,#3E3A3A);
  font-size:13px; box-sizing:border-box; outline:none; transition:border-color .15s;
}
.dg-select:focus{ border-color:var(--primary,var(--primary)); }
.dg-search-input-wrap{
  position:relative; display:inline-flex; align-items:center;
  height:36px; border:1px solid var(--gray-200,#E5E5E5); border-radius:8px;
  background:#fff; padding:0 12px 0 32px; box-sizing:border-box; transition:border-color .15s, box-shadow .15s;
}
.dg-search-input-wrap:focus-within{ border-color:var(--primary,var(--primary)); box-shadow:0 0 0 3px rgba(210,9,29,.08); }
.dg-search-icon{ position:absolute; left:10px; font-size:14px; color:var(--gray-400,#999); pointer-events:none; }
.dg-search-input{ border:none; outline:none; height:36px; min-width:200px; width:240px; font-size:13px; background:transparent; color:var(--gray-700,#3E3A3A); }
.dg-search-input::placeholder{ color:var(--gray-400,#999); }

/* =========================================================
   大管家 · 统一刷新按钮（Design D）· 长住红圆角图标按钮
   统计卡片右上角 / 表格标题右侧统一使用
   ========================================================= */
.dg-refresh-btn{
  display:inline-flex; align-items:center; gap:6px;
  height:36px; padding:0 14px; border-radius: var(--radius); border:none; cursor:pointer;
  background:linear-gradient(135deg,var(--primary,var(--primary)),var(--primary-dark));
  color:#fff; font-size:13px; font-weight:500; white-space:nowrap;
  transition:filter .15s, transform .15s, box-shadow .15s;
  box-shadow:0 1px 3px rgba(210,9,29,.25);
}
.dg-refresh-btn:hover{ filter:brightness(.96); box-shadow:0 3px 10px rgba(210,9,29,.32); }
.dg-refresh-btn:active{ transform:translateY(1px); }
.dg-refresh-btn .ico{ font-size:15px; line-height:1; display:inline-block; }
.dg-refresh-btn.loading .ico{ animation:dg-spin .8s linear infinite; }
.dg-refresh-btn.ghost{ background:#fff; color:var(--primary,var(--primary)); border:1px solid var(--primary,var(--primary)); box-shadow:none; }
.dg-refresh-btn.ghost:hover{ background:var(--lonve-red-50,var(--primary-ultra-light)); }
@keyframes dg-spin{ to{ transform:rotate(360deg); } }

/* =========================================================
   全系统搜索框外观兜底统一（长住红白）
   作用：未走 .dg-search-group 结构的旧搜索框，也自动显示 🔍 图标、
   与按钮高度对齐（36px），实现“一眼可识别为搜索 + 高度一致”。
   已用 .dg-search-input（butler-views 方案D）的不再叠加图标。
   ========================================================= */
input[placeholder*="搜索"]:not(.dg-search-input),
input[placeholder*="查询"]:not(.dg-search-input),
input[placeholder*="搜"]:not(.dg-search-input){
  padding-left: var(--space-8);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%239CA3AF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:10px center;
  background-size:16px 16px;
}
/* 输入框与操作按钮高度一致（长住规范 36px） */
.dg-in.sm, input.dg-in{ height:36px; box-sizing:border-box; }
.ops-tools .dg-btn, .dg-in.sm + .dg-btn{ height:36px; }
/* 常见搜索字段类（customer-service / grid / hr 等用 .search-input）同样显示 🔍 + 36px 对齐 */
input.search-input:not(.dg-search-input){
  height:36px; box-sizing:border-box; padding-left: var(--space-8);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%239CA3AF' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'/%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:10px center; background-size:16px 16px;
}
/* 统一按钮高度 36px（长住规范），与搜索框/下拉一致 */
.dg-btn{ height:36px; box-sizing:border-box; }
/* 长住规范：按钮尺寸与语义变体（小号用于表格行内操作） */
.dg-btn.sm{ height:28px; padding:2px 10px; font-size:12px; line-height:1; }
.dg-btn.outline{ background:#fff; color:var(--primary); border:1px solid var(--primary); }
.dg-btn.success{ background:var(--success); border-color:var(--success); color:#fff; }
.dg-btn.success.outline{ background:#fff; color:var(--success); border-color:var(--success); }
.dg-btn.danger{ background:var(--primary); border-color:var(--primary); color:#fff; }
.dg-btn.danger.outline{ background:#fff; color:var(--primary); border-color:var(--primary); }


/* [UI统一 2026-09-01] 品牌红收口:页面标题统一品牌红，大红横幅统一为品牌红 */
.page-head .title, .page-title, .module-title, .unified-title { color:var(--primary); }
.page-banner, .red-banner, .module-header-red { background:var(--primary); }

/* ===== 2026-09-02 P1-1 顶部全局搜索框统一（与页面内 .dg-search-group 一致）=====
   规范(Design D)：🔍 图标在左、36px 高、「搜索」按钮外置、长住红白配色
   只改外观，搜索逻辑一个字未动
   ========================================================================= */
header.top-bar .global-search-wrap{
  position:relative;
  display:flex;
  align-items:center;
  gap: var(--space-2);
  flex:1;
  max-width:400px;
  margin-left: var(--space-2);
}
header.top-bar .global-search-input{
  flex:1 1 auto;
  width:auto;
  height:36px !important;
  padding:0 12px 0 34px !important;
  border:1px solid var(--gray-200,#E5E5E5) !important;
  border-radius:8px !important;
  background:#fff !important;
  font-size:13px;
  color:var(--gray-700,#3E3A3A);
  outline:none;
  box-sizing:border-box;
  transition:border-color .15s, box-shadow .15s;
}
header.top-bar .global-search-input:focus{
  border-color:var(--primary,var(--primary)) !important;
  background:#fff !important;
  box-shadow:0 0 0 3px rgba(210,9,29,.08) !important;
}
header.top-bar .global-search-input::placeholder{ color:var(--gray-400,#999); }
header.top-bar .global-search-wrap .gs-magnifier{
  position:absolute;
  left:10px;
  top:50%;
  transform:translateY(-50%);
  width:15px;
  height:15px;
  color:var(--gray-400,#999);
  pointer-events:none;
  z-index:1;
}
/* 「搜索」按钮：由「输入框内绝对定位」改为「外置到输入框右侧」，36px 高，长住红白 */
header.top-bar .global-search-wrap .gs-go{
  position:static !important;
  right:auto !important;
  top:auto !important;
  transform:none !important;
  margin-left:0 !important;
  height:36px !important;
  line-height:36px !important;
  padding:0 16px !important;
  border:none !important;
  border-radius:8px !important;
  background:var(--primary,var(--primary)) !important;
  color:#fff !important;
  font-size:13px !important;
  font-weight:500 !important;
  cursor:pointer;
  white-space:nowrap;
  z-index:auto !important;
  flex:0 0 auto;
  box-sizing:border-box;
  box-shadow:0 1px 3px rgba(210,9,29,.25);
  transition:filter .15s;
}
header.top-bar .global-search-wrap .gs-go:hover{
  filter:brightness(.96) !important;
  opacity:1 !important;
}
/* 结果下拉面板跟随新高度（输入框 36px + 6px 间距） */
header.top-bar .global-search-dropdown{ top:42px; }
/* ===== 2-A SPA 模块页头统一（收尾·第一版·CSS-force） =====
   说明：各模块自绘页头，无法靠单一 class 覆盖；此处对常见页头标题类统一品牌红，
   并对超高等 banner 类做高度收敛，避免巨幅红条。纯样式，不动内部逻辑。
   后续如需逐模块精准统一，需跑 recon2a 分类后补全选择器（见交接单 2-A）。 */
.module-header .title,
.page-header .title,
.sub-page-title,
.page-title,
.module-title,
.header-title,
.card-header .title,
.section-title {
  color: var(--primary, var(--primary)) !important;
  font-weight: 600 !important;
}
/* 已知自绘品牌头（如 .hr-top 白字坐在有色底上）：保持原观感，仅兜底文字可读性 */
.hr-top { color: #fff !important; }
/* 巨幅 banner 高度收敛（防模块自绘超大红条），不影响正常卡片内容 */
[class*="banner"] { max-height: 72px !important; overflow: hidden !important; }
[class*="page-head"][class*="banner"],
[class*="module-head"][class*="banner"] { max-height: 72px !important; overflow: hidden !important; }
