/* ============================================================
 * noransom.net 品牌层 —— 官网专属结构的样式
 *
 * 加载顺序：style.css -> skin.css -> noransom.css（partials/site.php 的 extra_css）。
 * 本文件只写官网特有的结构（公告栏、品牌字标、页头热线、页脚紧急响应横幅、
 * 内页 PageHero、应急侧栏部件、通用按钮），颜色一律取 skin.css 里的 token。
 *
 * 类名契约见 header.php / footer.php / sidebar.php / partials/emergency-widget.php。
 * ============================================================ */

/* ============================================================
 * 0. 本层新增 token
 * ============================================================ */
:root{
  /* 深色区块的网格纹与橙色光晕（官网 bg-grid-dark + blur-3xl 光斑） */
  --once-grid:
    linear-gradient(to right,var(--once-grid-line) 1px,transparent 1px),
    linear-gradient(to bottom,var(--once-grid-line) 1px,transparent 1px);
  --once-glow:rgba(242,101,34,.2);
  --once-glow-soft:rgba(242,101,34,.15);
}

/* 吸顶页头实测 73px（sticky, top:0），锚点不留余量就会被整段盖住。一次覆盖
   #main / #post_comment_anchor / #comment-xxx / 评论分页等所有原生锚点。
   不要加 scroll-behavior:smooth——与本文件末尾的 reduced-motion 兜底冲突。
   style.css 的 .wznrys h1..h6{scroll-margin-top:96px} 保持不动，两者不冲突。 */
html{scroll-padding-top:88px;}

/* 跳到正文（header.php 里 <body> 之后的第一个可聚焦元素）。
   不聚焦时移出视口，聚焦时变成官网同款橙色按钮。 */
.skip-link{position:absolute;left:-9999px;top:0;z-index:1080;}
.skip-link:focus{
  left:8px;top:8px;
  display:inline-flex;align-items:center;
  height:40px;padding:0 16px;
  border-radius:var(--once-btn-radius);
  background:var(--once-accent-500);
  color:#fff;font-weight:600;font-size:14px;
  text-decoration:none;
  box-shadow:0 0 0 3px rgba(242,101,34,.35);
}

/* ============================================================
 * 1. 顶部公告栏（页头之上，随页面滚走）
 * ============================================================ */
