/* AiRadar 管理面板全站样式（单一来源）
 * 由 _base.html 通过 <link rel="stylesheet" href="/static/app.css"> 引入；
 * 各页面模板只保留结构与内容，样式一律写在本文件，禁止在模板里硬编码 <style>/style 属性。
 * 命名约定：组件类全局通用；仅某页使用的样式加该页前缀（.topic- / .kpi- / .push- / .auth- 等）。
 */

/* ---------------- 设计变量（浅色 3D 主题） ---------------- */
:root {
  --bg:#eef2f8; --panel:#ffffff; --panel-2:#f3f6fc; --line:#dfe5f0; --line-2:#c7d0e1;
  --text:#1e2637; --muted:#5c667a; --dim:#8b95a8;
  --blue:#b4720c;             /* 主强调色（琥珀金）：链接 / 边框聚焦 / 强调 */
  --blue-deep:#8d5705;        /* 主强调深色 */
  --gold:#c58b12; --gold-lit:#8f5c06; --gold-deep:#7d4e05; --gold-dim:#a17a20;
  --green:#14803d; --red:#d92d20; --amber:#b45309;
}

* { box-sizing:border-box; }
body { margin:0; font-family:-apple-system,"Segoe UI","Microsoft YaHei",sans-serif;
       background:var(--bg); color:var(--text); min-height:100vh; font-size:14px; line-height:1.6; }

