/**
 * AI_KF 设计系统 · akf.css
 * ------------------------------------------------------------------
 * 版本适配：仅适配 layui 2.6.8（public/static/component/layui）。
 * layui 升级前必须回归本文件"layui 覆盖段"涉及的全部列表页（R2 风险）。
 * 禁止修改 layui.js / layui.css 原文件，覆盖一律写在本文件。
 *
 * 结构：
 *   1. Design Tokens（CSS 变量）
 *   2. 基础组件（页头 / 卡片 / 空态 / 徽标 / 工具类）
 *   3. layui 2.6.8 覆盖段（table / form / layer / laydate）
 */

/* ================================================================
 * 1. Design Tokens
 * ================================================================ */
:root {
    /* 品牌色 */
    --akf-primary: #2F6BFF;
    --akf-primary-hover: #1E56E8;
    --akf-primary-active: #174AC4;
    --akf-primary-bg: #EBF1FF;

    /* 侧栏（R4 深色墨蓝：墨蓝底 + 主蓝激活，无左侧高亮条） */
    --akf-sidebar: #1E2433;
    --akf-sidebar-sub: #171C28;
    --akf-sidebar-hover: rgba(255, 255, 255, 0.06);
    --akf-sidebar-active: rgba(47, 107, 255, 0.20);
    --akf-sidebar-text: #A7B0C0;
    --akf-sidebar-text-active: #FFFFFF;
    --akf-sidebar-border: rgba(255, 255, 255, 0.08);
    --akf-sidebar-accent: #5B8CFF;
    --akf-pane-head-h: 52px;

    /* 气泡色（微信绿） */
    --akf-bubble: #95EC69;
    --akf-bubble-text: #1A1A1A;

    /* 语义色 */
    --akf-success: #22B07D;
    --akf-warning: #FF9F1C;
    --akf-danger: #F54A45;
    --akf-info: #2F6BFF;

    /* 语义色浅底（徽标 / 标签用；R11-B6 由裸 hex 提为令牌，色值不变） */
    --akf-success-bg: #E8F7F1;
    --akf-warning-bg: #FFF4E5;
    --akf-danger-bg: #FDEBEB;

    /* 滚动条（webkit 统一色；R11-B6 由裸 hex 提为令牌，色值不变） */
    --akf-scrollbar: #C9CDD4;
    --akf-scrollbar-hover: #B2B7BF;

    /* 文字灰阶 */
    --akf-text: #1F2329;
    --akf-text-secondary: #646A73;
    --akf-text-tertiary: #8F959E;
    --akf-text-disabled: #BBBFC4;
    --akf-text-on-dark: #FFFFFF;

    /* 边框灰阶 */
    --akf-border: #E5E7EB;
    --akf-border-light: #EEF0F3;
    --akf-border-dark: #D8DADE;

    /* 背景灰阶 */
    --akf-bg: #F5F6F8;
    --akf-bg-hover: #F2F3F5;
    --akf-bg-active: #E8EAED;
    --akf-bg-white: #FFFFFF;

    /* 圆角 */
    --akf-radius-lg: 10px;
    --akf-radius: 8px;
    --akf-radius-sm: 6px;
    --akf-radius-xs: 4px;

    /* 阴影 */
    --akf-shadow-sm: 0 1px 2px rgba(31, 35, 41, 0.05);
    --akf-shadow: 0 2px 8px rgba(31, 35, 41, 0.08);
    --akf-shadow-lg: 0 8px 24px rgba(31, 35, 41, 0.12);
    --akf-shadow-primary: 0 4px 12px rgba(47, 107, 255, 0.28);

    /* 字号 */
    --akf-font-lg: 16px;
    --akf-font: 14px;
    --akf-font-sm: 13px;
    --akf-font-xs: 12px;

    /* 主题色（访客端商户主题，默认主蓝；R3-C1 并轨：单点覆写见各访客模板 head） */
    --akf-theme: var(--akf-primary);

    /* 拟态浮层（壳层 flyout / 工作台弹窗使用） */
    --akf-blur: 16px;
    --akf-shadow-flyout: 0 12px 40px rgba(31, 35, 41, 0.16);
}

/* ================================================================
 * 2. 基础组件
 * ================================================================ */

/* --- 页面容器 --- */
.akf-page {
    padding: 14px;
    background: var(--akf-bg);
    min-height: 100%;
    box-sizing: border-box;
}

/* --- 页头：标题 + 主操作 --- */
.akf-page-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 12px;
}

.akf-page-head .akf-page-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 17px;
    font-weight: 600;
    color: var(--akf-text);
    line-height: 24px;
}

.akf-page-head .akf-page-title::before {
    content: "";
    width: 4px;
    height: 16px;
    border-radius: 2px;
    background: var(--akf-primary);
}

/* 页头副标题/说明：.akf-page-title 本身已是 flex + gap:8px，说明作为其子项时
   不要再叠加外边距（原先的 margin-left:10px 会与 gap 叠加成 18px）。 */
.akf-page-head .akf-page-desc {
    font-size: var(--akf-font-xs);
    color: var(--akf-text-tertiary);
    margin-left: 0;
    font-weight: 400;
}

.akf-page-head .akf-page-actions {
    display: flex;
    align-items: center;
    gap: 8px;
}

/* --- 卡片 --- */
.akf-card {
    background: var(--akf-bg-white);
    border-radius: var(--akf-radius);
    box-shadow: var(--akf-shadow-sm);
    border: 1px solid var(--akf-border-light);
    box-sizing: border-box;
}

.akf-card + .akf-card {
    margin-top: 12px;
}

.akf-card .akf-card-body {
    padding: 14px 16px;
}

.akf-card .akf-card-head {
    padding: 12px 16px;
    border-bottom: 1px solid var(--akf-border-light);
    font-size: var(--akf-font);
    font-weight: 600;
    color: var(--akf-text);
    display: flex;
    align-items: center;
    justify-content: space-between;
}

/* --- 空态（P3-4 统一组件） --- */
.akf-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 48px 16px;
    color: var(--akf-text-tertiary);
    user-select: none;
}

.akf-empty .akf-empty-icon {
    width: 64px;
    height: 64px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: var(--akf-bg-hover);
    display: flex;
    align-items: center;
    justify-content: center;
}

.akf-empty .akf-empty-icon .layui-icon {
    font-size: 28px;
    color: var(--akf-text-disabled);
}

.akf-empty .akf-empty-text {
    font-size: var(--akf-font);
    color: var(--akf-text-tertiary);
}

.akf-empty .akf-empty-text + .akf-empty-action {
    margin-top: 12px;
}

/* --- 通用工具类 --- */
/* 显示切换工具类（layui 无 .hide，历史视图/迁移 JS 大量使用 addClass('hide')） */
.hide {
    display: none !important;
}

