/* SeekMyWay Admin —— 双主题 Token 系统(白天/黑夜)
 * ------------------------------------------------------------------
 * 加载于两处:Pub/tmpl_header.php(外层框架) 与 Pub/ifram_footer.php(每个
 * iframe 片段)。因此 token 在外层与片段内均可用。
 *
 * 机制:
 *   <html data-theme="light|dark"> 由 header 按 cookie(admin_theme)输出;
 *   片段经 ifram_footer.php 按同一 cookie 补 data-theme。
 *
 * 用法:视图里的结构性颜色(背景/文字/边框)一律用下面的 var(--sw-*),
 *   白天默认值在 :root,黑夜值在 :root[data-theme="dark"]。语义状态色
 *   (成功绿 #1ab394 / 危险 #ed5565 / 警告 #f0ad4e / 信息 #23c6c8 等 badge)
 *   两模式通用,不 token 化,视图里原样保留。
 * ------------------------------------------------------------------ */

/* ===== 白天默认值(全套 token) ===== */
:root{
    --sw-bg:#f3f3f4;          /* 页面底 */
    --sw-panel:#ffffff;       /* 卡片/面板/头部内容区 */
    --sw-panel-2:#f5f5f5;     /* 输入框/悬停/次级面板 */
    --sw-panel-3:#fafafa;     /* 更浅的分区(如表头条纹、只读区) */
    --sw-text:#3a3a3a;        /* 主文字 */
    --sw-heading:#333333;     /* 标题文字 */
    --sw-muted:#888888;       /* 次要文字 */
    --sw-border:#e7eaec;      /* 边框/分隔 */
    --sw-border-2:#dddddd;    /* 稍深边框(输入框等) */
    --sw-accent:#1ab394;      /* 品牌绿(两模式相同) */
    --sw-accent-hover:#18a689;/* 品牌绿悬停 */
    --sw-link:#1ab394;        /* 链接色 */
    --sw-shadow:rgba(0,0,0,0.08);   /* 阴影 */
    --sw-code-bg:#f7f7f9;     /* 代码块/端点展示底 */
    --sw-code-text:#333333;   /* 代码块文字 */
    --sw-header:#495057;      /* 顶部头部背景(白天深灰) */
    --sw-sidebar:#f5f5f5;     /* 侧栏背景 */
    --sw-sidebar-sub:#fafafa; /* 侧栏二级背景 */
}

/* ===== 黑夜值(覆盖同名 token) ===== */
:root[data-theme="dark"]{
    --sw-bg:#1b1e23;
    --sw-panel:#23272e;
    --sw-panel-2:#2a2f37;
    --sw-panel-3:#20242b;
    --sw-text:#c9cdd3;
    --sw-heading:#e6e9ed;
    --sw-muted:#8a9098;
    --sw-border:#343b45;
    --sw-border-2:#3d4550;
    --sw-accent:#1ab394;
    --sw-accent-hover:#18a689;
    --sw-link:#5bd0b6;
    --sw-shadow:rgba(0,0,0,0.35);
    --sw-code-bg:#12151a;
    --sw-code-text:#d6dae0;
    --sw-header:#1f242b;
    --sw-sidebar:#23272e;
    --sw-sidebar-sub:#1f242b;
}

/* ==================================================================
 * 以下为「兜底覆盖」规则:仅在暗色模式下,为尚未逐页 token 化的
 * Bootstrap/通用组件提供基础暗色适配。逐页迁移到 var(--sw-*) 后,
 * 这些兜底仍无害地保留,作为安全网。
 * ================================================================== */

/* ===== 基础 ===== */
[data-theme="dark"] body{ background:var(--sw-bg) !important; color:var(--sw-text) !important; }
[data-theme="dark"] .jumbotron{ background:var(--sw-bg) !important; color:var(--sw-text) !important; }
[data-theme="dark"] .gray-bg,
[data-theme="dark"] .white-bg,
[data-theme="dark"] .wrapper-content,
[data-theme="dark"] .content{ background:var(--sw-bg) !important; }
[data-theme="dark"] h1,[data-theme="dark"] h2,[data-theme="dark"] h3,
[data-theme="dark"] h4,[data-theme="dark"] h5,[data-theme="dark"] h6{ color:var(--sw-heading) !important; }
[data-theme="dark"] a{ color:var(--sw-link); }
[data-theme="dark"] .text-muted,[data-theme="dark"] .help-block,[data-theme="dark"] small{ color:var(--sw-muted) !important; }
[data-theme="dark"] hr{ border-color:var(--sw-border) !important; }

