/* 网站安全体检平台 —— 全站样式（面向现代浏览器 Chrome/Edge/Firefox/Safari；自有JS为ES5语法口径，CSS可用grid/gap） */
* { box-sizing: border-box; }
/* HTML5区块标签在旧文档模式（IE内核/兼容模式）下默认inline，会导致hero等收缩靠左 */
article, aside, figcaption, figure, footer, header, main, nav, section { display: block; }
html { -webkit-text-size-adjust: 100%; scrollbar-gutter: stable; } /* 纵向滚动条槽位常驻：翻页/弹层导致内容高度跨过视口临界时宽度不跳（Chrome94+/FF97+/Safari18.2+，旧浏览器自然降级） */
body {
  margin: 0; font: 15px/1.65 "PingFang SC", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;
  color: #1c2430; background: #f4f6fa;
}
a { color: #2563d9; text-decoration: none; }
a:hover { text-decoration: none; }
h1, h2, h3 { line-height: 1.35; margin: 0 0 .5em; }
code, pre, .mono { font-family: Consolas, "Courier New", monospace; }
img { border: 0; max-width: 100%; }
table { border-collapse: collapse; width: 100%; max-width: 1200px; }

.container { max-width: 1100px; margin: 0 auto; padding: 0 18px; }
.narrow { max-width: 760px; }
.muted { color: #64748b; font-size: 13px; } /* 对比度≈4.75:1（WCAG AA），原#7a8699仅3.70:1 */
.strong { font-weight: 700; }
.center { text-align: center; }
.maxw-600 { max-width: 600px;}
.maxw-800 { max-width: 800px;}
.maxw-1200 { max-width: 1200px;}

/* ---------- 头部 ---------- */
.site-head {
  background: #0f172a; position: sticky; top: 0; z-index: 50;
  border: 0; margin: 0; padding: 0;
  transition: box-shadow .2s ease;
}
.site-head.scrolled { box-shadow: 0 2px 12px rgba(0,0,0,.35); }
.head-in { display: flex; align-items: center; height: 60px; }
.logo { color: #fff; font-weight: 700; font-size: 22px; text-decoration: none; margin-right: auto; }
.logo:hover { text-decoration: none; }
.logo > span { display: inline-block; vertical-align: middle;}
.logo-ic { color: #7dd3fc; font-size: 21px; margin-right: 6px; vertical-align: middle; }
.nav { display: flex; align-items: center; align-self: stretch; }
.nav a { color: #cbd5e1; margin-left: 26px; font-size: 14px; text-decoration: none; }
.nav .nav-auth { color: #7dd3fc; font-weight: 600; }
.nav .nav-account { color: #7dd3fc; width: 80px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}
.nav a:hover, .nav a.on { color: #fff; }
.nav-toggle { display: none; float: right; background: none; border: 0; color: #fff; font-size: 22px; cursor: pointer; }
/* 导航下拉菜单：单一共享通栏mega面板（参考爱站网）——主菜单间切换只换内容区（display互换），
   面板背景不重绘不闪现；悬停展开由JS悬停意图控制（.open，见app.js） */
.subwrap { display: inline-flex; align-items: stretch; align-self: stretch; }
.subwrap > .subtop { display: flex; align-items: center; }
.sub-caret { font-size: 11px; margin-left: 3px; opacity: .7; transition: transform .16s ease; display: inline-block; }
/* 面板紧贴导航条下缘、通栏全宽（sticky头部为定位父级） */
.mega {
  display: block; visibility: hidden; opacity: 0;
  position: absolute; top: 100%; left: 0; right: 0; margin: 0;
  background: #fff; border: 0; border-radius: 0;
  box-shadow: 0 20px 34px rgba(15, 23, 42, .12);
  padding: 0; z-index: 60; text-align: left; line-height: 1.6;
  transition: opacity .14s ease, visibility 0s linear .14s;
}
.mega.open { visibility: visible; opacity: 1; transition: opacity .14s ease, visibility 0s linear 0s; }
.mega-panel { display: none; }
.mega-panel.on { display: block; }
.mega-in { max-width: 1100px; margin: 0 auto; }
/* 展开时面板下方整页遮罩：不拦截点击；移动端不展示 */
.mega-shade { display: none; }
.mega-shade.on {
  display: block; position: fixed; top: 60px; left: 0; right: 0; bottom: 0;
  background: rgba(15, 23, 42, .45); z-index: 55; pointer-events: none;
}
/* 四列条目网格：加粗标题+灰色两行描述 */
.submenu-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 2px 6px; padding: 20px 10px 25px; }
.submenu-grid a { display: block; margin: 0; padding: 9px 10px; border-radius: 8px; text-decoration: none; }
.submenu-grid a b { display: block; color: #22304a; font-size: 0.95rem; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.submenu-grid a span {
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  margin-top: 3px; color: #8b96a8; font-size: 0.8rem; line-height: 1.55; overflow: hidden;
}
.submenu-grid a:hover { background: #f2f6fd; text-decoration: none; }
.submenu-grid a:hover b { color: #2563d9; }
.submenu-grid a.on b { color: #2563d9; }
.subwrap.open .sub-caret { transform: rotate(180deg); }

/* ---------- Hero ---------- */
.hero {
  background: #0f172a;
  background: linear-gradient(180deg, #0f172a 0%, #16294d 55%, #1e3a6e 100%);
  color: #fff; padding: 90px 0 56px; text-align: center; position: relative; overflow: hidden;
  display: block; float: none; width: 100%; margin-top: 0;
}
.hero:after {
  content: ""; position: absolute; left: -10%; top: 0; width: 120%; height: 200%;
  background: radial-gradient(50% 45% at 30% 40%, rgba(56, 189, 248, .14), transparent 100%),
              radial-gradient(45% 40% at 75% 45%, rgba(99, 102, 241, .16), transparent 100%);
  pointer-events: none; clear: both;
}
.hero h1 { font-size: 38px; letter-spacing: 1px; margin-bottom: 12px; }
.hero h1 span { color: #7dd3fc; }
.hero-sub { color: #b6c4dc; font-size: 16px; margin-bottom: 30px; }
.hero-form { max-width: 620px; margin: 0 auto; display: block; position: relative; z-index: 1; }
.hero-form input {
  float: left; width: 74%; height: 52px; border: 0; border-radius: 8px 0 0 8px; padding: 0 18px;
  font-size: 16px; outline: none;
}
.hero-form button {
  float: right; width: 26%; height: 52px; border: 0; border-radius: 0 8px 8px 0; cursor: pointer;
  background: linear-gradient(135deg, #0ea5e9, #6366f1); color: #fff; font-size: 16px; font-weight: 700;
}
.hero-form button:hover { opacity: .92; }
.hero-form:after { content: ""; display: block; clear: both; }
.hero-tip { color: #8aa0c0; font-size: 13px; margin-top: 46px; position: relative; z-index: 1; }

/* ---------- 卡片与布局 ---------- */
.card { background: #fff; border-radius: 12px; box-shadow: 0 1px 3px rgba(16, 32, 64, .08); }
.pad { padding: 26px 28px; }
/* 面包屑（路由层对工具页统一注入 .bc-wrap > nav.breadcrumb）：轻量灰字，有面包屑时压缩工具页顶部间距 */
.bc-wrap { margin: 18px auto 0; }
.breadcrumb ol { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0; padding: 0; list-style: none; font-size: 12.5px; color: var(--muted, #64748b); }
.breadcrumb li + li::before { content: "›"; margin-right: 6px; color: #94a3b8; }
.breadcrumb a { color: inherit; text-decoration: none; }
.breadcrumb a:hover { color: #1e40af; text-decoration: underline; }
.bc-wrap + .tool-page, .bc-wrap + .container.tool-page { margin-top: 10px; }
@media (max-width: 768px) {
  .breadcrumb ol { font-size: 12px; gap: 4px; }
}

.tool-page { margin: 26px auto 60px; }
.tool-page .card:first-child { overflow: hidden; }
.tool-title { font-size: 22px; }
/* AI工具标题行：标题与额度角标同行两端对齐；角标为空（未登录/未加载）时自然隐藏，窄屏换行 */
.tool-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
.tool-head .tool-title { margin: 0; }
.tool-head .ai-quota { margin: 0; flex-shrink: 0; }
.tool-desc { color: #5b6b80; margin-bottom: 18px; }
.side-tip { margin-top: 16px; }
.tip-list { margin: 0; padding-left: 20px; color: #5b6b80; font-size: 14px; }
.tip-list li { margin-bottom: 8px; overflow-wrap: break-word; } /* 长英文串（如 changefreq 枚举值）窄屏不撑破卡片 */

.sec-title { font-size: 20px; margin: 34px 0 16px; scroll-margin-top: 74px; }
.sec-sub { font-size: 13px; color: #64748b; font-weight: 400; margin-left: 10px; }

/* ---------- 工具卡片网格 ---------- */
.tool-grid { margin: 0 -8px; overflow: hidden; }
.tool-card {
  float: left; width: calc(33.333% - 16px); margin: 0 8px 16px;
  background: #fff; border-radius: 12px; box-shadow: 0 1px 3px rgba(16, 32, 64, .08);
  padding: 22px 22px 18px; color: inherit; text-decoration: none; display: block;
  position: relative; transition: box-shadow .15s, transform .15s;
}
a.tool-card:hover { text-decoration: none; box-shadow: 0 8px 22px rgba(16, 32, 64, .14); }
/* 行首清除浮动，防止卡片高度不齐时float挂靠导致整行错位留洞 */
.tool-grid .tool-card:nth-child(3n+1) { clear: left; }
.tool-grid.mini .tool-card { width: calc(25% - 16px); clear: none; }
.tool-grid.mini .tool-card:nth-child(4n+1) { clear: left; }
.tool-card h3 { font-size: 16px; margin: 0 0 6px; color: #1c2430; }
.tool-grid.mini .tool-card h3 { font-size: 14.5px; }
.tool-card p { font-size: 13px; color: #7a8699; margin: 0; min-height: 38px; }
.tool-card .tc-key {
  display: inline-block; width: 30px; height: 30px; line-height: 30px; text-align: center;
  border-radius: 8px; background: #eef2ff; color: #4f46e5; font-weight: 700; margin-bottom: 12px;
}
.tool-card .tc-go { display: block; margin-top: 10px; color: #2563d9; font-size: 13px; opacity: 0; transition: opacity .15s; }
.tool-card .tc-go i { font-size: 12px; margin-left: 4px; }
a.tool-card:hover .tc-go { opacity: 1; }

/* ---------- FontAwesome（FA6基于var() 自定义属性，IE11不支持，显式补字体与字形；仅保留实际引用的类） ---------- */
.fa, .fas, .fa-solid { font-family: "Font Awesome 6 Free"; font-weight: 900; font-style: normal; display: inline-block; line-height: 1; }
.far { font-family: "Font Awesome 6 Free"; font-weight: 400; font-style: normal; display: inline-block; line-height: 1; }
.fa-shield-halved:before { content: "\f3ed"; }
.fa-bars:before { content: "\f0c9"; }
.fa-chevron-down:before { content: "\f078"; }
.fa-arrow-right:before { content: "\f061"; }
.fa-copy:before { content: "\f0c5"; }
.fa-circle-info:before { content: "\f05a"; }

/* ---------- 轻提示 / 确认框 ---------- */
#toastLayer {
  /* left/right+margin auto：居中且在≤360px视口不溢出（旧版固定350px+负边距在小屏横向超出） */
  /* z-index 必须高于弹层（.auth-overlay 9999 / TinyMCE对话框 10002），否则弹层场景下toast被遮挡 */
  position: fixed; top: 50%; left: 10px; right: 10px; z-index: 10060; max-width: 350px; margin: 0 auto;
  -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%);
  text-align: center; pointer-events: none;
}
.toast {
  display: inline-block; max-width: 400px; margin: 0 auto 10px; padding: 10px 18px;
  background: #0f172a; color: #e6edf7; border-radius: 8px; font-size: 14px; line-height: 1.5;
  box-shadow: 0 6px 20px rgba(2, 8, 20, .35); opacity: 0; transform: translateY(-8px);
  transition: opacity .3s, transform .3s; text-align: left;
}
.toast.in { opacity: .97; transform: translateY(0); }
.toast-ic { margin-right: 8px; }
.toast.success .toast-ic { color: #4ade80; }
.toast.error .toast-ic { color: #f87171; }
.toast.info .toast-ic { color: #7dd3fc; }
.cf-mask {
  position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: 10050; /* 高于弹层，确认框在弹层之上可见可点 */
  background: rgba(8, 14, 28, .55); text-align: center;
}
.cf-box {
  display: inline-block; position: relative; top: 50%; max-width: 340px; background: #fff;
  -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%);
  border-radius: 12px; padding: 24px 26px 20px; box-shadow: 0 20px 60px rgba(2, 8, 23, .4); text-align: left;
}
.cf-msg { margin: 0 0 18px; font-size: 15px; color: #1c2430; }
.cf-btns { text-align: right; }
.cf-btns button {
  height: 38px; padding: 0 20px; border: 0; border-radius: 8px; cursor: pointer;
  font-size: 14px; margin-left: 10px; background: #eef1f6; color: #33415c;
}
.cf-btns .cf-yes { background: #dc2626; color: #fff; }
.cf-btns button:hover { opacity: .9; }

/* ---------- 表单 ---------- */
.probe-form { margin-bottom: 6px; }
.probe-form:after { content: ""; display: block; clear: both; }
.probe-form input[type=text] {
  float: left; width: 70%; height: 46px; border: 1px solid #d7dee9; border-radius: 8px;
  padding: 0 14px; font-size: 15px; outline: none; margin-right: 2%;
}
.probe-form input.w-port { width: 12%; margin-right: 2%; }
.probe-form button, .btn-row button {
  height: 46px; padding: 0 26px; border: 0; border-radius: 8px; cursor: pointer; font-size: 15px;
  background: #eef1f6; color: #33415c;
}
.probe-form button { background: linear-gradient(135deg, #0ea5e9, #6366f1); color: #fff; font-weight: 700; }
.probe-form button:hover, .btn-row button:hover { opacity: .9; }
.btn-row { margin: 14px 0 4px; display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
/* flex+gap 对齐（旧float布局下链接/提示文本与按钮不垂直居中）；行内取消钮的额外左边距交给gap统一 */
.btn-row .auth-modal-cancel { margin-left: 0; }
.btn-row button.primary { background: #2563d9; color: #fff; }
textarea, .form-grid input[type=text] {
  width: 100%; max-width: 1200px; border: 1px solid #d7dee9; border-radius: 8px; padding: 12px 14px; font-size: 14px;
  font-family: Consolas, "Courier New", monospace; outline: none; resize: vertical;
}
textarea:focus, input:focus { border-color: #64a1f0; }

/* 日志分析器：拖拽文件悬停高亮提示 */
.lg-drop.lg-drag { border-color: #2563d9; background: #f0f6ff; }
/* 状态文案错误色（JS class切换，不用内联样式） */
.stat-err { color: #dc2626; }
/* 行内块流式布局：根治 float 被不等高标签卡住的阶梯错位；font-size:0 消除标签间空白节点 */
.form-grid { margin: 0 -10px; font-size: 0; }
.form-grid label { display: inline-block; vertical-align: top; width: 50%; padding: 0 10px 14px; color: #33415c; font-size: 14px; }
.form-grid label.chk { line-height: 44px; margin-top: 23px; }
.form-grid label.chk input { vertical-align: -2px; margin-right: 6px; }
.form-grid input[type=text] { height: 44px; }
.form-grid .flt { margin-bottom: 0; }
/* 固定槽位：槽内字段显隐切换不影响整行排列（Nginx生成器 后端地址/网站根目录） */
.form-grid .fg-slot { display: inline-block; vertical-align: top; width: 50%; font-size: 0; }
.form-grid .fg-slot label { width: 100%; }
.flt { width: 100%; height: 44px; border: 1px solid #d7dee9; border-radius: 8px; padding: 0 14px; font-size: 14px; margin-bottom: 14px; outline: none; }
select.flt { background: #fff; color: #33415c; }
.flt-label { display: block; font-size: 14px; color: #33415c; margin-bottom: 6px; }
/* ---------- 文件选择按钮 ---------- */
.file-btn {
  position: relative; display: inline-block; max-width: 100%; padding: 10px 18px; overflow: hidden;
  border: 1px dashed #9db4d6; border-radius: 8px; background: #f8fafc; color: #33415c;
  font-size: 14px; cursor: pointer; vertical-align: middle;
}
.file-btn:hover { border-color: #2563d9; color: #2563d9; background: #f0f6ff; }
.file-btn input[type=file] { position: absolute; left: 0; top: 0; width: 1px; height: 1px; opacity: 0; overflow: hidden; }
.file-btn .fb-name { display: block; margin-top: 4px; color: #7a8699; font-size: 12.5px; word-wrap: break-word; }
.file-btn.has-file { border-style: solid; border-color: #16a34a; background: #f2fbf5; }
.file-btn.has-file .fb-name { color: #166534; }
input[type=range] { width: 100%; }

/* ---------- 结果区 ---------- */
.out { margin-top: 18px; }
.out .loading { display: flex; align-items: center; gap: 8px; color: #7a8699; padding: 18px 0; }
.result-box {
  background: #0f172a; color: #d7e3f4; border-radius: 10px; padding: 16px 18px;
  white-space: pre-wrap; word-wrap: break-word; font-size: 13px; line-height: 1.7; overflow: auto; margin: 10px 0;
}
.result-box.small { max-height: 84px; }
.result-box:empty, .muted:empty { display: none; }
.grade {
  display: inline-block; width: 64px; height: 64px; line-height: 64px; text-align: center;
  border-radius: 14px; font-size: 30px; font-weight: 800; color: #fff; float: left; margin-right: 18px;
}
.grade.gA { background: #16a34a; } .grade.gB { background: #65a30d; }
.grade.gC { background: #d97706; } .grade.gD { background: #ea580c; } .grade.gF { background: #dc2626; }
.grade-sum { float: left; padding-top: 6px; }
.grade-sum .score { font-size: 22px; font-weight: 700; }
.grade-row:after { content: ""; display: block; clear: both; margin-bottom: 8px; }
.chk-item {
  border: 1px solid #e6ebf3; border-left: 4px solid #cbd5e1; border-radius: 8px;
  padding: 12px 16px; margin-bottom: 10px; background: #fbfcfe;
}
.chk-item .lv { float: right; font-size: 12px; padding: 2px 10px; border-radius: 20px; color: #fff; margin-left: 8px; }
.chk-item h4 { margin: 0 0 4px; font-size: 15px; }
.chk-item p { margin: 0; color: #5b6b80; font-size: 13.5px; word-wrap: break-word; }
.fix-box {
  margin: 10px 0 0; padding: 10px 12px; background: #f1f5f9; border: 1px solid #e2e8f0; border-radius: 6px;
  color: #334155; font-size: 12.5px; line-height: 1.7; white-space: pre-wrap; word-wrap: break-word;
}
.chk-item.danger { border-left-color: #dc2626; } .chk-item.danger .lv { background: #dc2626; }
.chk-item.warn { border-left-color: #d97706; } .chk-item.warn .lv { background: #d97706; }
.chk-item.info { border-left-color: #64748b; } .chk-item.info .lv { background: #64748b; }
.chk-item.ok { border-left-color: #16a34a; } .chk-item.ok .lv { background: #16a34a; }
.kv-table td, .kv-table th { border-bottom: 1px solid #edf1f6; padding: 10px 12px; font-size: 14px; text-align: left; vertical-align: top; }
.admin-table th { background: #f6f8fc; text-align: left; padding: 10px 12px; font-weight: 600; color: #5b6b80; font-size: 13.5px; border-bottom: 1px solid #e6ebf3; white-space: nowrap; }
.admin-table td { padding: 10px 12px; font-size: 14px; border-bottom: 1px solid #edf1f6; vertical-align: top; text-align: left; }
.kv-table td:first-child { color: #7a8699; width: 160px; white-space: nowrap; }
.codes td:first-child { width: 70px; }
.codes td:nth-child(2) { width: 150px; }
.chain-item { border: 1px dashed #d7dee9; border-radius: 8px; padding: 10px 14px; margin-bottom: 8px; font-size: 13.5px; }
.cta-card {
  margin-top: 18px; border-radius: 10px; padding: 18px 22px; color: #fff;
  background: linear-gradient(135deg, #1d4ed8, #7c3aed);
}
.cta-card h3 { color: #fff; margin-bottom: 4px; }
.cta-card p { color: #dbe4ff; margin: 0 0 12px; font-size: 14px; }
.cta-card a.btn { display: inline-block; background: #fff; color: #1d4ed8; font-weight: 700; border-radius: 8px; padding: 10px 22px; text-decoration: none; }
.cta-card a.btn:hover { opacity: .92; }

/* ---------- 广告位（通栏自适应多列，两端对齐） ---------- */
.ad-band { margin: 18px auto 0; overflow: hidden; }
.ad-band .ad-slot {
  position: relative;
  float: left; display: block; border-radius: 0; overflow: hidden;
  margin: 0 16px 0px 0;
  width: calc((100% - 48px) / 4);
}
/* 广告可识别角标（《互联网广告管理办法》第9条） */
.ad-slot .ad-tag {
  position: absolute; top: 0; right: 0; z-index: 1;
  padding: 2px 8px; font-size: 11px; line-height: 1.5; color: #fff;
  background: rgba(15, 23, 42, .55); border-radius: 0 0 0 8px; pointer-events: none;
}
.ad-band .ad-slot:nth-child(4n) { margin-right: 0; }
.ad-band[data-n="1"] .ad-slot { width: 100%; margin-right: 0; }
.ad-band[data-n="2"] .ad-slot { width: calc((100% - 16px) / 2); }
.ad-band[data-n="2"] .ad-slot:nth-child(2n) { margin-right: 0; }
.ad-band[data-n="3"] .ad-slot { width: calc((100% - 32px) / 3); }
.ad-band[data-n="3"] .ad-slot:nth-child(3n) { margin-right: 0; }
/* 图片高度不齐时行首清浮动，防止float挂靠错位 */
.ad-band[data-n="4"] .ad-slot:nth-child(4n+1),
.ad-band[data-n="3"] .ad-slot:nth-child(3n+1),
.ad-band[data-n="2"] .ad-slot:nth-child(2n+1) { clear: left; }
.ad-slot img { display: block; width: 100%; height: auto; }
/* 图片加载中/失败时槽位保底高度：防“广告”角标被裁切与CLS跳动 */
.ad-band .ad-slot { min-height: 54px; background: #f1f5f9; }

/* ---------- 页脚 ---------- */
.site-foot { background: #0f172a; color: #93a5c0; margin-top: 60px; padding: 40px 0 0; font-size: 14px; }
.foot-h { color: #fff; font-weight: 700; margin: 0 0 10px; }
.foot-list { list-style: none; margin: 0 0 18px; padding: 0; }
.foot-list li { margin-bottom: 6px; line-height: 1.6; }
/* 链接inline-block：只有文字区域可点，空白处不触发 */
.foot-list a { display: inline-block; color: #93a5c0; text-decoration: none; }
.foot-list a:hover { color: #fff; }
.foot-links { border-top: 1px solid #1e293b; font-size: 0.95rem; padding-top: 18px; }
.foot-links .foot-h { display: inline-block; margin-right: 14px; }
.foot-links a { display: inline-block; margin: 0 18px 10px 0; color: #93a5c0; text-decoration: none; }
.foot-links a:hover { color: #fff; }
.foot-bar { display: flex; justify-content: center; align-items: center; flex-wrap: wrap; border-top: 1px solid #1e293b; margin-top: 10px; padding: 16px 0; gap: 15px; color: #93a5c0; }
.foot-bar:after { content: ""; display: block; clear: both; }
.foot-bar span { display: block; float: left; }
.foot-bar span + span { float: right; }
/* 页脚底栏链接与页脚同色系，避免默认蓝色突兀 */
.foot-bar a { color: #93a5c0; text-decoration: none; }
.foot-bar a:hover { color: #fff; text-decoration: none; }

/* ---------- 错误/提示 ---------- */
.flash { border-radius: 8px; padding: 12px 18px; margin-bottom: 16px; font-size: 14px; }
.flash.success { background: #ecfdf5; color: #047857; border: 1px solid #a7f3d0; }
.flash.error { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }
.prose h2 { margin-top: 1.2em; }
.note-card { background: #f8fafc; border: 1px solid #e6ebf3; border-radius: 10px; padding: 16px 18px; margin-top: 18px; }

/* ---------- 响应式 ---------- */
@media (max-width: 900px) {
  /* 两列布局：先同特异性重置桌面端 3n+1/4n+1 行首规则（媒体块在后位置覆盖），
     否则 4/7/10… 号卡片被高特异性 clear:left 错误换行致排列错位；再按 2n+1 设行首 */
  .tool-card, .tool-grid .tool-card, .tool-grid.mini .tool-card { width: calc(50% - 16px); clear: none; }
  .tool-grid .tool-card:nth-child(3n+1), .tool-grid.mini .tool-card:nth-child(4n+1) { clear: none; }
  .tool-grid .tool-card:nth-child(2n+1), .tool-grid.mini .tool-card:nth-child(2n+1) { clear: left; }
  .hero h1 { font-size: 30px; }
}
/* 导航切换移动态断点单独设为1024px：平板与窄桌面用汉堡菜单，避免顶部横向导航挤压换行 */
@media (max-width: 1024px) {
  /* 导航改汉堡菜单：面板绝对定位全宽下拉，按钮绝对定位不参与流（避免被展开的菜单挤出视口） */
  .head-in { display: flex; align-items: center; height: 56px; position: relative; }
  .nav-toggle {
    display: block; position: absolute; right: 8px; top: 0; height: 56px; line-height: 56px;
    background: none; border: 0; color: #fff; font-size: 20px; cursor: pointer; z-index: 61; padding: 0 10px;
  }
  .nav {
    display: none; position: absolute; top: 100%; left: 0; right: 0;
    background: #0f172a; line-height: 1.6; padding: 6px 0 10px; text-align: left;
    box-shadow: 0 14px 30px rgba(2, 8, 20, .45); max-height: calc(100vh - 56px); overflow: auto; z-index: 60;
  }
  .nav.open { display: block; }
  .nav a { display: block; margin: 0; padding: 9px 22px; font-size: 15px; }
  .nav .nav-account { color: #7dd3fc; width: 120px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}
  .subwrap { display: block; align-self: auto; }
  .subwrap > .subtop { display: block; }
  /* 移动端共享面板回文档流：JS将其移动到展开分组之后，display:none收起（visibility会保留布局高度致大片空白） */
  .mega {
    display: none; position: static; width: auto; margin: 0; padding: 2px 0 6px;
    box-shadow: none; border-radius: 0; background: #0b1220; border: 0;
    visibility: visible; opacity: 1; transition: none;
  }
  .mega.open { display: block; }
  .mega-in { max-width: none; margin: 0; }
  /* 通栏面板结构在移动端收单列：隐藏条目描述 */
  .submenu-grid { display: block; padding: 0; gap: 0; }
  .submenu-grid a { display: block; padding: 8px 22px 8px 40px; border-radius: 0; }
  .submenu-grid a b { color: #cbd5e1; font-size: 14px; font-weight: 400; white-space: normal; }
  .submenu-grid a span { display: none; }
  .submenu-grid a:hover { background: #1a2b4f; }
  .submenu-grid a:hover b, .submenu-grid a.on b { color: #7dd3fc; }
  .submenu-grid a.on { background: #16233f; }
  /* 移动端不展示悬停遮罩 */
  .mega-shade.on { display: none; }
  /* 移动端纯点击展开：禁用hover态，防触摸后残留悬停导致面板全开 */
  .subwrap.open .sub-caret { transform: rotate(180deg); }
}
@media (max-width: 640px) {
  /* 单列：同特异性覆盖所有 clear 规则，每张卡片独占一行 */
  .tool-card, .tool-grid .tool-card, .tool-grid.mini .tool-card { width: calc(100% - 16px); clear: both; }
  .tool-grid .tool-card:nth-child(3n+1), .tool-grid .tool-card:nth-child(2n+1),
  .tool-grid.mini .tool-card:nth-child(4n+1), .tool-grid.mini .tool-card:nth-child(2n+1) { clear: both; }
  .hero { padding: 46px 0 40px; }
  .hero h1 { font-size: 24px; }
  .hero-form input { width: 100%; border-radius: 8px; }
  .hero-form button { width: 100%; border-radius: 8px; margin-top: 10px; }
  .probe-form input[type=text], .probe-form input.w-port { width: 100%; float: none; margin: 0 0 10px; }
  .probe-form button { width: 100%; }
  .form-grid label { width: 100% !important; }
  .form-grid label.chk { margin-top: 0; line-height: 40px; }
  .form-grid .fg-slot { width: 100% !important; }
  /* 移动端选项卡：加大间距与触控面积 */
  .lang-tabs button { margin: 0 10px 10px 0; padding: 8px 15px; }
  /* data-n 属性选择器特异性高于 .ad-band .ad-slot，媒体查询内必须同级覆盖，否则移动端仍按多列挤压 */
  .ad-band .ad-slot,
  .ad-band[data-n="1"] .ad-slot, .ad-band[data-n="2"] .ad-slot,
  .ad-band[data-n="3"] .ad-slot, .ad-band[data-n="4"] .ad-slot {
    width: 100%; margin: 0 0 12px; clear: both;
  }
  .kv-table td:first-child { width: 90px; }
}

/* ---------- 表格统一规范：全站 table（后台除外）最小宽 900px，溢出由 .tbl-wrap/.tbl-scroll 容器横向滚动（任意视口） ---------- */
body:not(.admin) table { min-width: 900px; }
.tbl-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 0 -2px; padding: 0 2px;}
@media (max-width: 768px) {
  /* 窄屏宽表右缘渐隐，暗示可横向滑动（纯CSS；Safari需-webkit-前缀）。仅内容实际溢出时由 app.js 加 .tbl-fade（P2-3：不溢出的满宽表不再被无条件渐隐） */
  .tbl-wrap.tbl-fade, .tbl-scroll.tbl-fade {
    -webkit-mask-image: linear-gradient(to right, #000 0, #000 calc(100% - 24px), rgba(0,0,0,0) 100%);
    mask-image: linear-gradient(to right, #000 0, #000 calc(100% - 24px), rgba(0,0,0,0) 100%);
  }
  /* 移动端触控目标：正文/页脚文字链接扩大热区（桌面观感不变） */
  .tip-list a, .foot-list a { padding: 6px 0; display: inline-block; }
}
.tbl-hint { display: none; font-size: 12.5px; color: #64748b; margin: 6px 0 0; }
@media (max-width: 660px) {
  .tbl-hint { display: block; }
}

/* ---------- 工具目录分类锚点跳转 ---------- */
.dir-jump { margin: 2px 0 16px; }
.dir-jump a {
  display: inline-block; margin: 0 8px 8px 0; padding: 6px 14px;
  border: 1px solid #d7dee9; background: #fff; color: #33415c;
  border-radius: 8px; font-size: 13.5px; text-decoration: none;
}
.dir-jump a:hover { border-color: #64a1f0; color: #2563d9; text-decoration: none; }
@media (max-width: 1024px) {
  .sec-title { scroll-margin-top: 68px; }
}

/* ---------- 语言选项卡（代码格式化/压缩） ---------- */
.lang-tabs { margin: 4px 0 14px; }
.lang-tabs button {
  display: inline-block; margin: 0 8px 8px 0; padding: 6px 14px;
  border: 1px solid #d7dee9; background: #fff; color: #33415c;
  border-radius: 8px; font-size: 13.5px; cursor: pointer;
}
.lang-tabs button:hover, .lang-tabs a:hover { border-color: #64a1f0; }
.lang-tabs a {
  display: inline-block; margin: 0 10px 10px 0; padding: 8px 15px;
  border: 1px solid #d7dee9; border-radius: 8px; background: #fff;
  color: #475569; font-size: 14px; line-height: 1.4; text-decoration: none; cursor: pointer;
  transition: all .15s;
}
.lang-tabs a.on { background: #eff6ff; border-color: #2563d9; color: #2563d9; font-weight: 700; }
.lang-tabs a.on:hover { text-decoration: none; }
.lang-tabs button.on { background: #eff6ff; border-color: #2563d9; color: #2563d9; font-weight: 700; }

/* ---------- 外链发布进度 ---------- */
.bl-prog { margin: 16px 0 4px; }
.bl-bar { height: 10px; background: #e6ebf3; border-radius: 5px; overflow: hidden; }
.bl-bar i { display: block; height: 100%; width: 0; background: #2563d9; }
.bl-prog-txt { margin-top: 8px; font-size: 13.5px; color: #5b6b80; }
.bl-stop { margin-left: 12px; padding: 2px 12px; border: 1px solid #d7dee9; background: #fff; color: #33415c; border-radius: 6px; cursor: pointer; font-size: 12.5px; }
.bl-stop:hover { border-color: #dc2626; color: #dc2626; }
.bl-done {
  margin-top: 14px; padding: 12px 16px; border: 1px solid #bbe5c8; border-left: 4px solid #16a34a;
  border-radius: 8px; background: #f2fbf5; color: #166534; font-size: 14px; line-height: 1.7;
}

/* ---------- chmod计算器 ---------- */
.cm-bits { width: auto; margin: 0 0 14px; } /* 最小宽统一走全局 table 规则 */
.cm-bits th, .cm-bits td { padding: 6px 14px; font-size: 14px; text-align: center; border-bottom: 1px solid #edf1f6; }
.cm-bits th:first-child, .cm-bits td:first-child { text-align: left; color: #33415c; }
.cm-bits input { vertical-align: -2px; }

/* ---------- SERP预览 ---------- */
.serp-box { border: 1px solid #e6ebf3; border-radius: 8px; background: #fff; padding: 14px 16px; max-width: 600px; }
.serp-url { color: #006621; font-size: 13px; margin-bottom: 2px; word-wrap: break-word; }
.serp-title { color: #1a0dab; font-size: 18px; line-height: 1.4; word-wrap: break-word; }
.serp-desc { color: #545454; font-size: 13px; line-height: 1.6; margin-top: 2px; word-wrap: break-word; }
.bl-list { margin-top: 14px; max-height: 360px; overflow: auto; border: 1px solid #e6ebf3; border-radius: 8px; }
.bl-list:empty { display: none; }
.bl-row { padding: 7px 12px; border-bottom: 1px solid #f1f5f9; font-size: 13px; }
.bl-row:last-child { border-bottom: 0; }
.bl-row .bl-st { display: inline-block; width: 64px; color: #64748b; }
.bl-row.doing .bl-st { color: #2563d9; font-weight: 700; }
.bl-row.ok .bl-st { color: #16a34a; }
.bl-row.skip .bl-st { color: #64748b; }
.bl-row .bl-host { font-weight: 700; margin-right: 10px; }
.bl-row .bl-url { color: #7a8699; word-wrap: break-word; }


/* ---------- Sitemap选项行 ---------- */
.sm-opts { margin: 4px -8px 0; font-size: 0; }
.sm-opts:after { content: ""; display: block; clear: both; }
.sm-opts > span { display: inline-block; vertical-align: top; width: 33.333%; padding: 0 8px; box-sizing: border-box; font-size: 15px; }
@media (max-width: 640px) {
  .sm-opts > span { float: none; width: 100%; padding: 0 8px 12px; }
}

/* 通用键值明细行（密码强度/META检测等共用） */
.up-row { padding: 7px 0; border-bottom: 1px solid #edf1f6; font-size: 14px; }
.up-row:last-child { border-bottom: 0; }
.up-k { display: inline-block; width: 90px; color: #7a8699; vertical-align: top; }
.up-v { display: inline-block; vertical-align: top; width: calc(100% - 96px); color: #33415c; word-break: break-all; }

/* 嵌在 dl-box 内的明细行（META检测等）：与 .dl-row2 对齐内边距和分隔线 */
.dl-box .up-row { padding: 9px 12px; border-bottom: 1px solid #f1f5f9; font-size: 13px; }
.dl-box .up-k { width: 84px; font-weight: 600; color: #5b6b80; }
.dl-box .up-v { width: calc(100% - 90px); }
.dl-sec { padding: 9px 12px; font-size: 13px; font-weight: 700; color: #33415c; background: #f8fafc; border-bottom: 1px solid #f1f5f9; }
@media (max-width: 640px) {
  .dl-box .up-row { padding: 8px 10px; }
  .dl-box .up-k { width: 68px; }
  .dl-box .up-v { width: calc(100% - 74px); }
  .dl-sec { padding: 8px 10px; }
}

/* Punycode转换 */
#pcOut:empty:before { content: "转换结果显示在这里"; color: #64748b; }

/* 颜色对比度检测 */
.ct-pick { display: block; width: 100%; height: 52px; padding: 4px; border: 1px solid #d7dee9; border-radius: 8px; background: #fff; cursor: pointer; }
.ct-ratio { font-size: 26px; font-weight: 700; color: #0f172a; margin: 10px 0 8px; }
.ct-ratio:empty { display: none; }
.ct-verdict { margin-bottom: 14px; }
.ct-badge { display: inline-block; margin: 0 8px 8px 0; padding: 4px 12px; border-radius: 20px; font-size: 13px; font-weight: 700; }
.ct-badge.pass { background: #ecfdf5; color: #047857; }
.ct-badge.fail { background: #fef2f2; color: #b91c1c; }
.ct-preview { border: 1px solid #e6ebf3; border-radius: 8px; padding: 16px 18px; margin-bottom: 4px; }
.ct-preview .ct-p1 { font-size: 16px; margin: 0 0 8px; }
.ct-preview .ct-p2 { font-size: 24px; font-weight: 700; margin: 0; }


/* ---------- 目录分类跳转计数徽标 ---------- */


/* ---------- 密码强度检测 ---------- */
.pw-inwrap { position: relative; }
.pw-inwrap .flt { padding-right: 44px; }
.pw-eye { position: absolute; right: 8px; top: 8px; background: none; border: 0; color: #7a8699; cursor: pointer; font-size: 15px; padding: 4px 6px; line-height: 1; }
.pw-eye:hover { color: #2563d9; }
.pw-meter { height: 8px; background: #e6ebf3; border-radius: 4px; overflow: hidden; margin: 2px 0 10px; }
.pw-meter i { display: block; height: 100%; width: 0; border-radius: 4px; transition: width .25s ease; }
.pw-meter i.s0 { background: #dc2626; } .pw-meter i.s1 { background: #ea580c; }
.pw-meter i.s2 { background: #d97706; } .pw-meter i.s3 { background: #16a34a; }
.pw-meter i.s4 { background: #0f766e; }
.pw-score { margin-bottom: 10px; }
.pw-score:empty { display: none; }
.pw-label { display: inline-block; padding: 2px 14px; border-radius: 20px; color: #fff; font-weight: 700; font-size: 13px; margin-right: 10px; vertical-align: 1px; }
.pw-label.s0 { background: #dc2626; } .pw-label.s1 { background: #ea580c; }
.pw-label.s2 { background: #d97706; } .pw-label.s3 { background: #16a34a; }
.pw-label.s4 { background: #0f766e; }
.pw-num { font-size: 13.5px; color: #5b6b80; }
.pw-detail:empty { display: none; }
.pw-detail { margin-bottom: 6px; }
.pw-bad { color: #b91c1c; } .pw-good { color: #047857; }

/* ---------- IP范围展开 ---------- */
.ir-info:empty { display: none; }
.ir-info { margin: 10px 0 4px; }
.ir-info .up-k { width: 110px; }

/* ---------- 新工具组件（第18轮） ---------- */
.break { word-break: break-all; }

/* Crontab生成器：五字段行 */
.cr-fields { margin: 4px -6px 14px; font-size: 0; }
.cr-fields:after { content: ""; display: block; clear: both; }
.cr-fields label { display: inline-block; vertical-align: top; width: 20%; padding: 0 6px; box-sizing: border-box; font-size: 13px; color: #5b6b80; }
.cr-fields label span { display: block; }
.cr-fields label input { width: 100%; height: 38px; border: 1px solid #d7dee9; border-radius: 8px; padding: 0 10px; font-size: 14px; outline: none; box-sizing: border-box; }
.cr-fields label input:focus { border-color: #64a1f0; }
.cr-fields label em { display: block; font-style: normal; font-size: 11.5px; color: #64748b; margin-top: 3px; }

/* 文本比对 */
.df-cols { margin: 0 -8px; }
.df-cols:after { content: ""; display: block; clear: both; }
.df-cols label { float: left; width: 50%; padding: 0 8px; box-sizing: border-box; font-size: 14px; color: #33415c; }
.df-cols textarea { width: 100%; box-sizing: border-box; }
.df-tag { display: inline-block; padding: 1px 8px; border-radius: 4px; font-size: 12.5px; }
.df-tag.df-add { background: #ecfdf5; color: #047857; }
.df-tag.df-del { background: #fef2f2; color: #b91c1c; }
.df-stats { margin: 14px 0 8px; font-size: 13.5px; color: #5b6b80; }
.df-box { max-height: 480px; overflow: auto; border: 1px solid #e6ebf3; border-radius: 8px; background: #fff; }
.df-line { padding: 2px 10px; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.55; white-space: pre-wrap; word-break: break-all; border-left: 3px solid transparent; }
.df-line .ln { display: inline-block; min-width: 64px; color: #94a3b8; margin-right: 10px; -webkit-user-select: none; user-select: none; }
.df-line.add { background: #ecfdf5; border-left-color: #16a34a; }
.df-line.del { background: #fef2f2; border-left-color: #dc2626; }

/* 正则测试：匹配高亮与结果 */
.rx-hl { background: #fef08a; border-radius: 2px; padding: 0 1px; }
.rx-box { margin-top: 14px; }
.rx-sum { font-size: 13.5px; color: #5b6b80; margin-bottom: 8px; }
.rx-txt { max-height: 220px; overflow: auto; border: 1px solid #e6ebf3; border-radius: 8px; padding: 10px 12px; background: #fff; font-family: Consolas, Menlo, monospace; font-size: 13px; line-height: 1.6; white-space: pre-wrap; word-break: break-all; }
.rx-groups { margin-top: 10px; max-height: 260px; overflow: auto; }
.rx-gitem { border: 1px solid #e6ebf3; border-radius: 8px; padding: 8px 12px; margin-bottom: 8px; font-size: 13px; background: #fff; }
.rx-gitem b { color: #2563d9; margin-right: 8px; }
.rx-gitem .mono { word-break: break-all; }

/* 颜色转换 */
.cl-row { margin-bottom: 14px; }
.cl-row #clPick { display: block; width: 100%; height: 56px; padding: 4px; border: 1px solid #d7dee9; border-radius: 8px; background: #fff; cursor: pointer; }

/* 图片转Base64 */
.i2b-preview { max-width: 240px; max-height: 160px; display: block; margin: 10px 0; padding: 8px; border: 1px solid #e6ebf3; border-radius: 8px; background: repeating-conic-gradient(#f1f5f9 0 25%, #fff 0 50%) 0 0 / 16px 16px; }

/* Nginx生成器输出 */
.ng-out { max-height: 520px; overflow: auto; }

/* 死链检测结果 */
.dl-box { margin-top: 14px; border: 1px solid #e6ebf3; border-radius: 8px; overflow: hidden; }
.dl-row2 { padding: 9px 12px; border-bottom: 1px solid #f1f5f9; font-size: 13px; background: #fff; }
.dl-row2:last-child { border-bottom: 0; }
.dl-row2 .dl-u { display: block; word-break: break-all; color: #33415c; margin-bottom: 3px; }
.dl-badge { display: inline-block; min-width: 44px; text-align: center; padding: 1px 9px; border-radius: 20px; font-size: 12px; font-weight: 700; margin-right: 8px; }
.dl-badge.ok { background: #ecfdf5; color: #047857; }
.dl-badge.dead { background: #fef2f2; color: #b91c1c; }
.dl-badge.err { background: #fff7ed; color: #c2410c; }
.dl-badge.na { background: #f1f5f9; color: #64748b; }
.dl-badge.doing { background: #eff6ff; color: #2563d9; animation: flPulse 1.1s ease-in-out infinite; }
.dl-row2 .dl-note { color: #7a8699; }

@media (max-width: 640px) {
  .cr-fields label { width: 33.333%; margin-bottom: 10px; }
  .df-cols { margin: 0; }
  .df-cols label { float: none; width: 100%; padding: 0; margin-bottom: 10px; }
}

/* ---------- 工具页小节标题与小按钮（日志分析/Favicon/TLS套件等新工具） ---------- */
.sub-title { font-size: 17px; margin: 22px 0 10px; padding-top: 14px; border-top: 1px solid #eef1f6; }
.sub-title:first-of-type { margin-top: 16px; }
.mini-btn {
  display: inline-block; margin-left: 8px; padding: 2px 10px; vertical-align: 2px;
  border: 1px solid #d7dee9; border-radius: 6px; background: #fff; color: #33415c;
  font-size: 12px; line-height: 18px; cursor: pointer;
}
.mini-btn:hover { border-color: #64a1f0; color: #2563d9; }
.mini-btn:disabled { opacity: .5; cursor: not-allowed; }

/* 横向条形图（状态码分布/按小时请求量） */
.bar-row { margin: 0 0 6px; font-size: 13px; }
.bar-row:after { content: ""; display: block; clear: both; }
.bar-lb { float: left; width: 64px; color: #5b6b80; padding-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bar-track { display: block; margin: 0 90px 0 64px; height: 18px; background: #eef1f6; border-radius: 4px; overflow: hidden; }
.bar-fill { display: block; height: 100%; background: #38bdf8; border-radius: 4px 0 0 4px; min-width: 2px; }
.bar-fill.warn { background: #fb923c; }
.bar-fill.bad { background: #f87171; }
.bar-n { float: right; width: 86px; text-align: right; color: #5b6b80; padding-top: 2px; }

/* TLS套件等级徽章 */
.cip-lv { display: inline-block; min-width: 44px; text-align: center; padding: 1px 9px; border-radius: 20px; font-size: 12px; font-weight: 700; }
.cip-lv.ok { background: #ecfdf5; color: #047857; }
.cip-lv.mid { background: #eff6ff; color: #2563d9; }
.cip-lv.weak { background: #fff7ed; color: #c2410c; }
.cip-lv.bad { background: #fef2f2; color: #b91c1c; }

/* Favicon生成器 */
.fv-drop {
  position: relative; border: 2px dashed #c9d4e4; border-radius: 10px; background: #f8fafc;
  padding: 26px 16px; text-align: center; color: #5b6b80; cursor: pointer; margin-bottom: 12px;
}
.fv-drop:hover, .fv-drop.over { border-color: #64a1f0; background: #eff6ff; }
.fv-drop p { margin: 4px 0; font-size: 14px; }
.fv-drop input { position: absolute; left: 0; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }
.fv-src { margin: 0 0 12px; }
.fv-src img { width: 96px; height: 96px; vertical-align: middle; border-radius: 8px; border: 1px solid #e6ebf3; background: #fff; }
.fv-src span { display: inline-block; vertical-align: middle; margin-left: 12px; font-size: 13px; }
.fv-prev { margin: 14px 0 0; }
.fv-prev:after { content: ""; display: block; clear: both; }
.fv-item { float: left; width: 96px; margin: 0 12px 12px 0; text-align: center; }
.fv-item img { display: inline-block; border: 1px solid #e6ebf3; border-radius: 6px; background: #fff; }
.fv-item span { display: block; font-size: 12px; color: #7a8699; margin-top: 4px; }

/* 搜索指令速查表 */
.so-table td { vertical-align: middle; }
.so-table code { font-size: 12.5px; color: #33415c; }


/* 登录/注册页专用样式 */
.auth-page { min-height: calc(100vh - 60px); display: flex; align-items: center; justify-content: center; padding: 80px 18px 60px; }
.auth-card { width: 100%; max-width: 440px; background: #fff; border-radius: 16px; padding: 36px; box-shadow: 0 8px 30px rgba(0,0,0,.08); }
.auth-title { font-size: 24px; font-weight: 700; text-align: center; margin: 0 0 24px; color: #0f172a; }
.auth-tabs { display: flex; border-bottom: 2px solid #e6ebf3; margin-bottom: 24px; }
.auth-tab { flex: 1; padding: 12px; border: none; background: none; font-size: 15px; font-weight: 600; cursor: pointer; color: #64748b; border-bottom: 2px solid transparent; margin-bottom: -2px; transition: all .2s; }
.auth-tab.on { color: #2563d9; border-bottom-color: #2563d9; }
.auth-field { display: block; margin-bottom: 16px; }
.auth-field label { display: block; font-size: 13px; font-weight: 600; color: #5b6b80; margin-bottom: 6px; }
.auth-btn { width: 100%; height: 48px; font-size: 16px; border-radius: 10px; background: linear-gradient(135deg, #0ea5e9, #6366f1); color: #fff; font-weight: 700; border: 0; cursor: pointer; }
.auth-btn:hover { opacity: .9; }
.auth-btn:disabled { opacity: .5; cursor: not-allowed; }
.btn.primary { background: #2563d9; color: #fff; border: 0; cursor: pointer; border-radius: 8px; padding: 0 20px; font-size: 14px; }
.btn.primary:hover { opacity: .9; }
.auth-link { text-align: center; margin-top: 16px; font-size: 14px; color: #64748b; }
.auth-link a { color: #2563d9; text-decoration: none; }
/* QQ快捷登录入口（未配置QQ互联参数时不渲染） */
.auth-oauth { margin-top: 14px; text-align: center; }
.auth-oauth-line {
  display: block; margin-bottom: 12px; color: #64748b; font-size: 12.5px;
  border-top: 1px solid #e6ebf3; padding-top: 12px;
}
.qq-login-btn {
  display: inline-flex; align-items: center; gap: 8px; padding: 9px 22px;
  border: 1px solid #d7dee9; border-radius: 999px; background: #fff;
  color: #33415c; font-size: 14px; text-decoration: none; transition: all .15s;
}
.qq-login-btn:hover { border-color: #12b7f5; color: #12b7f5; text-decoration: none; }
.qq-btn-ic {
  display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px;
  border-radius: 50%; background: #12b7f5; color: #fff; font-size: 11px; font-weight: 700;
}
/* 注册页邀请提示条 */
.ref-note {
  margin: 0 0 14px; padding: 9px 12px; border-radius: 8px;
  background: #f0fdf4; border: 1px solid #bbf7d0; color: #15803d; font-size: 13px; line-height: 1.6;
}
/* 推广中心：奖励概览与复制行 */
.pm-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 14px; max-width: 1200px; }
.pm-stat {
  padding: 16px 12px; text-align: center;
  background: #f6f8fc; border: 1px solid #e6ebf3; border-radius: 10px; color: #64748b; font-size: 12.5px;
}
.pm-stat b { display: block; margin-bottom: 4px; color: #2563d9; font-size: 24px; }
.pm-copyrow { display: flex; gap: 10px; align-items: center; max-width: 1200px; }
.pm-copyrow .flt { flex: 1 1 auto; min-width: 0; }
.pm-copyrow .btn { flex: 0 0 auto; height: 44px; }
@media (max-width: 640px) {
  .pm-stats { grid-template-columns: 1fr; }
  .pm-copyrow { flex-direction: column; align-items: stretch; }
  .pm-copyrow .btn { width: 100%; }
}
.auth-agreement { font-size: 0.95rem; color: #64748b; margin: 12px 0; line-height: 1.6; }
.auth-agreement a { color: #2563d9; }
.auth-agreement label{display: flex; gap:3px;}
@media (max-width: 640px) {
  .auth-page { padding: 70px 12px 40px; }
  .auth-card { padding: 24px; }
}

/* ---------- 用户中心统一布局 ---------- */
/* ---------- 用户中心专属头尾（uc_header/_user_layout） ---------- */
/* 用户中心专属头部：与主站同色系（深板岩#0f172a），玻璃分隔线+淡金点缀，统一高级感 */
.uc-body { background: #f5f7fb; }
.uc-head { background: linear-gradient(135deg, #0f172a 0%, #16233f 60%, #1a2c50 100%); position: sticky; top: 0; z-index: 900; box-shadow: 0 1px 0 rgba(125,211,252,.18), 0 2px 14px rgba(15,23,42,.28); }
.uc-head-in { margin: 0; padding: 0 24px; height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.uc-head .logo { display: flex; align-items: center; gap: 8px; font-size: 20px; font-weight: 700; color: #fff; text-decoration: none; letter-spacing: .5px; min-width: 0; }
.uc-head .logo:hover { text-decoration: none; }
.uc-head .logo-ic { color: #7dd3fc; font-size: 20px; }
.uc-head-right { margin-left: auto; display: flex; align-items: center; gap: 18px; flex-shrink: 0; }
.uc-head-link { color: #cbd5e1; font-size: 13.5px; text-decoration: none; transition: color .15s; }
.uc-head-link:hover { color: #fff; }
.uc-head-user { display: inline-flex; align-items: center; gap: 7px; color: #f1f5f9; font-size: 13.5px; font-weight: 600; max-width: 200px; }
.uc-head-user span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.uc-head-user i { color: #7dd3fc; font-size: 16px; }
.uc-body .uc-wrap { min-height: calc(100vh - 58px); align-items: stretch; }
.uc-foot-mini { margin-top: 28px; padding: 16px 0 4px; border-top: 1px solid #eef2f7; display: flex; flex-wrap: wrap; gap: 8px 18px; align-items: center; font-size: 12.5px; color: #64748b; }
.uc-foot-mini a { color: #64748b; text-decoration: none; }
.uc-foot-mini a:hover { color: #2563d9; }
@media (max-width: 900px) {
  .uc-head-in { padding: 0 14px; gap: 10px; }
  .uc-head-user { display: none; }
}
@media (max-width: 480px) {
  .uc-head-in { padding: 0 10px; gap: 8px; }
  .uc-head .logo { font-size: 17px; }
  .uc-head .logo-ic { font-size: 17px; }
  .uc-head-right { gap: 12px; }
  .uc-head-link { font-size: 12.5px; }
}
.uc-wrap { display: flex; justify-content: center; min-height: calc(100vh - 60px); margin-top: 0; }
/* PC端侧栏sticky浮动：随滚动固定，超高时自身滚动 */
.uc-side { width: 200px; background: #f8fafc; border-right: 1px solid #e6ebf3; padding: 24px 0; flex-shrink: 0; position: sticky; top: 58px; align-self: flex-start; height: calc(100vh - 58px); max-height: calc(100vh - 58px); overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; }
/* 侧边菜单隐藏垂直滚动条但保留滚动（Firefox scrollbar-width / IE·旧Edge -ms- / WebKit伪元素三套兼容） */
.uc-side::-webkit-scrollbar { width: 0; height: 0; display: none; }
.uc-profile { padding: 0 20px 20px; border-bottom: 1px solid #e6ebf3; margin-bottom: 12px; text-align: center; }
.uc-avatar { width: 56px; height: 56px; border-radius: 50%; background: linear-gradient(135deg, #3b82f6, #8b5cf6); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-size: 24px; font-weight: 700; margin-bottom: 10px; }
.uc-name { font-size: 16px; font-weight: 700; color: #0f172a; }
.uc-email { font-size: 13px; color: #64748b; margin-top: 2px; word-break: break-all; }
.uc-nav { display: flex; flex-direction: column; gap: 2px; padding: 0 8px; }
.uc-nav-item { display: flex; align-items: center; gap: 10px; padding: 10px 16px; border-radius: 8px; color: #475569; text-decoration: none; font-size: 14px; transition: all .15s; }
.uc-nav-item:hover { background: #eef2ff; color: #2563d9; text-decoration: none;}
.uc-nav-item.on { background: #eff6ff; color: #2563d9; font-weight: 600; }
.uc-nav-item i { width: 20px; text-align: center; font-size: 15px; }
/* 用户中心菜单角标（问题反馈有管理员回复时）：右对齐小红点计数，跳页自动更新不轮询 */
.uc-badge { margin-left: auto; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: #ef4444; color: #fff; font-size: 11px; font-weight: 600; line-height: 18px; text-align: center; box-sizing: border-box; }

/* 智能客服悬浮入口：全站右下角（后台除外），点击新窗口打开会话页；避开幕/footer悬浮层 z-index 体系 */
.support-fab { position: fixed; right: 22px; bottom: 26px; z-index: 900; width: 52px; height: 52px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #2563d9, #4f46e5); color: #fff; font-size: 22px; text-decoration: none; box-shadow: 0 6px 18px rgba(37, 99, 217, .35); transition: transform .15s, box-shadow .15s; }
.support-fab:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(37, 99, 217, .45); color: #fff; text-decoration: none; }
/* 打印时隐藏悬浮客服入口（fixed 元素会出现在每页右下角） */
@media print {
  .support-fab { display: none; }
}
@media (max-width: 768px) {
  .support-fab { right: 14px; bottom: 18px; width: 46px; height: 46px; font-size: 19px; }
}
.uc-main { flex: 1; padding: 32px 0px 32px 20px; }
.uc-card { background: #fff; border: 1px solid #e6ebf3; border-radius: 12px; padding: 28px; margin-bottom: 20px; }
.uc-title { font-size: 20px; font-weight: 700; color: #0f172a; margin: 0 0 20px; }
.uc-info-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; max-width: 860px}
.uc-info-item { display: flex; flex-direction: column; gap: 4px; }
.uc-info-label { font-size: 13px; color: #64748b; }
.uc-info-value { font-size: 15px; color: #0f172a; }
.uc-form .auth-field { margin-bottom: 16px; }
.uc-label { display: block; font-size: 13px; font-weight: 600; color: #5b6b80; margin-bottom: 6px; }
/* 实名认证状态徽章 */
.uc-rn-badge { display: block; padding: 10px 14px; border-radius: 8px; font-size: 13.5px; margin: 0 0 14px; }
.uc-rn-badge.ok { background: #ecfdf5; color: #047857; border: 1px solid #a7f3d0; }
.uc-rn-badge.pending { background: #fffbeb; color: #b45309; border: 1px solid #fde68a; }
.uc-rn-badge.fail { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }
.uc-rn-badge.off { background: #f8fafc; color: #64748b; border: 1px solid #e2e8f0; }
.uc-current-email { display: flex; justify-content: space-between; align-items: center; padding: 14px 18px; background: #f8fafc; border-radius: 10px; }
@media (max-width: 1200px) {
  .uc-wrap { flex-direction: column; }
  .uc-side { width: 100%; position: static; height: auto; border-right: none; border-bottom: 1px solid #e6ebf3; padding: 16px 0; }
  .uc-profile { display: flex; align-items: center; gap: 12px; text-align: left; padding: 0 16px 12px; }
  .uc-avatar { width: 40px; height: 40px; font-size: 18px; margin-bottom: 0; }
  .uc-nav { flex-direction: row; flex-wrap: wrap; padding: 0 8px; gap: 6px; }
  .uc-nav-item { padding: 8px 12px; font-size: 13px; min-width: 112px; box-sizing: border-box; }
  .uc-main { padding: 20px 16px; }
}
@media (max-width: 768px) {
  .uc-info-grid { grid-template-columns: 1fr; }
}

/* ---------- 通用工具类（替代内联样式） ---------- */
.u-mb0 { margin-bottom: 0; }
.u-mt8 { margin-top: 8px; }
.u-mt12 { margin-top: 12px; }
.u-row { display: flex; gap: 8px; align-items: center; }
.u-flex1 { flex: 1; min-width: 0; }
.u-nows { white-space: nowrap; }
/* 显隐工具类：!important确保胜过 .form-grid label 等同类选择器的display声明 */
.u-hide { display: none !important; }
/* 剪贴板 execCommand 回退用的临时 textarea：移出视口隐藏，不用内联样式 */
.u-clip-helper { position: fixed; left: -9999px; top: 0; opacity: 0; }
.u-fs13 { font-size: 13px; }
.u-fw400 { font-weight: 400; }
.u-muted { color: #64748b; }
.u-mono-sm { font-size: 15px; color: #0f172a; }
.msg-err { color: #b91c1c; }
.msg-ok { color: #047857; }

/* 图形验证码图片（全站统一100px宽） */
.captcha-img { width: 110px; height: 40px; border-radius: 6px; cursor: pointer; flex-shrink: 0; border: 1px solid #d7dee9; display: block; }

/* 发送验证码/提交类按钮尺寸 */
.btn-sendcode { white-space: nowrap; height: 44px; flex-shrink: 0; padding: 0 16px; font-size: 13px; }
.btn-submit-lg { height: 44px; padding: 0 32px; font-size: 15px; margin-top: 8px; }

/* 表格与列表页公共件（前后台通用） */
.tbl-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.count-line { font-size: 13px; color: #64748b; margin-bottom: 8px; }
.cell-ell { max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tbl-gap { margin: 12px 0; }
.pager { display: flex; gap: 4px; justify-content: center; flex-wrap: wrap; }
.pager a { display: inline-block; padding: 6px 12px; border-radius: 6px; font-size: 13px; text-decoration: none; background: #f1f5f9; color: #33415c; }
.pager a:hover { background: #e2e8f0; text-decoration: none; }
.pager a.on { background: #2563d9; color: #fff; }

/* 协议/政策等长文排版（与关于本站一致的宽度，不再单独收窄） */
.legal-prose { line-height: 1.8; font-size: 14.5px; color: #33415c; }
.legal-prose h3 { margin-top: 1.4em; font-size: 16px; color: #0f172a; }
.legal-prose p { margin: .6em 0; }
.legal-prose ul { padding-left: 22px; }
.legal-prose .legal-date { color: #7a8699; font-size: 13px; }

/* 页脚顶部布局 */
.foot-top { display: flex; flex-wrap: wrap; gap: 24px; justify-content: space-between; align-items: flex-start; padding-bottom: 20px; }
.foot-brand-name { color: #fff; font-weight: 700; font-size: 16px; margin-bottom: 8px; }
.foot-brand-desc { font-size: 13px; color: #64748b; max-width: 320px; line-height: 1.6; margin: 0; }
.foot-cols2 { display: flex; gap: 60px; flex-wrap: wrap; }

/* HTTP响应时间线（curltimeline）图表 */
.tl-row { display: flex; align-items: center; gap: 8px; }
.tl-name { width: 120px; font-size: 13px; flex-shrink: 0; }
.tl-track { flex: 1; background: #f1f5f9; border-radius: 4px; height: 20px; overflow: hidden; }
.tl-fill { height: 100%; border-radius: 4px; }
.tl-fill.c0 { background: #3b82f6; } .tl-fill.c1 { background: #10b981; } .tl-fill.c2 { background: #f59e0b; }
.tl-fill.c3 { background: #ef4444; } .tl-fill.c4 { background: #8b5cf6; }
.tl-ms { width: 60px; text-align: right; font-size: 13px; flex-shrink: 0; }

/* 域名授权弹窗（网站体检未授权时） */
.auth-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,.6); z-index: 9999; display: flex; align-items: center; justify-content: center; }
.auth-modal { background: #fff; border-radius: 16px; padding: 32px; max-width: 420px; width: 90%; text-align: center; }
.auth-modal h3 { margin: 0 0 12px; font-size: 18px; color: #0f172a; }
.auth-modal p { color: #5b6b80; font-size: 14px; margin: 0 0 20px; line-height: 1.6; }
.auth-modal .btn { display: inline-block; padding: 10px 28px; border-radius: 8px; text-decoration: none; color: #fff; }
.auth-modal-cancel { margin-top: 0px; background: none; border: none; color: #64748b; cursor: pointer; font-size: 13px; }

/* 问题反馈（用户中心） */
.fb-item { border: 1px solid #e6ebf3; border-radius: 10px; padding: 16px 18px; margin-bottom: 14px; background: #fff; max-width: 1200px; }
.fb-item-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.fb-item-time { font-size: 12.5px; color: #64748b; }
.fb-badge { display: inline-block; padding: 2px 12px; border-radius: 20px; font-size: 12px; font-weight: 700; }
.fb-badge.s0 { background: #fff7ed; color: #c2410c; }
.fb-badge.s1 { background: #ecfdf5; color: #047857; }
.fb-badge.s2 { background: #f1f5f9; color: #64748b; }
.fb-content { font-size: 14px; color: #33415c; white-space: pre-wrap; word-wrap: break-word; }
.fb-type { font-size: 12.5px; color: #64748b; }

/* 用户中心卡片内分隔与小标题 */
.uc-divider { border: none; border-top: 1px solid #e6ebf3; margin: 20px 0; }
.uc-subtitle { font-size: 16px; margin-bottom: 12px; color: #33415c; }

/* 域名授权页 */
.da-desc { color: #5b6b80; font-size: 14px; margin-bottom: 20px; }
.u-mb12 { margin-bottom: 12px; }
.radio-pills { display: flex; gap: 8px; flex-wrap: wrap; }
.radio-pill { display: flex; align-items: center; gap: 6px; padding: 8px 14px; border: 1px solid #d7dee9; border-radius: 8px; cursor: pointer; font-size: 13px; margin: 0; }
/* :has() 降级（Safari<15.4/Chrome<105/FF<121不生效）：app.js change委托同步切换 .on 类兜底，新旧浏览器视觉一致 */
.radio-pill:has(input:checked), .radio-pill.on { border-color: #2563d9; background: #f0f6ff; color: #2563d9; }
.btn-md { height: 40px; padding: 0 24px; font-size: 14px; margin-top: 4px; }
.btn-sm { height: 36px; padding: 0 20px; font-size: 13px; }
.da-instr { margin-top: 16px; background: #f0f9ff; border: 1px solid #bae6fd; border-radius: 8px; padding: 16px; max-width: 1200px; }
.da-instr-title { margin: 0 0 8px; color: #0369a1; font-size: 14px; }
.da-instr-text { white-space: pre-wrap; font-size: 13px; margin: 0 0 12px; word-break: break-all; }
.da-verify-msg { margin-left: 12px; font-size: 13px; }
.da-list-title { margin: 24px 0 12px; }
.mini-btn-danger { color: #dc2626; border-color: #fecaca; }
.mini-btn-danger:hover { color: #b91c1c; border-color: #dc2626; }

/* 用户中心快捷入口 */
.uc-quick { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; max-width: 860px;}
.uc-quick-item { display: flex; align-items: center; gap: 10px; padding: 14px 16px; border: 1px solid #e6ebf3; border-radius: 10px; color: #33415c; font-size: 14px; text-decoration: none; transition: all .15s; }
.uc-quick-item:hover { border-color: #2563d9; color: #2563d9; background: #f0f6ff; text-decoration: none; }
.uc-quick-item i { color: #2563d9; width: 20px; text-align: center; }
@media (max-width: 640px) { .uc-quick { grid-template-columns: 1fr; } }

/* 杂项补充 */
.u-block { display: inline-block; }
.fp-copy { cursor: pointer; }
.fp-copy:hover { color: #2563d9; }

/* 用户中心反馈追问表单 */
.fb-follow-form { margin-top: 12px; }
.fb-follow-input { width: 100%; border: 1px solid #e6ebf3; border-radius: 8px; padding: 10px 12px; font-size: 13.5px; outline: none; resize: vertical; box-sizing: border-box; }
.fb-follow-input:focus { border-color: #64a1f0; }
.fb-follow-msg { margin-left: 10px; font-size: 13px; }

/* ---------- JS渲染组件类（替代模板内联样式） ---------- */
.t-red { color: #dc2626; }
.t-green { color: #16a34a; }
.t-amber { color: #d97706; }
.t-gray { color: #7a8699; }
.t-emerald { color: #047857; }
.t-crimson { color: #b91c1c; }
.u-ml10 { margin-left: 10px; }
.cp-click { cursor: pointer; }
.cp-click:hover { color: #2563d9; }

/* OG预览卡片 */
.og-card { border: 1px solid #dadde1; border-radius: 8px; overflow: hidden; max-width: 500px; margin: 10px 0; background: #fff; }
.og-card-img { height: 260px; background: #f0f2f5 center/cover no-repeat; }
.og-card-body { padding: 12px 16px; }
.og-card-site { font-size: 12px; color: #606770; text-transform: uppercase; }
.og-card-title { font-size: 16px; font-weight: 700; color: #1c1e21; margin: 4px 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.og-card-desc { font-size: 14px; color: #606770; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }

/* Base64图片预览 */
.b64-img { max-width: 300px; max-height: 200px; border: 1px solid #e6ebf3; border-radius: 8px; }

/* HTML实体速查表：列结构为「字符/命名实体/数字编码/说明」四列，非 kv-table 两列口径，
   用 #heTable 特异性覆盖 .kv-table td:first-child 的160px宽/灰色/nowrap，恢复字符列居中大字 */
#heTable { table-layout: fixed; } /* 固定列布局：首列64px字符列，其余均分，窄屏不再挤压换行 */
#heTable th { white-space: nowrap; }
#heTable td, #heTable th { overflow-wrap: break-word; }
#heTable td:first-child, #heTable th:first-child { width: 64px; color: inherit; white-space: normal; }
#heTable td.he-char { font-size: 20px; text-align: center; line-height: 1.2; }
#heTable td.mono { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
#heTable thead th { position: sticky; top: 0; z-index: 1; background: #f6f8fc; font-weight: 600; color: #5b6b80; font-size: 13.5px; border-bottom: 1px solid #e6ebf3; }
#heTable tbody tr:hover { background: #f6f9ff; }
@media (max-width: 640px) {
  #heTable td, #heTable th { padding: 8px; font-size: 13px; } /* 窄屏压缩单元格内边距，说明列不再挤换行 */
}
.he-click { cursor: pointer; } /* 实体速查行点击复制（ftools.js 动态加类，零内联样式） */


/* SSH密钥/命令输出 */
.sshkey-pre { margin: 0; white-space: pre-wrap; word-break: break-all; }

/* 安全头生成器表单 */
.shg-item { margin: 8px 0; padding: 10px; border: 1px solid #e6ebf3; border-radius: 8px; }
.shg-label { font-weight: 600; }
.shg-param { margin: 4px 0 0 24px; }
.shg-plabel { font-size: 13px; color: #5b6b80; }
.shg-select { font-size: 13px; }
.shg-input { width: auto; display: inline-block; height: 30px; margin: 0; }

/* Crontab可视化日历热力图 */
.cv-chart { display: flex; align-items: flex-end; gap: 2px; height: 120px; padding: 8px 12px; background: #f8fafc; border-radius: 8px; }
.cv-col { flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; }
.cv-bar { width: 100%; border-radius: 3px 3px 0 0; min-height: 4px; }
.cv-hr { font-size: 10px; color: #64748b; margin-top: 4px; }
/* 小屏24列挤压：隔列隐藏小时标签防重叠 */
@media (max-width: 480px) {
  .cv-hr { font-size: 8px; }
  .cv-col:nth-child(even) .cv-hr { visibility: hidden; }
}
.cv-legend { padding: 8px 12px; font-size: 12px; color: #64748b; }

/* 外链发布隐藏iframe容器（离屏渲染，不可见） */
.bl-framebox { position: absolute; left: -9999px; top: 0; width: 1px; height: 1px; overflow: hidden; }
.bl-frame { width: 1px; height: 1px; border: 0; }

/* ---------- 尺寸/间距工具类（内联样式清理配套） ---------- */
.u-w100 { width: 100%; }
.u-w50 { width: 50%; }
.u-w62 { width: 62%; }
.u-w38 { width: 38%; }
.u-w76 { width: 76%; }
.u-w24 { width: 24%; }
.u-w90 { width: 90px; }
.u-w80 { width: 80px; }
.u-w170 { width: 170px; }
.u-w220 { width: 220px; }
.u-w130 { width: 130px; }
.u-wauto { width: auto; }
.u-m0 { margin: 0; }
.u-mt10 { margin-top: 10px; }
.u-mt18 { margin-top: 18px; }
.u-mb8 { margin-bottom: 8px; }
.u-m16-8 { margin: 16px 0 8px; }
.u-m4-12 { margin: 4px 0 12px; }
.u-m4-0 { margin: 4px 0; }
.u-m20-10 { margin: 20px 0 10px; }
.u-fs12 { font-size: 12px; }
.u-fs18 { font-size: 18px; }
.lb-title { display: block; margin-bottom: 4px; font-weight: 600; }
.lb-block { display: block; margin: 8px 0 4px; }
.lb-block-b { display: block; margin: 8px 0 4px; font-weight: 600; }
.fx1-280 { flex: 1; min-width: 280px; }
.fx1-200 { flex: 1; min-width: 200px; }
.u-row12w { display: flex; gap: 12px; flex-wrap: wrap; }
.pre-wrap { white-space: pre-wrap; }

/* ---------- 问题反馈往来消息流（用户中心/后台共用） ---------- */
.fb-thread { margin-top: 12px; border-top: 1px dashed #e2e8f0; padding-top: 14px; }
.fb-msg { display: flex; gap: 10px; margin-bottom: 12px; align-items: flex-start; }
.fb-ava { flex-shrink: 0; width: 34px; height: 34px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 13px; font-weight: 700; color: #fff; }
.fb-msg.user .fb-ava { background: #2563d9; }
.fb-msg.admin .fb-ava { background: #16a34a; }
.fb-msg-main { flex: 0 1 auto; min-width: 0; max-width: calc(100% - 44px); }
.fb-msg-meta { font-size: 12.5px; color: #64748b; margin-bottom: 4px; }
.fb-msg-meta b { color: #33415c; font-size: 13px; margin-right: 8px; }
.fb-msg-body { background: #f8fafc; border: 1px solid #eef2f7; border-radius: 4px 10px 10px 10px; padding: 10px 14px; font-size: 13.5px; color: #33415c; white-space: pre-wrap; word-wrap: break-word; overflow-wrap: anywhere; line-height: 1.6; }
.fb-msg.admin .fb-msg-body { background: #f0fdf4; border-color: #dcfce7; }

/* ---------- SEO综合评分维度卡 ---------- */
.seo-dims { margin-top: 14px; }
.seo-dim { border: 1px solid #e6ebf3; border-radius: 10px; padding: 14px 16px; margin-bottom: 12px; background: #fbfcfe; }
.seo-dim.skip { opacity: .65; }
.seo-dim-head { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.seo-dim-name { font-size: 15px; font-weight: 700; color: #0f172a; }
.seo-dim-name em { font-style: normal; font-size: 12px; color: #64748b; font-weight: 400; margin-left: 6px; }
.seo-dim-score { font-size: 14px; color: #33415c; white-space: nowrap; }
.seo-dim-score b { display: inline-block; width: 22px; height: 22px; line-height: 22px; text-align: center; border-radius: 6px; color: #fff; font-size: 12px; margin-left: 6px; }
.seo-dim-bar { height: 8px; background: #eef1f6; border-radius: 4px; overflow: hidden; margin: 10px 0 2px; }
.seo-dim-bar i { display: block; height: 100%; width: 0; border-radius: 4px; transition: width .4s ease; }
.seo-dim-bar i.gA, .seo-dim-score b.gA { background: #16a34a; }
.seo-dim-bar i.gB, .seo-dim-score b.gB { background: #65a30d; }
.seo-dim-bar i.gC, .seo-dim-score b.gC { background: #d97706; }
.seo-dim-bar i.gD, .seo-dim-score b.gD { background: #ea580c; }
.seo-dim-bar i.gF, .seo-dim-score b.gF { background: #dc2626; }
.seo-dim-chks { margin-top: 10px; }
.seo-dim-chks summary { cursor: pointer; font-size: 13px; color: #2563d9; font-weight: 600; padding: 4px 0; }
.seo-dim-chks .chk-item { margin-top: 8px; }

/* ---------- 友情链接检测结果表（chinaz风格） ---------- */
.fl-table { margin-top: 6px; table-layout: fixed; } /* 最小宽统一走全局 table 规则 */
.fl-table th { white-space: nowrap; }
.fl-table td { vertical-align: middle; }
.fl-url a { color: #2563d9; font-weight: 600; font-size: 13px; }
.fl-age { color: #33415c; white-space: nowrap; }
.fl-score { white-space: nowrap; }
.fl-score b { font-size: 15px; color: #0f172a; }
.fl-grade { display: inline-block; min-width: 20px; text-align: center; padding: 1px 7px; border-radius: 5px; color: #fff; font-size: 12px; font-weight: 700; }
.fl-grade.gA { background: #16a34a; }
.fl-grade.gB { background: #65a30d; }
.fl-grade.gC { background: #d97706; }
.fl-grade.gD { background: #ea580c; }
.fl-grade.gF { background: #dc2626; }
.fl-rel-tag { display: inline-block; padding: 1px 8px; border-radius: 4px; background: #fff7ed; color: #c2410c; font-size: 12px; white-space: nowrap; }
.fl-retry { color: #2563d9; font-size: 13px; cursor: pointer; text-decoration: underline; white-space: nowrap; }

/* 域名授权：验证文件下载按钮（前台无.btn基类，独立成样） */
.da-dl-btn { display: inline-flex; align-items: center; height: 36px; padding: 0 18px; margin-left: 10px; vertical-align: middle; border: 1px solid #d1d5db; border-radius: 8px; background: #fff; color: #374151; font-size: 13px; cursor: pointer; transition: all .15s; }
.da-dl-btn:hover { border-color: #2563d9; color: #2563d9; }

/* 友链检测结果表：固定布局+全百分比列宽，任意容器宽度下比例一致、检测中不跳动；除网址列外全部居中；窄屏保底640px走横向滚动 */
.fl-table th:nth-child(1), .fl-table td:nth-child(1) { width: 5%; text-align: center; }
.fl-table th:nth-child(2), .fl-table td:nth-child(2) { width: 30%; }
.fl-table th:nth-child(3), .fl-table td:nth-child(3) { width: 11%; text-align: center; }
.fl-table th:nth-child(4), .fl-table td:nth-child(4) { width: 14%; text-align: center; }
.fl-table th:nth-child(5), .fl-table td:nth-child(5) { width: 12%; text-align: center; }
.fl-table th:nth-child(6), .fl-table td:nth-child(6) { width: 10%; text-align: center; }
.fl-table th:nth-child(7), .fl-table td:nth-child(7) { width: 18%; text-align: center; }
.fl-table td.fl-url { text-align: left; }

/* 工具页底部自动追加的相关工具内链区块（路由层注入） */
.rel-wrap { margin-top: 18px; }
.rel-h { margin: 0 0 12px; font-size: 16px; color: #0f172a; }
.rel-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; }
.rel-grid a { display: block; padding: 10px 14px; border: 1px solid #eef2f7; border-radius: 10px; text-decoration: none; transition: border-color .15s, box-shadow .15s; }
.rel-grid a:hover { border-color: #2563d9; box-shadow: 0 2px 8px rgba(37, 99, 217, .08); }
/* FAQ可见区块（GEO：与FAQPage JSON-LD同源同文） */
.faq-wrap { margin-top: 18px; }
.faq-item { border-bottom: 1px solid #eef1f6; padding: 10px 0; }
.faq-item:last-child { border-bottom: 0; padding-bottom: 2px; }
.faq-item summary { cursor: pointer; font-weight: 600; color: #0f172a; font-size: 14.5px; line-height: 1.6; }
.faq-item summary:hover { color: #2563d9; }
.faq-item p { margin: 8px 0 2px; color: #475569; font-size: 13.5px; line-height: 1.75; }
.rel-grid b { display: block; font-size: 14px; color: #0f172a; margin-bottom: 3px; }
.rel-grid span { display: block; font-size: 12.5px; color: #64748b; line-height: 1.5; }
@media (max-width: 480px) { .rel-grid { grid-template-columns: 1fr; } }

/* 全站统一"查询中"状态：呼吸圆点+文字（不使用省略号字符） */
.fl-pending { display: inline-flex; align-items: center; gap: 6px; color: #64748b; font-size: 12.5px; white-space: nowrap; }
.ld-state { display: inline-flex; align-items: center; gap: 6px; }
.fl-dot { width: 7px; height: 7px; border-radius: 50%; background: #2563d9; flex-shrink: 0; animation: flPulse 1.1s ease-in-out infinite; }
/* 按钮内圆点跟随按钮文字颜色（主色按钮上蓝点不可见） */
.fl-dot.cur { background: currentColor; display: inline-block; vertical-align: middle; margin-right: 6px; }
@keyframes flPulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: .35; transform: scale(.7); } }
/* dl-badge.doing 同步加呼吸效果（等待/检测中徽章不再是静止的） */
@media (prefers-reduced-motion: reduce) {
  .fl-dot, .dl-badge.doing { animation: none; }
}

/* ---------- GEO工具 ---------- */
/* AI爬虫robots规则生成器：预设按钮比常规按钮紧凑，推荐策略蓝色强调 */
.btn-row button.ar-preset { height: 36px; padding: 0 14px; font-size: 13px; }
.btn-row button.ar-preset[data-preset="smart"] { background: #eff6ff; color: #2563d9; font-weight: 600; }
/* 爬虫勾选网格：自适应多列，窄屏自然堆叠 */
.ai-bot-grid { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0 14px; }
.ai-bot-grid .chk {
  flex: 1 1 280px; max-width: 100%; padding: 10px 12px; cursor: pointer;
  border: 1px solid #e2e8f0; border-radius: 8px; font-size: 13.5px; line-height: 1.5;
}
.ai-bot-grid .chk:hover { border-color: #64a1f0; }
.ai-bot-grid .chk input { vertical-align: -2px; margin-right: 6px; }
.ai-bot-grid .chk .muted { font-size: 12px; }
/* ---------- 用户中心钱包 ---------- */
.uw-balance { display: flex; flex-direction: column; gap: 8px; }
.uw-amount { font-size: 16px; color: #475569; }
.uw-amount b { font-size: 34px; color: #0f172a; margin-right: 4px; }
.uc-balance-link { color: #2563d9; font-weight: 700; }
.uw-amounts { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 16px; }
.uw-chip {
  min-width: 88px; height: 44px; padding: 0 16px; border: 1px solid #d7dee9; border-radius: 8px;
  background: #fff; color: #33415c; font-size: 15px; font-weight: 600; cursor: pointer;
}
.uw-chip:hover { border-color: #64a1f0; color: #2563d9; }
.uw-chip.on { border-color: #2563d9; background: #eff6ff; color: #2563d9; }
.uw-custom { max-width: 240px; margin-bottom: 16px; }
.uw-table td, .uw-table th { font-size: 13px; }
.uw-table td:first-child { width: auto; white-space: nowrap; }
.uw-time { color: #64748b; white-space: nowrap; }
.uw-in { color: #16a34a; font-weight: 700; white-space: nowrap; }
.uw-out { color: #dc2626; font-weight: 700; white-space: nowrap; }
.uw-pager { display: flex; align-items: center; gap: 12px; margin-top: 14px; }
/* 钱包/充值引导遮罩内按钮 */
.auth-modal .btn.u-block { display: block; width: 100%; text-align: center; }
/* AI曝光度查询结果：仪表盘/趋势与平台图/引用页表 */
.vs-dash { display: flex; gap: 20px; flex-wrap: wrap; padding: 6px 0 16px; }
.vs-gauge { flex: 0 0 210px; text-align: center; }
.vs-gauge svg { width: 100%; max-width: 200px; }
.vs-g-bg { fill: none; stroke: #e6ebf2; stroke-width: 10; stroke-linecap: round; }
.vs-g-val { fill: none; stroke-width: 10; stroke-linecap: round; }
.vs-gauge.g1 .vs-g-val { stroke: #16a34a; } .vs-gauge.g2 .vs-g-val { stroke: #2563d9; }
.vs-gauge.g3 .vs-g-val { stroke: #d97706; } .vs-gauge.g4 .vs-g-val { stroke: #dc2626; }
.vs-g-num { margin-top: -46px; font-size: 13px; color: #64748b; }
.vs-g-num b { font-size: 34px; color: #0f172a; margin-right: 2px; }
.vs-g-grade { font-size: 20px; font-weight: 700; color: #0f172a; margin-bottom: 40px; }
.vs-g-note {
  margin: 0; padding: 8px 10px; border-radius: 8px; background: #eff6ff;
  color: #35507a; font-size: 12.5px; line-height: 1.6; text-align: left;
}
.vs-stats { flex: 0 0 100px; display: flex; flex-direction: column; gap: 18px; justify-content: center; }
.vs-stat b { display: block; font-size: 26px; color: #0f172a; }
.vs-stat b i { font-size: 14px; color: #64748b; font-style: normal; }
.vs-stat span { color: #64748b; font-size: 12.5px; }
.vs-charts { flex: 1 1 320px; min-width: 280px; display: flex; flex-direction: column; gap: 16px; }
.vs-chart { width: 100%; min-width: 0; }
.vs-chart-t { color: #5b6b80; font-size: 12.5px; font-weight: 600; margin-bottom: 6px; }
.vs-chart svg { width: 100%; height: 86px; display: block; }
/* 图表绘制区：左侧Y轴刻度 + 右侧SVG画布（刻度像素位置与viewBox坐标1:1对齐，高度固定86px） */
.vs-plot { display: flex; gap: 6px; }
.vs-yaxis { flex: 0 0 32px; position: relative; height: 86px; font-size: 10px; color: #94a3b8; }
.vs-yaxis span { position: absolute; right: 0; transform: translateY(-50%); line-height: 1; white-space: nowrap; }
.vs-yaxis .y2 { top: 12px; } .vs-yaxis .y1 { top: 40px; } .vs-yaxis .y0 { top: 68px; }
.vs-yaxis.bar .y2 { top: 16px; } .vs-yaxis.bar .y1 { top: 42px; } .vs-yaxis.bar .y0 { top: 68px; }
.vs-canvas { flex: 1 1 auto; min-width: 0; position: relative; }
/* 悬停提示覆盖层：SVG preserveAspectRatio=none会拉伸变形，title挂在等分HTML单元格上 */
.vs-hover { position: absolute; top: 0; left: 0; right: 0; height: 68px; display: flex; z-index: 1; }
.vs-hover span { flex: 1 1 0; min-width: 0; cursor: default; }
.vs-axis { stroke: #eef1f6; stroke-width: 1; }
.vs-line { fill: none; stroke: #3b82f6; stroke-width: 2; }
.vs-b0 { fill: #ec4899; } .vs-b1 { fill: #34d399; } .vs-b2 { fill: #facc15; }
.vs-xlabels { display: flex; justify-content: space-between; color: #94a3b8; font-size: 11px; margin-top: 4px; }
.vs-legend { margin-top: 4px; }
.vs-legend span { margin-right: 12px; color: #64748b; font-size: 11.5px; }
.vs-legend span:before { content: ""; display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 4px; vertical-align: 0; }
.vs-lg0:before { background: #ec4899; } .vs-lg1:before { background: #34d399; } .vs-lg2:before { background: #facc15; }
.vs-tabs { margin: 10px 0 8px; }
.vs-filters { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 12px; }
.vs-filters .vs-search { flex: 0 1 260px; margin-bottom: 0; }
.vs-chips { display: flex; gap: 8px; flex-wrap: wrap; }
.vs-chips button {
  padding: 6px 14px; border: 1px solid #d7dee9; border-radius: 999px; background: #fff;
  color: #475569; font-size: 12.5px; cursor: pointer;
}
.vs-chips button:hover { border-color: #64a1f0; color: #2563d9; }
.vs-chips button.on { background: #2563d9; border-color: #2563d9; color: #fff; }
.vs-table th { background: #f8fafc; color: #5b6b80; font-weight: 600; text-align: left; padding: 9px 12px; font-size: 13px; }
.vs-table td { padding: 10px 12px; }
.vs-cell-main { word-break: break-all; }
.vs-cell-main a { color: #2563d9; text-decoration: none; }
.vs-cell-main a:hover { text-decoration: underline; }
.vs-cell-n { color: #2563d9; font-weight: 700; white-space: nowrap; }
/* 引用平台栏右端对齐 */
.vs-table .vs-cell-pl { text-align: right; }
.vs-cell-pl .vs-pbadge { margin: 0 0 2px 6px; }
.vs-pbadge {
  display: inline-block; margin: 0 6px 2px 0; padding: 2px 9px; border-radius: 4px;
  background: #fee2e2; color: #b91c1c; font-size: 11.5px; font-weight: 600;
}
.vs-pager { display: flex; align-items: center; gap: 12px; margin-top: 12px; }
.vs-answer-wrap { margin-top: 14px; }
.vs-answer-wrap summary { cursor: pointer; color: #5b6b80; font-size: 13px; }
.vs-answer-wrap summary:hover { color: #2563d9; }
.vs-plat { margin-top: 12px; }
.vs-plat b { color: #0f172a; font-size: 13.5px; }
.vs-k { display: inline-block; margin-left: 6px; padding: 1px 8px; border-radius: 4px; font-size: 11.5px; font-weight: 600; }
.vs-k.ok { background: #ecfdf5; color: #047857; }
.vs-k.no { background: #fef2f2; color: #b91c1c; }
.vs-answer-b { margin-top: 6px; padding: 10px 12px; background: #f8fafc; border-radius: 8px; color: #475569; font-size: 13px; line-height: 1.75; }

/* GEO排名查询：本站命中行高亮 */
.rk-hit td { background: #ecfdf5; }
.rk-hit .fa-location-dot { color: #047857; font-size: 12px; }
/* GEO排名结果概要条（仅名次与摘要，不含得分/趋势） */
.rk-sum { display: flex; flex-wrap: wrap; gap: 10px; margin: 4px 0 8px; }
.rk-sum-item {
  flex: 1 1 140px; min-width: 0; padding: 10px 14px; text-align: center;
  background: #f6f8fc; border: 1px solid #e6ebf3; border-radius: 10px; color: #64748b; font-size: 12.5px;
}
.rk-sum-item b { display: block; margin-bottom: 2px; color: #1d4ed8; font-size: 17px; overflow-wrap: break-word; }
.rk-sum-topic b { font-size: 14px; line-height: 1.5; }
/* 图表悬停刻度提示：data-tip 纯CSS浮层（原生title反应慢不用），瞬时显示 */
.vs-hover span { position: relative; }
.vs-hover span[data-tip]:hover::after {
  content: attr(data-tip); position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%);
  margin-bottom: 8px; padding: 5px 10px; border-radius: 6px; background: #1e293b; color: #fff;
  font-size: 12px; line-height: 1.5; white-space: nowrap; z-index: 5; pointer-events: none;
}
/* URL自动抓取行：输入框+抓取按钮同行，窄屏自然收缩 */
.geo-grab { display: flex; gap: 8px; margin: 0 0 12px; }
.geo-grab .flt { flex: 1 1 auto; min-width: 0; margin-bottom: 0; }
.geo-grab .mini-btn { flex: 0 0 auto; height: 44px; padding: 0 18px; font-size: 14px; }
/* AI工具标识与合规提示 */
.ai-badge {
  display: inline-block; vertical-align: 3px; margin-left: 6px; padding: 2px 8px;
  border-radius: 999px; background: #eff6ff; color: #2563d9; font-size: 12px; font-weight: 700; line-height: 1.6;
}
/* 导航下拉/目录页AI小角标 */
.ai-tag {
  display: inline-block; vertical-align: 1px; margin-left: 5px; padding: 0 5px;
  border-radius: 4px; background: #eff6ff; color: #2563d9;
  font-size: 10.5px; font-weight: 700; font-style: normal; line-height: 16px;
}
.submenu-grid a.on .ai-tag, .submenu-grid a:hover .ai-tag { background: rgba(37, 99, 217, .18); color: #7dd3fc; }
.tool-card h3 .ai-tag { vertical-align: 2px; }
/* AI工具额度角标：奖励次数+余额（消费顺序：奖励次数→按量计费） */
.ai-quota {
  display: inline-block; margin: 0 0 10px; padding: 6px 12px; border-radius: 8px;
  background: #f0fdf4; border: 1px solid #bbf7d0; color: #15803d; font-size: 13px; line-height: 1.5;
}
.ai-quota:empty { display: none; }
.ai-quota.warn { background: #fffbeb; border-color: #fde68a; color: #b45309; }
.ai-quota a { color: inherit; font-weight: 700; text-decoration: underline; }
.ai-note {
  margin: 0 0 14px; padding: 10px 12px; border-radius: 8px; border: 1px solid #fde68a;
  background: #fffbeb; color: #92400e; font-size: 13px; line-height: 1.7;
}

/* ================= GIF动画制作工具（f_gif.php / gifmaker.js 专用，类名统一 gf- 前缀） ================= */

/* 帧列表容器：兼作拖拽投放区 */
.gf-frames {
  margin: 14px 0 4px; padding: 12px;
  border: 2px dashed #d7dee9; border-radius: 10px;
  background: #fafbfe; font-size: 0;      /* 消除 inline-block 间隙 */
  min-height: 96px;
}
.gf-frames-empty { text-align: center; }
.gf-empty { font-size: 13.5px; margin: 26px 8px; }
/* 拖拽悬停态 */
.gf-drop-on { border-color: #2563d9; background: #f0f6ff; }

/* 单帧卡片 */
.gf-frame {
  position: relative; display: inline-block; vertical-align: top;
  width: 158px; margin: 0 10px 12px 0; padding: 8px;
  background: #fff; border: 1px solid #e3e9f2; border-radius: 10px;
  font-size: 13px; text-align: center;
  box-shadow: 0 1px 3px rgba(16, 32, 64, .06);
}
/* 序号角标 */
.gf-num {
  position: absolute; top: 12px; left: 12px; z-index: 2;
  min-width: 20px; height: 20px; line-height: 20px; padding: 0 5px;
  border-radius: 10px; background: rgba(15, 23, 42, .68); color: #fff;
  font-size: 12px; font-weight: 700; text-align: center;
}
.gf-thumb {
  display: block; width: 100%; height: 96px; margin: 0 auto 8px;
  object-fit: contain; background: #f4f6fa; border-radius: 6px;
}
/* 帧操作按钮行 */
.gf-ops { display: flex; justify-content: center; margin-bottom: 8px; }
.gf-ops .mini-btn { margin: 0 3px; padding: 2px 8px; font-size: 12px; }
/* 单帧延迟输入 */
.gf-frame-delay { height: 34px; margin: 0; padding: 0 8px; font-size: 12.5px; text-align: center; }
.gf-frame-delay::-webkit-input-placeholder { color: #9aa7b8; }
.gf-frame-delay::-moz-placeholder { color: #9aa7b8; }
.gf-frame-delay:-ms-input-placeholder { color: #9aa7b8; }

/* 帧数统计 */
.gf-count { margin: 2px 0 12px; }

/* 生成中按钮态 */
.gf-busy { opacity: .55; cursor: wait; }

/* 预览与输出信息 */
.gf-preview {
  display: block; max-width: 100%; margin: 16px auto 6px; padding: 8px;
  border: 1px solid #e3e9f2; border-radius: 10px; background: #f4f6fa;
}
.gf-info { margin: 4px 0 0; }

/* 下载链接：外观对齐 .btn-row .primary 按钮（float布局与其他按钮同行） */
.gf-dl {
  float: left; display: inline-block; margin: 0 10px 10px 0; padding: 0 26px;
  height: 46px; line-height: 46px; border-radius: 8px;
  background: #2563d9; color: #fff; font-size: 15px; text-decoration: none; cursor: pointer;
}
.gf-dl:hover { color: #fff; opacity: .9; }
.gf-dl.disabled { opacity: .45; cursor: not-allowed; pointer-events: none; }

/* ================= AI Logo设计（f_ailogo.php） ================= */
.lg-out { font-size: 0; margin-top: 6px; }
/* AI生成内容合规提示条（显式标识）：图片类工具用“请核验后使用”文案，文本类工具由JS追加“请人工审核” */
.ai-gen-note {
  margin: 10px 0 2px; padding: 6px 10px; border-radius: 6px;
  background: #fffbeb; border: 1px solid #fde68a; color: #92400e;
  font-size: 12.5px; line-height: 1.6;
}
/* AI工具textarea字数计数（与后端$maxMap上限同步） */
.ta-count { font-size: 12px; margin: 4px 0 0; text-align: right; color: #64748b; }
.lg-item {
  display: inline-block; vertical-align: top; width: 300px; margin: 0 16px 16px 0;
  border: 1px solid #e3e9f2; border-radius: 12px; background: #fff; overflow: hidden;
  box-shadow: 0 1px 3px rgba(16, 32, 64, .06);
}
.lg-item img { display: block; width: 100%; height: 300px; object-fit: contain; background: #f4f6fa; }
.lg-item figcaption { padding: 10px; text-align: center; font-size: 13px; }
.lg-item figcaption .mini-btn { text-decoration: none; }

/* ================= 用户中心 · AI文章（user_articles.php，类名统一 ua- 前缀） ================= */
.ua-h3 { font-size: 16px; color: #0f172a; margin: 18px 0 10px; }

/* 关键词/标题候选chips：点击填入对应输入框 */
.ua-check { display: block; margin: 4px 0 10px; font-size: 14px; color: #33415c; cursor: pointer; }
.ua-check input { vertical-align: -2px; margin-right: 6px; }
.ua-tpl-custom { margin: 0 0 14px; }
.ua-filter { display: flex; gap: 10px; align-items: center; margin-bottom: 12px; flex-wrap: wrap; }
.ua-filter .flt { width: 180px; height: 38px; margin-bottom: 0; }
.ua-filter .mini-btn { height: 38px; margin-left: 0; padding: 0 14px; font-size: 13px; box-sizing: border-box; }
.ua-table td, .ua-table th { font-size: 13.5px; }
.ua-table td:first-child { width: auto; white-space: normal; color: #0f172a; }
/* 任务队列勾选列（仅已完成/失败行有勾选框） */
.ua-chk-col { width: 34px; text-align: center; }
.ua-chk-col input[type=checkbox] { vertical-align: middle; cursor: pointer; }
.ua-title-cell { max-width: 320px; word-break: break-all; }
.ua-ops .mini-btn, .ua-ops a.mini-btn { margin: 0 4px 4px 0; text-decoration: none; }
.ua-good { color: #16a34a; }
.ua-bad { color: #dc2626; }
.ua-tag {
  display: inline-block; margin-left: 4px; padding: 0 6px; border-radius: 4px;
  background: #eff6ff; color: #2563d9; font-size: 11.5px; font-weight: 700; line-height: 18px;
}
.ua-url { max-width: 220px; word-break: break-all; font-size: 12.5px; }
.ua-secret { white-space: nowrap; }
.ua-secret .mini-btn { margin-left: 4px; }
.ua-tpl-list { margin-bottom: 8px; }
.ua-tpl-item { border: 1px solid #e6ebf3; border-radius: 10px; padding: 14px 16px; margin-bottom: 10px; background: #fbfcfe; }
.ua-tpl-head { margin-bottom: 6px; color: #0f172a; }
.ua-tpl-ins { margin: 0 0 8px; font-size: 13px; line-height: 1.7; max-height: 84px; overflow: hidden; }
.ua-tpl-form, .ua-site-form { border-top: 1px dashed #e3e9f2; padding-top: 16px; margin-top: 16px; }
.ua-danger:hover { border-color: #dc2626; color: #dc2626; }
/* 文章预览弹层：加宽加高，正文区可滚动 */

/* AI文章中心（队列版）：通用宽弹层 / 批量操作 / 任务队列 */
.ua-modal { max-width: 720px; width: 94%; max-height: 88vh; text-align: left; display: flex; flex-direction: column; overflow: hidden; }
/* 宽体弹层（文章编辑等长内容场景） */
.ua-modal-wide { max-width: 1000px; width: 96%; }
.ua-modal h3 { text-align: left; word-break: break-all; flex: 0 0 auto; }
.ua-modal > p, .ua-modal > label, .ua-modal > .form-grid, .ua-modal > textarea, .ua-modal > input, .ua-modal > select, .ua-modal > .btn-row { flex: 0 0 auto; }
.ua-modal textarea, .ua-modal input.flt, .ua-modal select.flt { width: 100%; box-sizing: border-box; }
.ua-modal .btn-row { margin-top: 12px; }
.ua-modal .auth-modal-cancel { margin-left: 8px; }
.ua-edit-scroll { overflow-y: auto; overflow-x: hidden; flex: 1 1 auto; min-height: 0; padding-right: 4px; }
.ua-edit-scroll textarea { width: 100%; box-sizing: border-box; }
/* TinyMCE 弹层/对话框（链接、图片、预览、源码）与全屏容器挂在body下，皮肤默认 z-index：
   外层 sink 容器 .tox-tinymce-aux 仅 1300，形成层叠上下文——内部 wrap 再高也被压在 .auth-overlay(9999) 之下，
   编辑器iframe会拦截对话框点击（弹窗被文章表单遮挡的根因），必须抬升 sink 本身；全屏容器同理 */
.tox.tox-tinymce-aux { z-index: 10002 !important; }
.tox-tinymce.tox-fullscreen { z-index: 10003 !important; }
.tox .tox-dialog { border-radius: 12px; }
.ua-ck-col { width: 34px; text-align: center; }
.ua-ck-col input[type=checkbox] { width: 15px; height: 15px; cursor: pointer; vertical-align: middle; }
.ua-batch-no { font-size: 12px; }
/* 独立页面版文章中心：页内区块/整行选项/行点击 */
.ua-page { min-height: 320px; max-width: 1200px; }
.ua-fullrow { border: 1px solid #e6ebf3; border-radius: 10px; background: #fbfcfe; padding: 12px 16px; margin: 4px 0 14px; }
.ua-fullrow .ua-check { margin: 0 0 8px; }
.ua-fullrow .ua-sub { display: inline-flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.ua-row-link { cursor: pointer; }
.ua-row-link:hover td { background: #f6f9fe; }
.ua-task-open { color: #2563d9; text-decoration: none; font-weight: 600; }
.ua-task-open:hover { text-decoration: underline; }
.ua-btn-link { display: inline-block; text-decoration: none; }
.ua-secret-copy { white-space: nowrap; }
#uaKwResult, #uaTitleResult, #uaTaskResBox, #uaCopyBox { width: 100%; box-sizing: border-box; font-size: 13.5px; line-height: 1.7; background: #fbfcfe; }
#uaKwResult[readonly], #uaTitleResult[readonly], #uaTaskResBox[readonly] { color: #33415c; cursor: default; }

/* ================= AI用量价格页（user_usage_price.php，类名统一 up- 前缀） ================= */
.up-note { background: #f8fafd; border: 1px solid #e6ebf3; border-radius: 10px; padding: 12px 16px; font-size: 13.5px; color: #5b6b80; line-height: 1.8; margin: 0 0 18px; max-width: 1200px;}
.up-h3 { font-size: 16px; color: #0f172a; margin: 22px 0 10px; }
.up-table td, .up-table th { font-size: 13.5px; }
.up-price { color: #d97706; font-weight: 700; white-space: nowrap; }

/* ================= CMS插件下载页（page_plugins.php，类名统一 pl- 前缀） ================= */
.pl-steps { margin: 0 0 18px; padding-left: 22px; color: #33415c; font-size: 14.5px; line-height: 2; }
.pl-h2 { font-size: 17px; color: #0f172a; margin: 20px 0 12px; }
.pl-grid { font-size: 0; margin: 0 -6px; }
.pl-item {
  display: inline-block; vertical-align: top; width: 25%; padding: 0 6px 12px;
  font-size: 14px; text-align: center; box-sizing: border-box;
}
.pl-item b { display: block; margin-bottom: 8px; color: #0f172a; }
.pl-item .mini-btn { text-decoration: none; }

/* ---------- 移动端自适应（GIF工具/AI文章/插件页） ---------- */
@media (max-width: 640px) {
  /* GIF帧卡片两列 */
  .gf-frames { padding: 10px 8px; }
  .gf-frame { width: 48%; margin-right: 4%; }
  .gf-frame:nth-child(2n) { margin-right: 0; }
  .gf-thumb { height: 80px; }
  .gf-ops .mini-btn { padding: 2px 6px; }
  /* 按钮与下载链接占满整行 */
  .gf-dl { float: none; display: block; margin: 0 0 10px; text-align: center; }
  .gf-preview { margin: 12px auto 4px; }
  /* AI Logo结果单列 */
  .lg-item { width: 100%; margin-right: 0; }
  .lg-item img { height: auto; }
  /* AI文章：筛选控件收窄 */
  .ua-filter .flt { width: 140px; }
  .ua-modal { padding: 20px; }
  .pl-item { width: 50%; }
}
@media (max-width: 400px) {
  /* GIF超窄屏单列 */
  .gf-frame { width: 100%; margin-right: 0; }
  .pl-item { width: 100%; }
}

/* ================= AI文章服务宣传页（page_aiarticles.php，类名统一 pp- 前缀） ================= */
.pp-hero { background: linear-gradient(135deg, #0f172a 0%, #16233f 55%, #1a2c50 100%); color: #e6edf7; padding: 64px 0 56px; margin-bottom: 8px; }
.pp-kicker { display: inline-flex; align-items: center; gap: 8px; margin: 0 0 18px; padding: 5px 14px; border-radius: 999px; border: 1px solid rgba(125,211,252,.35); background: rgba(125,211,252,.1); color: #a8dcf8; font-size: 13px; font-weight: 600; letter-spacing: 1px; }
.pp-title { margin: 0 0 16px; font-size: 34px; line-height: 1.35; font-weight: 800; color: #fff; letter-spacing: .5px; }
.pp-sub { margin: 0 0 28px; max-width: 720px; font-size: 15.5px; line-height: 1.9; color: #b6c4d8; }
.pp-cta { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 30px; }
/* .pp-cta 前缀提升特异性：压过全局 .btn.primary（0,2,0），否则CTA被蓝底/窄内边距覆盖 */
.pp-cta .pp-cta-main { display: inline-block; background: linear-gradient(135deg, #0ea5e9, #6366f1); color: #fff; border: 0; padding: 12px 30px; font-size: 15px; font-weight: 700; border-radius: 10px; text-decoration: none; }
.pp-cta .pp-cta-main:hover { opacity: .92; color: #fff; text-decoration: none; }
.pp-cta .pp-cta-sub { display: inline-block; background: rgba(255,255,255,.08); color: #dbe6f3; border: 1px solid rgba(255,255,255,.22); padding: 12px 26px; font-size: 15px; border-radius: 10px; text-decoration: none; }
.pp-cta .pp-cta-sub:hover { background: rgba(255,255,255,.14); color: #fff; text-decoration: none; }
.pp-metrics { display: flex; flex-wrap: wrap; gap: 10px 34px; margin: 0; font-size: 13px; color: #8fa2b8; }
.pp-metrics b { font-size: 20px; color: #7dd3fc; margin-right: 4px; font-weight: 800; }
.pp-sec { padding: 44px 0 8px; }
.pp-h2 { margin: 0 0 8px; font-size: 24px; font-weight: 800; color: #0f172a; text-align: center; }
.pp-lead { margin: 0 auto 26px; max-width: 640px; text-align: center; font-size: 14.5px; color: #64748b; }
.pp-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 26px; }
.pp-card { background: #fff; border: 1px solid #e6ebf3; border-radius: 12px; padding: 22px 18px; transition: box-shadow .15s, transform .15s; }
.pp-card:hover { box-shadow: 0 10px 28px rgba(15,23,42,.08); transform: translateY(-2px); }
.pp-card-ic { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px; background: #eff6ff; color: #2563d9; font-size: 17px; margin-bottom: 12px; }
.pp-card h3 { margin: 0 0 8px; font-size: 15.5px; color: #0f172a; }
.pp-card p { margin: 0; font-size: 13px; line-height: 1.75; color: #64748b; }
.pp-steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; margin-bottom: 26px; counter-reset: ppstep; }
.pp-step { position: relative; background: #f8fafd; border: 1px solid #e6ebf3; border-radius: 12px; padding: 22px 18px 18px; }
.pp-step-n { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border-radius: 50%; background: linear-gradient(135deg, #0ea5e9, #6366f1); color: #fff; font-weight: 800; font-size: 14px; margin-bottom: 10px; }
.pp-step h3 { margin: 0 0 8px; font-size: 15.5px; color: #0f172a; }
.pp-step p { margin: 0; font-size: 13px; line-height: 1.75; color: #64748b; }
.pp-faq-sec .faq-wrap { margin: 0 auto 26px; }
.pp-faq-sec .faq-wrap .faq-item summary{ padding: 10px 0; }
.pp-bottom-cta { text-align: center; padding-bottom: 56px; }
.pp-bottom-cta .pp-cta { justify-content: center; margin-top: 22px; }
.pp-bottom-cta .pp-cta .pp-cta-sub { background: #f1f5f9; color: #33415c; border-color: #d7dee9; }
.pp-bottom-cta .pp-cta .pp-cta-sub:hover { background: #e5edf9; color: #2563d9; }
@media (max-width: 1024px) {
  .pp-grid, .pp-steps { grid-template-columns: repeat(2, 1fr); }
  .pp-title { font-size: 28px; }
}
@media (max-width: 600px) {
  .pp-hero { padding: 44px 0 40px; }
  .pp-title { font-size: 23px; }
  .pp-sub { font-size: 14px; }
  .pp-grid, .pp-steps { grid-template-columns: 1fr; }
  .pp-metrics { gap: 8px 20px; }
  .pp-cta-main, .pp-cta-sub { width: 100%; text-align: center; box-sizing: border-box; }
}

/* ===== 第七轮：站点连接编辑弹层 + 注销账号危险区 ===== */
.ua-edit-form { margin: 10px 0 14px; }
.ua-edit-form .flt-label { display: block; margin-top: 10px; }
.ua-edit-form .flt { width: 100%; box-sizing: border-box; }
.ua-edit-secret { background: #f8fafc; color: #64748b; cursor: not-allowed; }
.uc-danger-zone { background: #fef2f2; border: 1px solid #fecaca; border-radius: 10px; padding: 16px 18px; margin: 0 0 20px; max-width: 600px; }
.uc-danger-title { margin: 0 0 8px; font-size: 14.5px; font-weight: 700; color: #b91c1c; }
.uc-danger-list { margin: 0; padding-left: 20px; font-size: 13.5px; line-height: 1.9; color: #7f1d1d; }
.uc-danger-list a { color: #b91c1c; }
.uc-danger-btn { background: #dc2626; border-color: #dc2626; }
.uc-danger-btn:hover { background: #b91c1c; border-color: #b91c1c; }
.uc-pending-box { background: #fffbeb; border: 1px solid #fde68a; border-radius: 10px; padding: 16px 18px; max-width: 600px; }
.uc-pending-title { margin: 0 0 8px; font-size: 14.5px; font-weight: 700; color: #b45309; }
.uc-pending-box p { font-size: 13.5px; line-height: 1.8; }
.uc-form .chk { display: flex; align-items: flex-start; gap: 8px; font-size: 13.5px; color: #5b6b80; line-height: 1.6; }
.uc-form .chk input { margin-top: 3px; }

/* ===== 第十四轮：用户中心仪表盘（user_dashboard 四区重设计） ===== */
.uc-mini-link { font-size: 12.5px; margin-left: 8px; }
/* 业务状态卡片栅格：桌面自适应 2~4 列，≤768 单列 */
.uc-dash-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); gap: 14px; }
.uc-stat { display: flex; flex-direction: column; gap: 4px; padding: 16px 18px; border: 1px solid #e6ebf3; border-radius: 12px; background: #fff; text-decoration: none; transition: border-color .15s, box-shadow .15s, transform .15s; }
.uc-stat:hover { border-color: #b7cdf5; box-shadow: 0 8px 22px rgba(37, 99, 217, .08); transform: translateY(-1px); text-decoration: none; }
.uc-stat-ic { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 9px; background: #eff6ff; color: #2563d9; font-size: 15px; margin-bottom: 6px; }
.uc-stat-name { font-size: 13px; color: #64748b; }
.uc-stat-val { font-size: 22px; font-weight: 800; color: #0f172a; line-height: 1.2; }
.uc-stat-val em { font-style: normal; font-size: 12.5px; font-weight: 400; color: #64748b; margin-left: 2px; }
.uc-stat-sub { font-size: 12.5px; color: #64748b; }
.uc-stat-sub i { font-size: 11px; }
.uc-stat-warn { color: #c2410c; font-weight: 600; }
/* 待办提醒 */
.uc-todo { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; max-width: 860px; }
.uc-todo-item { display: flex; align-items: center; gap: 12px; padding: 12px 16px; border: 1px solid #fde68a; background: #fffbeb; border-radius: 10px; }
.uc-todo-ic { color: #b45309; font-size: 15px; flex-shrink: 0; }
.uc-todo-txt { flex: 1; min-width: 0; font-size: 14px; color: #33415c; }
.uc-todo-go { flex-shrink: 0; display: inline-flex; align-items: center; gap: 4px; padding: 5px 14px; border: 1px solid #f59e0b; border-radius: 999px; background: #fff; color: #b45309; font-size: 13px; font-weight: 600; text-decoration: none; transition: all .15s; }
.uc-todo-go:hover { background: #b45309; border-color: #b45309; color: #fff; text-decoration: none; }
.uc-todo-empty { display: flex; align-items: center; gap: 10px; padding: 16px 18px; border: 1px solid #a7f3d0; background: #ecfdf5; border-radius: 10px; color: #047857; font-size: 14px; max-width: 860px; }
@media (max-width: 768px) {
  .uc-todo-item { flex-wrap: wrap; }
  .uc-todo-go { margin-left: auto; }
}
@media (max-width: 640px) {
  /* P2-9：768 交给 auto-fill minmax(215px,1fr) 自然给 2~3 列，仅手机强制单列 */
  .uc-dash-grid { grid-template-columns: 1fr; }
}

/* ===== 第十四轮：发布时段合并组件（生成文章表单/我的文章发布弹层同构） ===== */
/* antd TimePicker.RangePicker 风：一个带边框容器只包两个时刻选择器 [HH:MM] ~ [HH:MM]，内部输入框无边框；
   开始日期为独立标准字段（form-grid/flt），不进本容器；窄屏（≤640）自然堆叠不横向溢出 */

/* ===== 第十四轮：钱包收支明细稳定高度（翻页不抖动） ===== */
/* 每页20行上限：行高≈ 13px×1.65 + 上下padding 20px + 1px底边线 ≈ 42.5px，21行（含表头）≈ 893px；
   加载中/末页行数不足时容器高度不变 → 页面总高稳定，纵向滚动条不出现/消失，scrollTop 不被钳制回跳 */
.uw-txn-wrap { min-height: 893px; }
@media (max-width: 768px) {
  /* P2-2：移动端无滚动条宽度跳动问题（scrollbar-gutter 已兜底），降低空白区高度：
     空数据/少数据用户不再被迫滚约三屏；翻页防抖不受影响（窄屏行高更小，420px 足够覆盖常见页高波动） */
  .uw-txn-wrap { min-height: 420px; }
}

/* ---------- 404 页（index.php 兜底路由，page_404.php；布局间距随 container tool-page 与其他页一致） ---------- */
.nf-card { text-align: center; padding: 56px 24px 44px; }
.nf-code {
  font-size: 108px; font-weight: 800; line-height: 1; letter-spacing: 6px;
  background: linear-gradient(135deg, #2563d9, #38bdf8);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.nf-title { margin: 18px 0 8px; font-size: 22px; color: #22304a; }
.nf-desc { color: #64748b; font-size: 14.5px; line-height: 1.8; margin: 0 auto 26px; max-width: 480px; }
.nf-actions { display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin-bottom: 30px; }
.nf-btn {
  display: inline-block; padding: 10px 26px; border-radius: 8px; font-size: 14.5px;
  border: 1px solid #d7dee9; color: #33415c; background: #fff; text-decoration: none;
}
.nf-btn:hover { border-color: #64a1f0; color: #2563d9; text-decoration: none; }
.nf-btn.primary { background: #2563d9; border-color: #2563d9; color: #fff; }
.nf-btn.primary:hover { background: #1d4ed8; color: #fff; }
.nf-hot { border-top: 1px dashed #e6ebf3; padding-top: 22px; }
.nf-hot h2 { font-size: 14px; color: #8b96a8; font-weight: 600; margin: 0 0 12px; }
.nf-hot a {
  display: inline-block; margin: 0 6px 8px; padding: 6px 14px; background: #f6f8fc;
  border-radius: 999px; font-size: 13px; color: #33415c; text-decoration: none;
}
.nf-hot a:hover { background: #e8f0fe; color: #2563d9; }
@media (max-width: 480px) {
  .nf-card { padding: 40px 16px 32px; }
  .nf-code { font-size: 80px; }
  /* 窄屏按钮改纵向堆叠全宽，避免三按钮折行后第二行落单不对称 */
  .nf-actions { flex-direction: column; align-items: stretch; gap: 10px; }
  .nf-btn { padding: 11px 20px; }
}