/* --- 徽标 / 标签 --- */
.akf-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 16px;
    height: 16px;
    padding: 0 5px;
    border-radius: 8px;
    background: var(--akf-danger);
    color: var(--akf-text-on-dark);
    font-size: var(--akf-font-xs);
    line-height: 1;
    box-sizing: border-box;
    white-space: nowrap;
}

.akf-tag {
    display: inline-flex;
    align-items: center;
    height: 20px;
    padding: 0 8px;
    border-radius: var(--akf-radius-xs);
    font-size: var(--akf-font-xs);
    line-height: 20px;
    white-space: nowrap;
    box-sizing: border-box;
}

.akf-tag-primary { background: var(--akf-primary-bg); color: var(--akf-primary); }
.akf-tag-success { background: var(--akf-success-bg); color: var(--akf-success); }
.akf-tag-warning { background: var(--akf-warning-bg); color: var(--akf-warning); }
.akf-tag-danger  { background: var(--akf-danger-bg); color: var(--akf-danger); }
.akf-tag-default { background: var(--akf-bg-hover); color: var(--akf-text-secondary); }

/* 在线状态点 */
.akf-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    border-radius: 50%;
    margin-right: 6px;
    vertical-align: middle;
}

.akf-dot-success { background: var(--akf-success); }
.akf-dot-danger  { background: var(--akf-danger); }
.akf-dot-warning { background: var(--akf-warning); }
.akf-dot-default { background: var(--akf-text-disabled); }

/* --- 工具类 --- */
.akf-flex { display: flex; align-items: center; }
.akf-flex-between { display: flex; align-items: center; justify-content: space-between; }
.akf-text-secondary { color: var(--akf-text-secondary); }
.akf-text-tertiary { color: var(--akf-text-tertiary); }
.akf-text-danger { color: var(--akf-danger); }
.akf-text-success { color: var(--akf-success); }
.akf-mt0 { margin-top: 0 !important; }
.akf-link { color: var(--akf-primary); cursor: pointer; text-decoration: none; }
.akf-link:hover { color: var(--akf-primary-hover); }

/* 语义色调工具类（图标 / 文本着色，避免逐页内联 color） */
.akf-tint-primary { color: var(--akf-primary); }
.akf-tint-success { color: var(--akf-success); }
.akf-tint-warning { color: var(--akf-warning); }
.akf-tint-danger  { color: var(--akf-danger); }
.akf-tint-info    { color: var(--akf-info); }

/* --- 统一字形原子类：置顶（图钉） ---
   R11-B1：全端（PC 工作台 / H5 工作台）置顶语义统一用同一枚「图钉」字形。
   原 layui-icon-top 是向上的箭头，语义模糊、且各壳 font-size 不一导致大小不一。
   用 mask + 内联 SVG：颜色随 currentColor（自动适配深浅壳与激活态）、
   尺寸随 font-size（1em），一处定义全端复用。 */
.akf-ic-pin {
    display: inline-block; flex: none;
    width: 1em; height: 1em;
    vertical-align: -0.125em;
    background-color: currentColor;
    /* ⚠️ 必须用长属性拆分 —— `-webkit-mask: url() center / contain no-repeat`
       这种含「/ size」的简写在部分内核（含 Edge/Chromium 的 -webkit- 前缀解析）
       下整条声明被丢弃，导致 mask=none、图标不显示。 */
    -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3z'/%3E%3C/svg%3E");
    -webkit-mask-repeat: no-repeat;
    -webkit-mask-position: center;
    -webkit-mask-size: contain;
    mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3z'/%3E%3C/svg%3E");
    mask-repeat: no-repeat;
    mask-position: center;
    mask-size: contain;
}

/* 断线横幅（B3 akf-realtime 使用） */
.akf-offline-banner {
    display: none;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 99999999;
    height: 32px;
    line-height: 32px;
    text-align: center;
    background: var(--akf-warning);
    color: var(--akf-text-on-dark);
    font-size: var(--akf-font-sm);
}

/* --- TAB 组件（R4-P 统一）---
   后台左右栏共用的分段 TAB：容器等高 52px，项均分、居中；
   激活态为「主色文字 + 贴底 2px 主色指示条」。
     <div class="akf-tabs">
       <button type="button" class="akf-tabs-item is-active" data-panel="a">…</button>
       <button type="button" class="akf-tabs-item" data-panel="b">…</button>
     </div>
   同级/后代中带 [data-panel] 的面板由页面脚本切换 .is-active。
   取代旧的 .akf-list-tabs/.akf-list-tab（胶囊）与 layui-tab-brief（指示条 bottom 悬空）。
*/
.akf-tabs {
    display: flex;
    align-items: stretch;
    height: 52px;
    flex: none;
    background: var(--akf-bg-white);
    border-bottom: 1px solid var(--akf-border-light);
}

.akf-tabs-item {
    position: relative;
    flex: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    height: 100%;
    padding: 0 10px;
    border: 0;
    background: transparent;
    font-family: inherit;
    font-size: var(--akf-font-sm);
    color: var(--akf-text-secondary);
    cursor: pointer;
    user-select: none;
    transition: color .15s ease, background .15s ease;
}

.akf-tabs-item .layui-icon { font-size: 14px; }
.akf-tabs-item:hover { color: var(--akf-text); }
.akf-tabs-item.is-active { color: var(--akf-primary); font-weight: 600; }

.akf-tabs-item.is-active::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 2px;
    background: var(--akf-primary);
}

/* TAB 面板容器：配合 .akf-tabs 使用 */
.akf-tab-panel { display: none; }
.akf-tab-panel.is-active { display: block; }

/* TAB 项内角标（排队未读数等） */
.akf-tabs-item .nav-badge { position: absolute; top: 8px; right: 6px; }

/* R8 常规 TAB 变体：项自适应宽度、靠左排列，对标常规选项卡设计（不均分全宽）。
   默认 .akf-tabs-item 为 flex:1 均分，适用于左右分栏 / 列表 segment；
   整页设置类页面（总后台系统设置等）叠加本变体类。 */
.akf-tabs--left .akf-tabs-item { flex: none; padding: 0 22px; }

/* R12：页面内联说明条（TAB 面板顶部 / 弹窗表单顶部 / 表格上方解释文案）。
   用法：<div class="akf-note"><i class="layui-icon layui-icon-tips"></i><span>说明…</span></div>

   R13 位置约定：.akf-note 永远放在「它所说明的区域**上方**」——
   列表页放 TAB 面板/表格上方，弹窗放表单字段上方。
   因此上外边距为 0（顶部间距交给父容器 padding），只保留 14px 下外边距；
   原先的 `margin:12px 0 0` 会在面板/弹窗顶部额外顶出一段空白，
   与父容器 padding 叠加后形成 26px 的「悬空」间隙，正是排版看起来错位的原因。 */