.site-announcement{
  background:var(--once-announcement-bg);
  border-bottom:1px solid var(--once-header-border);
  color:rgba(255,255,255,.9);
  font-size:13px;
}
.site-announcement__inner{
  display:flex;
  align-items:center;
  justify-content:center;
  gap:10px;
  min-height:36px;
}
.site-announcement__icon{
  flex-shrink:0;
  color:var(--once-accent-400);
  font-size:14px;
  line-height:1;
}
.site-announcement__text{
  margin:0;
  min-width:0;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.site-announcement__cta{
  display:inline-flex;
  align-items:center;
  gap:5px;
  flex-shrink:0;
  color:var(--once-accent-300);
  font-weight:600;
  text-decoration:none;
}
.site-announcement__cta:hover,
.site-announcement__cta:focus-visible{color:var(--once-accent-100);}
.site-announcement__phone{font-weight:700;font-variant-numeric:tabular-nums;}
.site-announcement__cta i{font-size:12px;}

/* ============================================================
 * 2. 品牌字标（页头 / 移动端抽屉 / 页脚共用）
 * ============================================================ */
.brand{
  display:inline-flex;
  align-items:center;
  border-radius:var(--once-btn-radius);
  text-decoration:none;
  color:inherit;
}
.brand:hover{color:inherit;}
.brand-lockup{
  display:inline-flex;
  align-items:center;
  gap:10px;
}
.brand-mark{
  width:36px;
  height:36px;
  flex-shrink:0;
  display:block;
}
.brand-text{
  display:flex;
  flex-direction:column;
  line-height:1;
  min-width:0;
}
.brand-primary{
  font-size:17px;
  font-weight:700;
  letter-spacing:.08em;
  color:var(--once-header-text);
  white-space:nowrap;
}
.brand-secondary{
  margin-top:4px;
  font-size:10px;
  font-weight:600;
  text-transform:uppercase;
  letter-spacing:.18em;
  color:var(--once-header-faint);
  white-space:nowrap;
}
/* 英文站主次互换：主标题是拉丁文，字距收紧；副标题是中文，字距更松 */
.brand--en .brand-primary{letter-spacing:-.01em;}
.brand--en .brand-secondary{letter-spacing:.3em;text-transform:none;}
/* 浅色底变体（当前站点没有浅色页头，留给独立页/打印样式用） */
.brand--light .brand-primary{color:var(--once-brand-950);}
.brand--light .brand-secondary{color:var(--once-slate-500);}

/* 页头里的 logo 容器（<h1|div class="logo">）自身不再有文字样式 */
.top .top_l .logo .brand{color:var(--once-header-text);}
.top .top_l .logo .brand:hover .brand-primary{color:#fff;}
/* 移动端抽屉头部 */
#mobile_right_nav .mobile_head .mobile_head_logo .brand-mark{width:32px;height:32px;}
#mobile_right_nav .mobile_head .mobile_head_logo .brand-primary{font-size:16px;}
/* 页脚品牌区 */
.footer-brand .brand{margin-bottom:0;}
.footer-brand .brand-mark{width:38px;height:38px;}
.footer-brand .brand-primary{font-size:18px;}

/* ============================================================
 * 3. 页头右侧 24h 热线
 * ============================================================ */
.header-hotline{
  display:inline-flex;
  align-items:center;
  gap:10px;
  color:var(--once-header-muted);
  text-decoration:none;
  white-space:nowrap;
  border-radius:var(--once-btn-radius);
}
.header-hotline:hover,
.header-hotline:focus-visible{color:var(--once-header-text);}
.header-hotline__icon{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:36px;
  height:36px;
  flex-shrink:0;
  border-radius:50%;
  background:var(--once-header-chip);
  color:#fff;
  font-size:14px;
  transition:background-color .15s ease;
}
.header-hotline:hover .header-hotline__icon{background:var(--once-accent-500);}
.header-hotline__text{
  display:none;
  flex-direction:column;
  line-height:1.25;
}
.header-hotline__text small{font-size:11px;color:var(--once-header-faint);}
.header-hotline__text b{font-size:14px;font-weight:700;font-variant-numeric:tabular-nums;}

/* ============================================================
 * 4. 通用按钮与小标题
 * ============================================================ */
.btn-accent,
.btn-outline{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  height:40px;
  padding:0 16px;
  border-radius:var(--once-btn-radius);
  font-size:14px;
  font-weight:600;
  line-height:1;
  white-space:nowrap;
  text-decoration:none;
  cursor:pointer;
  transition:background-color .15s ease,border-color .15s ease,color .15s ease;
}
.btn-accent{
  background:var(--once-accent-500);
  color:#fff;
  border:1px solid transparent;
}
.btn-accent:hover,
.btn-accent:focus-visible{background:var(--once-accent-600);color:#fff;}
.btn-accent:active{background:var(--once-accent-700);}
.btn-outline{
  background:transparent;
  color:#fff;
  border:1px solid rgba(255,255,255,.25);
}
.btn-outline:hover,
.btn-outline:focus-visible{border-color:rgba(255,255,255,.6);background:rgba(255,255,255,.05);color:#fff;}
.btn-lg{height:48px;padding:0 24px;font-size:15px;}
.btn-accent i,
.btn-outline i{font-size:14px;line-height:1;}

.eyebrow{
  margin:0;
  font-size:11px;
  font-weight:600;
  line-height:1.4;
  text-transform:uppercase;
  letter-spacing:.16em;
  color:var(--once-accent-300);
}

/* 语言切换：官网同款「白底当前项」双格胶囊 */
.top .top_r .top_r_an.language-switch{padding:0 4px 0 9px;gap:5px;}
.top .top_r .top_r_an.language-switch>i{font-size:12px;color:var(--once-header-faint);}
.language-switch__item{
  display:inline-flex;
  align-items:center;
  height:24px;
  padding:0 8px;
  border-radius:var(--once-radius-pill);
  color:var(--once-header-muted);
  white-space:nowrap;
}
.language-switch__item.is-current{
  background:#fff;
  color:var(--once-brand-950);
}
.top .top_r .top_r_an.language-switch:hover .language-switch__item:not(.is-current){color:var(--once-header-text);}

/* 返回官网按钮：橙色主按钮（覆盖 skin.css 的基础版） */
.back-to-site{
  background:var(--once-accent-500);
  color:#fff !important;
  box-shadow:none;
}
.back-to-site:hover,
.back-to-site:focus-visible{background:var(--once-accent-600);color:#fff !important;}
.back-to-site:active{background:var(--once-accent-700);}

/* ============================================================
 * 5. 页头响应式（四档：≥1280 / 1200–1279 / 992–1199 / <992）
 * ============================================================ */
/* ≥1280：热线显示两行文字 */
@media (min-width:1280px){
  .header-hotline__text{display:flex;}
  .top .top_r{gap:14px;}
}
/* 992–1199：容器只有 960px，导航更紧凑，返回官网按钮让位 */
@media (max-width:1199.98px){
  .top .top_l .logo{margin-right:12px;}
  .header-menu .header-menu-ul li a,
  .header-menu .header-menu-ul li button{padding:0 10px;font-size:14px;}
  .header-menu .header-menu-ul li.menu-item-has-children>a,
  .header-menu .header-menu-ul li.menu-item-has-children>button{padding-right:22px;}
  .top .top_r{gap:8px;}
}
/* 992–1199：容器只有 960px，"返回官网"收窄而不是隐藏——这一档还没有汉堡菜单，
   一旦隐藏就没有任何入口回官网了。 */
/* 断点端点对齐 style.css：上游用的是含端点的 max-width:768px / 992px，本层原来用
   767.98 / 991.98 + min-width:768 / 992，结果在 768（iPad 竖屏）和 992 这两个整数
   宽度上两套规则错位，出现半桌面半手机的混合态。min 一侧用 .01 而不是 .02：视口
   宽度按 1/64px 量化，768.015625 会掉进 .02 方案留下的空洞里。 */
@media (max-width:1199.98px) and (min-width:992.02px){
  .back-to-site{height:36px;padding:0 12px;font-size:13px;}
}
/* <992：只留 logo + 电话圆形按钮 +（搜索）+ 汉堡。
   电话按钮改成橙色实心，与官网手机版一致。 */
@media (max-width:992px){
  .back-to-site,
  .top .top_r .top_r_an.language-switch,
  .top .top_r .top_r_an.theme-switch{display:none;}
  .header-hotline__icon{background:var(--once-accent-500);}
  .header-hotline:hover .header-hotline__icon{background:var(--once-accent-600);}
  .top{gap:8px;}
}
@media (max-width:768px){
  .brand-mark{width:32px;height:32px;}
  .brand-primary{font-size:16px;}
  .brand-secondary{font-size:9px;letter-spacing:.16em;}
  .site-announcement__cta{display:none;}
  .site-announcement__inner{justify-content:flex-start;}
  .site-announcement{font-size:12px;}
  /* 窄屏下解除单行省略号：这条公告的全部价值就在「切勿重启或格式化 / Do not reboot
     or reformat」那半句，390px 上英文被截掉 21%，正好把它裁没了。公告栏没有固定
     height，min-height:36px 会自然撑到两行（约 50px）。≥768px 仍保持单行 + 省略号。 */
  .site-announcement__text{white-space:normal;overflow:visible;text-overflow:clip;line-height:1.5;}
  .site-announcement__inner{align-items:flex-start;padding-top:7px;padding-bottom:7px;}
  .site-announcement__icon{margin-top:2px;}
}
@media (max-width:359.98px){
  .brand-secondary{display:none;}
}

/* ============================================================
 * 6. 侧栏应急部件（官网 mega menu 右侧精选卡的气质）
 * ============================================================ */
.widget.widget_emergency{
  position:relative;
  overflow:hidden;
  padding:22px;
  background:var(--once-brand-950);
  border:1px solid rgba(255,255,255,.08);
  border-radius:var(--once-radius);
  color:var(--once-slate-300);
  box-shadow:var(--once-shadow-lg);
}
.widget.widget_emergency:before{
  content:"";
  position:absolute;
  top:-70px;
  right:-70px;
  width:200px;
  height:200px;
  border-radius:50%;
  background:var(--once-glow);
  filter:blur(48px);
  pointer-events:none;
}
.widget.widget_emergency>*{position:relative;}
.widget_emergency .eyebrow{color:var(--once-accent-300);}
.widget_emergency__title{
  margin:10px 0 0;
  font-size:18px;
  font-weight:700;
  line-height:1.45;
  color:#fff;
}
.widget_emergency__text{
  margin:8px 0 0;
  font-size:13px;
  line-height:1.8;
  color:var(--once-slate-300);
}
.widget_emergency__call{
  display:flex;
  width:100%;
  margin-top:16px;
  font-variant-numeric:tabular-nums;
}
.widget_emergency__link{
  display:inline-flex;
  align-items:center;
  gap:6px;
  margin-top:12px;
  font-size:13px;
  font-weight:600;
  color:var(--once-accent-300);
  text-decoration:none;
}
.widget_emergency__link:hover{color:var(--once-accent-100);}
.widget_emergency__link i{font-size:12px;}

/* ============================================================
 * 7. 页脚
 * ============================================================ */
.footer{
  background:var(--once-footer-bg);
  color:var(--once-footer-text);
  font-size:14px;
}
.footer a{color:var(--once-footer-text);}
.footer a:hover{color:var(--once-footer-link-hover);}

/* 7.1 紧急响应横幅 */
.footer-emergency{
  position:relative;
  overflow:hidden;
  background:var(--once-footer-band-bg);
  border-bottom:1px solid var(--once-footer-border);
}
.footer-emergency:before{
  content:"";
  position:absolute;
  inset:0;
  background-image:var(--once-grid);
  background-size:var(--once-grid-size) var(--once-grid-size);
  -webkit-mask-image:linear-gradient(to right,transparent,#000 40%,#000 60%,transparent);
  mask-image:linear-gradient(to right,transparent,#000 40%,#000 60%,transparent);
  pointer-events:none;
}
.footer-emergency:after{
  content:"";
  position:absolute;
  top:50%;
  right:-130px;
  width:380px;
  height:380px;
  margin-top:-190px;
  border-radius:50%;
  background:var(--once-glow);
  filter:blur(64px);
  pointer-events:none;
}
/* 注意：本元素同时带 .container，左右内边距必须留给 bootstrap 的 gutter，
   只能用 padding-top / padding-bottom，不能写 padding 简写。 */
.footer-emergency__inner{
  position:relative;
  z-index:1;
  display:flex;
  flex-direction:column;
  gap:32px;
  padding-top:56px;
  padding-bottom:56px;
}
.footer-emergency__copy{max-width:42rem;}
.footer-emergency__copy .eyebrow{color:var(--once-accent-300);}
.footer-emergency__title{
  margin:12px 0 0;
  font-size:28px;
  font-weight:700;
  line-height:1.25;
  letter-spacing:-.01em;
  color:#fff;
}
.footer-emergency__text{
  margin:16px 0 0;
  font-size:15px;
  line-height:1.8;
  color:var(--once-slate-300);
}
.footer-emergency__actions{
  display:flex;
  flex-wrap:wrap;
  gap:12px;
  flex-shrink:0;
}
.footer-emergency__actions .btn-accent{font-variant-numeric:tabular-nums;}

/* 7.2 主体栅格 */
.footbox{padding:0;font-size:14px;}
.footer-grid{
  display:grid;
  grid-template-columns:1fr;
  gap:40px;
  padding:56px 0;
}
.footer-brand .footer-tagline{
  margin:20px 0 0;
  max-width:28rem;
  font-size:14px;
  line-height:1.8;
  color:var(--once-slate-400);
}
.footer-brand .eyebrow{margin-top:28px;color:rgba(255,255,255,.45);}
.footer-hotline{
  display:inline-flex;
  align-items:center;
  gap:10px;
  margin-top:8px;
  font-size:24px;
  font-weight:700;
  line-height:1.2;
  color:#fff;
  text-decoration:none;
  font-variant-numeric:tabular-nums;
}
.footer-hotline:hover{color:var(--once-accent-300);}
.footer-hotline i{font-size:19px;color:var(--once-accent-400);}
.footer-contact{
  display:grid;
  gap:12px;
  margin:20px 0 0;
  max-width:28rem;
  font-size:14px;
}
.footer-contact>div{display:flex;align-items:flex-start;gap:10px;}
.footer-contact dt{
  display:flex;
  align-items:center;
  gap:8px;
  flex-shrink:0;
  font-weight:400;
  color:var(--once-footer-muted);
}
.footer-contact dt i{font-size:14px;}
.footer-contact dd{
  margin:0;
  min-width:0;
  line-height:1.7;
  color:var(--once-footer-text);
  overflow-wrap:anywhere;
}
.footer-contact dd a{color:#e2e8f0;text-decoration:none;}
.footer-contact dd a:hover{color:#fff;}

.footer-links .eyebrow{color:rgba(255,255,255,.45);}
.footer-links .menu{
  display:grid;
  gap:10px;
  margin:16px 0 0;
  padding:0;
  list-style:none;
}
.footer-links .menu li{margin:0;padding:0;list-style:none;display:block;}
.footer-links .menu li:empty{display:none;}
.footer-links .menu a{
  font-size:14px;
  color:var(--once-footer-text);
  text-decoration:none;
}
.footer-links .menu a:hover{color:#fff;}

/* 7.3 底部版权条 */
.footer-bottom{border-top:1px solid var(--once-footer-border);}
/* 同上：本元素也带 .container，左右内边距交给 bootstrap */
.footer-bottom__inner{
  display:flex;
  flex-direction:column;
  gap:8px;
  padding-top:24px;
  padding-bottom:24px;
  font-size:12px;
  color:var(--once-footer-muted);
}
.footer-bottom .copyright{margin:0;color:var(--once-footer-muted);}
.footer-legal{
  display:flex;
  flex-wrap:wrap;
  gap:4px 20px;
  margin:0;
  color:var(--once-footer-muted);
}
.footer-legal a,
.footer-legal .beian{color:var(--once-footer-muted);text-decoration:none;}
.footer-legal a:hover,
.footer-legal .beian:hover{color:var(--once-slate-300);}
.footer-theme a{color:var(--once-footer-muted);}

/* 7.4 友情链接条（页脚之上的独立 section） */
.links{padding:20px 0;font-size:12px;}
.links span{color:var(--once-footer-muted);margin-right:14px;}
.links a{color:var(--once-footer-text);}

/* 页脚里的按钮不吃 .footer a 的文字色 */
.footer .btn-accent,
.footer .btn-accent:hover,
.footer .btn-outline,
.footer .btn-outline:hover{color:#fff;}

@media (min-width:768.02px){
  .footer-grid{grid-template-columns:1.6fr 1fr 1fr;gap:32px;}
  .footer-bottom__inner{flex-direction:row;align-items:flex-start;justify-content:space-between;gap:16px;}
  .footer-legal{justify-content:flex-end;}
}
@media (min-width:992.02px){
  .footer-emergency__inner{
    flex-direction:row;
    align-items:center;
    justify-content:space-between;
    padding-top:64px;
    padding-bottom:64px;
  }
  .footer-emergency__title{font-size:34px;}
  .footer-grid{grid-template-columns:2fr 1fr 1fr;padding:64px 0;}
}
@media (max-width:768px){
  .footer-emergency__inner{padding-top:40px;padding-bottom:40px;}
  .footer-emergency__title{font-size:24px;}
  .footer-emergency__actions .btn-lg{width:100%;}
  .footer-grid{padding:40px 0;gap:32px;}
  .footer-hotline{font-size:21px;}
}

/* ============================================================
 * 8. 内页首屏：官网 PageHero（深色 + 网格纹 + 橙色光晕）
 *    文章页 .post_container_title、归档/分类页 .cat_info_top
 * ============================================================ */
.post_container_title,
.cat_info_top{
  position:relative;
  overflow:hidden;
  background:var(--once-dark-bg);
  border:1px solid rgba(255,255,255,.08);
  color:#fff;
  box-shadow:none;
}
.post_container_title:before,
.cat_info_top:before{
  content:"";
  position:absolute;
  inset:0;
  background-image:var(--once-grid);
  background-size:var(--once-grid-size) var(--once-grid-size);
  -webkit-mask-image:radial-gradient(ellipse at top left,#000 20%,transparent 70%);
  mask-image:radial-gradient(ellipse at top left,#000 20%,transparent 70%);
  pointer-events:none;
}
.post_container_title:after,
.cat_info_top:after{
  content:"";
  position:absolute;
  top:-160px;
  right:-60px;
  width:360px;
  height:360px;
  border-radius:50%;
  background:var(--once-glow-soft);
  filter:blur(64px);
  pointer-events:none;
}
/* 对齐官网 PageHero：官网 /blog/ 与文章页首屏的 h1 都是 36px / 800 / -.025em，
   博客原来只有 27px，首屏的信息层级弱一档。首屏文本容器宽度两边接近（官网
   max-w-4xl≈896px，博客 835px），34px 不会换行失控。 */
.post_container_title{
  padding:44px 32px 36px;
  border-bottom:none;
  border-radius:var(--once-radius) var(--once-radius) 0 0;
}
.post_container_title h1{
  position:relative;
  z-index:1;
  margin:0;
  font-size:34px;
  font-weight:800;
  line-height:1.15;
  letter-spacing:-.025em;
  color:#fff;
}
.post_container_title p{
  position:relative;
  z-index:1;
  margin:18px 0 0;
  font-size:13px;
  color:var(--once-slate-300);
}
.post_container_title p span{color:var(--once-slate-400);font-weight:400;}
.post_container_title p span i{color:var(--once-accent-400);opacity:.85;}
.post_container_title p a{color:var(--once-slate-300);text-decoration:none;}
.post_container_title p a:hover{color:#fff;}
/* eyebrow（post.php 里输出的主分类名）。必须写在 .post_container_title p 之后：
   同等特异度下靠后者生效，否则会被上面那条 13px/slate-300 覆盖。 */
.post_container_title p.eyebrow{
  position:relative;
  z-index:1;
  margin:0 0 12px;
  font-size:11px;
  font-weight:600;
  line-height:1.4;
  text-transform:uppercase;
  letter-spacing:.16em;
  color:var(--once-accent-300);
}
.post_container_title p.eyebrow a{color:inherit;text-decoration:none;}
.post_container_title p.eyebrow a:hover{color:var(--once-accent-100);}

.cat_info_top{
  padding:40px 32px;
  border-radius:var(--once-radius);
  margin-bottom:20px;
}
.cat_info_top h1,
.cat_info_top h2{
  position:relative;
  z-index:1;
  margin:0;
  padding-left:0;
  font-size:32px;           /* 官网 PageHero 非 compact 档 */
  font-weight:800;
  line-height:1.15;
  letter-spacing:-.025em;
  color:#fff;
}
/* 官网 PageHero 的标题前没有圆点，这里把 style.css 的装饰点去掉 */
.cat_info_top h1:before,
.cat_info_top h2:before{content:none;}
.cat_info_top p{
  position:relative;
  z-index:1;
  margin:14px 0 0;
  max-width:48rem;
  font-size:15px;
  line-height:1.8;
  color:var(--once-slate-300);
  font-weight:400;
}
/* 深色首屏下面紧跟的白底正文卡 */
.post_container{border-top:1px solid var(--once-border);}

@media (max-width:768px){
  .post_container_title{padding:28px 20px 24px;}
  .post_container_title h1{font-size:24px;}
  .post_container_title p{margin-top:14px;}
  .post_container_title p.eyebrow{margin:0 0 10px;}
  .cat_info_top{padding:24px 20px;}
  .cat_info_top h1,.cat_info_top h2{font-size:24px;}
  .cat_info_top p{font-size:14px;margin-top:10px;}
}

/* ============================================================
 * 9. 文章列表卡（对齐官网 blog-page 的列表条目）
 * ============================================================ */
.post_def{padding:20px;border-radius:var(--once-radius);}
.post_def .post_def_right .post_def_title h2{font-size:18px;margin-bottom:10px;}
.post_def .post_def_right .post_def_title h2 a{text-decoration:none;}
.post_def .post_def_right .post_def_title p{font-size:15px;line-height:1.75;}
:lang(zh-CN) .post_def .post_def_right .post_def_title p{line-height:1.8;}
.post_def .post_info{margin-top:14px;font-size:12px;}
.post_def .post_info .post_info_l span i{color:var(--once-slate-400);}
.post_def .post_info .post_info_r em{
  display:inline-block;
  margin-left:6px;
  padding:2px 10px;
  border-radius:var(--once-radius-pill);
  background:var(--once-slate-100);
  /* slate-500 压 slate-100 只有 4.34:1，12px 属普通文本，门槛 4.5:1。
     slate-600 是 6.91:1，色感几乎无差别。深色态另有覆盖，不受影响。 */
  color:var(--once-slate-600);
  font-size:12px;
}
.post_def .post_info .post_info_r em a{color:inherit;margin-left:2px;text-decoration:none;}
.post_def .post_info .post_info_r em:hover{background:var(--once-accent-100);color:var(--once-accent-700);}
.post_def.post_empty{
  padding:48px 20px;
  text-align:center;
  color:var(--once-faint);
}
.post_def.post_empty:hover{transform:none;border-color:var(--once-border);box-shadow:none;}

/* ============================================================
 * 9.2 正文表格在窄屏里自己横向滚动
 *
 * 只针对 .wznrys 的直接子表格：pre > code 里 highlight.js 的行号表也是 <table>，
 * 不能一起变成滚动块。style.css 只写了 `.dark .wznrys table{overflow-x:auto}`，
 * 没有 display:block 时那条规则对 <table> 无效，窄屏里 4 列表会被压成逐字换行。
 * ============================================================ */
@media (max-width:768px){
  .wznrys>table{
    display:block;
    width:100%;
    max-width:100%;
    overflow-x:auto;
    -webkit-overflow-scrolling:touch;
  }
  .wznrys>table thead,
  .wznrys>table tbody{white-space:nowrap;}
  .wznrys>table td,
  .wznrys>table th{padding:10px 14px;}
}

/* ============================================================
 * 9.5 404 页（404.php 的 .not-found 段）
 *     不再用内联样式藏掉页头页脚，所以这里只做一张与其它卡片同款的白底卡。
 * ============================================================ */
.not-found{
  display:flex;
  flex-direction:column;
  align-items:center;
  text-align:center;
  padding:56px 24px 48px;
  background:var(--once-surface);
  border:1px solid var(--once-border);
  border-radius:var(--once-radius);
  margin-bottom:20px;
}
.not-found__title{
  margin:0;
  font-size:28px;
  font-weight:800;
  line-height:1.3;
  letter-spacing:-.01em;
  color:var(--once-heading);
}
.not-found__text{
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:20px;
  margin:16px 0 0;
  max-width:36rem;
  font-size:15px;
  line-height:1.8;
  color:var(--once-muted);
}
.not-found__home{align-self:center;}
.not-found__art{
  width:200px;
  max-width:60%;
  height:auto;
  margin-top:32px;
  opacity:.35;
}

/* ============================================================
 * 10. 深色模式覆盖
 *
 * style.css 里的 `.dark a{color:#fff}`（0,1,1）会盖掉本层所有单类名的
 * 链接配色，所以品牌层里凡是 <a> 的部件都要在 .dark 下再写一遍。
 * ============================================================ */
.dark .footer a{color:var(--once-footer-text);}
.dark .footer a:hover{color:var(--once-footer-link-hover);}
.dark .footer .btn-accent,
.dark .footer .btn-accent:hover,
.dark .footer .btn-outline,
.dark .footer .btn-outline:hover{color:#fff;}
.dark .footer-hotline{color:#fff;}
.dark .footer-hotline:hover{color:var(--once-accent-300);}
.dark .footer-contact dd a{color:#e2e8f0;}
.dark .footer-contact dd a:hover{color:#fff;}
.dark .footer-legal a,
.dark .footer-legal .beian,
.dark .footer-theme a{color:var(--once-footer-muted);}
.dark .footer-legal a:hover,
.dark .footer-theme a:hover{color:var(--once-slate-300);}
.dark .site-announcement__cta{color:var(--once-accent-300);}
.dark .site-announcement__cta:hover{color:var(--once-accent-100);}
.dark .header-hotline{color:var(--once-header-muted);}
.dark .header-hotline:hover{color:var(--once-header-text);}
.dark .language-switch__item{color:var(--once-header-muted);}
.dark .language-switch__item.is-current{background:#fff;color:var(--once-brand-950);}
.dark .btn-accent,
.dark .btn-accent:hover,
.dark .btn-outline,
.dark .btn-outline:hover,
.dark .back-to-site,
.dark .back-to-site:hover{color:#fff;}
.dark .widget_emergency__link{color:var(--once-accent-300);}
.dark .widget_emergency__link:hover{color:var(--once-accent-100);}
.dark .post_container_title p a{color:var(--once-slate-300);}
.dark .post_container_title p a:hover{color:#fff;}
.dark .widget.widget_emergency{
  background:#04070d;
  border-color:rgba(255,255,255,.1);
}
.dark .post_container_title,
.dark .cat_info_top{
  background:var(--once-dark-bg);
  border-color:rgba(255,255,255,.1);
  color:#fff;
}
/* style.css 的 `.dark .post_container_title{border-bottom:2px solid #272727}`（0,2,0）
   会盖掉上面 `.post_container_title{border-bottom:none}`（0,1,0），在深色下把 PageHero
   和正文卡之间劈出一条 2px 线；这里同权重清掉。 */
.dark .post_container_title{border-bottom:none;}
.dark .not-found{background:var(--once-surface);border-color:var(--once-border);}
.dark .not-found__title{color:var(--once-heading);}
.dark .not-found__text{color:var(--once-muted);}
.dark .not-found__art{opacity:.28;}
.dark .post_container_title h1,
.dark .cat_info_top h1,
.dark .cat_info_top h2{color:#fff;}
.dark .post_container_title p,
.dark .cat_info_top p{color:var(--once-slate-300);}
.dark .post_def .post_info .post_info_r em{
  background:var(--once-subtle);
  color:var(--once-slate-400);
}
.dark .post_def .post_info .post_info_r em:hover{
  background:rgba(242,101,34,.18);
  color:var(--once-accent-300);
}
/* 必须写在 `.dark .post_container_title p` 之后：两条同为 (0,2,1)，靠后者生效。 */
.dark .post_container_title p.eyebrow{color:var(--once-accent-300);}
.dark .footer,
.dark .links{background:var(--once-footer-bg);}
.dark .footer-emergency{background:var(--once-footer-band-bg);}

/* ============================================================
 * 11. 收口上游 style.css 里未被皮肤覆盖的残留
 *
 * 本层最后加载，同名选择器即可覆盖；凡是特异性不够的地方都在注释里注明。
 * ============================================================ */

/* 11.1 正文代码块：官网 prose 的 pre 是 brand-950 深底 + slate-100 浅字
 *      （globals.css 的 --tw-prose-pre-bg / --tw-prose-pre-code），
 *      style.css 给的却是 GitHub 那套 #f6f8fa / #24292f 浅灰壳。
 *      本主题不自带 hljs 配色（全目录只有 .hljs-ln-* 行号钩子，无 token 配色），
 *      所以改深底不会与高亮主题打架；若日后装了高亮插件，必须选深色 hljs 主题。
 *      行内代码 .wznrys :not(pre)>code 保持浅底不动——官网 prose 的 inline code
 *      本就是 bg-slate-100。 */
.wznrys pre,.comment-content pre{background:var(--once-brand-950);border-color:rgba(255,255,255,.08);box-shadow:none;}
.wznrys pre:before,.comment-content pre:before{background:var(--once-brand-800);border-bottom:1px solid rgba(255,255,255,.08);}
.wznrys pre code,.comment-content pre code{color:var(--once-slate-100);}
.wznrys pre code[data-lang]:before,.comment-content pre code[data-lang]:before{color:rgba(255,255,255,.45);}
.wznrys pre .once-copy-btn,.comment-content pre .once-copy-btn{border-color:rgba(255,255,255,.12);background:rgba(255,255,255,.08);color:var(--once-slate-300);}
.wznrys pre .once-copy-btn:hover,.comment-content pre .once-copy-btn:hover{background:rgba(255,255,255,.16);}
.wznrys pre code table tr td.hljs-ln-numbers .hljs-ln-n,.comment-content pre code table tr td.hljs-ln-numbers .hljs-ln-n{color:rgba(255,255,255,.35);}
.wznrys pre code table tr td.hljs-ln-code,.comment-content pre code table tr td.hljs-ln-code{border-left-color:rgba(255,255,255,.1);}

/* 11.2 评论区
 *      「暂无评论」深色态：浅色由 comments.css 用 --once-faint 给出，深色下
 *      --once-faint（slate-500）压 brand-900 只有 3.3:1，改用 --once-muted。
 *      「回复」链接深色态：style.css:82 的 .dark ... .comment-reply-link{color:#555}
 *      特异性 (1,5,1)，压过 comments.css 的 (1,4,1)，#555 压 brand-900 只有 2.1:1。
 *      下面两条同为 (1,5,1) 且本文件更靠后，同时也压过 comments.css 的 (1,4,2)。 */
.dark #comments .no-comments{color:var(--once-muted);}
.dark #comments .comment-list li .comment-body .reply .comment-reply-link{color:var(--once-accent-400);}
.dark #comments .comment-list li .comment-body .reply .comment-reply-link:hover{color:var(--once-accent-300);}

/* 11.3 语言提示弹窗（main.js 跨语言访问时真会弹出）：
 *      style.css 里残留的是 Google Material 调色板，深色下是中性炭灰盒子，
 *      与全站 brand-950/900/800 的冷海军蓝不同系。
 *      border-color 必须保留 !important：style.css 那条本身带 !important。 */
.once-lang-prompt-box p{color:var(--once-muted);}
.once-lang-prompt-secondary{background:var(--once-surface);border-color:var(--once-border)!important;color:var(--once-text);}
.once-lang-prompt-secondary:hover{background:var(--once-subtle);}
.once-lang-prompt-close:hover{background:var(--once-subtle);}
.dark .once-lang-prompt-box{background:var(--once-surface);color:var(--once-text);border-color:var(--once-border);}
.dark .once-lang-prompt-box p{color:var(--once-muted);}
.dark .once-lang-prompt-secondary{background:var(--once-subtle);border-color:var(--once-border)!important;color:var(--once-text);}
.dark .once-lang-prompt-close,.dark .once-lang-prompt-close:hover,.dark .once-lang-prompt-secondary:hover{color:var(--once-muted);background:var(--once-subtle);}

/* 11.4 轮播指示器：官网首页 Hero 的当前项是橙色，style.css 给的是纯黑 80%，
 *      在整页里是唯一一处黑色当前态。左右箭头默认态的暖中性灰也一并换成品牌深色
 *      （hover 已由 skin.css 给成橙色）。#banner 是本主题唯一的轮播。 */
#banner .carousel-indicators button:before{background-color:rgba(255,255,255,.5);}
#banner .carousel-indicators button.active:before{background-color:var(--once-accent-500);}
#banner .carousel-control-prev i,#banner .carousel-control-next i{background:rgba(7,11,20,.6);}

/* 11.5 Toast（main.js 复制代码等交互后弹出）：
 *      style.css 用的是 Bootstrap 4 那套 success/error/info/warning 彩底，
 *      深色下还翻成白底黑字。官网的语义色只有 emerald 与 accent 两套，
 *      所以统一成深色面板 + 左侧色条表意，避开「白字压黄底」的对比度问题。
 *      阴影不要用 var(--once-shadow-lg)：浅色值 alpha 只有 .05，浮层会糊在页面上。 */
.toast{
  background:rgba(7,11,20,.94);
  color:#fff;
  border:none;
  border-left:3px solid var(--once-slate-400,#94a3b8);
  border-radius:var(--once-radius-sm);
  box-shadow:0 10px 25px -5px rgba(7,11,20,.35),0 4px 10px -4px rgba(7,11,20,.25);
}
.toast.success{border-left-color:#10b981;}
.toast.error{border-left-color:var(--once-accent-400,#ff7f45);}
.toast.info{border-left-color:var(--once-accent-300,#ffa477);}
.toast.warning{border-left-color:#fbbf24;}
/* 深色与浅色完全一致，顺带干掉 style.css 的 .dark .toast{color:#333} */
.dark .toast{background:rgba(7,11,20,.96);color:#fff;}
.dark .toast.success{border-left-color:#10b981;}
.dark .toast.error{border-left-color:var(--once-accent-400,#ff7f45);}
.dark .toast.info{border-left-color:var(--once-accent-300,#ffa477);}
.dark .toast.warning{border-left-color:#fbbf24;}

/* 11.6 深色下无封面文章的占位图：nopic.svg 是 #cccccc 实心块，贴在 brand-900
 *      卡片上是一块刺眼的浅灰。选择器用完整路径结尾，不会命中真实缩略图；
 *      后台设了自定义 thumbUrl 时本条自然不生效。 */
.dark img[src$="/assets/img/nopic.svg"]{filter:invert(1) brightness(.58) saturate(0);}

/* 11.7 「分类」子菜单的键盘兜底（WCAG 2.1.1 / 2.4.3）：
 *      sub-menu 上带 header.php 写死的 inline style="display:none"，
 *      author 样式的 !important 胜过无 !important 的 inline style，所以能压过它。
 *      真正的开合与 aria-expanded 在 main.js 的 ds_mainmenu() 里，这条只是
 *      JS 失效时仍能用键盘进入分类的保底。 */
.header-menu .header-menu-ul li:focus-within>.sub-menu{display:block!important;}
#mobile_right_nav .menu-zk li:focus-within>.sub-menu{display:block!important;}

/* 11.8 减少动态效果（WCAG 2.3.3）。放在文件末尾保证优先级。
 *      JS 侧（返回顶部的平滑滚动、抽屉子菜单的 slideToggle）由 main.js 的
 *      onceReduceMotion() 接管——CSS 覆盖不到那两处。 */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    transition-duration:.01ms!important;
    scroll-behavior:auto!important;
  }
  .post_def:hover,
  .post_gallery:hover,
  .links-page-item:hover{transform:none;}
  .post_def:hover img{transform:none;}
  .scrollToTopBtn{transition:none;}
  .scrollToTopBtn.showBtn{transform:none;}
}
