/* 立有信新CRM原型 — 柔和青蓝主题（260819） */
:root {
  --primary: #0d9488;
  --primary-soft: #e6f4f2;
  --primary-dark: #0b7a70;
  --bg: #f4f6f7;
  --card: #ffffff;
  --text: #1f2937;
  --muted: #6b7280;
  --border: #e5e7eb;
  --ok: #16a34a;
  --ok-soft: #e8f7ee;
  --fail: #d64545;
  --fail-soft: #fdeeee;
  --warn: #b45309;
  --warn-soft: #fdf3e3;
  --blue: #1565c0;
  --blue-soft: #e8f1fb;
  --shadow: 0 1px 3px rgba(15, 23, 42, .08), 0 1px 2px rgba(15, 23, 42, .04);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font-family: "Microsoft YaHei", "PingFang SC", "Segoe UI", sans-serif;
       background: var(--bg); color: var(--text); font-size: 14px; line-height: 1.6; }

/* 导航 */
.nav { background: var(--primary); border-bottom: none; box-shadow: var(--shadow);
       position: sticky; top: 0; z-index: 90; }
.nav-inner { max-width: 1200px; margin: 0 auto; padding: 0 20px; height: 66px;
             display: flex; align-items: center; justify-content: space-between; }
.brand { font-weight: 700; font-size: 16px; color: var(--primary); letter-spacing: .5px;
         text-decoration: none; cursor: pointer; display: inline-block;
         padding: 7px 22px; border-radius: 999px; background: #fff; line-height: 1.2; }
.brand:hover { color: var(--primary-dark); }
.nav-link { color: rgba(255,255,255,.85); text-decoration: none; padding: 7px 2px; border-bottom: 2px solid transparent; font-size: 15px; }
.nav-link:hover { color: #fff; text-decoration: none; font-weight: 600; }
.nav-link.active { color: #fff; border-bottom-color: #fff; font-weight: 600; }
.nav-right { display: flex; align-items: center; gap: 14px; color: var(--muted); }
.nav-user { font-weight: 600; color: #fff; text-decoration: none; }
.nav-user:hover { color: #fff; }
.nav a.logout { color: rgba(255,255,255,.85); text-decoration: none; font-size: 13px; }
.nav a.logout:hover { color: #fff; }
/* 新建下拉菜单（点击弹出，JS 控制显示） */
.nav-drop { position: relative; }
.nav-drop-menu { position: absolute; top: 30px; left: -10px; background: #fff;
                 border: 1px solid var(--border); border-radius: 8px; box-shadow: var(--shadow);
                 min-width: 130px; padding: 6px 0; z-index: 100; }
.nav-drop-menu a { display: block; padding: 7px 16px; color: var(--text); text-decoration: none; font-size: 13px; }
.nav-drop-menu a:hover { background: #f5f6f8; }

/* 布局 */
.container { max-width: 1200px; margin: 0 auto; padding: 22px 20px 60px; position: relative; }
.page-title { display: flex; align-items: center; gap: 8px; padding-left: 0;
             font-size: 20px; font-weight: 700; margin-bottom: 4px; }
.page-sub { color: var(--muted); font-size: 13px; margin-bottom: 18px; }
/* 配置子页面标题行返回按钮（260910 老许定）：返回设置主页 */
.page-title.has-back { display: flex; align-items: center; gap: 10px; padding-left: 12px; }
/* 260911 老许定：返回键=绿色立体圆钮SVG图片（全站统一，CSS只管尺寸定位，杜绝布局裁切）
   260912 老许定：图标改为内联 data URI —— 原 url('/static/back-btn.svg') 不带版本号，而 /static 无
   Cache-Control（走 Last-Modified 启发式缓存），改了图也可能一直看不到；内联后随 style.css 内容
   指纹自动更新，并省掉一次独立请求。
   ⚠ 换图标：改 static/back-btn.svg 后跑 _testscripts/regen_back_btn_css.py；只改 svg 或直接改本
     文件的 base64 都不会生效。 */
.page-back { display: inline-block; width: 36px; height: 36px; flex: none;
             background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiIgdmlld0JveD0iMCAwIDcyIDcyIj4KICA8ZGVmcz4KICAgIDxyYWRpYWxHcmFkaWVudCBpZD0iYmciIGN4PSI1MCUiIGN5PSIzMiUiIHI9IjYyJSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9IiM4MEU4ODQiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSI0NSUiIHN0b3AtY29sb3I9IiMzNEM3NTkiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjMTU4MDJEIi8+CiAgICA8L3JhZGlhbEdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJzaGluZSIgeDE9IjUwJSIgeTE9IjAlIiB4Mj0iNTAlIiB5Mj0iMTAwJSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCUiIHN0b3AtY29sb3I9InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSJyZ2JhKDI1NSwyNTUsMjU1LDApIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICA8Y2lyY2xlIGN4PSIzNiIgY3k9IjM2IiByPSIzMCIgZmlsbD0idXJsKCNiZykiLz4KICA8Y2lyY2xlIGN4PSIzNiIgY3k9IjM2IiByPSIzMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJyZ2JhKDAsMCwwLDAuMTIpIiBzdHJva2Utd2lkdGg9IjEiLz4KICA8ZWxsaXBzZSBjeD0iMzYiIGN5PSIyMiIgcng9IjIyIiByeT0iOSIgZmlsbD0idXJsKCNzaGluZSkiLz4KICA8cGF0aCBkPSJNNDQgMjQgTDI4IDM2IEw0NCA0OCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1LjUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPgo8L3N2Zz4K") no-repeat center / contain;
             border: none; padding: 0; margin-right: 4px; text-indent: -9999px;
             text-decoration: none; cursor: pointer; vertical-align: middle; }
.page-back:hover { filter: brightness(1.1); }
.page-back:active { filter: brightness(0.9); transform: translateY(1px); }
/* 详情页页头锁定（260827 老许定）：导航栏下 page-title + page-sub 两行 sticky，滚动时始终可见；
   列表页用 .list-head / .page-sub-row 包裹，下面覆盖回 static 不锁定 */
.page-title { position: sticky; top: 66px; z-index: 85; background: var(--bg); }
.page-sub { position: sticky; top: 101px; z-index: 85; background: var(--bg); }
.list-head .page-title { position: static; background: transparent; z-index: auto; }
.page-sub-row .page-sub { position: static; background: transparent; z-index: auto; }
/* 日历页筛选栏（选择日期/视图/人员行）锁定在标题行下方（260827 老许定） */
.cal-filter-bar { position: sticky; top: 101px; z-index: 85; background: var(--bg);
                  padding: 6px 0 10px; margin-bottom: 6px; }
.card { background: var(--card); border-radius: 12px; box-shadow: var(--shadow);
        padding: 18px 20px; margin-bottom: 16px; }
.card-title { font-size: 15px; font-weight: 700; margin-bottom: 12px;
              display: flex; align-items: center; gap: 8px;
              padding-left: 10px; border-left: 4px solid var(--primary); }
.card-title .hint { font-size: 12px; color: var(--muted); font-weight: 400; }
/* 工商信息标题行改青蓝横条（像表头，260826 老许定）；字段块样式不动 */
.card[data-section="company"] .card-title { background: var(--primary); color: #fff;
    margin: -18px -20px 12px; padding: 10px 20px; border-radius: 12px 12px 0 0;
    font-weight: 600; border-left: none; }

/* 统计卡 */
.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin-bottom: 18px; }
.stat { background: #fff; border-radius: 12px; box-shadow: var(--shadow); padding: 16px 18px; }
.stat .num { font-size: 26px; font-weight: 800; color: var(--primary); }
.stat .num.warn { color: var(--fail); }
.stat .lbl { color: var(--muted); font-size: 13px; margin-top: 2px; }

/* 表格 */
table { width: 100%; border-collapse: collapse; background: #fff; box-shadow: var(--shadow); }
/* 表格圆角（260830 改用单元格圆角，替代 table overflow:hidden——overflow 会破坏 thead 表头 sticky） */
table[data-table] thead tr th:first-child { border-top-left-radius: 10px; }
table[data-table] thead tr th:last-child { border-top-right-radius: 10px; }
table[data-table] tbody tr:last-child td:first-child { border-bottom-left-radius: 10px; }
table[data-table] tbody tr:last-child td:last-child { border-bottom-right-radius: 10px; }
/* 列表页表头锁定（260830 老许定）：滚动时列头固定在导航栏下方 */
table[data-table] thead th { position: sticky; top: 66px; z-index: 80; }
th { background: var(--primary); color: #fff; text-align: center; font-weight: 600;
     padding: 10px 12px; font-size: 13px; white-space: nowrap; }
td { padding: 9px 12px; border-top: 1px solid #f1f3f5; font-size: 13px; vertical-align: middle; }
tr:hover td { background: #f8fbfa; }
.td-strong { font-weight: 600; }
.td-muted { color: var(--muted); font-size: 12px; }

/* badge */
.badge { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.badge-ok { background: var(--ok-soft); color: var(--ok); }
.badge-fail { background: var(--fail-soft); color: var(--fail); }
.badge-info { background: var(--blue-soft); color: var(--blue); }
.badge-promo { background: var(--primary-soft); color: var(--primary); }
.badge-muted { background: #eef0f2; color: var(--muted); }
.badge-warn { background: #fdf3d7; color: #b45309; }

/* 关键推荐 */
.rec-box { background: var(--primary-soft); border: 1px solid var(--primary); border-radius: 10px;
           padding: 14px 16px; }
.rec-priority { margin-bottom: 8px; }
.rec-text { font-size: 14px; line-height: 1.7; color: var(--text); }

/* 得分 */
.score { font-weight: 800; font-size: 15px; }
.score-ok { color: var(--ok); }
.score-fail { color: var(--fail); }

/* 按钮 */
.btn { display: inline-block; padding: 8px 18px; border-radius: 8px; border: none; cursor: pointer;
       font-size: 14px; font-weight: 600; text-decoration: none; transition: .15s; line-height: 22px; }
.btn-primary { background: var(--primary); color: #fff; }
.btn-primary:hover { background: var(--primary-dark); }
.btn-soft { background: var(--primary-soft); color: var(--primary-dark); }
.btn-soft:hover { background: #d4ece7; }
.btn-warn { background: #fdf3d7; color: var(--warn); }
.btn-warn:hover { background: #fae8b0; }
.btn-danger-soft { background: var(--fail-soft); color: var(--fail); }
.btn-outline { background: #fff; color: var(--text); border: 1px solid var(--border); }
.btn-outline:hover { border-color: var(--primary); color: var(--primary); }
.btn-sm { padding: 4px 12px; font-size: 13px; }

/* 表单 */
.form-item { display: flex; flex-direction: column; gap: 5px; }
.form-item.full { grid-column: 1 / -1; }
label { font-size: 13px; font-weight: 600; color: #37474f; }
label .req { color: var(--fail); }
input, select, textarea { border: 1px solid #cbd5e1; border-radius: 8px; padding: 8px 10px;
        font-size: 14px; font-family: inherit; background: #fff; color: var(--text); }
input, select { height: 38px; }
input:focus, select:focus, textarea:focus { outline: 2px solid var(--primary-soft); border-color: var(--primary); }
textarea { min-height: 140px; resize: vertical; }
.hint-text { font-size: 12px; color: var(--muted); }

/* 评审意见 */
.review-box { background: #f8faf9; border: 1px solid var(--border); border-left: 4px solid var(--primary);
              border-radius: 8px; padding: 14px 16px; white-space: pre-wrap; font-size: 13px;
              font-family: "Microsoft YaHei", sans-serif; line-height: 1.7; }
.review-box.fail { border-left-color: var(--fail); }

/* 时间线 */
.timeline { background: #fff; border-radius: 10px; border: 1px solid var(--border); padding: 12px 16px;
            max-height: 420px; overflow-y: auto; }
.tl-title { font-weight: 700; font-size: 13px; margin-bottom: 8px; color: #37474f; }
.tl-line { font-size: 12.5px; padding: 4px 0; border-bottom: 1px dashed #f0f2f4;
           color: #37474f; word-break: break-all; }
.tl-line:last-child { border-bottom: none; }
.tl-line.today { background: var(--primary-soft); font-weight: 700; color: var(--primary-dark);
                 border-radius: 6px; padding: 4px 8px; margin: 2px -8px; }

/* 详情行 */
.detail-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; }
.detail-grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; }
.detail-grid-4 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; }
.detail-grid-line { display: grid; grid-template-columns: repeat(8, 1fr); gap: 10px; }
.detail-grid-line .detail-item .v { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.detail-item { background: #fafbfc; border-radius: 8px; padding: 8px 12px; }
.detail-item .k { font-size: 12px; color: var(--muted); }
.detail-item .v { font-weight: 600; margin-top: 2px; }
.detail-item.long .v { font-weight: 400; white-space: pre-wrap; font-size: 13px; }
/* 详情页：一行全是长文本字段，值框上下各空一行（260824 老许定） */
.detail-row.all-long .detail-item.long { padding: 20px 14px; }
.detail-item-wide { grid-column: 1 / -1; }
.detail-item-wide .v { font-weight: 400; white-space: pre-wrap; }
.detail-item-half { grid-column: span 2; }
/* 拜访投入/拜访收获/渠道合作：字段内「字段名:值」同一行（260824 老许定），字段占位/网格不变 */
.detail-item.inline .k { display: inline; }
.detail-item.inline .v { display: inline; margin-top: 0; }

/* 提示条 */
.notice { background: var(--blue-soft); color: var(--blue); border-radius: 8px; padding: 10px 14px;
          font-size: 13px; margin-bottom: 14px; }
.notice.warn { background: var(--warn-soft); color: var(--warn); }
.error-box { background: var(--fail-soft); color: var(--fail); border-radius: 8px; padding: 10px 14px;
             font-size: 13px; margin-bottom: 14px; }
.empty { color: var(--muted); text-align: center; padding: 26px; font-size: 13px; }

/* 过滤栏 */
.filter-bar { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 14px; }
.filter-bar input, .filter-bar select { width: auto; }
.search-input { min-width: 220px; }
/* 列表页标题行：对象名称 + 筛选栏同一行 */
.list-head { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; margin-bottom: 4px; }
.list-head .page-title { margin-bottom: 0; }
.list-head .filter-bar { margin-bottom: 0; }
.list-head .search-input { min-width: 160px; }

/* 搜索框清除按钮（×）：绝对定位在输入框内最右端、垂直居中 */
.search-wrap { position: relative; display: inline-flex; align-items: center; }
.search-wrap input { padding-right: 30px; }
/* 表单字段里的输入框（form-item）占满宽度，包裹 span 也要占满，避免 width:100% 塌缩 */
.form-item .search-wrap { display: flex; width: 100%; }
.form-item .search-wrap input { width: 100%; }
.search-clear { position: absolute; right: 6px; top: 0; bottom: 0; margin: auto 0;
                width: 18px; height: 18px; border: none; border-radius: 50%;
                background: #c9cdd3; color: #fff; cursor: pointer; font-size: 14px;
                line-height: 1; padding: 0; display: none;
                align-items: center; justify-content: center; }
.search-clear:hover { background: #9aa0a8; }

/* 创建时间筛选：触发器 + 弹出日期面板 */
.date-filter { position: relative; }
.date-trigger { height: 38px; padding: 0 12px; border: 1px solid var(--border); border-radius: 8px;
                background: #fff; color: var(--text); font-size: 14px; cursor: pointer;
                font-family: inherit; }
.date-trigger:hover { border-color: var(--primary); color: var(--primary); }
.date-panel { position: absolute; top: 44px; left: 0; z-index: 200; background: #fff;
              border: 1px solid var(--border); border-radius: 8px; box-shadow: var(--shadow);
              padding: 10px 12px; display: flex; gap: 8px; align-items: center; white-space: nowrap; }
.date-panel input[type="date"] { height: 32px; }
.date-panel .hint { color: var(--muted); font-size: 13px; }
.stat-ctrl .date-filter { position: static; }
.stat-ctrl .date-panel { left: auto; right: 0; }

/* 登录页 */
.login-wrap { min-height: 100vh; display: flex; align-items: center; justify-content: center;
              background: linear-gradient(160deg, #e8f5f3 0%, #f4f6f7 60%); }
.login-card { width: 380px; background: #fff; border-radius: 16px; box-shadow: 0 10px 40px rgba(15,23,42,.12);
              padding: 34px 32px; }
.login-title { font-size: 20px; font-weight: 800; color: var(--primary); text-align: center; margin-bottom: 4px; }
.login-sub { text-align: center; color: var(--muted); font-size: 13px; margin-bottom: 24px; }
.login-tip { margin-top: 18px; background: var(--primary-soft); border-radius: 8px; padding: 10px 12px;
             font-size: 12px; color: var(--primary-dark); line-height: 1.8; }

/* 分类结果链 */
.chain { border-left: 3px solid var(--primary); padding: 10px 14px; background: #f8faf9;
         border-radius: 0 8px 8px 0; margin: 10px 0; }
.chain-old { color: var(--muted); text-decoration: line-through; }
.chain-new { font-weight: 800; color: var(--primary); font-size: 16px; }

.footer-note { text-align: center; color: var(--muted); font-size: 12px; padding: 20px 0 30px; }
a { color: var(--primary); }
a:hover { text-decoration: underline; }

/* ===== 我的主页 ===== */
.welcome { padding: 6px 2px 16px; }
.welcome-greet { font-size: 22px; font-weight: 800; }
.welcome-date { color: var(--muted); font-size: 14px; margin-top: 4px; }

.stat-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
.stat-ctrl { display: flex; align-items: center; gap: 8px; position: relative; }
/* 待处理栏目：标题+条件说明+人员筛选 + 分页 */
.todo-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
.todo-titlebar { cursor: pointer; user-select: none; }
.todo-collapsed .todo-titlebar { margin-bottom: 0; }
.todo-title-text { display: inline-flex; align-items: center; gap: 8px; }
.todo-head-right { display: inline-flex; align-items: center; gap: 8px; }
.todo-arrow { color: var(--muted); font-size: 14px; transition: transform .15s; }
.todo-desc { font-weight: 400; color: var(--muted); }
.todo-owner { height: 34px; font-size: 13px; padding: 0 10px; }
.stat-person { height: 34px; font-size: 13px; padding: 0 10px; }
.todo-head-row th { text-align: center; }
.todo-pager { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 10px;
              color: var(--muted); font-size: 13px; }
.todo-pager .ps { width: 52px; height: 28px; padding: 0 6px; font-size: 13px; }
.todo-pager .jp { width: 52px; height: 28px; padding: 0 4px; font-size: 13px; }
.todo-pager button { padding: 2px 10px; font-size: 13px; }
.todo-summary { margin-top: 14px; padding-top: 12px; border-top: 1px dashed var(--border);
                font-size: 13px; color: var(--muted); }
.todo-summary-num { font-size: 18px; font-weight: 800; color: var(--primary); margin: 0 2px; }
.todo-badge { display: inline-block; min-width: 20px; height: 20px; line-height: 20px; padding: 0 6px;
              border-radius: 999px; background: var(--fail-soft); color: var(--fail);
              font-size: 12px; font-weight: 700; text-align: center; vertical-align: middle; }
.stat-grid { display: flex; gap: 12px; }
.stat-card { flex: 1; background: #f8faf9; border: 1px solid var(--border); border-radius: 10px;
             padding: 16px 14px; text-align: center; display: block;
             text-decoration: none; color: inherit; }
.stat-card:hover { border-color: var(--primary); }
.stat-num { font-size: 28px; font-weight: 800; color: var(--primary); line-height: 1.2; }
.stat-label { font-size: 13px; color: var(--muted); margin-top: 6px; }

/* 高级搜索弹窗 */
.modal-mask { position: fixed; inset: 0; background: rgba(0,0,0,0.45); z-index: 999;
              display: flex; align-items: center; justify-content: center; }
/* 全屏 loading 转圈（生成AI建议等长耗时同步操作，260827 老许定） */
.spinner { width: 44px; height: 44px; border: 4px solid rgba(255,255,255,0.25);
           border-top-color: #fff; border-radius: 50%; margin: 0 auto;
           animation: crm-spin 0.8s linear infinite; }
@keyframes crm-spin { to { transform: rotate(360deg); } }
.loading-text { margin-top: 16px; color: #fff; font-size: 14px; }
.modal { background: var(--card); border-radius: 14px; width: 560px; max-width: 92vw;
         box-shadow: 0 20px 60px rgba(0,0,0,0.3); overflow: hidden; }
.modal-head { padding: 16px 20px; font-size: 16px; font-weight: 700; border-bottom: 1px solid var(--border);
              display: flex; justify-content: space-between; align-items: center; }
.modal-close { cursor: pointer; font-size: 22px; color: var(--muted); line-height: 1; }
.modal-body { padding: 18px 20px; }
.modal-foot { padding: 14px 20px; border-top: 1px solid var(--border); text-align: right; display: flex; gap: 10px; justify-content: flex-end; }
.adv-field { margin-bottom: 16px; }
.adv-label { display: block; font-weight: 700; font-size: 14px; margin-bottom: 8px; }
.adv-field .radio, .adv-field .checkbox { margin-right: 16px; font-size: 14px; cursor: pointer; display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.adv-field .radio input, .adv-field .checkbox input { flex-shrink: 0; margin: 0; }
.adv-objects { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.adv-btns { margin-top: 10px; display: flex; gap: 8px; }

/* 返回按钮 + 长文本单元格 */
/* 260911 老许定：悬浮圆钮 .back-link 已删（与标题行 .page-back 重复，两键同干 goBack）——
   全站统一用标题行 .page-back ghost 样式（见文件头部唯一定义） */
/* 260911 老许定：page-back 统一低调 ghost 风格（见文件头部唯一定义）——
   原此处 260831 报告页时代的胶囊样式（主色边框+填充背景）抢标题视觉焦点，已删 */
/* 报告主页（260831 + 260903 美观打磨） */
.report-count { display: inline-block; min-width: 20px; height: 20px; line-height: 20px; padding: 0 6px;
                border-radius: 999px; background: #fff; color: var(--primary-dark);
                font-size: 12px; font-weight: 700; text-align: center; vertical-align: middle; margin-left: 2px; }
.report-titlebar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
                   background: var(--primary-soft); margin: -18px -20px 12px; padding: 10px 16px;
                   border-radius: 12px 12px 0 0; border-left: none; }
.report-head-right { display: flex; align-items: center; }
.report-head-right .search-input { width: 200px; }
.report-list { padding: 4px 2px; }
.report-row { display: flex; align-items: center; justify-content: space-between; gap: 16px;
              padding: 10px 14px; border-bottom: 1px solid var(--border); flex-wrap: wrap; }
.report-row:last-child { border-bottom: none; }
.report-row:hover { background: var(--bg); }
.report-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.report-name-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.report-icon { font-size: 15px; line-height: 1; }
.report-name { font-size: 15px; font-weight: 600; color: var(--text); text-decoration: none; }
a.report-name:hover { color: var(--primary); }
.report-name .hint { font-weight: 400; }
.report-desc { font-size: 12px; color: var(--muted); margin-top: 1px; }
.report-stats { display: flex; gap: 10px; flex-wrap: wrap; }
.rstat { display: flex; flex-direction: column; align-items: center; min-width: 52px;
         padding: 6px 10px; background: var(--bg); border-radius: 8px; }
.rstat b { font-size: 18px; color: var(--primary); font-weight: 700; }
.rstat.warn b { color: #d97706; }
.rstat-label { font-size: 11px; color: var(--muted); }
.report-date { padding: 5px 8px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px; }
.report-date-label { font-size: 12px; color: var(--muted); margin-left: 8px; }
.rstat-tag { font-size: 12px; color: var(--muted); align-self: center; }
.cell-wrap { max-width: 340px; word-break: break-all; white-space: normal; }
/* 日历列表表列宽自适应（260904 老许定：参考主页栏目）——把 .cal-table 的 fixed 改回 auto，
   短列靠内容自适应、长文本列由 base.html viewCellWrap() 加 cell-wrap 换行；
   仅「无 data-view 的 .cal-table」（周/月视图日期矩阵）保留 fixed。 */
table.cal-table[data-view] { table-layout: auto; }
.partner-proj { line-height: 1.5; word-break: break-all; }
.partner-proj + .partner-proj { margin-top: 5px; padding-top: 5px; border-top: 1px dashed var(--border); }

/* 右键菜单 + 批量操作栏 */
.ctx-menu { position: fixed; background: #fff; border: 1px solid var(--border);
            border-radius: 8px; box-shadow: 0 8px 24px rgba(0,0,0,0.16); z-index: 1000;
            min-width: 130px; overflow: hidden; }
.ctx-item { padding: 9px 16px; font-size: 14px; cursor: pointer; }
.ctx-item:hover { background: #f0f6f5; }
.ctx-danger { color: var(--fail); }
.batch-bar { position: fixed; bottom: 22px; left: 50%; transform: translateX(-50%);
             background: #fff; border: 1px solid var(--border); border-radius: 10px;
             box-shadow: 0 8px 24px rgba(0,0,0,0.16); padding: 10px 18px;
             display: flex; gap: 12px; align-items: center; flex-wrap: wrap; z-index: 900; }
.batch-sel { height: 32px; font-size: 13px; padding: 0 8px; border: 1px solid var(--border);
             border-radius: 6px; background: #fff; color: var(--text); }
.row-check, .check-all { cursor: pointer; width: 16px; height: 16px; }
/* 列表页首列复选框对齐（260830 老许反馈）：表头全选框与正文勾选框水平居中对齐 */
table[data-table] thead th:first-child,
table[data-table] tbody td:first-child { text-align: center; }

/* 分页 */
.pagination { display: flex; gap: 10px; align-items: center; justify-content: space-between;
              margin-top: 14px; font-size: 13px; color: var(--muted); }
.pagination-right { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.pagination select { width: auto; }
.pagination .btn:disabled { opacity: 0.4; cursor: not-allowed; }
/* 详情页动态分页(auto-pager)扁平结构：元素靠右紧凑排列，勿 space-between 散开 */
.pagination.auto-pager { justify-content: flex-end; flex-wrap: wrap; }
/* 列表页服务端分页栏固定在屏幕底部（260827 老许定）：内容超屏时不随滚动埋没 */
.pagination:not(.auto-pager) { position: sticky; bottom: 0; z-index: 80; background: var(--bg);
                               margin-top: 10px; padding: 10px 2px; border-top: 1px solid var(--border); }

/* 编辑表单 */
.form-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; }
.form-grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; }
.form-grid-5 { display: grid; grid-template-columns: repeat(5, 1fr); gap: 14px; }
/* 信息组分行渲染（1/4 格子系统：行内列数/跨列由后端 layout_group_rows 算出，内联 style 指定） */
.form-row { display: grid; gap: 14px 18px; margin-bottom: 16px; }
.form-row:last-child { margin-bottom: 0; }
.detail-row { display: grid; gap: 10px; margin-bottom: 10px; }
.detail-row:last-child { margin-bottom: 0; }
.form-item label { display: block; font-size: 13px; color: var(--muted); margin-bottom: 5px; }
.form-item input, .form-item select, .form-item textarea { width: 100%; }
.form-item input.phone-invalid { border-color: var(--fail); background: var(--fail-soft); }
.phone-tip { display: none; margin-top: 4px; font-size: 12px; line-height: 1.4; }
.phone-tip-err { color: var(--fail); }
.phone-tip-warn { color: #b8860b; }
.form-item textarea { resize: vertical; min-height: 84px; font-family: inherit; font-size: 13px; }
/* 一行全是长文本字段：高度翻倍 + 框内上下各空一行（260824 老许定；内容多时 autoGrow 仍自动撑高） */
.form-row.all-long textarea { min-height: 84px; padding: 20px 12px; }
/* 跨行（grid-row span）长文本：textarea 填满剩余高度，上下框线与同行短字段对齐 */
.form-item.tall textarea { flex: 1; }
/* 跨行短字段（靠左上下两行的 1/4 字段）不参与 flex 拉伸，label+控件紧凑顶部对齐 */
.form-item.tall .ro-val { flex: 1; }
.warranty-multi { max-height: 170px; overflow-y: auto; border: 1px solid var(--border);
                  border-radius: 6px; padding: 6px 8px; background: #fafcfc; }
.warranty-check { display: flex; align-items: center; gap: 6px; padding: 3px 0;
                  font-size: 13px; cursor: pointer; }
.form-item .warranty-check { display: flex; align-items: center; gap: 6px; padding: 3px 0;
                             font-size: 13px; cursor: pointer; }
.form-item .warranty-check input[type="checkbox"] { width: auto; flex-shrink: 0; margin: 0; }
.form-item .ro-val { padding: 8px 10px; background: var(--bg-soft, #f5f6f8); border-radius: 6px;
                     font-size: 14px; color: var(--muted); border: 1px dashed var(--border); }
/* 客户名称查重联想下拉（260823）：absolute 浮于输入框下方，滚动条 + 点选跳详情 */
.name-lookup { position: absolute; left: 0; top: 100%; margin-top: 4px;
               min-width: 100%; width: max-content;
               background: #fff; border: 1px solid var(--border); border-radius: 8px;
               box-shadow: 0 8px 24px rgba(0,0,0,.12); max-height: 240px; overflow-y: auto; z-index: 60; }
/* 260904 老许定：联想下拉宽度按内容自适应（width:max-content + item 不换行）；原 name-lookup-wide 的 right:-50% 已废弃 */
.name-lookup-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px;
                    font-size: 12px; color: #37474f; text-decoration: none;
                    border-bottom: 1px solid #f0f2f3; white-space: nowrap; }
.name-lookup-item:last-child { border-bottom: none; }
.name-lookup-item:hover { background: var(--primary-soft); }
.nl-meta { color: var(--muted); margin-left: auto; white-space: nowrap; }
.nl-type { color: var(--primary); background: var(--primary-soft); padding: 0 6px; border-radius: 999px; font-size: 11px; margin-left: 6px; }
.name-lookup-count { padding: 6px; text-align: center; font-size: 12px; color: var(--muted);
                     border-top: 1px solid #f0f2f3; background: #fafbfc; }
.name-lookup-empty { padding: 12px; text-align: center; font-size: 13px; color: var(--muted); }
/* 规划「增加」下拉框：行数放宽，尽量延伸到屏幕底部（260828 老许定） */
.name-lookup-tall { max-height: 70vh; }
.name-lookup-item .nl-name-link, .name-lookup-item .nl-unit-link { color: var(--primary); text-decoration: none; }
.name-lookup-item .nl-name-link:hover, .name-lookup-item .nl-unit-link:hover { text-decoration: underline; }
.name-dup-tip { margin-top: 6px; padding: 6px 10px; background: var(--fail-soft); color: var(--fail);
                border-radius: 6px; font-size: 12px; }
.name-dup-tip a { color: var(--fail); font-weight: 600; }
/* 关联列表行操作笔头 + 右键菜单（260823） */
.row-op { width: 30px; text-align: center; padding: 4px 2px !important; }
.row-pencil { cursor: pointer; color: var(--muted); font-size: 14px; display: inline-block; padding: 2px 4px; border-radius: 4px; }
.row-pencil:hover { color: var(--primary); background: var(--primary-soft); }
.btn-pencil { cursor: pointer; color: var(--muted); font-size: 14px; border: none; background: none;
              padding: 2px 5px; border-radius: 4px; line-height: 1; vertical-align: middle; }
.btn-pencil:hover { color: var(--primary); background: var(--primary-soft); }
.row-op-th { width: 30px; }
.row-menu { position: fixed; z-index: 9999; background: #fff; border: 1px solid var(--border);
            border-radius: 8px; box-shadow: 0 6px 20px rgba(0,0,0,.15); min-width: 110px; padding: 4px 0; }
.row-menu-item { display: block; width: 100%; text-align: left; padding: 8px 14px; font-size: 13px;
                 color: #37474f; cursor: pointer; border: none; background: none; }
.row-menu-item:hover { background: var(--primary-soft); }
.row-menu-item.danger { color: var(--fail); }
.row-menu-item.danger:hover { background: var(--fail-soft); }
.form-actions { margin-top: 18px; display: flex; gap: 10px; }

/* 权限管理页 */
.perm-tabs { display: flex; gap: 8px; margin-bottom: 18px; flex-wrap: wrap; }
.perm-tab { padding: 7px 16px; border-radius: 8px; background: #fff; border: 1px solid var(--border);
           color: var(--muted); text-decoration: none; font-size: 13px; }
.perm-tab:hover { color: var(--text); }
.perm-tab.active { background: var(--primary); color: #fff; border-color: var(--primary); font-weight: 600; }
.perm-card { margin-bottom: 14px; }
.perm-row { display: flex; margin-bottom: 10px; }
.perm-row:last-child { margin-bottom: 0; }
.perm-label { flex: 0 0 88px; font-size: 13px; color: var(--muted); padding-top: 3px; }
.perm-cols { flex: 1; display: flex; flex-wrap: wrap; gap: 8px 16px; }
.perm-cols .checkbox { font-size: 13px; cursor: pointer; display: flex; align-items: center; gap: 5px; white-space: nowrap; }
.perm-cols .checkbox input { flex-shrink: 0; margin: 0; }
.perm-save { position: sticky; bottom: 0; background: var(--bg); padding: 14px 0; }
.perm-save .btn { min-width: 180px; }

/* 260910 老许定：权限页非编辑态勾选框可读性——原 disabled 灰白看不清勾没勾。
   已勾选 = 主题色实底+白勾；未勾选 = 浅灰空心框，一眼分明。
   仅作用于 #permForm 内的 disabled（非编辑态），点「编辑」后恢复原生可编辑样式。 */
#permForm input[type="checkbox"]:disabled {
  appearance: none; -webkit-appearance: none;
  width: 15px; height: 15px;
  border: 1.5px solid #b6bec9;
  border-radius: 3px;
  background: #f1f4f7;
  position: relative;
  cursor: not-allowed;
  flex-shrink: 0; margin: 0;
}
#permForm input[type="checkbox"]:disabled:checked {
  border-color: var(--primary);
  background: var(--primary);
}
#permForm input[type="checkbox"]:disabled:checked::after {
  content: '';
  position: absolute;
  left: 4px; top: 1px;
  width: 4px; height: 8px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}

/* 设置中心页 */
.settings-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 14px; }
.setting-card { padding: 18px; position: relative; }
.setting-card .card-title { padding-right: 24px; }
.setting-desc { font-size: 13px; color: var(--muted); margin-bottom: 14px; min-height: 36px; }
.setting-disabled { opacity: 0.7; }
/* 配置中心卡片拖拽排序（260825 老许定） */
.settings-toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }
.settings-tip { font-size: 13px; color: var(--muted); }
.setting-card .drag-handle { position: absolute; top: 12px; right: 12px; cursor: grab;
                              color: var(--muted); font-size: 15px; user-select: none; }
.setting-card .drag-handle:hover { color: var(--primary); }
.setting-card[draggable="true"] { cursor: grab; }
.setting-card.dragging { opacity: .55; }
.setting-card.drag-over { box-shadow: inset 0 0 0 2px var(--primary); }

/* 组织架构树（组织设定·组织架构 tab，260825 老许定） */
.org-root { font-size: 16px; font-weight: 600; margin-bottom: 12px; padding: 10px 14px;
            background: var(--primary-soft); border-radius: 8px; }
.org-tree { font-size: 14px; }
.org-dept { border-left: 1px solid var(--border); padding-left: 12px; margin-top: 10px; }
.org-dept-head { font-weight: 600; padding: 4px 0; }
.org-caret { color: var(--primary); }
.org-count { color: var(--muted); font-weight: 400; font-size: 12px; margin-left: 6px; }
.org-parent-tag { color: var(--muted); font-weight: 400; font-size: 12px; margin-left: 10px; }
.org-members { margin: 2px 0 4px 20px; }
.org-person { display: flex; gap: 14px; padding: 2px 0; font-size: 13px; color: var(--text); }
.org-person-name { font-weight: 500; min-width: 70px; }
.org-person-role { color: var(--primary-dark); }
.org-person-boss { color: var(--muted); }

/* 导航设置继承提示（260825 老许定：没单独配置的维度跟随「全员」） */
.inherit-tip { margin: 10px 0 2px; padding: 8px 12px; font-size: 13px; border-radius: 8px;
               background: var(--blue-soft); color: var(--blue); }
.inherit-tip-own { background: #eef0f2; color: var(--muted); }
.inherit-tip-warn { background: #fdf3d7; border: 1px solid #f0d9a6; }

/* 三栏布局（分类信息/结构定义/界面配置/自动共享/资源转移通用） */
.three-col { display: grid; grid-template-columns: 200px 1fr 220px; gap: 14px; align-items: start; }
.three-left, .three-right, .three-main { padding: 14px; }
.col-head { font-weight: 600; font-size: 15px; margin-bottom: 10px; padding-bottom: 8px;
            border-bottom: 1px solid var(--border); }
.col-item { display: block; padding: 7px 10px; border-radius: 6px; color: var(--text);
            text-decoration: none; font-size: 14px; margin-bottom: 2px; }
.col-item:hover { background: var(--primary-soft); }
.col-item.active { background: var(--primary-soft); color: var(--primary-dark); font-weight: 600; }
.empty-tip { color: var(--muted); font-size: 13px; padding: 16px 4px; text-align: center; }

.opt-table { width: 100%; border-collapse: collapse; }
.opt-table th { text-align: left; font-size: 13px; color: #fff; font-weight: 600;
                padding: 6px 8px; border-bottom: 1px solid var(--border); }
.opt-table td { padding: 6px 8px; border-bottom: 1px solid var(--border); vertical-align: middle; }
.td-center { text-align: center; }
.opt-table .inp { width: 100%; padding: 6px 8px; border: 1px solid var(--border);
                  border-radius: 6px; font-size: 14px; font-family: inherit; box-sizing: border-box; }
.opt-table .inp:focus { outline: none; border-color: var(--primary); }
.opt-actions { display: flex; gap: 10px; margin-top: 14px; align-items: center; }
.btn-mini { border: 1px solid var(--border); background: var(--card); color: var(--text);
            border-radius: 5px; width: 26px; height: 26px; cursor: pointer; font-size: 14px;
            line-height: 1; margin: 0 1px; }
.btn-mini:hover { border-color: var(--primary); color: var(--primary-dark); }
.btn-mini-del:hover { border-color: var(--fail); color: var(--fail); }

/* 结构定义（三栏）补充 */
.col-item-add { border: 1px dashed var(--border); color: var(--primary-dark);
                text-align: center; margin-top: 8px; }
.col-item-add:hover { border-color: var(--primary); background: var(--primary-soft); }
.col-item .badge { margin-left: 6px; }
.btn-danger { background: var(--fail); color: #fff; }
.btn-danger:hover { background: #b93636; }
.form-item-check label, label.form-item-check { display: flex; align-items: center; gap: 6px; font-size: 14px;
                          color: var(--text); cursor: pointer; white-space: nowrap; }
.form-item-check input, label.form-item-check input { width: auto; flex-shrink: 0; margin: 0; cursor: pointer; }
/* 通用 checkbox label 对齐（260825 老许反馈：勾选框与名称要在一行，覆盖 org/permissions 等裸 label.checkbox） */
label.checkbox { display: inline-flex; align-items: center; gap: 5px; cursor: pointer; font-size: 14px; color: var(--text); white-space: nowrap; }
label.checkbox input { flex-shrink: 0; margin: 0; cursor: pointer; }
/* 导航设置：上级未授权的对象灰显不可选（260825 老许定） */
label.checkbox.disabled { color: var(--muted); opacity: 0.5; cursor: not-allowed; }
label.checkbox.disabled input { cursor: not-allowed; }

/* 结构定义字段列表表格（260820：中栏表格 + 右栏编辑表单） */
.three-col-edit { grid-template-columns: 200px 1fr 320px; }
.field-table tbody tr { cursor: pointer; }
.field-table tbody tr:hover { background: var(--primary-soft); }
.field-table tbody tr.active { background: var(--primary-soft); }
.field-table tbody tr.row-off { opacity: .45; }
.field-flash { animation: fieldFlash 2.2s ease; }
@keyframes fieldFlash { 0% { background: #fef3c7; } 100% { background: transparent; } }



/* ===== 视图管理（260822 老许定：列编辑+自定义视图+多条件排序） ===== */
.view-bar { display: flex; align-items: center; gap: 6px; margin-left: auto; flex-wrap: wrap; }
/* 260824 老许定：视图按钮+笔头 与「共X条」排一行，左计数右视图，间距收紧 */
.page-sub-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 8px; }
.page-sub-row .page-sub { margin-bottom: 0; }
.page-sub-row .view-bar { margin-left: 0; }
.view-tab { font-size: 12px; padding: 2px 12px; border-radius: 12px; border: 1px solid var(--border);
            color: var(--muted); cursor: pointer; background: var(--card); white-space: nowrap; line-height: 1.6; }
.view-tab:hover { border-color: var(--primary); color: var(--primary); }
.view-tab.active { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 600; }
.view-pencil { font-size: 13px; padding: 1px 8px; border: 1px solid var(--border); border-radius: 6px;
               cursor: pointer; background: var(--card); color: var(--muted); line-height: 1.6; }
.view-pencil:hover { border-color: var(--primary); color: var(--primary); }
.view-editor { display: grid; grid-template-columns: 1fr 34px 1fr; gap: 8px; align-items: start; }
.view-col { border: 1px solid var(--border); border-radius: 8px; height: 240px; overflow-y: auto; background: var(--card); }
.view-col-title { padding: 5px 10px; font-size: 12px; color: var(--muted); border-bottom: 1px solid var(--border);
                  background: var(--primary-soft); position: sticky; top: 0; font-weight: 600; }
.view-item { padding: 3px 10px; font-size: 13px; cursor: pointer; border-bottom: 1px solid #f2f4f5;
             display: flex; align-items: center; gap: 6px; user-select: none; }
.view-item:hover { background: var(--primary-soft); }
.view-item.sel { background: var(--blue-soft); color: var(--blue); }
.view-item .arr { color: var(--muted); font-size: 12px; margin-left: auto; display: none; }
.view-item.sel .arr { display: inline; }
.view-item .no-sort { color: #c2c7cd; font-size: 11px; }
.view-mid { display: flex; flex-direction: column; gap: 6px; padding-top: 36px; }
.view-mid button { border: 1px solid var(--border); background: var(--card); border-radius: 5px;
                   height: 28px; cursor: pointer; color: var(--muted); font-size: 14px; }
.view-mid button:hover { border-color: var(--primary); color: var(--primary); }
.sort-panel { border: 1px solid var(--border); border-radius: 8px; padding: 10px; margin-top: 12px; }
.sort-panel-title { font-size: 12px; color: var(--muted); font-weight: 600; margin-bottom: 8px; }
.sort-row { display: flex; gap: 6px; align-items: center; margin-bottom: 6px; }
.sort-row .rank { width: 18px; height: 18px; border-radius: 4px; background: var(--primary-soft);
                  color: var(--primary-dark); font-size: 12px; text-align: center; line-height: 18px; flex: none; }
.sort-row select { flex: 1; padding: 4px 6px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px; }
.sort-row .sort-del { border: 1px solid var(--border); background: var(--card); border-radius: 5px;
                      width: 24px; height: 24px; cursor: pointer; color: var(--fail); flex: none; }
.sort-add { border: 1px dashed var(--border); color: var(--primary-dark); border-radius: 6px;
            padding: 4px 10px; font-size: 12px; cursor: pointer; background: none; }
.sort-add:hover { border-color: var(--primary); background: var(--primary-soft); }
.view-editor-foot { display: flex; gap: 8px; align-items: center; margin-top: 14px; flex-wrap: wrap; }
.view-editor-foot .vm-name { width: 160px; padding: 5px 10px; border: 1px solid var(--border); border-radius: 6px; font-size: 13px; }
.view-hint { font-size: 12px; color: var(--muted); }

/* 列头快捷排序箭头 + 显示列拖拽（260822） */
.th-sort { display: inline-flex; flex-direction: column; gap: 1px; margin-left: 5px; vertical-align: middle; }
.th-sort button { border: none; background: none; color: var(--muted); cursor: pointer; font-size: 9px;
                  line-height: 1; padding: 0 1px; display: block; }
.th-sort button:hover { color: var(--primary); }
.view-item[draggable="true"] { cursor: grab; }
.view-item.dragging { opacity: .5; background: var(--primary-soft); }
.view-item.drag-over { box-shadow: inset 0 2px 0 var(--primary); }
.view-item .arr { display: none; }

/* 列表页按字段筛选（260822） */
.dyn-filters { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.dyn-filter { display: inline-flex; flex-direction: column; align-items: center; gap: 3px; }
.filter-label { font-size: 12px; color: var(--muted); white-space: nowrap; text-align: center; }
.filter-controls { display: inline-flex; align-items: center; gap: 4px; }
.filter-sep { color: var(--muted); font-size: 12px; }
.filter-del { border: none; background: none; color: var(--muted); cursor: pointer; font-size: 15px; line-height: 1; padding: 0 2px; }
.filter-del:hover { color: var(--fail); }
.filter-field-item { padding: 6px 10px; font-size: 13px; cursor: pointer; border-bottom: 1px solid #f2f4f5; display: flex; justify-content: space-between; align-items: center; }
.filter-field-item:hover { background: var(--primary-soft); }
.filter-type { font-size: 11px; color: var(--muted); }
#filterModalBody { max-height: 420px; overflow-y: auto; }

/* 固定筛选框可删除（260822） */
.fixed-filter { display: inline-flex; align-items: center; gap: 2px; }
.fixed-filter .filter-del { font-size: 15px; padding: 0 3px; }

/* 更改拥有者弹窗（260822） */
.owner-form { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 20px; margin-bottom: 6px; }
.owner-field label { display: block; font-weight: 700; font-size: 13px; margin-bottom: 5px; color: var(--text); }
.owner-field label .req { color: var(--fail); margin-right: 2px; }
.owner-static { padding: 8px 10px; background: var(--bg); border-radius: 8px; font-size: 14px;
               color: var(--text); min-height: 18px; }
.owner-field select { width: 100%; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px;
                     font-size: 14px; background: var(--card); color: var(--text); }
.owner-note { font-size: 12px; color: var(--muted); background: var(--primary-soft);
              padding: 8px 12px; border-radius: 8px; margin: 10px 0 12px; line-height: 1.5; }
.owner-rows { border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.owner-row { display: flex; align-items: center; gap: 10px; padding: 9px 12px;
             border-bottom: 1px solid var(--border); font-size: 13px; }
.owner-row:last-child { border-bottom: none; }
.owner-row.off .owner-ops, .owner-row.off .owner-info { opacity: 0.4; }
.owner-check { display: flex; align-items: center; gap: 5px; white-space: nowrap;
               cursor: pointer; font-weight: 600; min-width: 150px; }
.owner-info { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.owner-samples { color: var(--muted); }
.owner-other { color: var(--muted); font-size: 12px; }
.owner-ops { display: flex; align-items: center; gap: 10px; white-space: nowrap; }
.owner-radio { cursor: pointer; display: flex; align-items: center; gap: 3px; }
.owner-level { padding: 4px 6px; border: 1px solid var(--border); border-radius: 6px;
               font-size: 12px; background: var(--card); color: var(--text); }
.owner-level:disabled { opacity: 0.5; }

/* AI 建议卡片（260822 第二步：优先级标签 + 一键生成行动） */
.ai-item { display: flex; align-items: center; gap: 10px; padding: 10px 2px;
           border-bottom: 1px solid var(--border); }
.ai-item:last-child { border-bottom: none; }
.ai-prio { flex: none; font-size: 12px; padding: 2px 9px; border-radius: 10px;
           color: #fff; font-weight: 600; }
.ai-prio-high { background: #d9534f; }
.ai-prio-mid  { background: #f0ad4e; }
.ai-prio-low  { background: #9aa5b1; }
.ai-act { flex: 1; font-size: 14px; line-height: 1.6; }
.btn-xs { padding: 2px 8px; font-size: 12px; border-radius: 6px; }
/* AI 建议点赞/评价按钮（260902 老许定） */
.ai-fb { display: inline-flex; gap: 4px; flex: none; }
.fb-btn { border: 1px solid var(--border); background: #fff; border-radius: 6px;
          padding: 2px 7px; font-size: 13px; cursor: pointer; line-height: 1.4; }
.fb-btn:hover { background: #f0f2f5; }
.fb-btn.fb-on { background: #e8f5e9; border-color: #4caf50; }
.fb-btn.fb-on-down { background: #fdecea; border-color: #e74c3c; }

/* ===== 布局个性化拖拽（260822） ===== */
.card.layout-drag { cursor: grab; border: 2px dashed var(--primary); }
.card.layout-drag:hover { box-shadow: 0 0 0 2px var(--primary-soft); }
[data-fcode].layout-field-drag { cursor: grab; outline: 1px dashed var(--primary); outline-offset: -1px; }
.card.dragging, [data-fcode].dragging { opacity: .55; }
#layoutBar { display: inline-flex; gap: 8px; align-items: center; }

/* ===== 界面配置（260822 老CRM布局：对象导航+数据布局表格+双栏弹窗） ===== */
.ui-two-col { display: grid; grid-template-columns: 200px 1fr; gap: 14px; align-items: start; }
.ui-layout-head { display: flex; align-items: center; justify-content: space-between; gap: 12px;
                   flex-wrap: wrap; margin-bottom: 2px; }
.ui-layout-title { font-size: 16px; font-weight: 700; }
.group-table td { vertical-align: middle; }
.group-row { cursor: default; }
.group-table .view-pencil { opacity: .55; }
.group-table tr:hover .view-pencil { opacity: 1; }
.pool-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.pool-item { background: #fafbfc; border: 1px dashed var(--border); border-radius: 8px;
             padding: 5px 12px; font-size: 13px; color: var(--text); }
/* 双栏字段选择器（编辑信息组弹窗） */
.pick-editor { display: grid; grid-template-columns: 1fr 44px 1fr 44px; gap: 8px; align-items: stretch; }
.pick-col { height: 300px; }
.pick-item { padding: 6px 10px; }
.pick-item.sel { background: var(--blue-soft); color: var(--blue); }
.pick-mid-btns { display: flex; flex-direction: column; gap: 8px; justify-content: center; }
.pick-mid-btns button { border: 1px solid var(--border); background: var(--card); border-radius: 6px;
                        height: 34px; cursor: pointer; color: var(--muted); font-size: 15px; }
.pick-mid-btns button:hover { border-color: var(--primary); color: var(--primary); }
/* 调整信息组顺序弹窗 */
.ui-sort-row { display: flex; gap: 6px; align-items: center; padding: 7px 10px;
               border-bottom: 1px solid #f2f4f5; font-size: 14px; }
.ui-sort-row:last-child { border-bottom: none; }

/* 右侧快捷导航条（260823 老许定：8对象 + 回顶部 + 收起/展开） */
.side-nav {
  position: fixed;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  z-index: 900;
  display: flex;
  flex-direction: column;
  gap: 2px;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 6px;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.10);
}
.side-nav-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 44px;
  border-radius: 8px;
  cursor: pointer;
  color: var(--muted);
  text-decoration: none;
  transition: background .15s, color .15s;
  user-select: none;
}
.side-nav-item:hover { background: var(--primary-soft); color: var(--primary); }
.side-nav-item svg {
  width: 18px;
  height: 18px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.side-nav-item .lbl { font-size: 11px; line-height: 1.1; margin-top: 3px; }
.side-nav-divider { height: 1px; background: var(--border); margin: 3px 6px; }
/* 收起状态：隐藏对象项和收起按钮，只留回顶部 + 展开 */
.side-nav.collapsed .side-nav-obj,
.side-nav.collapsed .side-nav-collapse { display: none; }
.side-nav-expand { display: none; }
.side-nav.collapsed .side-nav-expand { display: flex; }

/* 只读输入框（260825：选项「值/编号」编辑时只读，视觉置灰明确不可改） */
input[readonly] {
  background: #f0f2f5;
  color: #6b7280;
  cursor: not-allowed;
}

/* 规划三列表格（260828 规划=月度经营工作台） */
.plan-table { width:100%; border-collapse:collapse; }
.plan-table th, .plan-table td { border:1px solid var(--border); padding:10px 12px; vertical-align:middle; text-align:left; }
.plan-table th { background: var(--primary); color: #fff; font-weight:600; }
/* 规划编辑页：基本信息卡片随页面顶部锁定（滚动时始终可见），260828 老许定 */
.wp-sticky { position: sticky; top: 100px; z-index: 84; }
.plan-cell { display:flex; align-items:center; gap:8px; padding:6px 8px; margin-bottom:6px; background:#f5f6f8; border-radius:6px; }
.plan-name { flex:1; font-size:13px; }
.plan-date { width:130px; font-size:12px; padding:4px 6px; border:1px solid var(--border); border-radius:4px; }
.plan-del { border:none; background:none; color:#dc2626; font-size:18px; cursor:pointer; padding:0 4px; line-height:1; }
.plan-del:hover { color:#991b1b; }
.plan-add { background:transparent; border:none; justify-content:flex-start; padding:2px 0 4px; }
.exec-cells, .assess-cells { color:var(--muted); font-size:13px; }
.exec-item { padding:3px 0; line-height:1.5; }
.exec-item a { color:#0d9488; text-decoration:none; }
.exec-item a:hover { text-decoration:underline; }
.exec-date { color:#94a3b8; font-size:11px; margin-left:6px; }
.assess-score { color:#b45309; font-size:13px; font-weight:500; }

/* 260913 列表页首屏防闪（老许 260913 定 · 方案A）：
   视图驱动的「列表主表」在 JS 按【当前视图】渲染完成前不显示，
   消除"先按模板列画一帧、再被视图列整体替换"造成的列跳变。
   选择器 table[data-view][data-table] 精确命中 12 个列表页主表，
   详情页子表/日历/主页/搜索结果（均无 data-table）不受影响。
   ★安全兜底：base_head.js 1.5s 强制放行 → 绝不出现"看不到数据"。 */
table[data-view][data-table] { visibility: hidden; }
table[data-view][data-table].view-ready { visibility: visible; }