.akf-note {
    display: flex;
    align-items: flex-start;
    gap: 6px;
    margin: 0 0 14px;
    padding: 9px 12px;
    border-radius: var(--akf-radius-sm);
    background: var(--akf-primary-bg);
    color: var(--akf-text-secondary);
    font-size: var(--akf-font-sm);
    line-height: 1.65;
}

.akf-note > .layui-icon {
    flex: none;
    margin-top: 2px;
    font-size: 14px;
    color: var(--akf-primary);
}

.akf-note b { color: var(--akf-text); font-weight: 600; }

/* --- 知识库统一入口的 TAB 条（R16-5） ---
   6 个 KB 相关页面共用（模板 `application/service/view/ai/_kbtabs.html`）。
   形态：一条横向标签带，整页跳转（理由见该模板头部注释）。 */
.akf-kb-tabs {
    display: flex;
    align-items: center;
    gap: 4px;
    margin-bottom: 12px;
    padding: 4px;
    background: var(--akf-bg-white);
    border: 1px solid var(--akf-border-light);
    border-radius: var(--akf-radius);
    box-shadow: var(--akf-shadow-sm);
    box-sizing: border-box;
    overflow-x: auto;
}

.akf-kb-tab {
    flex: none;
    padding: 0 14px;
    height: 32px;
    line-height: 32px;
    font-size: var(--akf-font-sm);
    color: var(--akf-text-secondary);
    border-radius: var(--akf-radius-sm);
    text-decoration: none;
    white-space: nowrap;
    transition: background-color .15s ease, color .15s ease;
}

.akf-kb-tab:hover { background: var(--akf-bg-hover); color: var(--akf-text); }

.akf-kb-tab.is-active {
    background: var(--akf-primary-bg);
    color: var(--akf-primary);
    font-weight: 600;
}

/* 禁用态：当前没有可用知识库 ⇒ 依赖知识库的 TAB 不可点。必须给出原因（title），
   不制造"点进去看到不存在"的假入口。 */
.akf-kb-tab.is-disabled {
    color: var(--akf-text-disabled);
    cursor: not-allowed;
}

.akf-kb-tab.is-disabled:hover { background: transparent; color: var(--akf-text-disabled); }

/* --- 知识库统一入口的概览统计格（R16-5） --- */
.akf-kb-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
}

.akf-kb-stat {
    flex: 1 1 150px;
    min-width: 140px;
    padding: 12px 14px;
    background: var(--akf-bg-white);
    border: 1px solid var(--akf-border-light);
    border-radius: var(--akf-radius-sm);
    box-sizing: border-box;
}

.akf-kb-stat .akf-kb-stat-label {
    font-size: var(--akf-font-xs);
    color: var(--akf-text-tertiary);
    margin-bottom: 6px;
}

.akf-kb-stat .akf-kb-stat-value {
    font-size: 20px;
    font-weight: 600;
    color: var(--akf-text);
    line-height: 1.2;
    word-break: break-all;
}

.akf-kb-stat .akf-kb-stat-value.is-text { font-size: var(--akf-font); font-weight: 400; }

/* 「未索引文档数 > 0」必须是**可见的红色告警**：它意味着"有文档存进去了但检索不到"，
   而那条路径不会报任何错（P1-2 真实发生过）。 */
.akf-kb-stat.is-alert { border-color: var(--akf-danger); background: var(--akf-danger-bg); }
.akf-kb-stat.is-alert .akf-kb-stat-value { color: var(--akf-danger); }

/* ================================================================
 * 3. layui 2.6.8 覆盖段
 *    范围：table / form / layer / laydate 的圆角、主色、边框灰阶
 * ================================================================ */

/* --- 3.1 全局字体与背景 --- */
body.layui-body,
.pear-container,
.akf-page {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
        "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
    color: var(--akf-text);
}

/* --- 3.2 按钮 --- */
/* R13：按钮内「图标 + 文字」必须垂直居中。
   layui 基础样式是 `.layui-btn .layui-icon{padding:0 2px;vertical-align:middle\9;vertical-align:bottom}`：
   ① vertical-align:bottom 把图标的底边对齐到 **line box 底部**——而 line box 被按钮的
      line-height 撑高（34px 按钮 / 12px 字），图标因此整体下沉、与文字基线错开；
      该偏差随按钮尺寸与浏览器缩放比放大，小尺寸按钮（表格行内 .layui-btn-xs）最明显。
   ② 图标自身的 padding:0 2px 与「图标→文字」的自然间距叠加，造成左右不对称。
   这里改为 flex 布局：垂直居中交给 align-items，图标与文字间距交给 gap，
   不再依赖 line-height / vertical-align，任意尺寸与缩放比下都精确成立。 */
.layui-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    border-radius: var(--akf-radius-sm);
    background-color: var(--akf-primary);
    font-size: var(--akf-font);
    height: 34px;
    line-height: 34px;
    padding: 0 16px;
    transition: background-color .15s ease, box-shadow .15s ease;
}

.layui-btn > .layui-icon { padding: 0; vertical-align: baseline; }
.layui-btn > .layui-badge,
.layui-btn > .layui-badge-dot { flex: none; }

.layui-btn:hover { opacity: .9; }
.layui-btn + .layui-btn { margin-left: 8px; }

.layui-btn-primary {
    background: var(--akf-bg-white);
    color: var(--akf-text);
    border: 1px solid var(--akf-border);
}

.layui-btn-primary:hover {
    border-color: var(--akf-primary);
    color: var(--akf-primary);
    background: var(--akf-bg-white);
}

.layui-btn-normal { background-color: var(--akf-primary); }
.layui-btn-danger { background-color: var(--akf-danger); }
.layui-btn-warm   { background-color: var(--akf-warning); }

.layui-btn-xs { height: 26px; line-height: 26px; padding: 0 10px; font-size: var(--akf-font-xs); }
.layui-btn-sm { height: 30px; line-height: 30px; padding: 0 12px; font-size: var(--akf-font-sm); }
.layui-btn-lg { height: 40px; line-height: 40px; padding: 0 20px; font-size: var(--akf-font-lg); }

/* --- 3.3 表单 --- */
.layui-form-label {
    padding: 9px 12px 9px 0;
    color: var(--akf-text-secondary);
    font-size: var(--akf-font);
    width: 88px;
}

/* R45 批F：列表页筛选卡统一组件（14 页：service 12 页 + backend 2 页）。
   用法：筛选区外层 <div class="akf-filter">（原 .layui-form-item 外壳），
   内层 layui-inline 与控件不动。修的是 layui 默认 .layui-form-item margin-bottom:15px
   造成的筛选卡底部大空白 + .layui-form-label 宽 88px 让短 label（语言/日期）空撑。 */
