/* 公共站点（资讯 / 注册 / 忘记密码 / 验证提示 / 站长后台）共用样式。
   与看板、登录页同一套 Ventriloc 令牌（基线 UI_STYLE_VENTRILOC.md）；规则只引用令牌。 */
* { box-sizing: border-box; margin: 0; padding: 0; }
[hidden] { display: none !important; }
html { -webkit-text-size-adjust: 100%; }
body { background: var(--bg); color: var(--txt); font-family: var(--sans); font-size: var(--fs-14); line-height: 1.6; min-height: 100vh; }
::selection { background: var(--accent-bg); }
a { color: var(--accent); }
b, strong { font-weight: 600; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.mini { color: var(--sub); font-size: var(--fs-12); }
.tnum { font-variant-numeric: tabular-nums; }
.up { color: var(--up); } .down { color: var(--down); } .flat { color: var(--flat); }
:is(a, button, input, textarea, select, [tabindex]):focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }

/* 顶栏：全站唯一 siteTop 方言（SPEC §2.2，像素蓝本 baseline-public-home）。
   桌面导航胶囊走 --btn-h 档；≤640 44px 且允许换行第二行右对齐。 */
.siteTop { border-bottom: 1px solid var(--line); background: color-mix(in srgb, var(--bg) 92%, transparent); position: sticky; top: 0; z-index: 20; backdrop-filter: blur(8px); }
.siteIn { max-width: var(--maxw-site); margin: 0 auto; padding: var(--s2) var(--s5); display: flex; align-items: center; gap: var(--s3); flex-wrap: wrap; }
.brand { display: flex; align-items: center; gap: var(--s2); text-decoration: none; color: var(--txt); }
.brandMark { width: 26px; height: 26px; flex: none; }
.brand b { font-family: var(--display); font-size: var(--fs-h1); font-weight: 400; letter-spacing: -.02em; }
.siteNav { margin-left: auto; display: flex; align-items: center; gap: var(--s1); flex-wrap: wrap; }
.siteNav a, .siteNav button { font: inherit; font-size: var(--fs-13); color: var(--sub); text-decoration: none; border: 1px solid transparent;
  border-radius: var(--radius-pill); padding: 6px 13px; min-height: var(--btn-h); display: inline-flex; align-items: center; background: none; cursor: pointer; }
.siteNav a:hover, .siteNav button:hover { color: var(--txt); background: var(--paper-2); }
.siteNav a.on { color: var(--txt); background: var(--paper); border-color: var(--line-strong); }
/* 注册主钮：石墨填充白字（导航语境里的主操作，与「当前页 .on」白底描边区分） */
.siteNav .signup { color: var(--on-solid); background: var(--txt); border-color: var(--txt); font-weight: 600; }
.siteNav .signup:hover { background: color-mix(in srgb, var(--txt) 86%, var(--bg)); color: var(--on-solid); }
.wrapNarrow { max-width: var(--maxw-site); margin: 0 auto; padding: var(--s6) var(--s5) 0; }

/* 卡片与按钮：区块中景标题统一 --fs-h3 档（17px/--display/500），h1/h2 同档 */
.card { background: var(--paper); border-radius: var(--radius-feature); padding: var(--s5); margin-bottom: var(--s5); box-shadow: none; }
.card > h2 { font-family: var(--display); font-size: var(--fs-h3); font-weight: 500; letter-spacing: -.01em; margin-bottom: var(--s3); }
.cardHead { display: flex; align-items: baseline; gap: var(--s3); flex-wrap: wrap; margin-bottom: var(--s3); }
.cardHead h1, .cardHead h2 { font-family: var(--display); font-size: var(--fs-h3); font-weight: 500; letter-spacing: -.01em; margin: 0; }
.cardHead .mini { margin-left: auto; }
/* 按钮谱系（SPEC §2.4）：主钮/次钮同高 --btn-h，≤640 触控 44px；小钮 --btn-h-sm */
.btnRow { display: flex; align-items: center; gap: var(--s2); flex-wrap: wrap; margin-top: var(--s4); }
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: var(--btn-h); padding: 8px 18px;
  border: 1px solid var(--line-strong); border-radius: var(--radius-pill); background: var(--paper); color: var(--txt);
  font: inherit; font-size: var(--fs-13); font-weight: 500; text-decoration: none; cursor: pointer;
  transition: background var(--transition), border-color var(--transition), color var(--transition); }