/* ---------------- 统一页头 / 导航（多级分组 + 用户下拉） ---------------- */
.site-header { display:flex; align-items:center; gap:0;
               padding:0 20px; border-bottom:1px solid var(--line);
               background:#11141a; position:sticky; top:0; z-index:20; height:52px; }
.header-left { display:flex; align-items:center; gap:0; flex:1; min-width:0; }
.header-right { display:flex; align-items:center; gap:10px; margin-left:auto; }
.brand { font-size:16px; font-weight:700; letter-spacing:.5px; color:var(--text); text-decoration:none;
         display:inline-flex; align-items:center; gap:8px; padding-right:18px; border-right:1px solid var(--line); margin-right:14px; flex-shrink:0; }
.brand-dot { width:8px; height:8px; border-radius:50%; background:var(--blue); box-shadow:0 0 8px var(--blue); }
.brand span { color:var(--blue); }

/* 分组 nav 容器 */
.site-nav { display:flex; align-items:stretch; gap:0; flex:1; min-width:0; }
.nav-sep { width:1px; height:22px; background:var(--line); margin:0 6px; align-self:center; flex-shrink:0; }
.nav-group { display:flex; align-items:center; gap:2px; position:relative; }
/* 分组名标签：原用绝对定位浮在导航上方，会溢出页头被裁成"半个字"，
   现彻底隐藏（分组高亮仍由 .group-active 驱动，无需此悬浮文字）。 */
.nav-group-label { display:none !important; }
.nav-group.group-active > .nav-group-items > .nav-item > .nav-link { color:var(--blue); }
.nav-group-items { display:flex; align-items:center; gap:2px; }

.nav-item { position:relative; }
.nav-link { color:var(--muted); font-size:13px; text-decoration:none;
            padding:6px 10px; border-radius:6px; line-height:1.4; white-space:nowrap;
            display:inline-flex; align-items:center; gap:4px; transition:color .12s, background .12s; }
.nav-link:hover { color:var(--text); background:var(--panel); }
.nav-link.active { color:var(--blue); background:#152238; }
.nav-chevron { opacity:.6; transition:transform .15s; }
.nav-item.has-dropdown:hover .nav-chevron { transform:rotate(180deg); }

/* 二级下拉菜单 */
.nav-dropdown { position:absolute; top:calc(100% + 8px); left:0; min-width:180px;
                background:#171b22; border:1px solid var(--line); border-radius:8px;
                box-shadow:0 10px 32px rgba(0,0,0,.45); padding:6px; display:none;
                z-index:50; animation:ddFadeIn .12s ease; }
@keyframes ddFadeIn { from { opacity:0; transform:translateY(-4px); } to { opacity:1; transform:translateY(0); } }
.nav-item.has-dropdown:hover > .nav-dropdown { display:block; }
.nav-dd-item { display:block; padding:7px 12px; border-radius:6px; color:var(--text); text-decoration:none;
               font-size:13px; transition:background .1s, color .1s; }
.nav-dd-item:hover { background:var(--panel); }
.nav-dd-item.active { color:var(--blue); background:#152238; }
.nav-dd-item.danger { color:var(--red); }
.nav-dd-item.danger:hover { background:#3a2326; color:#fca5a5; }

/* 用户下拉（右上角） */
.nav-user-menu { position:relative; }
.nav-user { color:var(--text); font-size:13px; padding:6px 12px; background:var(--panel);
            border-radius:8px; display:inline-flex; align-items:center; gap:6px;
            cursor:pointer; transition:background .1s; border:1px solid var(--line); }
.nav-user:hover { background:var(--line-2); border-color:var(--blue); }
.nav-avatar { opacity:.7; }
.nav-role { color:var(--muted); font-size:11px; background:var(--bg); padding:1px 6px;
            border-radius:4px; }
.user-dropdown { position:absolute; top:calc(100% + 8px); right:0; min-width:160px;
                 background:#171b22; border:1px solid var(--line); border-radius:8px;
                 box-shadow:0 10px 32px rgba(0,0,0,.45); padding:6px; display:none; z-index:50; }
/* 桥接触发按钮与菜单之间的 8px 空隙：鼠标从按钮移向菜单时不因空隙丢失点击目标 */
.nav-user-menu .user-dropdown::before, .nav-item.has-dropdown .nav-dropdown::before {
  content:""; position:absolute; top:-8px; left:0; right:0; height:8px; }
/* 用户名下拉：由点击展开（.open 由 _base.html 的脚本切换），不再用 hover */
.nav-user-menu.open .user-dropdown { display:block; }
.nav-user-menu.open .nav-user { border-color:var(--blue); }
.nav-user-menu.open .nav-user .nav-chevron { transform:rotate(180deg); }
.dd-divider { display:block; height:1px; background:var(--line); margin:6px 4px; }

/* 非登录态 */
.nav-link.login { color:var(--blue); }
.site-nav.public { gap:6px; }

/* ---------------- 面包屑 ---------------- */
.breadcrumbs { margin-bottom:14px; display:flex; align-items:center; gap:6px; flex-wrap:wrap;
               font-size:13px; color:var(--muted); }
.breadcrumbs a { color:var(--blue); text-decoration:none; }
.breadcrumbs a:hover { text-decoration:underline; }
.breadcrumbs .sep { color:var(--dim); font-size:11px; }
.breadcrumbs .cur { color:var(--text); font-weight:500; }

/* ---------------- 内容容器 ---------------- */
main.page { padding:24px 28px 48px; max-width:1240px; margin:0 auto; }
main.page.wide { max-width:1440px; }
main.page.narrow { max-width:760px; }
.page-head { margin:0 0 18px; display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:10px; }
.page-head h2 { font-size:18px; margin:0; }
.page-head .sub { color:var(--muted); font-size:13px; margin-top:4px; }
.sec-title { font-size:14px; color:var(--muted); margin:0 0 14px; }

/* ---------------- 通用组件 ---------------- */
.card { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:18px 20px; }
.table-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; }
.table-wrap > table { min-width:720px; }
table { width:100%; border-collapse:collapse; font-size:13px; }
/* 需求1：PC 宽屏下表格单元格默认单行排列，避免内容被压缩后竖向堆叠；
   长文本列需截断时加 .td-ell（配合 title 查看全文）。 */
th, td { text-align:left; padding:9px 10px; border-bottom:1px solid var(--line); vertical-align:middle; white-space:nowrap; }
th { color:var(--muted); font-weight:500; background:var(--panel-2); }
/* 单行省略截断（长文本列）：超出隐藏 + 悬停 title 看全文 */
.td-ell { max-width:360px; overflow:hidden; text-overflow:ellipsis; }
.td-ell.wide { max-width:520px; }
.td-ell.xnarrow { max-width:140px; }
.table-wrap table tbody tr:nth-child(even) { background:rgba(255,255,255,.015); }
.table-wrap table tbody tr { transition:background .08s; }
.table-wrap table tbody tr:hover { background:rgba(59,130,246,.06); }

a.link { color:var(--blue); text-decoration:none; }
.link:hover { text-decoration:underline; }
.hint { color:var(--dim); font-size:12px; margin-top:4px; }
.ml-auto { margin-left:auto; }
.muted { color:var(--muted); }
.sub-id { color:var(--muted); font-size:12px; }
.wrap-any { overflow-wrap:anywhere; }
.sec-title.gap-top { margin-top:32px; }
.form-actions { margin-top:18px; }
.divider { height:1px; background:var(--line); margin:22px 0; border:0; }

.tag { display:inline-block; padding:2px 8px; border-radius:999px; font-size:12px; }
.tag.ok, .tag.success { background:#0e3a23; color:var(--green); }
.tag.fallback, .tag.error { background:#3a2326; color:var(--red); }
.tag.ratelimited, .tag.fail { background:#3a3323; color:var(--amber); }
.tag.blocked { background:#3a2326; color:var(--red); }
.tag.role-super_admin { background:#3a2a0e; color:var(--amber); }
.tag.role-admin { background:#0e2a3a; color:#60a5fa; }
.tag.role-user { background:#0e3a23; color:var(--green); }
.tag.role-viewer { background:#2a2f3a; color:var(--muted); }

.msg { padding:10px 12px; border-radius:8px; font-size:13px; margin:0 0 14px; }
.msg.ok { background:#0e3a23; color:var(--green); }
.msg.err { background:#3a2326; color:var(--red); }
.msg.warn { background:#3a3416; color:#facc15; }

label { display:block; font-size:12px; color:var(--muted); margin:10px 0 4px; }
input[type=text], input[type=password], textarea, select {
  width:100%; box-sizing:border-box; background:var(--panel-2); color:var(--text);
  border:1px solid var(--line-2); border-radius:8px; padding:8px 10px; font-size:13px;
  font-family:inherit; transition:border-color .15s, box-shadow .15s; }
select { width:auto; }
/* 公众号列表归属主题下拉（紧凑，适配表格） */
select.topic-sel { min-width:96px; max-width:150px; padding:5px 8px; font-size:12.5px; border-radius:6px; }
textarea { min-height:64px; resize:vertical; }
input[type=number] { width:100%; }
input.input-sm { width:100px; }
input:focus, textarea:focus, select:focus { outline:none; border-color:var(--blue); box-shadow:0 0 0 2px rgba(59,130,246,.2); }

/* 设置页 JSON 控件 */
.json-field { display:flex; flex-direction:column; gap:6px; }
.json-field textarea { min-height:96px; font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace;
                       font-size:12.5px; line-height:1.55; }
.json-bar { display:flex; align-items:center; gap:10px; }
.json-badge { font-size:12px; min-height:16px; flex:1; }
.json-badge.ok { color:var(--green); }
.json-badge.err { color:var(--red); }
.js-fmt { margin-left:auto; }
.chk { display:flex; align-items:center; gap:8px; margin:14px 0 0; font-size:13px; color:var(--muted); }
.chk input { width:auto; }

.btn { display:inline-block; background:var(--blue); color:#fff; border:0; border-radius:8px;
       padding:8px 16px; font-size:13px; font-family:inherit; cursor:pointer; text-decoration:none;
       transition:background .12s, opacity .12s; }
.btn:hover { background:#2f6fd6; color:#fff; }
.btn:disabled { opacity:.6; cursor:default; }
.btn.sm { padding:5px 12px; font-size:12px; }
.btn.ok { background:var(--green); }
.btn.ok:hover { background:#22c55e; }
.btn.ghost { background:transparent; color:var(--muted); border:1px solid var(--line-2); }
.btn.ghost:hover { color:var(--text); border-color:var(--blue); background:transparent; }
.btn.danger { color:var(--red); border-color:transparent; background:transparent; padding:4px 8px; }
.btn.danger:hover { background:#3a2326; }
.btn-clear { background:var(--line-2) !important; color:var(--text) !important; }
.btn-clear:hover { background:var(--line) !important; }

/* ---------------- 仪表盘 ---------------- */
.kpi-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(220px, 1fr)); gap:16px; margin-bottom:28px; }
.kpi-grid .box { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:18px; }
.kpi-grid .k { color:var(--muted); font-size:12px; }
.kpi-grid .v { font-size:24px; margin-top:6px; }
.kpi-grid .bar { height:8px; border-radius:6px; background:var(--line-2); margin-top:10px; overflow:hidden; }
.kpi-grid .bar > i { display:block; height:100%; width:calc(var(--pct, 0) * 1%); background:var(--blue); }
.kpi-grid .bar.warn > i { background:var(--amber); }
.kpi-grid .bar.over > i { background:var(--red); }
.tstate { font-size:12px; margin-left:8px; white-space:nowrap; }
.tstate.running { color:var(--muted); }
.tstate.ok { color:var(--green); }
.tstate.err { color:var(--red); }
.tstate.warn { color:var(--amber); }
.resbox { margin-top:8px; }
.rescard { background:var(--panel-2); border:1px solid var(--line); border-radius:10px;
           padding:10px 12px; margin-top:6px; }
.rescard .rh { font-size:12px; color:var(--muted); margin-bottom:6px; }
.rescard .rt { margin:0; padding-left:18px; font-size:12px; }
.rescard details { margin-top:6px; }
.rescard summary { font-size:12px; color:var(--blue); cursor:pointer; }
.rescard pre { background:var(--bg); border-radius:8px; padding:10px; white-space:pre-wrap;
               word-break:break-all; font-size:12px; line-height:1.5; max-height:240px; overflow:auto; }

/* ---------------- 主题管理 ---------------- */
.topic-grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:18px; }
.topic-card { position:relative; transition:border-color .15s, transform .15s; }
.topic-card:hover { border-color:var(--blue); transform:translateY(-2px); }
.topic-card.disabled { opacity:.62; }
.topic-card-main { display:flex; flex-direction:column; text-decoration:none; color:inherit; padding:14px 16px; padding-bottom:52px; }
.topic-card h3 { margin:0; font-size:15px; }
.topic-card .tid { color:var(--muted); font-size:12px; font-weight:400; }
.topic-head { display:flex; align-items:center; gap:10px; }
.topic-meta { display:flex; flex-wrap:wrap; gap:12px; margin-top:10px; color:var(--muted); font-size:13px; }
.days-label { color:var(--blue); font-size:12px; }
.topic-last { margin-top:8px; color:var(--muted); font-size:13px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.topic-go { margin-top:auto; padding-top:14px; color:var(--blue); font-size:13px; font-weight:600; }

.topic-toolbar { position:absolute; bottom:10px; right:12px; display:flex; gap:8px; align-items:center; }
.topic-enable { border:none; background:transparent; cursor:pointer; display:flex; align-items:center; gap:6px;
  padding:2px 0; color:var(--muted); font-size:12px; user-select:none; }
.topic-enable-label { color:var(--muted); }
.topic-enable.on .topic-enable-label { color:#86efac; }
.topic-enable-track { display:inline-block; width:32px; height:18px; border-radius:999px;
  background:#2a2f3a; position:relative; transition:background .15s; }
.topic-enable-thumb { position:absolute; top:2px; left:2px; width:14px; height:14px; border-radius:50%;
  background:#9aa7bd; transition:left .15s, background .15s; }
.topic-enable.on .topic-enable-track { background:#13351f; }
.topic-enable.on .topic-enable-thumb { left:16px; background:#34d399; }
.badge { display:inline-block; padding:2px 9px; border-radius:999px; font-size:12px; }
.badge.on { background:#13351f; color:#86efac; }
.badge.off { background:#2a2f3a; color:var(--muted); }
.crumbs { margin-bottom:14px; }
.crumbs a { color:var(--blue); text-decoration:none; font-size:13px; }
.crumbs a:hover { text-decoration:underline; }
.topic-detail { max-width:1240px; }
.topic-detail h2 { margin:0; font-size:18px; }
.topic-detail .topic-head { margin-bottom:16px; }
.topic-detail form { display:flex; flex-direction:column; }
.topic-detail .meta-bar { display:flex; flex-wrap:wrap; align-items:flex-end; gap:14px 26px; margin-bottom:6px; }
.topic-detail .meta-col { display:flex; flex-wrap:wrap; align-items:flex-end; gap:14px 16px; }
.topic-detail .meta-col .fld { display:flex; flex-direction:column; gap:5px; }
.topic-detail .meta-col .fld > label { margin:0; font-size:12px; color:var(--muted); white-space:nowrap; }
.topic-detail .num { width:auto; }
.topic-detail .num-schedule { width:94px; }
.topic-detail .num-small { width:70px; }
.topic-detail .dow-label { margin-top:0 !important; }
.topic-detail .dow-group { display:flex; flex-wrap:wrap; gap:6px; margin-top:2px; }
.topic-detail .dow-item { display:inline-flex; align-items:center; gap:4px;
  margin:0; padding:3px 8px; font-size:12px; color:var(--text);
  background:var(--panel, #10182a); border:1px solid var(--line, #26324a);
  border-radius:6px; cursor:pointer; white-space:nowrap; }
.topic-detail .dow-item input { width:auto; margin:0; accent-color:var(--blue, #3b82f6); }
.topic-detail .dow-item:has(input:checked) { border-color:var(--blue, #3b82f6); color:var(--blue, #3b82f6); }
.topic-detail .meta-enable { margin:0; align-self:flex-end; }
.topic-detail .actions { margin-top:14px; }
.topic-detail .msg { margin-bottom:10px; }
.topic-detail label { margin-top:10px; }

/* 主题详情：结构化编辑器 */
.edit-section { margin-top:20px; padding-top:16px; border-top:1px solid var(--line); }
.edit-section h3 { margin:0 0 4px; font-size:15px; color:var(--text); }
.edit-section .hint { margin:0 0 10px; }
.edit-block { display:flex; flex-direction:column; gap:10px; }
.edit-rows { display:flex; flex-direction:column; gap:8px; }
.edit-row { display:flex; flex-wrap:wrap; gap:8px; align-items:flex-start; }
.edit-row input[type=text], .edit-row textarea, .edit-row select, .edit-row input[type=number] {
  flex:1; min-width:0; background:var(--panel-2); }
.edit-row .et-target { font-family:inherit; }
.et-type { flex:0 0 150px; }
.target-row .et-target { flex:1; min-width:0; }
.kw-row { align-items:stretch; }
.kw-bucket { flex:0 0 150px; }
.kw-words { flex:1; resize:vertical; min-height:46px; line-height:1.5; }

/* Tip */
.tip { display:inline-flex; align-items:center; justify-content:center;
  width:15px; height:15px; margin-left:5px; border-radius:50%;
  background:var(--panel); color:var(--blue); font-size:10px; cursor:help;
  border:1px solid var(--line); position:relative; vertical-align:middle; }
.tip:hover, .tip:focus { background:var(--blue); color:#06121f; outline:none; }
.tip[data-tip]:hover::after, .tip[data-tip]:focus::after {
  content: attr(data-tip); position:absolute; left:50%; top:calc(100% + 7px);
  transform:translateX(-50%); width:max(264px, 18rem); max-width:84vw;
  white-space:pre-line; text-align:left; background:#0e1626; color:var(--text);
  border:1px solid var(--line); border-radius:8px; padding:9px 11px;
  font-size:12px; font-weight:400; line-height:1.65; z-index:60;
  box-shadow:0 8px 24px rgba(0,0,0,.5); pointer-events:none; }

.sources-grid { display:flex; flex-direction:column; gap:10px; }
.src-row { display:flex; flex-wrap:wrap; align-items:center; gap:8px;
  background:var(--panel-2); border:1px solid var(--line); border-radius:8px; padding:8px 10px;
  position:relative; }
.src-row .js-drag { flex:0 0 auto; cursor:grab; color:var(--muted); font-size:16px; line-height:1;
  padding:0 4px; user-select:none; }
.src-row .js-drag:hover { color:var(--blue); }
.src-row .js-drag:active { cursor:grabbing; }
.src-row.dragging { opacity:.45; border-style:dashed; }
.src-row.drag-over { border-color:var(--blue); box-shadow:0 0 0 1px var(--blue) inset; }
.src-row input, .src-row select { min-width:0; background:var(--panel); flex:0 0 auto; }
.src-name  { width:160px; }   /* 列宽由 topics_ui.js 按内容字符串动态定宽；此值为降级默认宽 */
.src-url   { width:220px; }
.src-limit { width:72px; }
.js-del { flex:0 0 auto; line-height:1; }

/* ---------------- 进化建议 ---------------- */
.evo-actions { display:flex; gap:8px; flex-wrap:wrap; margin:12px 0; }
.evo-list { display:flex; flex-direction:column; gap:12px; margin-top:8px; }
.evo-card { position:relative; border:1px solid var(--line); border-radius:10px; padding:14px 16px; background:var(--panel); }
.evo-cb { width:15px; height:15px; accent-color:var(--blue); cursor:pointer; flex-shrink:0; margin-right:2px; }
.evo-card.status-adopted { border-color:#2f6b3a; }
.evo-card.status-rejected { opacity:.62; }
.evo-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:6px; }
.evo-dim { font-weight:600; color:var(--blue); }
.evo-target { font-family:ui-monospace,Menlo,Consolas,monospace; font-size:13px; color:var(--muted); }
.evo-action { color:var(--text); }
.evo-reason { color:#c2ccda; font-size:14px; line-height:1.6; margin:4px 0 8px; }
.evo-meta { display:flex; align-items:center; gap:10px; font-size:13px; color:var(--muted); flex-wrap:wrap; }
.conf { position:relative; flex:1; min-width:120px; height:8px; border-radius:6px; background:#222a38; overflow:hidden; }
.conf > i { display:block; height:100%; width:calc(var(--pct,0) * 1%); background:linear-gradient(90deg,#4ade80,#3b82f6); border-radius:6px; }

.evo-filters { display:flex; gap:8px; align-items:center; margin:4px 0 14px; flex-wrap:wrap; }
.evo-filters .flbl { color:var(--muted); font-size:13px; }
.evo-filters .flt { display:inline-block; padding:3px 12px; border-radius:999px; font-size:13px;
                    text-decoration:none; border:1px solid var(--line); color:var(--muted); background:var(--panel); }
.evo-filters .flt:hover { color:var(--text); border-color:var(--blue); }
.evo-filters .flt.on { color:#fff; background:var(--blue); border-color:var(--blue); }

.global-flash { margin:0 0 12px; padding:10px 16px; border-radius:10px; font-size:13px;
                display:flex; align-items:center; gap:10px; box-shadow:0 4px 16px rgba(0,0,0,.3);
                animation:flashSlideIn .18s ease; transition:opacity .2s ease; }
.global-flash.ok { background:rgba(59,130,246,.12); color:#60a5fa; border:1px solid #1e40af; }
.global-flash.err { background:rgba(239,68,68,.12); color:#f87171; border:1px solid #991b1b; }
.global-flash.warn { background:rgba(251,191,36,.12); color:#fbbf24; border:1px solid #92400e; }
@keyframes flashSlideIn { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:translateY(0); } }

.evo-mine { margin:6px 0 2px; padding:6px 12px; font-size:13px; color:#c2ccda;
            background:rgba(59,130,246,0.08); border:1px dashed rgba(59,130,246,0.45); border-radius:8px; }
.evo-mine b { color:#7dd3fc; font-weight:600; padding:0 2px; }
.evo-mine .btn.ghost { margin-left:8px; padding:2px 8px; font-size:12px; border-color:#3b82f6;
                       color:#93c5fd; background:transparent; }
.evo-mine .btn.ghost:hover { background:rgba(59,130,246,0.15); color:#fff; }
.evo-mine-badge { font-size:11px; padding:1px 8px; border-radius:999px;
                  color:#c2ccda; background:rgba(148,163,184,0.18);
                  border:1px solid rgba(148,163,184,0.35); line-height:1.5; }
.evo-touched { box-shadow:0 0 0 1px rgba(59,130,246,0.5) inset; }
.evo-touched-adopt { box-shadow:0 0 0 1px rgba(34,197,94,0.6) inset; }
.evo-touched-reject { box-shadow:0 0 0 1px rgba(239,68,68,0.6) inset; opacity:.92; }
.evo-scope { display:inline-block; padding:1px 8px; border-radius:999px; font-size:12px;
             border:1px solid transparent; }
.evo-scope.scope-global { color:#9aa7bd; background:#1c2738; border-color:#2a3650; }
.evo-scope.scope-chat   { color:#7dd3fc; background:#0c2a3a; border-color:#155e75; }
.evo-scope.scope-user   { color:#fca5a5; background:#3a1d1d; border-color:#7f1d1d; }
.evo-auto { display:inline-block; padding:1px 8px; border-radius:999px; font-size:12px;
            border:1px solid transparent; margin-left:4px;
            color:#fde68a; background:#3a2f0c; border-color:#a16207; }

/* ---------------- 历史 ---------------- */
.filters { display:flex; gap:10px; align-items:center; margin-bottom:20px; flex-wrap:wrap; }
.filters input[type=text] { width:220px; }
.filters .adv { display:flex; gap:10px; align-items:center; padding-left:12px; margin-left:2px; border-left:1px dashed var(--line); }
.filters .adv input[type=number] { width:120px; }
.filters .adv input[type=text] { width:200px; }

/* ---------------- 历史详情 ---------------- */
.detail-meta { color:var(--muted); font-size:13px; margin:0 0 16px; }
.detail-meta b { color:var(--text); font-weight:600; }
.md-body { background:var(--panel); border:1px solid var(--line); border-radius:12px; padding:18px;
           white-space:pre-wrap; word-break:break-all; font-size:13px; line-height:1.6; margin:0; }

/* ---------------- 统计 ---------------- */
.sec-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:14px; }
.sec-head h3 { font-size:14px; color:var(--muted); margin:0; }
.chart { display:flex; align-items:flex-end; gap:3px; height:120px; background:var(--panel);
         border:1px solid var(--line); border-radius:12px; padding:12px; margin-bottom:28px; }
.chart .bar { flex:1; height:var(--h, 1%); background:var(--blue); border-radius:3px 3px 0 0;
              min-height:2px; position:relative; cursor:pointer; }
.chart .bar:hover { z-index:5; }
.chart .bar:hover::after { content:attr(data-v); position:absolute; bottom:100%; left:50%;
         transform:translateX(-50%); font-size:11px; color:var(--text); white-space:nowrap;
         background:var(--bg); border:1px solid var(--line); border-radius:4px; padding:2px 6px;
         margin-bottom:4px; z-index:10; pointer-events:none; }
.chart .bar.today { background:var(--green); }
.chart-wrap { margin-bottom:28px; }
.chart-wrap .chart { margin-bottom:6px; }
.chart-x { display:flex; gap:3px; padding:0 12px; }
.chart-x .xlab { flex:1; text-align:center; font-size:10px; color:var(--dim);
                white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.chart-x .xlab.empty { visibility:hidden; }

/* ---------------- 登录审计 ---------------- */
.ua { color:var(--muted); font-size:12px; word-break:break-all; }
.empty { color:var(--muted); font-size:13px; }

/* ---------------- 公开首页 ---------------- */
.hero { margin-bottom:36px; }
.hero h2 { font-size:24px; margin:0 0 10px; }
.hero p { color:var(--muted); font-size:14px; line-height:1.7; margin:0; max-width:680px; }
body.page-home .sec-title { border-left:3px solid var(--blue); padding-left:10px; }
.push-grid { display:grid; grid-template-columns:repeat(2, 1fr); gap:16px; }
.push-grid .card { display:flex; flex-direction:column; gap:8px; }
.push-grid .top { display:flex; align-items:center; justify-content:space-between; }
.push-grid h3 { font-size:15px; margin:0; line-height:1.4; }
.push-grid .preview { color:#9aa0a8; font-size:13px; line-height:1.6; margin:0;
                      display:-webkit-box; -webkit-line-clamp:4; -webkit-box-orient:vertical;
                      overflow:hidden; }
.push-grid .date { color:var(--dim); font-size:12px; }
.t-ai { background:#0e2a3a; color:#60a5fa; }
.t-laser { background:#0e3a23; color:var(--green); }
.t-news_dom { background:#3a2a0e; color:var(--amber); }
.t-news_intl { background:#2a0e3a; color:#c084fc; }
.empty-box { background:var(--panel); border:1px dashed var(--line-2); border-radius:12px;
             padding:40px; text-align:center; color:var(--dim); font-size:14px; }
.site-footer { text-align:center; color:var(--dim); font-size:12px; margin-top:40px;
               padding-top:24px; border-top:1px solid var(--line); }
.site-footer a { color:var(--blue); text-decoration:none; }

/* ---------------- 登录页 ---------------- */
body.page-login main.page { display:flex; justify-content:center; padding-top:56px; }
.auth-card { width:100%; max-width:340px; padding:32px 36px; box-shadow:0 8px 30px rgba(0,0,0,.4); }
.auth-card h1 { font-size:20px; margin:0 0 4px; }
.auth-card .auth-sub { color:var(--muted); font-size:13px; margin-bottom:20px; }
.auth-card .msg { margin-top:12px; }
.auth-card .btn { width:100%; margin-top:16px; padding:10px; font-size:14px; }
.auth-card input[type=text] { margin-bottom:8px; }

/* ---------------- 系统设置（分组双列卡片，与全站 3D 主题一致） ---------------- */
.settings-grid { display:grid; grid-template-columns:repeat(2, minmax(0,1fr));
                 gap:18px; align-items:start; }
.settings-grid .card { padding:18px 20px; }
.settings-grid .card h3 { margin:0 0 4px; font-size:15px; }
.settings-grid .card .sub { color:var(--muted); font-size:13px; margin-bottom:8px; }
.settings-grid .card .divider { margin:14px 0; }
.settings-grid .card .sec-title { margin-top:14px; }
.settings-grid .form-actions { grid-column:1 / -1; display:flex; justify-content:flex-end; }

/* ---------------- 用户管理：权限网格 ---------------- */
.perm-grid { display:flex; flex-wrap:wrap; gap:6px 12px; }
.perm-grid .chk { margin:0; flex:0 0 auto; min-width:140px; }

/* ---------------- 角色权限管理 ---------------- */
.role-tabs { display:flex; gap:8px; margin-bottom:16px; flex-wrap:wrap; }
.role-tab { background:var(--line-2); color:var(--text); }
.role-tab.active { background:var(--blue); color:#fff; }
.role-panel { display:none; }
.role-panel:first-of-type { display:block; }
.role-btn { background:var(--line-2); color:var(--text); }
.section-label { font-size:13px; color:var(--muted); margin:0 0 6px; }

/* ---------------- 角色权限表（列=角色，行=权限，一眼对比） ---------------- */
.role-table-wrap { overflow-x:auto; padding:0; }
.role-perm-table { width:100%; border-collapse:collapse; min-width:520px; }
.role-perm-table th, .role-perm-table td { padding:8px 10px; text-align:center; }
.role-perm-table th { font-weight:600; border-bottom:1px solid var(--line-2); }
.role-perm-table .th-perm { text-align:left; width:auto; color:var(--dim); font-weight:500; }
.role-perm-table .th-role { min-width:96px; }
.role-perm-table .th-role-name { display:block; color:var(--text); }
.role-perm-table .th-count { display:block; font-size:12px; font-weight:400; color:var(--blue); }
.role-perm-table .cat-row td { text-align:left; background:var(--panel-2); color:var(--gold);
  font-size:12px; letter-spacing:.5px; padding:6px 10px; border-top:1px solid var(--line); font-weight:600; }
.role-perm-table .td-perm { text-align:left; }
.role-perm-table .perm-id { font-family:ui-monospace,Consolas,monospace; font-size:12px; color:var(--text); }
.role-perm-table .perm-row:hover, .role-perm-table .perm-row:hover .perm-id { background:var(--panel-2); color:var(--gold-lit); }
.role-perm-table .td-chk { }
.chk-cell { justify-content:center; margin:0; padding:4px; }
.chk-cell input { display:none; }
.chk-cell .chk-box { width:18px; height:18px; border-radius:4px; border:1px solid var(--line-2);
  background:var(--panel-2); position:relative; cursor:pointer; transition:border-color .15s; }
.chk-cell input:checked + .chk-box { background:var(--blue); border-color:var(--blue); }
.chk-cell input:checked + .chk-box::after { content:""; position:absolute; left:5px; top:1px;
  width:5px; height:10px; border:solid #111; border-width:0 2px 2px 0; transform:rotate(45deg); }
.role-actions-row { display:flex; gap:16px; flex-wrap:wrap; margin-top:16px; }
.role-actions-group { display:flex; align-items:center; gap:6px; flex-wrap:wrap;
  border:1px solid var(--line); border-radius:10px; padding:8px 12px; background:var(--panel); }
.role-actions-label { font-size:13px; font-weight:600; color:var(--text); margin-right:2px; }
.card-spacer { margin-top:16px; }
.btn-back { background:var(--line-2); color:var(--text); }
.btn-kick { background:var(--amber); color:#000; }

/* ---------------- 审计日志（标杆对齐） ---------------- */
.audit-filters { display:flex; align-items:flex-end; gap:10px; flex-wrap:wrap;
                 margin-bottom:18px; padding:14px 16px; background:var(--panel);
                 border:1px solid var(--line); border-radius:10px; }
.audit-filters label { margin:0; font-size:12px; }
.audit-filters input, .audit-filters select { padding:7px 10px; border-radius:7px;
  border:1px solid var(--line-2); background:var(--panel-2); color:var(--text); font-size:13px; }
.audit-filters input[type=text] { min-width:220px; }

.audit-table th.col-id { width:50px; }
.audit-table th.col-ts { width:155px; }
.audit-table th.col-user { width:100px; }
.audit-table th.col-action { width:120px; }
.audit-table th.col-ip { width:130px; }
.audit-table th.col-ops { width:60px; }
.audit-empty { text-align:center; padding:40px 0; }

.audit-table th { background:var(--panel-2); color:var(--muted); font-weight:500;
                  position:sticky; top:0; z-index:2; border-bottom:2px solid var(--line); }
.audit-table tbody tr:nth-child(even) { background:rgba(255,255,255,.015); }
.audit-table tbody tr:hover { background:rgba(59,130,246,.06); cursor:pointer; }
.audit-table td, .audit-table th { padding:10px 12px; }
.audit-table tr.expanded td { background:var(--panel-2); }
.audit-detail-toggle { color:var(--blue); font-size:12px; cursor:pointer;
                       user-select:none; padding:2px 8px; border-radius:4px;
                       border:1px solid var(--line-2); background:var(--panel-2);
                       display:inline-flex; align-items:center; gap:4px; }
.audit-detail-toggle:hover { background:rgba(59,130,246,.15); border-color:var(--blue); }
.audit-detail-toggle .chev { transition:transform .15s; display:inline-block; }
.audit-detail-toggle.open .chev { transform:rotate(90deg); }
.audit-detail-row td { padding:0; border-bottom:1px dashed var(--line); }
.audit-detail-content { padding:12px 16px; background:#0d1219; font-family:ui-monospace,Menlo,Consolas,monospace;
                        font-size:12px; color:#cbd5e1; white-space:pre-wrap; word-break:break-all;
                        max-height:400px; overflow:auto; line-height:1.55; border-radius:0 0 8px 8px; }

/* 分页器 */
.audit-pager { margin-top:16px; display:flex; align-items:center; justify-content:space-between;
               flex-wrap:wrap; gap:10px; padding:12px 16px; background:var(--panel);
               border:1px solid var(--line); border-radius:10px; }
.audit-pager .pager-info { color:var(--muted); font-size:13px; }
.audit-pager .pager-info strong { color:var(--text); }
.audit-pager .pager-nav { display:flex; align-items:center; gap:4px; }
.audit-pager .pager-nav a, .audit-pager .pager-nav span {
  padding:6px 12px; border-radius:6px; font-size:13px; line-height:1;
  transition:background .1s, color .1s; text-decoration:none; }
.audit-pager .pager-nav a { color:var(--blue);
  background:var(--panel-2); border:1px solid var(--line-2); }
.audit-pager .pager-nav a:hover { background:var(--line-2); border-color:var(--blue); color:#fff; }
.audit-pager .pager-nav .cur { background:var(--blue); color:#fff; font-weight:600;
  border:1px solid var(--blue); }
.audit-pager .pager-nav .dim { color:var(--dim); background:var(--panel-2);
  border:1px solid var(--line-2); cursor:not-allowed; opacity:.5; }
.audit-pager .page-jump { display:flex; align-items:center; gap:6px; font-size:13px; color:var(--muted); }
.audit-pager .page-jump input { width:52px; padding:6px 8px; border-radius:6px;
  border:1px solid var(--line-2); background:var(--panel-2); color:var(--text);
  font-size:13px; text-align:center; }
.audit-pager .page-jump .btn { padding:6px 12px; font-size:12px; }

/* ---------------- 反馈驱动：首页 item 级赞/踩 ---------------- */
.items { list-style:none; margin:.6rem 0 0; padding:0; display:flex; flex-direction:column; gap:.5rem; }
.item { display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; font-size:13px; line-height:1.5; }
.item-title { color:var(--blue); text-decoration:none; word-break:break-word; }
.item-title:hover { text-decoration:underline; }
.item-src { color:var(--muted); font-size:12px; }
.fb { margin-left:auto; display:inline-flex; gap:.3rem; align-items:center; }
.fb-btn { border:1px solid var(--line-2); background:transparent; color:var(--text);
          border-radius:6px; padding:.12rem .45rem; cursor:pointer; font-size:13px; line-height:1.4;
          transition:border-color .15s, opacity .15s, background .15s; }
.fb-btn:hover { border-color:var(--blue); background:rgba(59,130,246,.08); }
.fb-btn:disabled { opacity:.4; cursor:default; }
.fb-btn.active.like { border-color:var(--green); color:var(--green); background:rgba(74,222,128,.08); }
.fb-btn.active.dislike { border-color:var(--red); color:var(--red); background:rgba(248,113,113,.08); }
.fb-done { color:var(--green); font-size:12px; }

/* ---------------- SSO 单点登录互斥下拉覆盖 ---------------- */
.kick-overlay {
  position:fixed; inset:0; z-index:9999;
  background:rgba(8,10,14,.72); backdrop-filter:blur(2px);
  align-items:center; justify-content:center;
  font-family:-apple-system,'PingFang SC','Microsoft YaHei',sans-serif;
}
.kick-overlay:not([hidden]) { display:flex; }
.kick-modal {
  background:#171b22; border:1px solid #262d38; border-radius:14px;
  padding:30px 28px; width:330px; max-width:90vw; text-align:center;
  box-shadow:0 10px 40px rgba(0,0,0,.5);
}
.kick-icon { font-size:38px; line-height:1; margin-bottom:12px; }
.kick-title { font-size:17px; color:#e6e6e6; font-weight:600; margin-bottom:8px; }
.kick-desc { font-size:13px; color:#8b95a5; line-height:1.6; margin-bottom:20px; }
.kick-btn {
  width:100%; padding:11px; border:0; border-radius:9px; background:#07c160;
  color:#06281a; font-size:15px; font-weight:600; cursor:pointer;
}

/* ---------------- 返回顶部 ---------------- */
.back-to-top { position:fixed; bottom:28px; right:28px; width:44px; height:44px;
                border-radius:50%; background:var(--panel); border:1px solid var(--line);
                color:var(--text); display:flex; align-items:center; justify-content:center;
                cursor:pointer; box-shadow:0 6px 20px rgba(0,0,0,.4);
                opacity:0; visibility:hidden; transform:translateY(10px);
                transition:opacity .2s, transform .2s, visibility .2s, background .15s; z-index:30; }
.back-to-top.visible { opacity:1; visibility:visible; transform:translateY(0); }
.back-to-top:hover { background:var(--blue); border-color:var(--blue); color:#fff; }
.back-to-top svg { width:18px; height:18px; }

/* 全局 loader（保留类名但实际不常用，主要靠 showLoader/hideLoader 按钮级方案） */
.global-loader { position:fixed; inset:0; z-index:9998; background:rgba(8,10,14,.6);
                 display:flex; align-items:center; justify-content:center; }
.global-loader[hidden] { display:none; }
.global-loader .spinner { width:42px; height:42px; border:3px solid var(--line);
                          border-top-color:var(--blue); border-radius:50%;
                          animation:spin .8s linear infinite; }
@keyframes spin { to { transform:rotate(360deg); } }

/* 声明式联动（ui_reveal.js） */
.is-hidden { display:none !important; }

/* ================================================================
 * 响应式：宽屏规则在上，窄屏覆盖在下（桌面优先 + 逐级收紧）
 * ================================================================ */
@media (max-width:1080px){
  .topic-grid { grid-template-columns:1fr; }
}

@media (max-width:900px){
  .site-header { padding:0 14px; height:48px; }
  .brand { font-size:14px; padding-right:12px; margin-right:10px; }
  .site-nav { gap:0; }
  .nav-sep { margin:0 4px; }
  .nav-group-items { gap:0; }
  .nav-link { padding:5px 8px; font-size:12px; }
  main.page { padding:18px 16px 40px; }
  .sec-head { flex-wrap:wrap; gap:8px; }
  .chart { height:104px; padding:10px; }
  .audit-filters { padding:12px; gap:8px; }
  .audit-filters input[type=text] { min-width:160px; }
  .audit-pager { padding:10px 12px; gap:8px; }
}

@media (max-width:720px){
  th, td { padding:7px 8px; font-size:12px; }
  .page-head h2 { font-size:17px; }
  .md-body { padding:14px; font-size:12px; }
  .hero { margin-bottom:26px; }
  .hero h2 { font-size:20px; }
  .empty-box { padding:28px 18px; }
  .card { padding:16px; }
  body.page-login main.page { padding-top:32px; }
  .auth-card { padding:24px 20px; }
  .role-actions-row { flex-direction:column; }
}

@media (max-width:640px){
  .site-header { flex-wrap:wrap; height:auto; padding:8px 12px; gap:8px; }
  .site-nav { flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch;
              scrollbar-width:none; padding-bottom:2px; width:100%; order:3; }
  .site-nav::-webkit-scrollbar { display:none; }
  .nav-sep { display:none; }
  .header-right { order:2; }
  main.page { padding:16px 12px 36px; }
  .filters { gap:8px; }
  .filters select, .filters input[type=text], .filters .adv { width:100%; }
  .filters .adv { padding-left:0; margin-left:0; border-left:0; }
  .filters .adv select, .filters .adv input { width:100%; }
  .filters .btn { width:100%; }
  .push-grid { grid-template-columns:1fr; }
  .settings-grid { grid-template-columns:1fr; }
  .settings-grid .form-actions { grid-column:auto; }
  .kpi-grid .v { font-size:21px; }
  .rescard pre { max-height:180px; }
  .topic-detail .meta-bar { gap:10px 14px; }
  .kw-row { flex-direction:column; align-items:stretch; }
  .kw-bucket { flex:0 0 auto; }
  .src-row { gap:6px; }
  .src-name, .src-url { flex:1 1 100%; width:auto; }
  .src-kind, .src-bucket, .src-limit { flex:1 1 28%; width:auto; }
  .audit-filters input[type=text] { width:100%; }
  .audit-filters .btn { width:100%; }
  .audit-pager { flex-direction:column; align-items:flex-start; }
  .audit-pager .pager-nav { flex-wrap:wrap; }
  .audit-pager .page-jump { width:100%; }
  .audit-pager .page-jump input { flex:1; }
  .filter-q { width:100%; }
  .btn-group { flex-wrap:wrap; }
}

@media (max-width:480px){
  .topic-detail .meta-bar { gap:8px 10px; }
  .topic-detail .meta-col { gap:8px 10px; }
}

/* ================================================================
 * 金色 3D 主题覆盖层（唯一来源，追加在文件最后以获得最高优先级）
 * 仅覆盖「视觉面」（颜色/阴影/渐变/高光），不动布局与间距。
 * ================================================================ */
:root {
  --p-3d-top:#ffffff; --p-3d-bot:#eef3fb;          /* 面板白→浅灰蓝渐变端点 */
  --p-3d-glow:rgba(255,255,255,.95);               /* 内高光 */
  --hi-top:rgba(255,255,255,.95);                  /* 顶缘高光 */
  --drop:0 12px 26px rgba(28,40,64,.13), 0 3px 8px rgba(28,40,64,.07); /* 立体投影 */
  --btn-top:#f8c84a; --btn-bot:#dfa112;            /* 主按钮琥珀渐变 */
  --btn-edge:#a06d06;                              /* 按钮底部厚度边 */
}

/* ---- 页面背景：顶部白光 → 浅灰蓝底部（立体层次） ---- */
body { background:
    radial-gradient(1100px 560px at 12% -12%, #ffffff 0%, rgba(255,255,255,0) 62%),
    radial-gradient(900px 520px at 92% -6%, rgba(197,139,18,.10) 0%, rgba(255,255,255,0) 55%),
    radial-gradient(1000px 680px at 50% 118%, rgba(148,163,184,.18) 0%, rgba(255,255,255,0) 62%),
    linear-gradient(180deg,#f8fafd 0%, #eaeff8 55%, #e2e8f2 100%);
  background-attachment:fixed; }

/* ---- 顶部导航：白色浮起面板 + 底部投影 ---- */
.site-header { background:linear-gradient(180deg,#ffffff 0%, #f3f7fd 100%);
               border-bottom:1px solid #dde4ef;
               box-shadow:inset 0 1px 0 #fff, inset 0 -1px 0 rgba(255,255,255,.7),
                          0 8px 20px rgba(28,40,64,.10); }
.brand-dot { box-shadow:0 0 0 3px rgba(197,139,18,.16), 0 2px 6px rgba(197,139,18,.45); }
.brand span { color:var(--gold) !important; }
.nav-link.active { color:#4a2f00; background:linear-gradient(180deg,#ffe7a8,#f2c65c);
                   box-shadow:inset 0 1px 0 #fffaf0, 0 2px 0 #c8921c, 0 4px 10px rgba(197,139,18,.30); }
.nav-group.group-active > .nav-group-items > .nav-item:not(.has-dropdown) > .nav-link.active { color:#4a2f00; }
.nav-link:hover { color:var(--gold-lit); background:#f3f6fc; }
.nav-user { background:linear-gradient(180deg,#ffffff,#eef3fa); border-color:#d7dfec;
            box-shadow:inset 0 1px 0 #fff, 0 2px 0 #d2dbea, 0 4px 10px rgba(28,40,64,.10); }
.nav-user:hover { border-color:var(--gold); }
.nav-role { background:rgba(197,139,18,.14); color:#7a5004; box-shadow:inset 0 1px 0 #fff; }

/* ---- 3D 按压按钮（琥珀金，实底深字保证对比度） ---- */
.btn { background:linear-gradient(180deg, var(--btn-top), var(--btn-bot));
       color:#3a2502; border:0;
       box-shadow:inset 0 1px 0 rgba(255,255,255,.85), inset 0 -1px 0 rgba(140,95,5,.22),
                  0 4px 0 var(--btn-edge), 0 8px 16px rgba(140,95,5,.26);
       text-shadow:0 1px 0 rgba(255,255,255,.35); }
.btn:hover { background:linear-gradient(180deg,#ffd25f,#e9ae18); color:#3a2502; filter:none;
             box-shadow:inset 0 1px 0 #fff, inset 0 -1px 0 rgba(140,95,5,.18),
                        0 5px 0 var(--btn-edge), 0 10px 20px rgba(140,95,5,.30); }
.btn:active { transform:translateY(2px);
              box-shadow:inset 0 2px 5px rgba(120,80,0,.32), 0 1px 0 var(--btn-edge); }
.btn.ok { background:linear-gradient(180deg,#4fd685,#18a154); color:#04331a; --btn-edge:#0c6b37;
          box-shadow:inset 0 1px 0 rgba(255,255,255,.6), 0 4px 0 #0c6b37, 0 8px 16px rgba(12,107,55,.26); }
.btn.ok:hover { background:linear-gradient(180deg,#63e094,#1faf5c); color:#04331a; }
.btn.ghost, .btn-clear, .btn-back { background:linear-gradient(180deg,#ffffff,#eef3fa);
          border:1px solid #d7dfec; color:var(--text);
          box-shadow:inset 0 1px 0 #fff, 0 3px 0 #cfd8e6, 0 6px 12px rgba(28,40,64,.10); }
.btn.ghost:hover, .btn-clear:hover { background:linear-gradient(180deg,#ffffff,#e7eef9); color:var(--gold-lit); }
/* 基础规则对 .btn-clear 用了 !important，这里同步覆盖以保持立体感 */
.btn-clear { background:linear-gradient(180deg,#ffffff,#eef3fa) !important; color:var(--text) !important;
             border:1px solid #d7dfec !important;
             box-shadow:inset 0 1px 0 #fff, 0 3px 0 #cfd8e6, 0 6px 12px rgba(28,40,64,.10) !important; }
.btn-clear:hover { background:linear-gradient(180deg,#ffffff,#e7eef9) !important; color:var(--gold-lit) !important; }
.btn.danger { background:transparent; border-color:transparent; box-shadow:none; color:var(--red); }
.btn.danger:hover { background:#fdecea; color:#b42318; }

/* ---- 输入控件：内凹槽（琥珀聚焦光晕） ---- */
input[type=text], input[type=password], input[type=number], textarea, select {
  color:var(--text); background:linear-gradient(180deg,#f6f8fd,#ffffff);
  border:1px solid #cfd8e6;
  box-shadow:inset 0 2px 4px rgba(28,40,64,.08), inset 0 -1px 0 #fff; }
input:focus, textarea:focus, select:focus { border-color:var(--gold);
  box-shadow:inset 0 2px 4px rgba(28,40,64,.06), 0 0 0 3px rgba(197,139,18,.20); }
label { color:var(--muted); }
/* ---- number 输入框补齐样式（基础规则未含 number 选择器） ---- */
input[type=number] {
  color:var(--text);
  background:linear-gradient(180deg,#f6f8fd,#ffffff);
  box-shadow:inset 0 2px 4px rgba(28,40,64,.08), inset 0 -1px 0 #fff;
  border-color:#cfd8e6;
}
/* ---- 下拉框原生选项弹层：与浅色面板一致 ---- */
select option, select optgroup { background:#ffffff; color:var(--text); }

/* ---- 表格行 hover：琥珀微光；奇偶行浅灰区分 ---- */
.table-wrap table tbody tr:nth-child(even), .audit-table tbody tr:nth-child(even) { background:rgba(148,163,184,.07); }
.table-wrap table tbody tr:hover, .audit-table tbody tr:hover { background:rgba(197,139,18,.10); }
th { background:linear-gradient(180deg,#f8fafd,#edf1f8); }

/* ---- 标签：立体胶囊（浅色系） ---- */
.tag.ok, .tag.success { background:#e3f6eb; color:#0f7a3c; box-shadow:inset 0 1px 0 #fff; }
.tag.fallback, .tag.error, .tag.blocked { background:#fdecea; color:#c6281c; }
.tag.ratelimited, .tag.fail { background:#fff4e0; color:#a2570a; }
.tag.role-super_admin { background:#fff3d1; color:#8a5a00; }
.tag.role-admin { background:#e8f0ff; color:#2456b8; }
.tag.role-user { background:#e3f6eb; color:#0f7a3c; }
.tag.role-viewer { background:#eef1f6; color:#5c667a; }

/* ---- msg / flash：浅底色 + 深字 ---- */
.msg.ok { background:#e3f6eb; color:#0f7a3c; border:1px solid #b7e2c9; }
.msg.err { background:#fdecea; color:#c6281c; border:1px solid #f5c2c0; }
.msg.warn { background:#fff4e0; color:#a2570a; border:1px solid #f3d4a4; }
.msg.ok, .global-flash.ok { background:#e3f6eb; color:#0f7a3c; border:1px solid #b7e2c9; }
.global-flash { box-shadow:0 8px 20px rgba(28,40,64,.14); }
.global-flash.err { background:#fdecea; color:#c6281c; border:1px solid #f5c2c0; }
.global-flash.warn { background:#fff4e0; color:#a2570a; border:1px solid #f3d4a4; }

/* ---- 链接：琥珀金 ---- */
.link, .breadcrumbs a, .audit-detail-toggle { color:var(--gold); }
.audit-detail-toggle:hover { background:rgba(197,139,18,.12); border-color:var(--gold); }

/* ---- 空状态 & 提示细分 ---- */
.hint { color:var(--dim); }
.muted { color:var(--muted); }

/* ---- 主题开关滑块：浅槽 + 立体滑块 ---- */
.topic-enable-track { background:#dfe5f0; box-shadow:inset 0 2px 4px rgba(28,40,64,.14); }
.topic-enable-thumb { background:#ffffff; box-shadow:0 1px 3px rgba(28,40,64,.35); }
.topic-enable.on .topic-enable-track { background:#f6dc9a; }
.topic-enable.on .topic-enable-thumb { background:linear-gradient(180deg,#ffcf55,#d99a0a); }
.badge.on { background:#e3f6eb; color:#0f7a3c; }
.badge.off { background:#eef1f6; color:var(--muted); }

/* ---- 分页当前页：立体琥珀 ---- */
.audit-pager .pager-nav .cur { background:linear-gradient(180deg,#f8c84a,#dfa112);
                               box-shadow:inset 0 1px 0 rgba(255,255,255,.8), 0 2px 0 #a06d06; color:#3a2502; }
.audit-pager .pager-nav a { background:linear-gradient(180deg,#ffffff,#eef3fa); border-color:#d7dfec;
  box-shadow:inset 0 1px 0 #fff, 0 2px 0 #d2dbea; }
.audit-pager .pager-nav a:hover { background:linear-gradient(180deg,#fff8e6,#f6e2ae); border-color:var(--gold); color:#7a5004; }

/* ---- 滚动条 ---- */
::-webkit-scrollbar { width:11px; height:11px; }
::-webkit-scrollbar-thumb { background:#c7d0e1; border-radius:6px; border:3px solid #eef2f8; }
::-webkit-scrollbar-thumb:hover { background:#a9b6cc; }

/* ---- 文本选区：琥珀 ---- */
::selection { background:rgba(197,139,18,.28); color:#3a2502; }

/* ---- 返回顶部：白色立体浮钮 ---- */
.back-to-top { background:linear-gradient(180deg,#ffffff,#eef3fa); border-color:#d7dfec;
               box-shadow:inset 0 1px 0 #fff, 0 4px 0 #cfd8e6, 0 10px 22px rgba(28,40,64,.16); }
.back-to-top:hover { background:linear-gradient(180deg,#ffce55,#dfa112); border-color:#c08d0d;
                     box-shadow:inset 0 1px 0 rgba(255,255,255,.8), 0 4px 0 #a06d06, 0 10px 24px rgba(160,109,6,.35);
                     color:#3a2502; }

/* ---- 进化建议（evo） ---- */
.conf { background:#e4e9f2; box-shadow:inset 0 1px 3px rgba(28,40,64,.12); }
.conf > i { background:linear-gradient(90deg,#4fd685,#c58b12); }
.evo-reason { color:#3c4658; }
.evo-mine { border-color:rgba(197,139,18,.5); background:rgba(197,139,18,.07); color:#5c667a; }
.evo-mine b { color:var(--gold-lit); }
.evo-mine .btn.ghost { border-color:var(--gold); color:var(--gold-lit); }
.evo-mine .btn.ghost:hover { background:rgba(197,139,18,.12); color:#7a5004; }
.evo-mine-badge { color:#5c667a; background:#eef1f6; border:1px solid #d7dfec; }
.evo-touched { box-shadow:0 0 0 1px rgba(197,139,18,.5) inset; }
.evo-touched-adopt { box-shadow:0 0 0 1px rgba(20,128,61,.55) inset; }
.evo-touched-reject { box-shadow:0 0 0 1px rgba(217,45,32,.5) inset; opacity:.94; }
.evo-scope.scope-global { color:#5c667a; background:#eef1f6; border-color:#d7dfec; }
.evo-scope.scope-chat { color:#0e6f8a; background:#e2f4fa; border-color:#a9dcec; }
.evo-scope.scope-user { color:#b42318; background:#fdecea; border-color:#f5c2c0; }
.evo-auto { color:#8a5a00; background:#fff3d1; border-color:#e8cf92; }

/* ---- 首页主题徽标：浅色立体胶囊 ---- */
.t-ai, .t-topic { background:#fff3d1; color:#8a5a00; box-shadow:inset 0 1px 0 #fff; }
.t-laser { background:#e3f6eb; color:#0f7a3c; }
.t-news_dom { background:#fff4e0; color:#a2570a; }
.t-news_intl { background:#f1ecff; color:#6b46c1; }
.push-grid .preview { color:#56617a; }
.topic-enable.on .topic-enable-label { color:#0f7a3c; }

/* ---- 反馈赞/踩按钮 hover：琥珀微光 ---- */
.fb-btn:hover { border-color:var(--gold); background:rgba(197,139,18,.08); }
.fb-btn { background:linear-gradient(180deg,#ffffff,#f2f6fc); box-shadow:inset 0 1px 0 #fff, 0 1px 0 #d7dfec; }

/* ---- 审计详情展开：浅色代码块 ---- */
.audit-detail-content { background:linear-gradient(180deg,#fbfcff,#f1f5fb); color:#334155;
                        border-top:1px dashed #dfe5f0; box-shadow:inset 0 2px 6px rgba(28,40,64,.05); }

/* ---- 卡片：白面 + 厚投影 + 顶缘高光，hover 浮起 ---- */
.card, .auth-card, .rescard, .evo-card, .md-body, .kpi-grid .box, .audit-filters, .audit-pager,
.role-actions-group, .empty-box, .preview-box, .role-table-wrap {
  background:linear-gradient(180deg, var(--p-3d-top), var(--p-3d-bot));
  border:1px solid #e2e8f2;
  box-shadow:inset 0 1px 0 #fff, 0 10px 22px rgba(28,40,64,.10), 0 2px 6px rgba(28,40,64,.05); }
.card, .topic-card, .evo-card, .kpi-grid .box, .audit-filters, .audit-pager {
  transition:transform .16s ease, box-shadow .2s ease, border-color .15s ease; }
.card:hover, .audit-filters:hover, .audit-pager:hover { border-color:#e6cf9a; }
.topic-card:hover, .evo-card:hover { transform:translateY(-3px);
  box-shadow:inset 0 1px 0 #fff, 0 18px 34px rgba(28,40,64,.16), 0 4px 10px rgba(28,40,64,.08); }
.kpi-grid .box:hover { transform:translateY(-3px); border-color:#e6cf9a;
  box-shadow:inset 0 1px 0 #fff, 0 18px 34px rgba(28,40,64,.16), 0 4px 10px rgba(28,40,64,.08); }
.kpi-grid .v { color:#1a2333; text-shadow:0 1px 0 #fff, 0 2px 6px rgba(197,139,18,.22); }
.kpi-grid .bar { box-shadow:inset 0 2px 4px rgba(28,40,64,.12); }
.kpi-grid .bar > i { background:linear-gradient(180deg,#f8c84a,#cf9508);
                     box-shadow:inset 0 1px 0 rgba(255,255,255,.7); }
.kpi-grid .bar.warn > i { background:linear-gradient(180deg,#f0b34a,#c47a0a); }
.kpi-grid .bar.over > i { background:linear-gradient(180deg,#f2776b,#cf2c1f); }

/* ---- 图表柱：琥珀渐变 ---- */
.chart .bar { background:linear-gradient(180deg,#f8c84a,#cf9508); box-shadow:inset 0 1px 0 rgba(255,255,255,.6); }
.chart .bar.today { background:linear-gradient(180deg,#5ada8d,#18a154); }

/* ---- 下拉菜单 / 悬浮面板：白色浮层 ---- */
.nav-dropdown, .user-dropdown {
  background:linear-gradient(180deg,#ffffff,#f6f9fe);
  border:1px solid #dbe3f0;
  box-shadow:inset 0 1px 0 #fff, 0 16px 36px rgba(28,40,64,.20), 0 4px 10px rgba(28,40,64,.08);
}
.nav-dd-item:hover { background:linear-gradient(180deg,#fff8e6,#f7e8bf); color:#7a5004; }
.nav-dd-item.active { background:linear-gradient(180deg,#ffe7a8,#f2c65c); color:#4a2f00;
                      box-shadow:inset 0 1px 0 #fffaf0; }
.nav-dd-item.danger { color:var(--red); }
.nav-dd-item.danger:hover { background:#fdecea; color:#b42318; }
.nav-avatar { color:var(--gold); }
.dd-divider { background:#dfe5f0; }
.nav-user .nav-chevron { color:var(--gold); }

/* ---- SSO 互斥弹层：浅色浮窗 ---- */
.kick-overlay { background:rgba(30,41,59,.42); backdrop-filter:blur(3px); }
.kick-modal { background:linear-gradient(180deg,#ffffff,#f2f6fc); border-color:#e2e8f2;
              box-shadow:inset 0 1px 0 #fff, 0 24px 56px rgba(15,23,42,.28), 0 6px 16px rgba(15,23,42,.12); }
.kick-title { color:#1e2637; }
.kick-desc { color:var(--muted); }
.kick-btn { background:linear-gradient(180deg,#4fd685,#18a154); color:#04331a;
            box-shadow:inset 0 1px 0 rgba(255,255,255,.6), 0 3px 0 #0c6b37; }
.kick-btn:hover { filter:none; background:linear-gradient(180deg,#63e094,#1faf5c); }

/* ---- 提示气泡 / 工具提示：白色浮层 ---- */
.tip { color:var(--gold); background:linear-gradient(180deg,#fff,#f3f6fc); border-color:#dfe5f0; }
.tip:hover, .tip:focus { background:var(--gold); border-color:var(--gold); color:#fff; }
.tip[data-tip]:hover::after, .tip[data-tip]:focus::after {
  background:#ffffff; border-color:#dbe3f0; color:var(--text);
  box-shadow:0 12px 28px rgba(28,40,64,.20); }

/* ---- 设置页 / 属性页 tab：立体琥珀高亮 ---- */
.role-tab.active, .role-tab:hover,
.role-btn:hover, .btn-back:hover {
  background:linear-gradient(180deg,#f8c84a,#dfa112);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.8), 0 2px 0 #a06d06; color:#3a2502; }
.role-tab { background:linear-gradient(180deg,#ffffff,#eef3fa); border:1px solid #d7dfec; color:var(--text);
            box-shadow:inset 0 1px 0 #fff, 0 2px 0 #d2dbea; }
.role-tab.active { color:#3a2502; }
.role-btn { background:linear-gradient(180deg,#ffffff,#eef3fa); border:1px solid #d7dfec; color:var(--text);
            box-shadow:inset 0 1px 0 #fff, 0 2px 0 #d2dbea; }

/* ---- 主题详情 星期多选：琥珀选中态 ---- */
.topic-detail .dow-item:has(input:checked) { border-color:var(--gold); color:#7a5004;
  background:linear-gradient(180deg,#fff8e6,#f7e8bf);
  box-shadow:inset 0 1px 0 #fff, 0 2px 0 #e0c383; }
.topic-detail .dow-item input { accent-color:var(--gold); }

/* ---- 进化建议：筛选与强调 ---- */
.evo-dim { color:var(--gold); }
.evo-cb { accent-color:var(--gold); }
.evo-filters .flt.on { background:linear-gradient(180deg,#f8c84a,#dfa112);
                       box-shadow:inset 0 1px 0 rgba(255,255,255,.8), 0 2px 0 #a06d06; border-color:#c08d0d; color:#3a2502; }
.evo-filters .flt { background:linear-gradient(180deg,#ffffff,#eef3fa); box-shadow:inset 0 1px 0 #fff, 0 2px 0 #d2dbea; }

/* ---- 全局 loader：琥珀旋转弧 + 浅色遮罩 ---- */
.global-loader { background:rgba(238,242,248,.72); }
.global-loader .spinner { border-top-color:var(--gold); box-shadow:0 0 14px rgba(197,139,18,.35); }

/* ---- 表单控件次级高亮（checkbox/radio accent）全局琥珀 ---- */
input[type=checkbox], input[type=radio] { accent-color:var(--gold); }
.role-perm-table .chk-cell input:checked + .chk-box::after { border-color:#3a2502; }
.role-perm-table .chk-cell input:checked + .chk-box { background:linear-gradient(180deg,#f8c84a,#dfa112); border-color:#c08d0d;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.8), 0 1px 0 #a06d06; }
.chk-cell .chk-box { background:linear-gradient(180deg,#f6f8fd,#ffffff); border-color:#cfd8e6;
  box-shadow:inset 0 2px 3px rgba(28,40,64,.08); }

/* ================================================================
 * 导航层级化（分组 → 下拉 → 三级子下拉）
 * ================================================================ */
/* 顶级分组触发按钮：与普通 nav-link 同高，hover/active 金色 */
.nav-group-trigger { font-weight:500; }
.nav-group.group-active > .nav-item > .nav-group-trigger,
.nav-group.group-active > .nav-item.has-dropdown:hover > .nav-group-trigger {
  color:var(--gold-lit); }
/* 三级子下拉：向左/下展开，跟随二级 hover */
.nav-dd-item.has-sub { position:relative; display:flex; align-items:center;
                       justify-content:space-between; gap:12px; cursor:pointer; }
.nav-sub-dropdown { position:absolute; left:100%; top:-6px; margin-left:4px;
                    min-width:170px; background:linear-gradient(180deg,#ffffff,#f6f9fe);
                    border:1px solid #dbe3f0; border-radius:8px;
                    box-shadow:inset 0 1px 0 #fff, 0 16px 36px rgba(28,40,64,.20), 0 4px 10px rgba(28,40,64,.08);
                    padding:6px; display:none; z-index:70; }
.nav-dd-item.has-sub:hover > .nav-sub-dropdown { display:block; }
.nav-dd-item.has-sub:hover, .nav-dd-item.has-sub:hover .nav-chevron { color:var(--gold-lit); }
/* 桥接三级悬停空隙：hover 从二级条目移入子下拉时不断链 */
.nav-dd-item.has-sub > .nav-sub-dropdown::before { content:""; position:absolute;
  top:0; right:100%; width:4px; height:100%; }

/* ===== 公众号源管理（mp-sources）===== */
.mp-card { margin-bottom:12px; }
/* 紧凑卡片：压缩内边距与标题行，减少纵向高度 */
.card.compact { padding:12px 16px; }
.card.compact h3 { margin:0; font-size:14px; }
.card.compact .panel-head { display:flex; align-items:center; justify-content:space-between;
  gap:12px; flex-wrap:wrap; }
.card.compact .panel-head .hint, .card.compact .panel-head .sub { margin:0; }
.card.compact .panel-head .sub { color:var(--muted); font-size:12px; }
.card.compact > .hint { margin:4px 0 0; line-height:1.5; }
.card.compact .table-wrap { margin-top:8px; }
.card.compact table th, .card.compact table td { padding:6px 8px; }
.mp-head-actions { display:flex; gap:8px; align-items:center; }
.mp-add-row { display:flex; gap:8px; align-items:center; margin-top:8px; }
.mp-add-row .input-wide { flex:1; max-width:none; margin:0; }
.card.compact .preview-box { margin-top:8px; padding:8px 10px; }
.card.compact .preview-row { margin-bottom:2px; gap:8px; }
.card.compact .mp-logo { width:28px; height:28px; }
.preview-actions { display:flex; gap:8px; margin-top:6px; }
.mp-state { display:inline-block; padding:2px 10px; border-radius:999px; font-size:12px; }
.mp-state.on { background:#e3f6eb; color:#0f7a3c; box-shadow:inset 0 1px 0 #fff; }
.mp-state.off { background:#fff4e0; color:#a2570a; box-shadow:inset 0 1px 0 #fff; }
.rss-copy { cursor:pointer; color:var(--gold-lit); font-size:12px; border-bottom:1px dashed
  rgba(197,139,18,.45); user-select:all; }
.rss-copy:hover { color:#7a5004; }
.col-ops { white-space:nowrap; }
.btn.confirming { color:var(--red); border-color:var(--red); background:#fdecea;
                  box-shadow:inset 0 1px 0 #fff, 0 3px 0 #e3b7b3; }
.input-wide { width:100%; max-width:620px; }
.preview-box { margin-top:14px; padding:12px 14px; border:1px solid #e6cf9a;
  border-radius:10px; background:linear-gradient(180deg,#fffdf7,#fff8e8);
  box-shadow:inset 0 1px 0 #fff, 0 6px 14px rgba(197,139,18,.10); }
.preview-row { display:flex; align-items:center; gap:12px; margin-bottom:6px; }
.mp-logo { width:40px; height:40px; border-radius:8px; object-fit:cover;
  border:1px solid var(--line-2); }
.mp-name { font-weight:600; color:var(--text); }
.preview-intro { margin:4px 0 8px; font-size:12px; line-height:1.5; color:var(--muted); }
.ok-text { color:var(--green); }
.err-text { color:var(--red); }

th.num, td.num { width:70px; text-align:center; }
td.num { font-variant-numeric:tabular-nums; }
td.num.muted { color:var(--muted2, var(--muted)); }
.badge { display:inline-block; padding:1px 8px; border-radius:999px; font-size:12px;
         line-height:1.6; white-space:nowrap; }
.badge.ok { color:var(--green); background:rgba(56,178,75,.14); border:1px solid rgba(56,178,75,.4); }
.badge.err { color:var(--red); background:var(--danger-bg,rgba(244,67,54,.14)); border:1px solid rgba(244,67,54,.4); }
.badge.run { color:var(--gold-lit); background:rgba(224,169,46,.14); border:1px solid rgba(224,169,46,.4); }
.badge.run::before{ content:''; display:inline-block; width:7px; height:7px; margin-right:5px;
                border-radius:50%; background:var(--gold-lit); animation:blink 1s ease-in-out infinite; vertical-align:1px; }
@keyframes blink { 0%,100%{opacity:1;} 50%{opacity:.2;} }

/* ---- 公众号文章管理面板 ---- */
.art-toolbar { display:flex; flex-wrap:wrap; align-items:center; gap:10px;
               margin:4px 0 12px; }
.btn-group { display:inline-flex; gap:0; border:1px solid var(--line-2); border-radius:8px;
             overflow:hidden; }
.btn-group .filter { border:0; border-radius:0; }
.btn.filter { background:transparent; color:var(--muted); box-shadow:none; }
.btn.filter:hover { color:var(--gold-lit); }
.btn.filter.active { background:linear-gradient(180deg,var(--gold),var(--gold-deep));
                     color:#231a04; box-shadow:inset 0 1px 0 rgba(255,255,255,.35); }
.filter-q { width:200px; max-width:60vw; }
.art-batchbar { display:flex; flex-wrap:wrap; align-items:center; gap:8px;
                padding:8px 12px; margin:0 0 10px; border:1px solid #e6cf9a;
                border-radius:10px; background:linear-gradient(180deg,#fffdf7,#fff8e8);
                box-shadow:inset 0 1px 0 #fff, 0 4px 10px rgba(197,139,18,.08); }
.art-batchbar .muted { margin-right:6px; }
.col-check { width:34px; text-align:center; }
.col-check input { margin:0; cursor:pointer; }
.art-thumb { width:52px; height:34px; object-fit:cover; border-radius:6px;
             border:1px solid var(--line-2); display:block; }
.art-unread td { background:rgba(224,169,46,.05); }
.art-unread .td-ell a { font-weight:600; }