/* ===== 卡片 / 面板 ===== */
[data-theme="dark"] .ibox,
[data-theme="dark"] .ibox-content,
[data-theme="dark"] .ibox-title,
[data-theme="dark"] .panel,
[data-theme="dark"] .panel-body,
[data-theme="dark"] .panel-heading,
[data-theme="dark"] .widget,
[data-theme="dark"] .card,
[data-theme="dark"] .list-group-item{
    background:var(--sw-panel) !important;
    color:var(--sw-text) !important;
    border-color:var(--sw-border) !important;
}

/* INSPINIA 的左侧列表列 .fh-column 主题里硬编码 background:#fff(如 AI客服日志的会话列),
 * dark-theme 未覆盖时暗色下仍白底。统一压成面板色,与"主题分析"等面板一致。 */
[data-theme="dark"] .fh-column{ background:var(--sw-panel) !important; }

/* ===== 侧栏菜单 ===== */
[data-theme="dark"] .sidebar-menu{ background:var(--sw-panel) !important; box-shadow:2px 0 5px rgba(0,0,0,0.3) !important; }
[data-theme="dark"] .menu-item{ border-bottom-color:var(--sw-border) !important; }
[data-theme="dark"] .menu-header span,
[data-theme="dark"] .menu-header i:first-child,
[data-theme="dark"] .menu-arrow{ color:var(--sw-text) !important; }
[data-theme="dark"] .menu-header:hover{ background:var(--sw-panel-2) !important; }
[data-theme="dark"] .submenu{ background:#1f242b !important; }
[data-theme="dark"] .submenu li a{ color:#b7bcc3 !important; }
[data-theme="dark"] .submenu li a i{ color:var(--sw-muted) !important; }
[data-theme="dark"] .submenu li a:hover{ background:var(--sw-panel-2) !important; color:#fff !important; }
[data-theme="dark"] .submenu li.active a{ background:#161a1f !important; color:#fff !important; border-left-color:var(--sw-accent) !important; }
[data-theme="dark"] .submenu li.active a i{ color:var(--sw-accent) !important; }

/* ===== 顶部头部 ===== */
/* 白天头部为深灰 #495057;暗色下压得更暗,与整体面板一致 */
[data-theme="dark"] .header{ background-color:#1f242b !important; }

/* ===== 顶部下拉(个人中心/帮助/站点) ===== */
/* 下拉里的"退出登录"按钮暗色适配 */
[data-theme="dark"] .dropdown-content .dropdown-logout-btn{ color:var(--sw-text) !important; border-top-color:var(--sw-border) !important; }
[data-theme="dark"] .dropdown-content .dropdown-logout-btn:hover{ background:var(--sw-panel-2) !important; }
[data-theme="dark"] .dropdown-content,
[data-theme="dark"] .website-dropdown .website-dropdown-content{
    background:var(--sw-panel) !important; border-color:var(--sw-border) !important;
}
[data-theme="dark"] .dropdown-content a,
[data-theme="dark"] .website-dropdown-content a{ color:var(--sw-text) !important; }
[data-theme="dark"] .dropdown-content a:hover,
[data-theme="dark"] .website-dropdown-content a:hover{ background:var(--sw-panel-2) !important; }

/* ===== 表格 ===== */
[data-theme="dark"] .table,[data-theme="dark"] table{ color:var(--sw-text) !important; }
[data-theme="dark"] .table>thead>tr>th,
[data-theme="dark"] .table>tbody>tr>td,
[data-theme="dark"] .table>tbody>tr>th,
[data-theme="dark"] table th,[data-theme="dark"] table td{
    border-color:var(--sw-border) !important; background:transparent !important;
}
[data-theme="dark"] .table-striped>tbody>tr:nth-of-type(odd){ background:#20242b !important; }
[data-theme="dark"] .table-hover>tbody>tr:hover{ background:var(--sw-panel-2) !important; }

/* ===== 表单 ===== */
[data-theme="dark"] .form-control,
[data-theme="dark"] input[type="text"],[data-theme="dark"] input[type="email"],
[data-theme="dark"] input[type="password"],[data-theme="dark"] input[type="number"],
[data-theme="dark"] input[type="search"],[data-theme="dark"] textarea,[data-theme="dark"] select{
    background:var(--sw-panel-2) !important; color:var(--sw-text) !important; border-color:var(--sw-border) !important;
}
[data-theme="dark"] .form-control::placeholder{ color:var(--sw-muted) !important; }
[data-theme="dark"] .input-group-addon{ background:var(--sw-panel) !important; color:var(--sw-text) !important; border-color:var(--sw-border) !important; }

/* ===== 代码块 / 端点展示(MCP/安装页) ===== */
[data-theme="dark"] pre,[data-theme="dark"] code,
[data-theme="dark"] .endpoint,[data-theme="dark"] .preview-box,
[data-theme="dark"] .help-box{ background:#12151a !important; color:#d6dae0 !important; border-color:var(--sw-border) !important; }

/* ===== 弹窗 ===== */
[data-theme="dark"] .modal-content{ background:var(--sw-panel) !important; color:var(--sw-text) !important; }
[data-theme="dark"] .modal-header,[data-theme="dark"] .modal-footer{ border-color:var(--sw-border) !important; }
[data-theme="dark"] .close{ color:var(--sw-text) !important; opacity:.8; }

/* ===== 按钮:暗色下默认态即足够对比(无需 hover 就能看清文字) =====
 * 症结:INSPINIA/Bootstrap 的中性按钮在暗色下低对比 ——
 *   .btn-white  = 白底 + color:inherit(继承暗色下的浅色文字)→ 浅字白底,几乎看不清;
 *   .btn-default= 浅灰底(#c2c2c2) + 白字            → 灰白一片,文字糊。
 * 修法:中性按钮(白/默认灰/无色描边)统一给 面板底 + 正文色 + 边框,
 *   默认态就清晰;hover 再略提亮以作区分。
 * 品牌绿 .btn-primary(实心,#1ab394)与语义色(成功/信息/警告/危险)按钮
 *   本就清晰、含语义,一律不动。 */
[data-theme="dark"] .btn-default,
[data-theme="dark"] .btn-white,
[data-theme="dark"] .btn-outline:not(.btn-primary):not(.btn-success):not(.btn-info):not(.btn-warning):not(.btn-danger){
    background:var(--sw-panel-2) !important; color:var(--sw-text) !important; border-color:var(--sw-border) !important;
}
[data-theme="dark"] .btn-default:hover,[data-theme="dark"] .btn-default:focus,[data-theme="dark"] .btn-default:active,[data-theme="dark"] .btn-default.active,
[data-theme="dark"] .btn-white:hover,[data-theme="dark"] .btn-white:focus,[data-theme="dark"] .btn-white:active,[data-theme="dark"] .btn-white.active,
[data-theme="dark"] .btn-outline:not(.btn-primary):not(.btn-success):not(.btn-info):not(.btn-warning):not(.btn-danger):hover,
[data-theme="dark"] .btn-outline:not(.btn-primary):not(.btn-success):not(.btn-info):not(.btn-warning):not(.btn-danger):focus{
    background:var(--sw-panel) !important; color:var(--sw-text) !important; border-color:var(--sw-border-2) !important;
}
/* 语义/品牌【实心】按钮写成 <a> 时,文字仍应是白色。
 * 上面 `[data-theme="dark"] a{color:var(--sw-link)}` 的特指度是 (0,1,1),高于
 * `.btn-success` 的 (0,1,0),于是 <a class="btn btn-success"> 的文字被染成链接色,
 * 而同样的按钮写成 <button> 却不受影响 —— 表现就是同一个「导出」在不同页面一个纯白、
 * 一个灰白(2026-09-01 实测:AI 客服日志是 <button> 正常,对话用户/线索/预约是 <a> 偏灰)。
 * hover 态不受影响(`.btn-success:hover` 特指度 (0,2,0) 本就更高),所以只补默认态。
 * .btn-outline 主动排除:描边按钮本来就该保留语义色,理由见下面那段说明。 */
[data-theme="dark"] a.btn-primary:not(.btn-outline),
[data-theme="dark"] a.btn-success:not(.btn-outline),
[data-theme="dark"] a.btn-info:not(.btn-outline),
[data-theme="dark"] a.btn-warning:not(.btn-outline),
[data-theme="dark"] a.btn-danger:not(.btn-outline){ color:#fff; }

/* 说明:语义/品牌描边按钮(.btn-primary/.btn-success/.btn-info/.btn-warning/.btn-danger + .btn-outline)
 * 在 style.css 原生即为「同色文字 + 同色边框 + 透明底」,暗色下已清晰可辨,且 hover 有原生填充效果,
 * 故此处以 :not() 主动排除、不做覆盖,以保留语义色与 hover 交互。 */

/* ===== 杂项 ===== */
[data-theme="dark"] .nav-tabs{ border-bottom-color:var(--sw-border) !important; }
[data-theme="dark"] .breadcrumb{ background:transparent !important; }
[data-theme="dark"] .breadcrumb a{ color:var(--sw-link) !important; }

/* 主题切换按钮本身 */
.theme-toggle-btn{
    display:inline-flex; align-items:center; gap:6px;
    background:transparent; border:1px solid rgba(255,255,255,0.25);
    color:#fff; border-radius:16px; padding:5px 12px; cursor:pointer;
    font-size:13px; line-height:1; transition:background .2s;
}
.theme-toggle-btn:hover{ background:rgba(255,255,255,0.12); }
</content>
</invoke>