.btn:hover { background: var(--paper-2); }
.btn.primary { background: var(--txt); border-color: var(--txt); color: var(--on-solid); font-weight: 600; }
.btn.primary:hover { background: color-mix(in srgb, var(--txt) 86%, var(--bg)); }
.btn[disabled] { opacity: .55; cursor: progress; }
.btn.danger { color: var(--danger); }
.btn.danger:hover { border-color: var(--danger); background: var(--up-bg); }
.btn.small { min-height: var(--btn-h-sm); padding: 5px 13px; font-size: var(--fs-12); }
.lnk { color: var(--accent); text-decoration: none; border-bottom: 1px dashed var(--faint); }
.lnk:hover { color: var(--accent-press); }

/* 表单（登录 / 注册 / 忘记密码 / 验证说明 同一 authCard 家族方言，SPEC T10）。
   登录页为 siteTop + 居中 authStage；其余页走 authWrap 窄列。 */
.authStage { flex: 1; display: flex; align-items: center; justify-content: center; width: 100%; padding: var(--s6) var(--s4); }
.authWrap { max-width: 430px; margin: 0 auto; padding: var(--s6) var(--s4); }
.authCard { background: var(--paper); border-radius: var(--radius-feature); padding: var(--s6); }
.authStage .authCard { width: 100%; max-width: 430px; }
.authCard h1 { font-family: var(--display); font-size: 24px; font-weight: 400; letter-spacing: -.02em; }
.authCard .sub { font-size: var(--fs-12); color: var(--sub); letter-spacing: 1px; margin: var(--s1) 0 var(--s5);
  padding-bottom: var(--s3); border-bottom: var(--hairline); display: flex; align-items: center; gap: var(--s2); }
.authCard .sub .dot { width: 9px; height: 9px; background: var(--marker); flex: none; }
.field { margin-top: var(--s3); position: relative; }
.field label { display: block; font-size: var(--fs-12); color: var(--sub); letter-spacing: 1px; margin-bottom: var(--s1); }
.field input { width: 100%; padding: 11px var(--s3); font: inherit; font-size: 15px; color: var(--txt); background: var(--paper);
  border: 1px solid var(--line); border-radius: var(--radius); outline: none; }
.field input:hover { border-color: var(--line-strong); }
.field .hint { font-size: var(--fs-11); color: var(--faint); margin-top: 4px; }
/* 认证主钮：--btn-h-lg 大档（G8 收口，46px），无字距无空格 */
.authCard .btn.primary { min-height: var(--btn-h-lg); }
/* 反馈统一 .notice 家族（err/ok/warn）；.err 仅登录页用 show 类控制显隐（JS 行为不变） */
.notice { margin-top: var(--s4); padding: 10px var(--s3); font-size: var(--fs-13); border-radius: var(--radius);
  border: 1px solid var(--line); background: var(--paper-2); color: var(--sub); line-height: 1.7; }
.notice.warn { color: var(--gold); background: var(--gold-bg); border-color: var(--gold-line); }
.notice.err { color: var(--danger); background: var(--danger-bg); border-color: var(--danger-line); }
.notice.ok { color: var(--down); background: var(--down-bg); border-color: var(--down-line); }
.err { display: none; }
.err.show { display: block; }
.authFoot { margin-top: var(--s4); font-size: var(--fs-12); color: var(--faint); display: flex; gap: var(--s3); flex-wrap: wrap; justify-content: space-between; }
.authFoot a { color: var(--accent); text-decoration: none; border-bottom: 1px dashed var(--faint); }
.authFoot a:hover { color: var(--accent-press); }