.akf-filter { margin-bottom: 0; padding: 4px 0; }
.akf-filter .layui-form-item { margin-bottom: 0; }
.akf-filter .layui-form-item.layui-inline { margin-bottom: 0; margin-right: 14px; }
.akf-filter .layui-form-label { width: auto; padding: 9px 8px 9px 0; }

.layui-input,
.layui-select,
.layui-textarea {
    border-radius: var(--akf-radius-sm);
    border-color: var(--akf-border);
    height: 34px;
    font-size: var(--akf-font);
    color: var(--akf-text);
    transition: border-color .15s ease, box-shadow .15s ease;
}

.layui-textarea { height: auto; min-height: 80px; }

.layui-input:hover,
.layui-select:hover,
.layui-textarea:hover {
    border-color: var(--akf-border-dark);
}

.layui-input:focus,
.layui-select:focus,
.layui-textarea:focus {
    border-color: var(--akf-primary) !important;
    box-shadow: 0 0 0 2px rgba(47, 107, 255, 0.12);
}

.layui-input::placeholder,
.layui-textarea::placeholder {
    color: var(--akf-text-disabled);
}

.layui-select { padding-right: 28px; }

/* 复选框 / 单选主色 */
.layui-form-checked[lay-skin="primary"] > i {
    background-color: var(--akf-primary);
    border-color: var(--akf-primary);
}

.layui-form-checkbox[lay-skin="primary"] i { border-radius: 3px; }

.layui-form-onswitch {
    background-color: var(--akf-primary) !important;
    border-color: var(--akf-primary) !important;
}

.layui-form-switch {
    border-radius: 16px;
}

.layui-form-radio > i:hover,
.layui-form-radioed,
.layui-form-radio > .layui-icon-radio ~ div { color: var(--akf-text); }
.layui-form-radioed > i { color: var(--akf-primary) !important; }

/* --- 3.3.2 设置类表单范式（R4-P）---
   外层 grid + form-item `display:contents`，使所有行的 label / 控件 / 说明
   共享同一组列宽（label 列按最长文案自动定宽）——彻底消除此前
   .akf-label-w100/120/220 + .akf-input-w250 + .akf-item-gap 逐行补丁导致的
   「label 宽度不一 → 控件起始位置参差」错位。
     <div class="akf-form">
       <div class="layui-form-item">
         <label class="layui-form-label">名称</label>
         <div class="layui-input-inline">…</div>
         <span class="akf-form-tip">说明</span>
       </div>
       <div class="akf-form-actions">…按钮…</div>
     </div>
*/
.akf-form {
    display: grid;
    grid-template-columns: max-content var(--akf-form-ctrl-w, 260px) 1fr;
    align-items: center;
    row-gap: 16px;
}

.akf-form .layui-form-item { display: contents; }

/* 显式锁定列：无说明文字的行只占 2 列，若依赖自动流会把后续行元素顶到第 3 列造成串行 */
.akf-form .layui-form-label {
    grid-column: 1;
    float: none;
    width: auto;
    padding: 0 12px 0 0;
    box-sizing: border-box;
    line-height: 34px;
    text-align: left;
    white-space: nowrap;
}

/* 控件列：宽度由 grid 第二列统一给定，重置 layui 的 float / margin / min-height */
.akf-form .layui-input-inline,
.akf-form .layui-input-block {
    grid-column: 2;
    float: none;
    display: block;
    width: auto;
    min-height: 0;
    margin: 0;
}

.akf-form .akf-form-tip {
    grid-column: 3;
    margin-left: 12px;
    font-size: var(--akf-font-xs);
    color: var(--akf-text-tertiary);
    line-height: 1.6;
}

.akf-form .akf-form-tip a { color: var(--akf-primary); }

.akf-form .akf-form-actions {
    grid-column: 2 / -1;
    display: flex;
    align-items: center;
    gap: 10px;
}

/* 跨列控件：多行文本域（协议正文等）需占满控件列 + 说明列，
   否则会被限制在 260px 的控制列宽内不可用 */
.akf-form .akf-form-span {
    grid-column: 2 / -1;
}

.akf-form .akf-form-span textarea.layui-textarea {
    width: 100%;
    box-sizing: border-box;
    line-height: 1.7;
    resize: vertical;
}

/* 多行文本域所在行的 label 需顶对齐（默认 align-items:center 会使其悬在文本域中部） */
.akf-form .akf-form-label-top {
    align-self: start;
}

/* --- 3.4 表格 --- */
.layui-table {
    color: var(--akf-text);
}

.layui-table th {
    background: var(--akf-bg) !important;
    color: var(--akf-text-secondary);
    font-weight: 600;
    font-size: var(--akf-font-sm);
}

.layui-table td,
.layui-table th {
    border-color: var(--akf-border-light);
}

.layui-table tbody tr:hover,
.layui-table-hover {
    background: var(--akf-bg-hover) !important;
}

.layui-table-view {
    border-color: var(--akf-border-light);
    border-radius: var(--akf-radius-sm);
    margin: 0;
}

.layui-table-page {
    background: transparent;
}

.layui-table-page > div { padding: 4px 0; }

.layui-laypage .layui-laypage-curr .layui-laypage-em {
    background: var(--akf-primary);
    border-radius: var(--akf-radius-xs);
}

.layui-laypage a,
.layui-laypage span {
    border-radius: var(--akf-radius-xs);
    color: var(--akf-text-secondary);
}

.layui-laypage a:hover {
    color: var(--akf-primary);
}

/* 表格工具条按钮间距 */
.layui-table-tool .layui-btn + .layui-btn { margin-left: 0; }
.layui-table-tool-temp .layui-btn { margin-right: 8px; }

/* --- 3.4.1 表格「操作列」统一组件（R13）---
   用法（toolbar 模板）：
     <script type="text/html" id="xxxBar">
       <div class="akf-op">
         <button class="layui-btn layui-btn-xs" lay-event="edit"><i class="layui-icon layui-icon-edit"></i>编辑</button>
         …
       </div>
     </script>

   为什么需要它：layui 的 .layui-table-cell 左右各有 15px 内边距，且带
   overflow:hidden + text-overflow:ellipsis —— 按钮组只要比内容盒宽 1px，
   末尾按钮就会被截成「…」（R13 实测：快捷回复列表 需要 132px / 可用 131px，
   删除按钮只剩省略号；访客/客服等页虽暂时放得下，但列宽余量仅 19~49px，极易复发）。

   .akf-op 用 −8px 左右外边距回收单元格内边距，并在列内水平居中、锁定垂直居中、
   统一 8px 间距。这样操作列的列宽只需 ≥ 按钮组宽度 + 16px 即安全。 */