/* 资讯：分类 chips 是过滤器（桌面 28px/手机 40px、选中石墨填充），与 40px 站点导航（页面定位）两种语义两种尺寸 */
.newsChips { display: flex; gap: var(--s1); flex-wrap: wrap; margin-bottom: var(--s4); }
.newsChip { font: inherit; font-size: var(--fs-12); padding: 2px 11px; min-height: 28px; border-radius: var(--radius-pill);
  border: 1px solid var(--line-strong); background: var(--paper); color: var(--sub); cursor: pointer; }
.newsChip:hover { color: var(--txt); background: var(--paper-2); }
.newsChip.on { background: var(--line-strong); border-color: var(--line-strong); color: var(--on-solid); font-weight: 600; }
.newsList { display: flex; flex-direction: column; }
.newsItem { padding: var(--s4) 0; border-bottom: var(--hairline); }
.newsItem:last-child { border-bottom: none; }
.newsMeta { display: flex; align-items: center; gap: var(--s2); flex-wrap: wrap; font-size: var(--fs-11); color: var(--faint); }
/* 对比度细则（SPEC §2.1）：catTag 文字用 --accent-press（accent 压 accent-bg 不足 4.5:1）；标签统一 12px */
.catTag { color: var(--accent-press); background: var(--accent-bg); border-radius: var(--radius-pill); padding: 1px 8px; font-size: var(--fs-11); font-weight: 500; }
.aiTag { color: var(--gold); border: 1px solid var(--gold-line); background: var(--gold-bg); border-radius: 3px; padding: 0 6px; font-size: var(--fs-11); font-weight: 600; }
.newsTitle { font-size: var(--fs-16); font-weight: 500; margin: var(--s2) 0 4px; line-height: 1.5; }
.newsTitle a { color: var(--txt); text-decoration: none; }
.newsTitle a:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; }
/* 摘要/日报正文 --fs-14；摘要两行截断（SPEC §4.3） */
.newsSummary { color: var(--sub); font-size: var(--fs-14); line-height: 1.8; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.placeholder { border: 1px dashed var(--line-strong); border-radius: var(--radius); padding: var(--s5); color: var(--sub);
  font-size: var(--fs-13); line-height: 1.8; background: var(--paper-2); }
.placeholder b { color: var(--txt); }
.dailyTitle { font-family: var(--display); font-size: var(--fs-h3); font-weight: 500; letter-spacing: -.01em; }
.dailySec { padding: var(--s3) 0; border-bottom: var(--hairline); }
.dailySec:last-child { border-bottom: none; }
.dailySec h3 { font-size: var(--fs-13); font-weight: 600; margin-bottom: 2px; }
.dailySec p { font-size: var(--fs-14); color: var(--sub); line-height: 1.8; }
.trial { color: var(--gold); border: 1px solid var(--gold-line); background: var(--gold-bg); border-radius: 3px;
  padding: 0 6px; font-size: var(--fs-11); font-weight: 600; vertical-align: 2px; }

/* 站长后台 */
.adminBar { display: flex; align-items: center; gap: var(--s3); flex-wrap: wrap; margin-bottom: var(--s4); }
.adminBar form { display: flex; gap: var(--s2); flex-wrap: wrap; }
.adminBar input { padding: 7px 10px; font: inherit; font-size: var(--fs-13); border: 1px solid var(--line); border-radius: var(--radius); background: var(--paper); color: var(--txt); }
/* 状态胶囊并入工作台 .chip 方言（A3）：28px 高、dot 7px；live/on=--up、break/off=--gold 语义色 */
.statusPill { display: inline-flex; align-items: center; gap: 7px; font-size: var(--fs-12); border: 1px solid var(--line); border-radius: var(--radius-pill); padding: 4px var(--s3); min-height: 28px; color: var(--sub); background: var(--paper); }
.statusPill .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--flat); flex: none; }
.statusPill.on { color: var(--up); border-color: var(--up-line); background: var(--up-bg); }
.statusPill.on .dot { background: var(--up); }
.statusPill.off { color: var(--gold); border-color: var(--gold-line); background: var(--gold-bg); }
.statusPill.off .dot { background: var(--gold); }
.adminTable { width: 100%; border-collapse: collapse; font-size: var(--fs-13); }
.adminTable th, .adminTable td { text-align: left; padding: 9px 8px; border-bottom: var(--hairline); vertical-align: middle; }
.adminTable th { color: var(--sub); font-size: var(--fs-11); font-weight: 600; background: var(--paper-2); white-space: nowrap; }
.adminTable td.email { font-family: var(--mono); font-size: var(--fs-12); word-break: break-all; }
.adminTable .ops { display: flex; gap: 4px; flex-wrap: wrap; }
/* ≤640 保留横向滚动看全列；滚动提示仅手机显示（A2/§4.6） */
.tableScroll { overflow-x: auto; }
.scrollHint { display: none; margin: 0 0 var(--s2); font-size: var(--fs-12); color: var(--sub); }
.tag { display: inline-block; font-size: 10px; padding: 0 6px; border-radius: 3px; border: 1px solid var(--line); color: var(--sub); }
.tag.admin { color: var(--accent); border-color: var(--accent); background: var(--accent-bg); }
.tag.off { color: var(--danger); border-color: var(--danger-line); background: var(--danger-bg); }
.tag.demo { color: var(--gold); border-color: var(--gold-line); background: var(--gold-bg); }
.pager { display: flex; align-items: center; gap: var(--s3); justify-content: flex-end; margin-top: var(--s3); font-size: var(--fs-12); color: var(--sub); }
.emptyRow { text-align: center; color: var(--sub); padding: var(--s6) 0; }

/* 页脚：编辑式版权行，唯一页脚方言（结构照基准页：免责一段 + 链接行） */
.siteFoot { max-width: var(--maxw-site); margin: var(--s7) auto 0; padding: var(--s5); border-top: 1px solid var(--line);
  color: var(--faint); font-size: var(--fs-12); line-height: 1.9; }
.siteFoot b { color: var(--sub); }
.siteFoot a { color: var(--txt); text-decoration: none; border-bottom: 1px solid var(--faint); }
.siteFoot a:hover { color: var(--accent); border-bottom-color: var(--accent); }

/* 备案合规页脚（server.js 按 SITE_ICP / SITE_POLICE_ICP 注入，未配置时不出现）。
   视觉量级与 .siteFoot 对齐；只引用既有令牌，不引新主题与外链字体。 */
.icpFoot { max-width: var(--maxw-site); margin: var(--s6) auto 0; padding: var(--s3) var(--s5) 0;
  border-top: 1px solid var(--line); color: var(--faint); font-size: var(--fs-12); line-height: 1.9; text-align: center; }
.icpFoot a { color: var(--txt); text-decoration: none; border-bottom: 1px solid var(--faint); }
.icpFoot a:hover { color: var(--accent); border-bottom-color: var(--accent); }
@media print { .icpFoot { display: none !important; } }

@media (max-width: 640px) {
  .siteIn, .wrapNarrow, .siteFoot { padding-left: var(--s4); padding-right: var(--s4); }
  /* 手机端导航换行第二行右对齐，触控 44px（SPEC §4） */
  .siteNav { width: 100%; margin-left: 0; justify-content: flex-end; }
  .siteNav a, .siteNav button { min-height: 44px; padding: 8px 15px; }
  .siteNav .signup { min-height: 44px; }
  .authCard { padding: var(--s5) var(--s4); }
  .adminTable { min-width: 680px; }
  .scrollHint { display: block; }
  .btn { min-height: 44px; }
  .btn.small { min-height: 36px; }
  .newsChip { min-height: 40px; }
  /* 备案页脚是文档最后一个元素：站内页面底部无固定栏，只给到视口的呼吸位；不再额外加遮挡留白 */
  .icpFoot { padding-left: var(--s4); padding-right: var(--s4); }
}
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; } }