.akf-op {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    height: 100%;
    margin: 0 -8px;
    white-space: nowrap;
}

/* 间距统一由 gap 决定，抵消 layui 的 `.layui-btn + .layui-btn{margin-left:8px}` */
.akf-op > .layui-btn + .layui-btn { margin-left: 0; }
.akf-op > .layui-btn { flex: none; }

/* --- 3.5 弹层 layer --- */
.layui-layer {
    border-radius: var(--akf-radius) !important;
    box-shadow: var(--akf-shadow-lg) !important;
    overflow: hidden;
}

/* close2：title 为空/假值的弹窗（layer 模板对无标题弹窗固定用 close2），
   其默认定位 right:-28px;top:-28px 悬挂在弹窗框外，会被上面的 overflow:hidden
   裁掉（清空会话确认/图片预览弹窗的 × 只剩残边）。close2 图标是灰圆白 ×
   （icon.png 雪碧图 149,-31），拉回框内右上角可见；无标题栏弹窗该处为空区，
   不与内容标题冲突。
   ⚠️ 特异性必须 (0,3,0)：layer.css 由 layui.js 动态注入 head 末尾，
   晚于本文件加载，同特异性会被 layer.css 的 -28px 反超（CDP 实测翻车）。 */
.layui-layer .layui-layer-setwin .layui-layer-close2 {
    right: 0;
    top: 0;
}

/* R45 批E：设置分组弹窗（skin:'group'）。⚠️ layer 源码把 skin 原样拼进弹窗类名
   （`+(r.skin||"")`，无 layui-layer- 前缀）⇒ 真实类 = .layui-layer.group，样式锚点用它。
   选项已由模板重写为 layui primary 勾选（form.akf-vgroup-list.layui-form +
   layer success 里 form.render('checkbox')，layui 2.6.8 只扫 .layui-form 容器）；
   此处统一组内排版：内边距、整行可点、选项多时弹窗内滚动（防溢出裁切）。
   ⚠️ height:auto 必需（两处）：layer 对 area 高度 auto 只在 open 时测一次（彼时
   form 装饰未完成）——测完把 inline height:0 留在 .layui-layer-content 上、layero
   一起收缩 ⇒ 被上方 overflow:hidden 裁成「只见第一项」。layero 与 content 都交还
   内容自适应，.akf-vgroup-list 的 max-height 兜底滚动。 */
.layui-layer.group { height: auto !important; }
.layui-layer.group .layui-layer-content { padding: 16px 20px; height: auto !important; }
.akf-vgroup-list { max-height: 260px; overflow-y: auto; }
.akf-vgroup-list .layui-form-checkbox { margin: 4px 0; display: block; width: 100%; }

.layui-layer-title {
    background: var(--akf-bg-white) !important;
    color: var(--akf-text) !important;
    border-bottom: 1px solid var(--akf-border-light) !important;
    font-size: var(--akf-font) !important;
    font-weight: 600;
    height: 48px !important;
    line-height: 48px !important;
    padding: 0 16px !important;
}

.layui-layer-btn a {
    border-radius: var(--akf-radius-sm) !important;
    font-size: var(--akf-font) !important;
    height: 32px !important;
    line-height: 32px !important;
    padding: 0 18px !important;
}

.layui-layer-btn0 {
    background: var(--akf-primary) !important;
    border-color: var(--akf-primary) !important;
}

.layui-layer-btn1 {
    background: var(--akf-bg-white) !important;
    color: var(--akf-text) !important;
    border: 1px solid var(--akf-border) !important;
}

.layui-layer-msg { border-radius: var(--akf-radius) !important; }

.layui-layer-content .layui-layer-btn { padding: 0 16px 16px; }

/* --- 3.6 laydate --- */
.layui-laydate {
    border-radius: var(--akf-radius) !important;
    box-shadow: var(--akf-shadow-lg) !important;
}

.layui-laydate-footer span:hover,
.layui-laydate-header span:hover { color: var(--akf-primary) !important; }

.layui-laydate .laydate-day-mark { color: var(--akf-text-tertiary); }

.layui-laydate-content td.laydate-selected {
    background: var(--akf-primary-bg) !important;
    color: var(--akf-primary) !important;
}

/* --- 3.7 卡片 layui-card --- */
.layui-card {
    background: var(--akf-bg-white);
    border-radius: var(--akf-radius);
    box-shadow: var(--akf-shadow-sm);
    border: 1px solid var(--akf-border-light);
    margin-bottom: 12px;
}

.layui-card .layui-card-header {
    border-bottom: 1px solid var(--akf-border-light);
    font-weight: 600;
    color: var(--akf-text);
    padding: 0 16px;
    height: 46px;
    line-height: 46px;
}

.layui-card .layui-card-body { padding: 14px 16px; }

/* 仪表盘数字面板 */
.top-panel-number {
    line-height: 60px;
    font-size: 30px;
    font-weight: 600;
    color: var(--akf-text);
    border-right: 1px solid var(--akf-border-light);
}

.top-panel-tips {
    padding-left: 8px;
    padding-top: 16px;
    line-height: 30px;
    font-size: 12px;
}

.top-panel-tips svg { width: 56px; height: 56px; }
/* 符号图标版（不引内联 SVG，沿用 akf 图标语言） */
.top-panel-tips .layui-icon { font-size: 46px; line-height: 56px; display: block; }

/* --- 3.9 ueditor 容器皮肤（B4/F12：questions/robots/sentence 子页） --- */
.edui-default .edui-editor {
    border-color: var(--akf-border) !important;
    border-radius: var(--akf-radius-sm);
    overflow: hidden;
}

.edui-default .edui-editor-toolbarbox {
    border-bottom: 1px solid var(--akf-border-light) !important;
}

.edui-default .edui-editor-bottomContainer {
    border-top: 1px solid var(--akf-border-light) !important;
}

/* --- 3.8 Tab / 流加载等杂项 --- */
.layui-tab-title .layui-this { color: var(--akf-primary); }
.layui-tab-title .layui-this:after {
    border-color: var(--akf-border-light) !important;
    border-bottom: 2px solid var(--akf-primary) !important;
    border-radius: var(--akf-radius-sm) var(--akf-radius-sm) 0 0;
}

.layui-form-select dl { border-radius: 0 0 var(--akf-radius-sm) var(--akf-radius-sm); }
.layui-form-select dl dd.layui-this { background-color: var(--akf-primary-bg); color: var(--akf-primary); }
.layui-form-select dl dd:hover { background-color: var(--akf-bg-hover); }

/* 滚动条统一（webkit） */
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-thumb { background: var(--akf-scrollbar); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: var(--akf-scrollbar-hover); }
::-webkit-scrollbar-track { background: transparent; }

/* --- 3.9 内容页私有辅助（R3-C6/C7 自模板 <style>/内联样式上提） --- */
/* 评价列表：详情列多行换行 + 星级图 */
.akf-cmt .layui-table-cell { height: auto !important; }
.akf-cmt .star-img {
    display: inline-block;
    margin-left: 1px;
    margin-top: -5px;
    height: 16px;
    width: 16px;
}
/* 评价设置弹窗（R4-P5：走 .akf-dialog + .akf-form 范式，去除弹窗内嵌套卡片与重复标题） */
.akf-csetting .akf-cmt-sub { display: block; font-size: var(--akf-font-xs); color: var(--akf-text-tertiary); line-height: 1.4; }
.akf-csetting .akf-cmt-list { grid-column: 2 / -1; display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.akf-csetting .akf-cmt-row { display: flex; align-items: center; gap: 10px; width: 100%; }
.akf-csetting .akf-cmt-row .layui-input { flex: 1; min-width: 0; }
.akf-csetting .akf-cmt-star { flex: none; display: inline-flex; gap: 2px; }
.akf-csetting .akf-cmt-star img { width: 16px; height: 16px; }
/* 弹窗表单公共 */
.akf-link-upload { margin-left: 20px; color: var(--akf-primary); }
/* R7-B6：输入框 + 行内上传入口同一行（避免逐页内联样式） */
.akf-input-upload { display: flex; align-items: center; gap: 10px; }
.akf-input-upload .layui-input { flex: 1; min-width: 0; }
.akf-input-upload .akf-link-upload { margin-left: 0; flex: none; white-space: nowrap; }
/* flex 行内自动缩略框不再叠加 margin（.akf-input-upload 已有 gap:10px） */
.akf-input-upload .akf-upthumb { margin-left: 0; flex: none; }
/* --- R53 §3.6 统一图片上传预览（public/static/akf/akf-upload.js 唯一消费方）。
   缩略框 56×40 + img object-fit:contain ⇒ 任意比例原图完整显示（不裁切不变形）；
   is-filled = 已有图（实线框，可点击放大）；空态 = 虚线框 + 图标占位。 */
.akf-upthumb {
    display: inline-flex; align-items: center; justify-content: center;
    width: 56px; height: 40px; margin-left: 10px;
    border: 1px dashed var(--akf-border, #dcdfe6); border-radius: 6px;
    background: var(--akf-bg-white, #fff);
    color: var(--akf-text-4, #9aa2ad); font-size: 18px;
    overflow: hidden; vertical-align: middle;
}
.akf-upthumb.is-filled { border-style: solid; cursor: zoom-in; }
.akf-upthumb img { width: 100%; height: 100%; object-fit: contain; display: block; }
/* 客服头像预览（services add/edit）：原 50×50 HTML 属性硬拉伸 ⇒ 改 CSS contain，
   非方图不再变形；预览元素为既有 <img id="avatar">，由组件复用（thumb 选项）。 */
.akf-avatar-up img { width: 50px; height: 50px; object-fit: contain; border-radius: 6px; background: var(--akf-bg, #f5f6f8); }
/* R54 内置头像快选网格（services add/edit）：首格=系统默认+11 内置；
   cover 裁切对 141×128 非正方图同样不变形；选中态主色描边+光晕。 */
.akf-avatar-grid { display: flex; flex-wrap: wrap; gap: 8px; padding-top: 10px; }
.akf-avatar-grid .akf-av-item { width: 44px; height: 44px; padding: 0; border: 2px solid transparent; border-radius: 8px; overflow: hidden; cursor: pointer; background: var(--akf-bg, #f5f6f8); transition: border-color .15s, box-shadow .15s; }
.akf-avatar-grid .akf-av-item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.akf-avatar-grid .akf-av-item:hover { border-color: var(--akf-border, #E5E6EB); }
.akf-avatar-grid .akf-av-item.is-on { border-color: var(--akf-primary, #2F6BFF); box-shadow: 0 0 0 3px rgba(47, 107, 255, .12); }
/* ⚠️ UEditor 会把源 textarea 的 class 原样复制到它生成的**外层 div** 上
   （源 textarea 被置 display:none），所以本类必须按元素类型区分：
     · textarea —— 仅作为编辑器初始化前的占位，给个高度避免布局跳动；
     · div      —— UEditor 的真实容器，**绝不能定高**：编辑器实际高度 =
                   initialFrameHeight + 工具栏(≈38) + 底栏(≈21)，把外层 div 钉在 260px
                   会让编辑器溢出 39px 并**压住下方元素**（R13 实测 sentence 弹窗
                   与下方 .akf-note 重叠 24px；questions/robots 页 initialFrameHeight
                   为 260，溢出达 59px）。
   高度统一交给各页 UEditor 的 initialFrameHeight 决定。 */
textarea.akf-ue-textarea { height: 260px; }
div.akf-ue-textarea { height: auto; min-height: 0; }

/* --- 3.10 设置页（R3-C8 自模板 <style>/内联上提） --- */
/* 商户设置 / 接入中心表单已统一到 §3.3.2 .akf-form 范式（R4-P 移除逐行宽度补丁） */
/* 接入教程 */
.akf-course .layui-tab-brief > .layui-tab-title li { margin: 0 15px; }
.akf-doc-tip { padding: 10px; }

/* --- 3.11 公共工具类（R3-C9） --- */
.akf-hide { display: none; }
.akf-ml15 { margin-left: 15px; }
.akf-chart-box { min-height: 400px; }
/* 仪表盘卡片 footer（自 home.html 上提） */
.layui-card-footer {
    height: 42px;
    line-height: 42px;
    padding: 0 16px;
    border-top: 1px solid var(--akf-border-light);
    color: var(--akf-text-secondary);
    font-size: 13px;
}

/* ================= 3.12 弹窗内容页范式（R4-B4） =================
   被 layer.open({type:2}) / AKF_DIALOG.form() 以 iframe 打开的内容子页统一结构：
     <body class="akf-dialog">
       <form class="akf-dialog-form layui-form">
         <div class="akf-dialog-body"> ...表单项... </div>
         <div class="akf-dialog-footer"> ...按钮... </div>
       </form>
     </body>
   取代已删除的 pear layout.css 遗留类 .mainBox/.main-container/.bottom/.button-container。

   ⚠ layui-form 类不可省略（R6 修复）：
     layui 的 submit 处理器用 $(btn).parents('.layui-form').eq(0) 定位表单容器，
     校验集合 u.find('*[lay-verify]') 与取值 getValue(null, u) 都依赖它。
     漏掉该类 → 容器为空 → lay-verify 校验被静默跳过 + data.field 恒为 {}，
     提交载荷变成空 JSON。同时 .layui-form select{display:none} 也依赖它，
     缺类会导致原生 select 与 layui 渲染的 select 行为不一致。
*/
body.akf-dialog {
    margin: 0;
    height: 100vh;
    display: flex;
    flex-direction: column;
    box-sizing: border-box;
    background: var(--akf-bg-white);
    color: var(--akf-text);
    font-size: var(--akf-font);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
        "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
    -webkit-font-smoothing: antialiased;
}

.akf-dialog > .akf-dialog-form { flex: 1; display: flex; flex-direction: column; min-height: 0; }

.akf-dialog-body {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    padding: 18px 20px 6px;
}

/* 吸底按钮条：右对齐、等高、全宽分隔线 */
.akf-dialog-footer {
    flex-shrink: 0;
    height: 56px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 10px;
    padding: 0 20px;
    background: var(--akf-bg-white);
    border-top: 1px solid var(--akf-border-light);
}

/* 弹窗表单：末项不留多余下间距；标签列统一，避免错位 */
.akf-dialog-body .layui-form-item:last-child { margin-bottom: 0; }
.akf-dialog .layui-form-label { padding: 9px 12px 9px 0; }

/* 同行多控件的紧凑排版（R15）——
   用于「知识库直答 / 检索优化」这类「若干小参数同属一组」的场景，避免每个参数
   各占一整行把弹窗撑得过长。
   ⚠️ 数值输入必须用**直接子选择器**限定宽度：layui 的 select 渲染后内部也存在
      input.layui-input，用后代选择器会连下拉框的输入一起被压窄。
   ⚠️ .layui-form-select 必须给显式宽度：它在 flex 容器里是 div，宽度 auto 时
      会被当作内容宽度计算（原始 select 已被 display:none）⇒ 会塌成 0 宽。 */
.akf-inline-ctl {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-top: 8px;
}
.akf-inline-ctl-label {
    font-size: var(--akf-font-xs);
    color: var(--akf-text-tertiary);
    white-space: nowrap;
}
.akf-inline-ctl > .layui-input { flex: none; width: 88px; }
.akf-inline-ctl .layui-form-select { flex: none; width: 160px; }

/* ================= 3.13 法律文档页（R7-B4） =================
   公开法律文档页：/doc/agreement、/doc/privacy（index\Index::doc → view/index/doc.html）
   结构：body.akf-doc-page > .akf-doc-head + main.akf-doc + .akf-doc-foot
   正文由 SiteConfig::renderDoc() 输出（写入侧已 HTMLPurifier 净化），本段只负责排版，
   故不限制具体标签——用户可用 h2-h4 / p / ul / ol / table 组织协议内容。
*/
body.akf-doc-page {
    margin: 0;
    background: var(--akf-bg);
    color: var(--akf-text);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
        "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
    -webkit-font-smoothing: antialiased;
}

.akf-doc-head {
    height: 60px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 0 24px;
    background: var(--akf-bg-white);
    border-bottom: 1px solid var(--akf-border-light);
}

.akf-doc-brand {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: var(--akf-font-lg);
    font-weight: 600;
    color: var(--akf-text);
    text-decoration: none;
}

.akf-doc-brand i {
    width: 28px;
    height: 28px;
    border-radius: 7px;
    background: var(--akf-primary);
    color: var(--akf-text-on-dark);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-style: normal;
    font-size: var(--akf-font-sm);
    font-weight: 700;
}

.akf-doc-brand img { height: 28px; width: auto; max-width: 140px; object-fit: contain; background: none; }

.akf-doc-back { font-size: var(--akf-font-sm); color: var(--akf-text-secondary); text-decoration: none; }
.akf-doc-back:hover { color: var(--akf-primary); }

.akf-doc {
    max-width: 860px;
    margin: 20px auto;
    padding: 32px 40px;
    background: var(--akf-bg-white);
    border: 1px solid var(--akf-border-light);
    border-radius: var(--akf-radius-lg);
    box-shadow: var(--akf-shadow-sm);
    box-sizing: border-box;
}

.akf-doc h2 { margin: 0 0 6px; font-size: 22px; line-height: 1.5; text-align: center; }
.akf-doc h3 { margin: 26px 0 10px; font-size: 16px; line-height: 1.5; }
.akf-doc h4 { margin: 18px 0 8px; font-size: 15px; line-height: 1.5; }
.akf-doc p { margin: 0 0 10px; font-size: var(--akf-font); line-height: 1.9; }
.akf-doc ul, .akf-doc ol { margin: 0 0 12px; padding-left: 22px; }
.akf-doc li { font-size: var(--akf-font); line-height: 1.9; }
.akf-doc table { width: 100%; border-collapse: collapse; margin: 0 0 14px; font-size: var(--akf-font); }
.akf-doc th, .akf-doc td { border: 1px solid var(--akf-border); padding: 8px 10px; text-align: left; }
.akf-doc th { background: var(--akf-bg); font-weight: 600; }
.akf-doc a { color: var(--akf-primary); }
.akf-doc-note {
    margin-top: 28px;
    padding-top: 14px;
    border-top: 1px dashed var(--akf-border);
    font-size: var(--akf-font-xs);
    color: var(--akf-text-tertiary);
}

.akf-doc-foot {
    max-width: 860px;
    margin: 0 auto 28px;
    padding: 0 40px;
    text-align: center;
    font-size: var(--akf-font-xs);
    color: var(--akf-text-tertiary);
    line-height: 2;
    box-sizing: border-box;
}
.akf-doc-foot a { color: var(--akf-text-tertiary); text-decoration: none; margin: 0 6px; }
.akf-doc-foot a:hover { color: var(--akf-primary); }

@media (max-width: 720px) {
    .akf-doc-head { padding: 0 14px; }
    .akf-doc { margin: 12px; padding: 20px 18px; }
    .akf-doc-foot { padding: 0 18px; }
}

/* ================= 3.14 AI 审计与评测仪表盘（A1-P4-2） =================
   纯 CSS 图形，零第三方依赖（不引 ECharts）。全部颜色走设计令牌 ——
   本文件在「裸 hex 守卫」的扫描范围内（tmp_verify/static_all.cjs 的 AKF 数组），
   写死颜色会直接把守卫打红，也算绕过设计系统。 */

/* --- 指标数值（指标卡正文） --- */
.akf-metric-v {
    font-size: 28px;
    font-weight: 600;
    line-height: 1.3;
    color: var(--akf-text);
}
.akf-metric-u { margin: 0 2px; font-size: var(--akf-font); font-weight: 500; color: var(--akf-text-secondary); }
.akf-metric-h { margin-top: 6px; font-size: var(--akf-font-xs); color: var(--akf-text-tertiary); line-height: 1.6; }

/* --- 键值对网格（延迟 / 异常计数） --- */
.akf-kv {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 8px 10px;
}
.akf-kv-item {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 8px 10px;
    background: var(--akf-bg);
    border-radius: var(--akf-radius-sm);
}
.akf-kv-k { font-size: var(--akf-font-xs); color: var(--akf-text-tertiary); }
.akf-kv-v { font-size: var(--akf-font-lg); font-weight: 600; color: var(--akf-text); }
@media (max-width: 720px) { .akf-kv { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* --- 横向条形（TOP 榜） --- */
.akf-bar-row { display: flex; align-items: center; gap: 10px; padding: 5px 0; }
.akf-bar-label {
    flex: 0 0 110px;
    max-width: 110px;
    font-size: var(--akf-font-sm);
    color: var(--akf-text-secondary);
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
.akf-bar-track {
    flex: 1 1 auto;
    height: 8px;
    background: var(--akf-bg-hover);
    border-radius: 4px;
    overflow: hidden;
}
.akf-bar-fill {
    height: 100%;
    min-width: 2px;
    background: var(--akf-primary);
    border-radius: 4px;
    transition: width 0.2s ease;
}
.akf-bar-n { flex: 0 0 42px; text-align: right; font-size: var(--akf-font-sm); color: var(--akf-text); }

/* --- 纵向柱状（按日趋势） --- */
.akf-trend {
    display: flex;
    align-items: flex-end;
    gap: 4px;
    height: 170px;
    padding-top: 8px;
    overflow-x: auto;
}
.akf-trend-col {
    flex: 1 1 0;
    min-width: 26px;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    gap: 4px;
}
.akf-trend-n { font-size: 11px; line-height: 1; color: var(--akf-text-tertiary); }
.akf-trend-track {
    width: 100%;
    flex: 1 1 auto;
    min-height: 0;
    display: flex;
    align-items: flex-end;
}
.akf-trend-fill {
    width: 100%;
    min-height: 2px;
    background: var(--akf-primary);
    border-radius: 3px 3px 0 0;
    transition: height 0.2s ease;
}
.akf-trend-label { font-size: 10px; line-height: 1; color: var(--akf-text-tertiary); white-space: nowrap; }

/* --- 页头分段切换（时间窗口） --- */
.akf-seg {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    padding: 2px;
    background: var(--akf-bg-hover);
    border-radius: var(--akf-radius-sm);
}
.akf-seg-item {
    display: inline-block;
    padding: 4px 12px;
    font-size: var(--akf-font-xs);
    line-height: 1.6;
    color: var(--akf-text-secondary);
    border-radius: var(--akf-radius-xs);
    text-decoration: none;
}
.akf-seg-item:hover { color: var(--akf-primary); }
.akf-seg-item.is-active {
    background: var(--akf-bg-white);
    color: var(--akf-primary);
    font-weight: 600;
    box-shadow: var(--akf-shadow-sm);
}

/* --- 说明区（口径公式）列表 --- */
.akf-note-list { margin: 6px 0 0; padding-left: 18px; line-height: 1.9; }
.akf-note-list code {
    padding: 1px 5px;
    background: var(--akf-bg);
    border-radius: var(--akf-radius-xs);
    font-size: var(--akf-font-xs);
    color: var(--akf-text-secondary);
}

/* --- R4-2 AI 接待总览：配置健康度清单 + 待办 ---
   ⚠️ 一律使用 --akf-* 设计令牌，不写死颜色：本页与整站共用同一套主题变量。 */
.akf-health { margin: 0; padding: 0; list-style: none; }
.akf-health-item {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    padding: 10px 12px;
    border: 1px solid var(--akf-border-light);
    border-radius: var(--akf-radius-sm);
    margin-bottom: 8px;
    background: var(--akf-bg-white);
}
.akf-health-item:last-child { margin-bottom: 0; }
.akf-health-item.is-todo { border-color: var(--akf-warning); background: var(--akf-warning-bg); }
.akf-health-ico {
    flex: 0 0 auto;
    width: 20px; height: 20px; line-height: 20px;
    text-align: center; border-radius: 50%;
    font-size: var(--akf-font-xs); font-weight: 600;
    color: var(--akf-text-on-dark);
    background: var(--akf-success);
}
.akf-health-item.is-todo .akf-health-ico { background: var(--akf-warning); }
.akf-health-body { flex: 1 1 auto; min-width: 0; }
.akf-health-label { font-weight: 600; color: var(--akf-text); }
.akf-health-detail {
    margin-top: 2px;
    font-size: var(--akf-font-xs);
    color: var(--akf-text-secondary);
    line-height: 1.7;
    word-break: break-word;
}
.akf-health-act { flex: 0 0 auto; align-self: center; }
.akf-health-act a {
    font-size: var(--akf-font-xs);
    color: var(--akf-primary);
    text-decoration: none;
}
.akf-health-act a:hover { text-decoration: underline; }
.akf-health-bar {
    display: flex; align-items: center; gap: 10px;
    margin-bottom: 12px;
}
.akf-health-bar-tx { font-size: var(--akf-font-sm); color: var(--akf-text-secondary); }
.akf-health-bar-track {
    flex: 1 1 auto;
    height: 6px;
    background: var(--akf-bg-active);
    border-radius: 3px;
    overflow: hidden;
}
.akf-health-bar-fill {
    height: 100%;
    background: var(--akf-success);
    border-radius: 3px;
}

/* ============================================================
   R32-C3：失败占位兜底（.akf-img-fail / .akf-video-fail）
   ------------------------------------------------------------
   `AKF_SANITIZE.decorateImg()` / `decorateVideo()` 会把加载失败的 `<img>` / `<video>`
   替换成这两个元素。三套主题（workbench / h5 / visitor）与历史页主题（akf-history.css）
   都已各自定义；本文件是**全站基础样式**（80+ 页面加载），补一份**不带主题前缀**的兜底，
   保证任何"只加载了 akf.css"的页面也不会出现无样式的裸文案。
   ⚠️ 取值与 akf-workbench.css 保持一致；主题文件在 head 中**后加载**（同特异性时后者胜），
      因此不会覆盖各主题的定制配色。
   ============================================================ */
.akf-img-fail {
    display: inline-block; min-width: 110px; padding: 14px 16px;
    text-align: center; font-size: 12px; color: var(--akf-text-tertiary, #9aa2ad);
    background: var(--akf-bg, #f5f6f8); border: 1px dashed var(--akf-border, #d8dce3);
    border-radius: 6px;
}
.akf-video-fail {
    display: inline-block; min-width: 120px; padding: 14px 16px;
    text-align: center; font-size: 12px; color: var(--akf-text-tertiary, #9aa2ad);
    background: var(--akf-bg, #f5f6f8); border: 1px dashed var(--akf-border, #d8dce3);
    border-radius: 6px;
}

