/* ============================================================
   retro.css —— 2010 年代早中期个人主页风格
   说明：这个文件会被 Hugo 当作模板处理，所以 { { } } 里的
        内容是取自 hugo.toml 的配置，改配置即可生效。

   风格取向（2026-09 改版，第二版）：
   之前那版用了不少"柔和渐变 + 大圆角 + 大留白 + 低饱和配色"，
   远看像现代作品集。这一版刻意反着来：
     · 背景用平铺小图，不用渐变天空
     · 一律直角，阴影用硬边偏移，不用大范围模糊
     · 配色提高饱和度，标题条用 Windows XP 那种高光渐变
     · 字号降到 12px，间距收紧，文字密度加大
     · 按钮/输入框用 outset / inset 立体边框
     · 辅助文字不再用"三级灰阶"（那是现代设计系统的特征），一律压到深灰
     · 正文链接 hover 改回"黄底红字"这种老式反馈
   ============================================================ */

/* ============================================================
   基础重置
   ============================================================ */

/* 字体栈先在这里算一次，下面 8 处引用都指向它。
   emoji 字体（Mona12Emoji，见文件末尾第 26 节）必须插在通用族
   sans-serif **之前**：通用族一定会命中系统字体，排在它后面就等于
   永远轮不到，浏览器会直接用 Windows 自带的彩色 emoji。
   反过来也不能排太前 —— 排在 SimSun / 宋体 之前的话，©®™♀♂ 这些
   宋体点阵里本来就有的字符会被它抢走。夹在中间正好：
   汉字标点走宋体点阵，剩下真正没人管的 emoji 才落到 Mona。 */


  
  
  


/* ---------- 1. 基础重置 ---------- */
* { margin: 0; padding: 0; box-sizing: content-box; }

html {
  overflow-y: scroll;               /* 永远显示滚动条，免得页面左右跳 */
  scrollbar-color: #a8c0d8 #e8eef6; /* 当年 IE 那种彩色滚动条的意思 */
}

body {
  font-family: 'Tahoma,"Microsoft YaHei","微软雅黑",Verdana,SimSun,"宋体",'Mona12Emoji', sans-serif';
  font-size: 12px;
  line-height: 1.65;
  color: #000000;
  padding: 8px 0 40px;

  /* 平铺的小格子背景图 —— 2010 年个人站几乎人手一张。
     注意两个坑：
     1) 必须用 absURL。relURL 在 CSS 里拿不到 baseURL 的子路径
        （站点在 /BlogStand/ 下，relURL 会给出 /images/... 直接 404）。
     2) 图片必须是 PNG。这个环境下 System.Drawing 存 GIF 会把调色板写坏
        （实测 #e3eefa 被存成 #CCFFCC 之类的噪声色），底纹会变成麻点。 */
  background-color: #e7f1fc;
  background-image: url(https://arcarlight.github.io/BlogStand/images/bg-tile.png);
}

::selection { background: #316ac5; color: #ffffff; }

/* ---------- 2. 链接（当年浏览器默认的那三种颜色） ---------- */
a { color: #0000ee; text-decoration: underline; }
a:visited { color: #551a8b; }
a:hover, a:focus { color: #ff0000; text-decoration: underline; }

/* 老式交互：正文/列表链接 hover 变成黄底红字。2010 年中文站几乎都是这个反馈 */
.entry-content a:hover,
.post-title a:hover,
.side-list a:hover,
.link-list a:hover,
.pager a:hover { background: #ffff00; color: #ff0000; }

img { border: 0; }

.clearfix::after { content: ""; display: table; clear: both; }

/* ---------- 3. 页面容器 ----------
   顶部那 15px 是彩虹分割条（rainbow.png 平铺一行），当年很流行。
   版心里面也铺同一张网格底纹（左侧栏之间的空档、列表页内容少时的
   空白区域都会露出纹理），白盒子浮在纹理上 —— 当年就是这么搭的，
   纯白大留白反而是现代作品集的味道。 */
#page {
  width: 1000px;
  margin: 0 auto;
  padding-top: 15px;
  background-color: #ffffff;
  background-image: url(https://arcarlight.github.io/BlogStand/images/rainbow.png), url(https://arcarlight.github.io/BlogStand/images/bg-tile.png);
  background-repeat: repeat-x, repeat;
  /* 底纹层偏移 (-4,-4)：让版心内侧第一列/第一行落在方格中间，
     而不是正好压在一条网格线上 —— 否则版心边框旁边会多出一条线，
     看起来像 2~3px 的粗边。 */
  background-position: left top, -4px -4px;
  border: 1px solid #7f9db9;
  box-shadow: 4px 4px 0 #aac4e0;    /* 硬边偏移阴影，不是柔和光晕 */
}

/* ---------- 4. 顶部 Banner ---------- */
#header {
  position: relative;
  height: 118px;
  overflow: hidden;
  border-bottom: 3px solid #ff9900;
  background-color: #1c5c9f;
  background-image:
    /* 硬边高光带 + 两套周期不同的斜纹，故意让纹理不那么"规整" */
    linear-gradient(180deg,
      rgba(255,255,255,.34) 0,
      rgba(255,255,255,.10) 34px,
      rgba(255,255,255,0)   35px,
      rgba(0,0,0,.16)       112px,
      rgba(0,0,0,.34)       118px),
    repeating-linear-gradient(90deg,
      rgba(255,255,255,.07) 0 2px,
      rgba(255,255,255,0)   2px 29px),
    repeating-linear-gradient(115deg,
      rgba(255,255,255,.11) 0 5px,
      rgba(255,255,255,0)   5px 13px),
    linear-gradient(180deg, #58a0e6 0, #1c5c9f 55%, #0e3b6b 100%);
}

#site-logo {
  position: absolute;
  left: 18px;
  top: 20px;
  right: 200px;
}

#site-logo a { text-decoration: none; }
#site-logo a:hover { text-decoration: none; background: none; }

.site-name {
  display: block;
  font-family: "Comic Sans MS", 'Tahoma,"Microsoft YaHei","微软雅黑",Verdana,SimSun,"宋体",'Mona12Emoji', sans-serif';
  font-size: 30px;
  font-weight: bold;
  letter-spacing: 1px;
  color: #ffffff;
  /* 硬边描边 + 一点发光，2010 年的标题都这么干 */
  text-shadow: 2px 2px 0 #08243f, -1px -1px 0 #6fb2f0, 0 0 10px rgba(255,255,255,.45);
}

.site-slogan {
  display: block;
  margin-top: 5px;
  font-size: 12px;
  color: #cfe6ff;
  text-shadow: 1px 1px 0 rgba(0,0,0,.55);
}

#header-right {
  position: absolute;
  right: 16px;
  top: 34px;
  text-align: right;
}

/* 原来是"白虚线框 + 旋转 -6 度"，那是现代复古贴纸的套路；
   改成 1px 金框 + 金字 + 深色描边（直接压在深蓝斜纹上对比度只有 3 出头） */
.header-stamp {
  display: inline-block;
  padding: 3px 9px;
  font-size: 11px;
  letter-spacing: 1px;
  color: #f2dfa0;
  border: 1px solid #e8c766;
  text-shadow: 0 1px 1px rgba(0,0,0,.75);
}

/* ---------- 5. 导航栏 ---------- */
#navbar {
  background: #0f3a68;
  border-top: 1px solid #6fb2f0;    /* 内侧 1px 高光，做出"凸起"感 */
  border-bottom: 1px solid #08243f;
}

#navbar .nav { list-style: none; padding-left: 8px; }
#navbar .nav li { float: left; }

#navbar .nav li a {
  display: block;
  padding: 7px 18px;
  font-size: 13px;
  color: #d6e7f9;
  text-decoration: none;
  border-right: 1px solid #2f6fbf;
  border-left: 1px solid #08243f;
  text-shadow: 1px 1px 0 rgba(0,0,0,.5);
}

#navbar .nav li a:hover {
  background: #2f6fbf;
  color: #ffffff;
  text-decoration: none;
}

#navbar .nav li.active a {
  background: #ff9900;
  color: #ffffff;
  font-weight: bold;
  border-right-color: #b36b00;
  border-left-color: #ffcc66;
  text-shadow: 1px 1px 0 rgba(0,0,0,.35);
}

/* ---------- 6. 滚动公告 ----------
   原来 marquee 会把这行撑到 56px 高，整条大半是空的。
   现在固定成 24px 一行，"公告"标签用绝对定位挪到左边，不再被 marquee 压住。 */
#notice {
  position: relative;
  height: 24px;
  padding: 3px 8px 3px 68px;
  overflow: hidden;
  font-size: 12px;
  line-height: 24px;
  color: #cc0000;
  background: #ffffcc;
  border-bottom: 1px solid #cc9900;
}

.notice-label {
  position: absolute;
  left: 8px;
  top: 4px;
  height: 16px;
  padding: 0 7px;
  font-size: 11px;
  line-height: 16px;
  color: #ffffff;
  background: #cc0000;
  border: 1px solid #800000;
  letter-spacing: 2px;
  animation: retro-blink 1.4s step-end infinite;
}

#notice marquee { display: block; height: 24px; line-height: 24px; }

@keyframes retro-blink { 50% { opacity: .35; } }

/* ---------- 7. 主区域两栏 ---------- */
#main { padding: 8px; }

#content { float: left; width: 656px; }
#sidebar { float: right; width: 300px; }

/* ---------- 8. 内容卡片 ---------- */
.box {
  margin-bottom: 6px;
  background: #ffffff;
  border: 1px solid #6699cc;
}

/* 标题条：平色 + 上亮下暗各 1px。
   原来用的是三段式光泽渐变（近白 → 高光 → 深蓝收边），那是 Aqua/Web2.0
   的"玻璃胶囊"写法，是全站最明显的现代感来源，这里改回当年的做法。 */
.box-title {
  padding: 4px 8px;
  font-size: 13px;
  font-weight: bold;
  color: #0b3f78;
  background: #cfe0f5;
  border-top: 1px solid #ffffff;
  border-bottom: 1px solid #6699cc;
  text-shadow: 0 1px 0 #ffffff;
}

.box-title::before {
  content: "■";
  margin-right: 5px;
  font-size: 10px;
  color: #c94800;
  vertical-align: 2px;
}

.box-subtitle {
  float: right;
  font-size: 11px;
  font-weight: normal;
  color: #33556f;
}

.box-body { padding: 8px 10px; }

/* ---------- 9. 欢迎区（首页内容整宽显示） ---------- */
.welcome-inner { overflow: hidden; }
.welcome-inner > p { margin-bottom: 6px; }

/* 欢迎区不在 .entry-content 里面，拿不到上面那条 img 规则。
   它外层是 overflow:hidden，所以图片一旦超过栏宽是「被切掉」而不是「戳出去」——
   两种都难看。这里补上同样的约束。 */
.welcome-inner img { box-sizing: border-box; max-width: 100%; height: auto; }

.welcome-sign {
  margin-top: 12px;
  padding-top: 8px;
  text-align: right;
  font-size: 12px;
  color: #446688;
  border-top: 1px dashed #b9d0e8;
}

/* ---------- 10. 日志列表 ---------- */
.post-list { list-style: none; }

.post-item {
  padding: 6px 4px;
  border-bottom: 1px dotted #99bbdd;
}

.post-item:last-child { border-bottom: 0; }

/* 鼠标划过去整行变色 —— 老式列表页的标准交互 */
.post-item:hover { background: #f2f7fd; }

/* 日期徽章改成平色 + 1px 立体，不再用光滑的上下渐变 */
.post-date {
  float: left;
  width: 56px;
  padding: 4px 0 5px;
  text-align: center;
  color: #ffffff;
  background: #ff9900;
  border: 1px solid #a85c00;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.7), inset 0 -1px 0 rgba(0,0,0,.18);
  text-shadow: 1px 1px 0 #7a4200, 0 0 2px rgba(90,50,0,.55);
}

.pd-md { display: block; font-family: Tahoma, Consolas, "Courier New", monospace; font-size: 13px; font-weight: bold; line-height: 1.2; }
/* 白字压在橙底上对比度只有 2 出头，年份那行更小更虚；
   加粗 + 硬边深色描边是当年在彩色徽章上保证可读性的老办法 */
.pd-y { display: block; font-family: Tahoma, Consolas, "Courier New", monospace; font-size: 10px; font-weight: bold; line-height: 1.3; }

.post-info { margin-left: 68px; }

.post-title { font-size: 14px; line-height: 1.5; }
.post-title a { color: #0033cc; }

/* NEW 小牌子。挂在两处：
   1) 博客列表最新那一条（.post-item:first-child）
   2) 侧栏 / 首页「更新日志」里最近几天更新过的条目（li.is-new）
   做成 ::after 而不是 <span>：伪元素不会被点阵字体那条通配规则
   （html.pxfont body *）改掉字体和字号，牌子才能一直是原来那个样子。
   之前给前三条都挂红色加粗带下划线的 new!，会读成第二个链接，
   而且 2 月的文章也叫 new! 很怪，所以只挂一条。 */
.post-item:first-child .post-title a::after,
.update-log li.is-new > a::after,
.update-log li.is-new > .ul-title::after,
.notice-list li.is-new > a::after,
.notice-list li.is-new > .nt-text::after {
  content: "NEW";
  display: inline-block;
  margin-left: 5px;
  padding: 0 4px;
  font-family: Tahoma, sans-serif;
  font-size: 10px;
  font-weight: bold;
  line-height: 15px;
  color: #ffffff;
  background: #e63333;
  border: 1px solid #8b0000;
  vertical-align: 1px;
  animation: retro-blink 1s step-end infinite;
}

.post-summary {
  margin: 3px 0;
  font-size: 12px;
  color: #444444;
  line-height: 1.65;
}

.post-meta-mini { font-size: 11px; color: #666666; }
.post-meta-mini .meta-cat { margin-right: 8px; }
.post-meta-mini .meta-read { margin-right: 8px; }
.post-meta-mini .meta-more { color: #c94800; }

.list-footer {
  padding-top: 8px;
  border-top: 1px dotted #99bbdd;
  text-align: right;
  font-size: 12px;
}

.list-intro { margin-bottom: 8px; font-size: 12px; color: #444444; }

/* ---------- 11. 文章页 ---------- */
.entry-title {
  padding-bottom: 5px;
  margin-bottom: 8px;
  font-size: 18px;
  line-height: 1.4;
  color: #123f70;
  border-bottom: 2px solid #ff9900;
}

.entry-meta {
  padding: 5px 8px;
  margin-bottom: 10px;
  font-size: 11px;
  color: #333333;
  background: #f5f9ff;
  border: 1px dashed #6699cc;
}

.meta-sep { margin: 0 5px; color: #99bbdd; }
.meta-item { margin-right: 4px; }

.entry-tags { margin-bottom: 8px; font-size: 11px; }
.tag-label { color: #333333; }

.tag-item {
  display: inline-block;
  padding: 0 6px;
  margin: 2px 3px 2px 0;
  font-size: 11px;
  color: #1b5a9e;
  background: #eef5fd;
  border: 1px solid #88b0d8;
}

.tag-item:hover {
  color: #ffffff;
  background: #1b5a9e;
  text-decoration: none;
}

/* 标签云里的计数别贴着边框 */
.tagcloud .tag-item { padding-right: 8px; }
.tagcloud .tag-item sup { font-size: 9px; color: #666666; margin-left: 2px; }

/* ---------- 12. 正文排版 ----------
   行高从 1.75 收到 1.65：2010 年中文站是宋体 12px / 行高 18~19px，
   这里字号保持 13px（站长之前试过宋体 + 更小字号，150% 缩放下可读性变差
   主动回退了），只把行距压紧一点，密度往那个年代靠。 */
.entry-content { font-size: 13px; line-height: 1.65; color: #000000; }
.entry-content p { margin-bottom: 5px; text-indent: 2em; }   /* 每段空两格，中文博客的老规矩 */
.entry-content ul, .entry-content ol { margin: 0 0 9px 2.2em; }
.entry-content li { margin-bottom: 3px; }

.entry-content h2 {
  margin: 16px 0 8px;
  padding-left: 8px;
  font-size: 15px;
  color: #123f70;
  border-left: 5px solid #ff9900;
}

.entry-content h3 {
  margin: 13px 0 6px;
  font-size: 14px;
  color: #1b5a9e;
}

.entry-content h4 { margin: 11px 0 5px; font-size: 13px; color: #445566; }

/* ---------- 12b. 从旧站搬来的内容补充排版 ---------- */
.entry-content h1 {
  margin: 18px 0 9px;
  padding-bottom: 5px;
  font-size: 16px;
  line-height: 1.5;
  color: #123f70;
  border-bottom: 2px solid #ff9900;
}

.entry-content h1:first-child { margin-top: 0; }

/* 旧站大量使用 <center>，补齐它在正文里的表现 */
.entry-content center { display: block; text-align: center; text-indent: 0; }
.entry-content center > h1 { border-bottom: 0; }

/* 居中、图注、列表里的段落不要首行缩进，否则会歪 */
.entry-content center p,
.entry-content blockquote p,
.entry-content li p,
.entry-content figure p,
.entry-content i p,
.entry-content em p { text-indent: 0; }

/* 心声：淡灰色的内心独白。编辑器工具栏那个「💭 心声」按钮插的就是它。
   用 class 而不是内联 style="color:grey"，是为了以后想改颜色只动这一处
   （旧站搬来的那几处还是内联写法，颜色一样是 #808080，不用动）。 */
.entry-content .inner-voice { color: #808080; }

/* 旧站的「更新日志」折叠区 */
.entry-content details {
  margin: 9px 0;
  padding: 6px 10px;
  background: #fbfdff;
  border: 1px solid #6699cc;
  border-left: 4px solid #1b5a9e;
}

.entry-content summary {
  font-weight: bold;
  color: #123f70;
  cursor: pointer;
  outline: none;
}

.entry-content details[open] summary {
  margin-bottom: 6px;
  padding-bottom: 4px;
  border-bottom: 1px dashed #b9d0e8;
}

/* 旧站页面里内嵌的 <body>，迁移后变成这个容器（黑底白字的那种页面） */
.own-room { padding: 14px 16px; }
.own-room a { color: #8ab4f8; }
.own-room a:hover { color: #ffcc66; background: none; }

/* 「想要飞的始祖小鸟」那页自带背景图的容器 */
.tbtak {
  padding: 14px 16px;
  border: 1px solid #6699cc;
}

/* 图片：白底 + 1px 灰边 + 2px 内衬（当年贴图的样子）。
   这里有两个叠加的坑，会让段落里的图从白色卡片右边戳出去 19px（CDP 量出来的）：
   1) 全局 box-sizing 是 content-box，所以 max-width:100% 只管**内容盒**，
      再加 padding 2px×2 + border 1px×2，整张图的边框盒比容器宽 6px
      （实测 634 的列里图片渲染成 640）；
   2) .entry-content p 有 text-indent:2em，段首那张图会被再往右推 2em（24px）。
   6 + 24 = 30px，减掉 10px 内衬，正好戳出 19~20px，压在版心底纹和侧栏之间那条缝上。
   修法：盒模型改 border-box（让 max-width 把衬边算进去）+ 段首是图时不缩进。 */
.entry-content img {
  box-sizing: border-box;
  max-width: 100%;
  height: auto;
  padding: 2px;
  background: #ffffff;
  border: 1px solid #999999;
}

/* 重量级动图的「首帧海报 + 点击播放」。
   ------------------------------------------------------------------
   起因：migrated/Bounce-Game.gif 是 11.47 MB / 231 帧 / 15 秒，
   单张就占了 niki_202608 那页 96% 的负载 —— 比全站其他所有图加起来还重。
   试过转成动图 webp：体积能从 11.47 MB 掉到 1.42 MB，但**不可靠**：
   实测帧数从 231 变成 219、逐帧像素最大差 240（画面被改了）。
   用户自己画的素材不该赌这种有损转换，所以改为：
     · 正文只放第一帧的海报（webp，13.8 KB / 35.9 KB 两档）
     · 想看动画的点开 —— 原 GIF 一个字节没动，动画完整
   收益是 11470 KB -> 13.8 KB（约 99.9%），代价是要点一下。
   ------------------------------------------------------------------ */
.gif-play {
  display: inline-block;
  position: relative;
  line-height: 0;              /* 去掉行内元素底部的空隙，免得提示条偏移 */
  text-decoration: none;
}
.gif-play img {
  /* 海报不要上面那条白边蓝框 —— 它只是缩略图，框起来像张普通图反而看不出能点 */
  border-color: #6a7fa8;
}
.gif-play-hint {
  display: block;
  line-height: 1.6;
  margin-top: 2px;
  padding: 1px 6px;
  color: #ffffff;
  background: #2f4f7a;
  border: 1px solid #1c3355;
}
/* 字号必须走 --px-sm 且 !important —— 点阵字体那条
   `html.pxfont body * { font-size: var(--px) !important }` 会把这里接管掉，
   普通 font-size 根本不生效（站点里所有分散的小字都是这么写的）。 */
html.pxfont .gif-play-hint { font-size: var(--px-sm, 11px) !important; }
.gif-play:hover .gif-play-hint {
  background: #3f6396;
}
.gif-play:hover img {
  border-color: #ffffff;
}

/* 段首就是图的段落不缩进。text-indent 只作用于首行，所以只要把图从首行摘出来
   就安全了 —— 图后面换行才出现的（比如 <p><br><img>）本来就不吃这个缩进。
   用 :has() 而不是给 img 加 display:block，因为后者会把
   <p><img><img></p> 这种并排的图拆成两行。

   ⚠️ 必须同时认 <picture>：tools/build-images.py 会把正文里的 <img> 换成
   <picture><source …><img …></picture>，段首元素就从 img 变成了 picture ——
   只写 img 的那版会漏掉，于是段首图又被推右 2em（24px），
   整张图从白色卡片右边戳出去（2026-10-12 做正文图优化时踩的）。 */
.entry-content p:has(> img:first-child),
.entry-content p:has(> picture:first-child),
.entry-content p:has(> a:first-child > img:first-child),
.entry-content p:has(> a:first-child > picture:first-child) { text-indent: 0; }

.entry-content blockquote {
  margin: 9px 0;
  padding: 6px 12px;
  color: #444444;
  background: #f7f7f7;
  border-left: 4px solid #ff9900;
}

/* 经典的"上下两条线"浮雕分隔线 */
.entry-content hr {
  height: 0;
  margin: 14px 0;
  border: 0;
  border-top: 1px solid #999999;
  border-bottom: 1px solid #ffffff;
}

.entry-content code {
  padding: 0 4px;
  font-family: Consolas, "Courier New", monospace;
  font-size: 12px;
  color: #c7254e;
  background: #f4f4f4;
  border: 1px solid #e6e6e6;
}

.entry-content pre {
  margin: 9px 0;
  padding: 8px 10px;
  overflow-x: auto;
  font-size: 12px;
  line-height: 1.6;
  background: #f8f8f8;
  border: 1px solid #cccccc;
  border-left: 4px solid #1b5a9e;
}

.entry-content pre code { padding: 0; color: inherit; background: none; border: 0; }

/* 表格改回当年的"卫星格"：border-spacing 露 1px 深色底，
   而不是现在这种细线平铺。当年的表格是页面骨架，这个缺口最明显。 */
.entry-content table {
  margin: 9px 0;
  border-collapse: separate;
  border-spacing: 1px;
  background: #99a7b5;
  border: 1px solid #6e7c8c;
  font-size: 12px;
}

.entry-content th, .entry-content td {
  padding: 3px 8px;
  background: #ffffff;
  border: 0;
}

.entry-content th {
  background: #dfeaf6;
  color: #123f70;
  font-weight: bold;
}

/* ---------- 13. 上下篇 / 操作按钮 ---------- */
.entry-nav {
  margin-top: 14px;
  padding-top: 10px;
  font-size: 12px;
  border-top: 1px dashed #b9d0e8;
}

.entry-prev { float: left; width: 48%; }
.entry-next { float: right; width: 48%; text-align: right; }

.entry-actions {
  margin-top: 11px;
  padding-top: 10px;
  text-align: right;
  border-top: 1px dashed #b9d0e8;
}

/* 立体按钮：outset 边框 = 左上亮、右下暗，比圆角渐变"土"得多，正是要的效果。
   底部再加 1px 暗边，是当年"玻璃按钮"的标准做法。 */
.action-btn {
  display: inline-block;
  padding: 2px 10px;
  margin-left: 5px;
  font-size: 12px;
  color: #123f70;
  background: #dfeaf6;
  border: 2px outset #c3d9ef;
  border-bottom-color: #8aa6c4;
  text-decoration: none;
}

.action-btn:hover {
  color: #123f70;
  background: #ffd88a;
  border-color: #e0a94a;
  text-decoration: none;
}

.action-btn:active { border-style: inset; }

/* ---------- 13b. 日记：每一天的回复区 ---------- */
.day-reply {
  margin: 9px 0 16px;
  padding-top: 7px;
  border-top: 1px dashed #b9d0e8;
}

.day-reply-btn {
  font-family: inherit;
  font-size: 12px;
  padding: 1px 11px;
  color: #123f70;
  cursor: pointer;
  background: #dfeaf6;
  border: 2px outset #c3d9ef;
  border-bottom-color: #8aa6c4;
}

.day-reply-btn:hover { background: #ffd88a; border-color: #e0a94a; }
.day-reply-btn:active { border-style: inset; }
.day-reply-btn:disabled { color: #999999; cursor: default; }

.day-reply-body { margin-top: 7px; }

.day-reply-frame {
  display: block;
  width: 100%;
  height: 330px;
  background: #ffffff;
  border: 1px solid #6699cc;
}

/* ---------- 13c. 导航页：月份日历居中 ----------
   navigator.md 里每个月的结构是 <center>2026年9月</center> 紧跟一个 <table>，
   用相邻兄弟选择器精确命中，不影响其它页面的表格 */
.entry-content center + table {
  margin-left: auto;
  margin-right: auto;
}

/* ---------- 14. 侧边栏挂件 ---------- */
.widget {
  margin-bottom: 6px;
  background: #ffffff;
  border: 1px solid #6699cc;
}

/* 挂件标题条：平色中蓝 + 上亮下暗各 1px。
   原来那条是 5 段 XP 高光渐变 + 近黑收边，9 个挂件叠在一起分量太重、
   把左侧内容区压住了；改成平色以后和内容盒标题条变成同一套语言。 */
.widget-title {
  padding: 4px 8px;
  font-size: 12px;
  font-weight: bold;
  color: #ffffff;
  background: #3b6ea5;
  border-top: 1px solid #7fa8d4;
  border-bottom: 1px solid #1e4272;
  text-shadow: 1px 1px 0 #1b3a63;
}

.widget-title::before {
  content: "▸";
  margin-right: 4px;
  color: #ffcc66;
}

.widget-body {
  padding: 8px;
  font-size: 12px;
  background: #fbfdff;
}

/* 站长名片 */
.widget-about { text-align: center; }

.avatar-box { margin-bottom: 5px; }

/* 头像做成"相框"：白底内衬 + 硬边外框 + 硬偏移阴影 */
.avatar {
  width: 96px;
  height: 96px;
  padding: 2px;
  background: #ffffff;
  border: 1px solid #7f9db9;
  box-shadow: 2px 2px 0 #c3d9ef;
}

.about-name { font-size: 13px; font-weight: bold; color: #123f70; }
.about-desc { margin: 3px 0 5px; font-size: 11px; color: #444444; }

.about-meta {
  list-style: none;
  padding-top: 5px;
  font-size: 11px;
  text-align: left;
  color: #444444;
  border-top: 1px dashed #b9d0e8;
}

.about-meta li { padding: 1px 0; }

/* 侧栏列表 */
.side-list { list-style: none; }
.side-list li {
  padding: 2px 0;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
  border-bottom: 1px dotted #d7e3f0;
}

.side-list li:last-child { border-bottom: 0; }
.side-list .count { float: right; color: #555555; font-size: 11px; }

.side-list-dot li::before {
  content: "·";
  margin-right: 4px;
  font-weight: bold;
  color: #c94800;
}

.side-more { margin-top: 5px; font-size: 11px; text-align: right; }

/* ---------- 更新日志（侧栏挂件 / 首页列表共用） ----------
   比普通列表多一列日期，日期用小一号的灰字 —— 2010 年的站很兴这个，
   一条一条像值班表。
   日期字号必须走 --px-sm：它是「12 的整数倍设备像素」那一档，
   写死 11px 的话在点阵字体下会落在半个设备像素上、边缘发灰。 */
.update-log { list-style: none; }

.update-log li {
  padding: 2px 0;
  line-height: 1.55;
  border-bottom: 1px dotted #d7e3f0;
}

.update-log li:last-child { border-bottom: 0; }

/* 日期字号必须走 --px-sm，而且必须 !important：
   点阵字体那条规则是 `html.pxfont body * { font-size: var(--px) !important }`，
   不带 !important 的话这里会被它按回正文那档字号（日期就和标题一样大了）。
   --px-sm 也是 12 的整数倍设备像素，所以小归小、边缘是锐的。 */
.update-log .ul-date {
  margin-right: 5px;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
}

.update-log a { color: #0033cc; }
.update-log .ul-title { color: #333333; }

/* ---------- 公告栏（侧栏挂件） ----------
   和更新日志的区别：公告是一句话，所以日期单独占一行（更新日志里日期是行首前缀）。
   字号同样走 --px-sm，保持「12 设备像素的整数倍」这个锐利条件。 */
.notice-list { list-style: none; }

.notice-list li {
  padding: 3px 0;
  line-height: 1.5;
  border-bottom: 1px dotted #d7e3f0;
}

.notice-list li:last-child { border-bottom: 0; }

.notice-list .nt-date {
  display: block;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
}

.notice-list .nt-text { color: #333333; }
.notice-list a { color: #0033cc; }

/* ---------- 音乐播放器（侧栏挂件，默认排最上面） ----------
   一窄条：播放键 + 曲名 + 进度 + 音量，共三行，高度按「小挂件」压着。
   曲名会省略号截断，不换行 —— 所以再长的标题也不会把这条撑高。 */
#music-player .widget-body { padding: 6px 8px; }

.mp { line-height: 1.3; }

.mp-row {
  display: flex;
  align-items: center;
  gap: 4px;
}

.mp-row + .mp-row { margin-top: 4px; }

/* 按钮：老式立体小方钮，按下时凹陷 */
.mp-btn {
  flex: 0 0 auto;
  min-width: 24px;
  height: 20px;
  padding: 0 3px;
  font-family: inherit;
  font-size: var(--px-sm, 11px) !important;
  line-height: 1;
  color: #123f70;
  text-align: center;
  cursor: pointer;
  background: #e8f1fb;
  border: 1px solid #7f9db9;
  border-radius: 2px;
}

.mp-btn:hover { background: #d6e7f8; }
.mp-btn:active {
  padding: 1px 2px 0 4px;
  background: #c3d9ef;
  border-style: inset;
}

.mp-btn-play {
  min-width: 28px;
  color: #ffffff;
  background: #3b6ea5;
  border-color: #1e4272;
}

.mp-btn-play:hover { background: #4b81bd; }
.mp-btn-play.is-playing { background: #c94800; border-color: #8f3400; }

.mp-btn-small {
  min-width: 20px;
  color: #555555;
  background: #f4f8fd;
}

.mp-btn.is-on {
  color: #ffffff;
  background: #3b6ea5;
  border-color: #1e4272;
}

/* 正在放的那首：曲名走深蓝，和普通链接区分开 */
.mp-now {
  flex: 1 1 auto;
  min-width: 0;
  text-align: center;
}

.mp-title {
  display: block;
  overflow: hidden;
  font-size: var(--px-sm, 11px) !important;
  color: #0033cc;
  text-decoration: none;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.mp-title:hover { text-decoration: underline; }

.mp-artist {
  display: block;
  overflow: hidden;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* 进度条 / 音量条：凹陷轨道 + 蓝色填充，拖起来要有点击感 */
.mp-bar {
  position: relative;
  flex: 1 1 auto;
  height: 10px;
  min-width: 40px;
  overflow: hidden;
  cursor: pointer;
  background: #eef4fb;
  border: 1px solid #7f9db9;
  border-radius: 2px;
}

.mp-bar:focus { outline: 1px dotted #c94800; outline-offset: 1px; }

.mp-bar-fill {
  width: 0;
  height: 100%;
  background: #3b6ea5;
}

.mp-bar.is-drag .mp-bar-fill { background: #c94800; }

.mp-bar-vol { flex: 0 1 60px; min-width: 44px; }

.mp-row-seek .mp-time {
  flex: 0 0 auto;
  width: 32px;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
}

.mp-row-seek .mp-time:last-child { text-align: right; }

.mp-count {
  flex: 0 0 auto;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
}

/* 出问题时那行小字（文件没找到之类），平时不占位 */
.mp-hint {
  margin-top: 4px;
  font-size: var(--px-sm, 11px) !important;
  line-height: 1.5;
  color: #a03000;
}

/* ---------- 画廊（Infinite Gallery） ----------
   排版用「对齐行」（justified rows）：每个缩略图带 --gr = 高/宽，靠 flex-grow
   按比例分配宽度，于是**每行等高、整行填满**。这样既不像固定方格那样裁画，
   也不会让一张竖图把整行撑出一片空白。

   每行的目标高度由 --gal-row 控制（默认 150px）：一行放不下就换行，
   flex-wrap 自己处理。图片保留原生宽高比，不裁不拉伸。 */
.gal { margin-bottom: 10px; }

.gal-toc {
  padding: 6px 8px;
  margin-bottom: 10px;
  font-size: var(--px-sm, 11px) !important;
  list-style: none;
  text-align: center;
  background: #eef5fd;
  border: 1px solid #c3d9ef;
}

.gal-toc li { display: inline; }

.gal-toc li + li::before {
  margin: 0 6px;
  color: #9bb4cc;
  content: "|";
}

.gal-toc a { color: #0033cc; }

.gal-sec { margin-bottom: 14px; }

.gal-h {
  margin: 10px 0 2px;
  font-size: var(--px-lg, 15px) !important;
  line-height: 1.4;
  color: #123f70;
  text-align: center;
}

.gal-desc {
  margin: 0 0 8px;
  font-size: var(--px-sm, 11px) !important;
  line-height: 1.6;
  color: #7488a0;
  text-align: center;
}

.gal-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  padding: 0;
  margin: 0;
  list-style: none;
}

/* flex-basis 按比例给个基准，flex-grow 拿走剩余空间 —— 一行拼满为止。
   min-width 防止极端比例的图单独占一整行。 */
.gal-item {
  flex: var(--gr, 1) 1 calc(var(--gal-row, 150px) / var(--gr, 1));
  min-width: 76px;
  margin: 0;
}

.gal-link { display: block; text-decoration: none; }

.gal-pic {
  display: block;
  overflow: hidden;
  background: #fbfdff;
  border: 1px solid #c3d9ef;
}

/* 高度交给 flex 行决定，宽度拉满，靠 object-fit 保证不变形。
   注意 .entry-content img 那条 max-width:100% + height:auto 会把高度按回 auto
   （一行就不等高了），所以这里必须 !important。 */
.gal-pic img {
  display: block;
  width: 100% !important;
  height: var(--gal-row, 150px) !important;
  max-width: none !important;
  object-fit: contain;
}

.gal-link:hover .gal-pic { border-color: #3b6ea5; }
.gal-link:hover .gal-title { text-decoration: underline; }

.gal-meta {
  padding: 2px 1px 4px;
  line-height: 1.45;
}

.gal-title {
  display: block;
  overflow: hidden;
  font-size: var(--px-sm, 11px) !important;
  color: #0033cc;
  text-align: center;
  white-space: nowrap;
  text-overflow: ellipsis;
}

.gal-date {
  display: block;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
  text-align: center;
}

.gal-empty {
  margin: 4px 0 10px;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
  text-align: center;
}

/* 窄一点的屏幕把行高调小，一行自然多放几张 */
@media (max-width: 900px) {
  .gal { --gal-row: 128px; }
}

@media (max-width: 620px) {
  .gal { --gal-row: 104px; }
  .gal-item { min-width: 60px; }
}

/* ---------- 画廊：鼠标悬浮的预览卡 ----------
   停在缩略图上，旁边浮出一张稍大的图 + 简介（没写简介就不占位）。
   用 position:fixed + 跟随鼠标，边缘自动翻转，所以贴着窗口边也不会被裁。
   触屏没有 hover，这套不会生效，那边照旧点开弹层。 */
.gal-card {
  position: fixed;
  z-index: 950;
  width: 300px;
  padding: 6px;
  background: #ffffff;
  border: 1px solid #7f9db9;
  box-shadow: 2px 2px 0 #c3d9ef;
  pointer-events: none;      /* 只是看，不抢鼠标事件 */
}

.gal-card-img {
  display: block;
  width: 100% !important;
  height: auto !important;
  max-height: 300px;
  object-fit: contain;
  background: #fbfdff;
  border: 1px solid #e3edf7;
}

.gal-card-tx {
  padding: 5px 2px 1px;
  line-height: 1.55;
}

.gal-card-title {
  display: block;
  font-size: var(--px, 13px) !important;
  color: #123f70;
}

.gal-card-desc {
  display: block;
  margin-top: 2px;
  font-size: var(--px-sm, 11px) !important;
  color: #44586e;
}

.gal-card-hint {
  display: block;
  margin-top: 3px;
  font-size: var(--px-sm, 11px) !important;
  font-style: normal;
  color: #9bb4cc;
  text-align: right;
}

/* 弹层里的简介（图下面那行） */
.gal-lb-desc {
  max-width: min(720px, 90vw);
  margin: 6px 0 0;
  font-size: var(--px-sm, 11px) !important;
  line-height: 1.7;
  color: #a9c2da;
  text-align: center;
}

/* ---------- 画廊的看大图弹层 ---------- */
html.gal-lb-open, html.gal-lb-open body { overflow: hidden; }

.gal-lb {
  position: fixed;
  z-index: 999;
  inset: 0;
  background: rgba(8, 18, 32, 0.88);
}

.gal-lb-inner {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 34px 42px 22px;
}

.gal-lb-fig {
  display: flex;
  flex-direction: column;
  align-items: center;
  max-width: 100%;
  max-height: 100%;
  margin: 0;
}

/* 灯箱里的大图外面套了 <picture>（为了优先用 webp），这一层要当一个
   「和原来一样」的容器：跟着图片尺寸走、居中，别自己撑宽或压缩父级。 */
.gal-lb-pic {
  display: flex;
  align-items: center;
  justify-content: center;
  max-width: 100%;
  min-height: 0;
}

.gal-lb-img {
  max-width: 100% !important;
  max-height: calc(100vh - 120px);
  background: #ffffff;
  border: 3px solid #e8eef6;
  box-shadow: 0 0 0 1px #0b1a2b, 4px 4px 0 rgba(0, 0, 0, 0.35);
}

.gal-lb-cap {
  padding-top: 8px;
  font-size: var(--px-sm, 11px) !important;
  line-height: 1.6;
  color: #dfe9f4;
  text-align: center;
}

.gal-lb-title { color: #ffffff; }
.gal-lb-date { margin-left: 4px; color: #a9c2da; }
.gal-lb-count { margin-left: 8px; color: #7f9db9; }

.gal-lb button {
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  color: #eaf2fb;
  cursor: pointer;
  background: rgba(59, 110, 165, 0.92);
  border: 1px solid #cfe0f2;
}

/* 图标是内联 SVG（不是字体字符）—— 点阵字库里没有 ‹ › × 的字形，
   用字符的话按钮会是个空框（站长截图报过这个问题）。 */
.gal-lb button svg {
  width: 18px;
  height: 18px;
  fill: currentColor;
}

.gal-lb button:hover {
  color: #ffffff;
  background: #4b81bd;
}

.gal-lb button:focus-visible {
  outline: 2px solid #ffcc66;
  outline-offset: 2px;
}

.gal-lb-close { top: 10px; right: 12px; }
.gal-lb-prev { top: 50%; left: 10px; margin-top: -17px; }
.gal-lb-next { top: 50%; right: 10px; margin-top: -17px; }

/* 首页「欢迎光临」里的更新日志：只列最近几条 + 一行「看全部」。
   完整记录在 /updates/ 那一页（同一份数据）。 */
.home-log {
  margin: 8px 0 0;
  text-align: left;
}

.home-log-list {
  padding: 0;
  margin: 0 0 5px;
  list-style: none;
}

.home-log-list li {
  padding: 2px 0 2px 10px;
  overflow: hidden;
  border-bottom: 1px dotted #dbe8f5;
}

.home-log-list li::before {
  float: left;
  margin-left: -10px;
  color: #a8bccf;
  content: "·";
}

.hl-date {
  display: inline-block;
  width: 82px;
  color: #7488a0;
  letter-spacing: 0;
}

.hl-more {
  margin-left: 6px;
  color: #9bb4cc;
  font-size: var(--px-sm, 11px) !important;
}

.home-log-more {
  margin: 4px 0 0;
  font-size: var(--px-sm, 11px) !important;
  text-align: right;
}

/* 更新日志里「同一日期下有多条」的两种写法：
   · 并列（默认）：同一天重复写 [[items]]，日期只在第一行出现，后续行日期列留空
   · 折叠（text = [...] + indent = true）：子条目缩进成续行 */
.update-log .ul-date-same {
  min-height: 1px;           /* 占住日期那一列，让正文对齐 */
}

.update-log .ul-sub-item .ul-title {
  display: inline-block;
  padding-left: 62px;        /* 与日期同宽，看起来是上一条的续行 */
  color: #56677a;
}

.update-log .ul-sub {
  padding: 0;
  margin: 2px 0 0 62px;      /* 与日期同宽，看起来是同一组的续行 */
  list-style: none;
}

.update-log .ul-sub li {
  padding: 1px 0 1px 9px;
  border-bottom: 0;
}

.update-log .ul-sub li::before {
  float: left;
  margin-left: -9px;
  color: #a8bccf;
  content: "·";
}

/* ---------- /updates/ 完整更新日志页 ---------- */
.updall { margin-bottom: 10px; }

.updall-count {
  margin: 0 0 8px;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
  text-align: center;
}

.updall-year {
  margin-bottom: 6px;
  background: #fbfdff;
  border: 1px solid #c3d9ef;
}

.updall-year > summary {
  padding: 5px 9px;
  font-weight: bold;
  color: #123f70;
  cursor: pointer;
  background: #eef5fd;
  border-bottom: 1px solid #dbe8f5;
}

.updall-year > summary:hover { background: #e2eefb; }

.updall-n {
  margin-left: 8px;
  font-weight: normal;
  font-size: var(--px-sm, 11px) !important;
  color: #7488a0;
}

.updall-year .update-log { padding: 6px 9px 4px; }

.updall-back {
  margin: 10px 0 0;
  font-size: var(--px-sm, 11px) !important;
  text-align: center;
}

/* 搜索框 */
.search-form { overflow: hidden; }

.search-form input[type="text"] {
  float: left;
  width: 178px;
  height: 22px;
  padding: 0 5px;
  font-family: inherit;
  font-size: 12px;
  color: #000000;
  background: #ffffff;
  border: 2px inset #a8c0d8;   /* 凹陷边框 */
  outline: none;
}

.search-form input[type="text"]:focus { background: #ffffcc; }

.search-form button {
  float: left;
  width: 58px;
  height: 26px;
  font-family: inherit;
  font-size: 12px;
  color: #123f70;
  cursor: pointer;
  background: #dfeaf6;
  border: 2px outset #c3d9ef;
  border-bottom-color: #8aa6c4;
}

.search-form button:hover { background: #ffd88a; border-color: #e0a94a; }
.search-form button:active { border-style: inset; }

.search-tip { margin-top: 5px; font-size: 11px; color: #555555; }

/* 标签云 */
.tagcloud { line-height: 2.1; }

/* 计数器 */
.counter-body { text-align: center; }

.counter-row { padding: 2px 0; color: #333333; }

.counter-num {
  display: inline-block;
  padding: 0 6px;
  margin: 0 3px;
  font-family: Tahoma, Consolas, "Courier New", monospace;
  font-size: 12px;
  font-weight: bold;
  letter-spacing: 1px;
  color: #33ff33;
  background: #000000;
  border: 1px solid #555555;
  text-shadow: 0 0 4px rgba(51,255,51,.85);
}

.counter-label { font-size: 11px; }

/* 时钟 */
.clock-body { text-align: center; }

.retro-clock {
  padding: 4px 0;
  font-family: Tahoma, Consolas, "Courier New", monospace;
  font-size: 24px;
  font-weight: bold;
  letter-spacing: 3px;
  color: #33ff33;
  background: #000000;
  border: 2px inset #666666;
  text-shadow: 0 0 6px rgba(51,255,51,.9);
}

.retro-date { margin-top: 4px; font-size: 11px; color: #333333; }

/* 一言 */
.hitokoto { font-size: 12px; line-height: 1.75; color: #333333; }
.hitokoto-from { margin-top: 3px; font-size: 11px; text-align: right; color: #555555; }

/* 88×31 按钮墙 */
.button-wall { overflow: hidden; }

.btn88 {
  float: left;
  width: 88px;
  height: 31px;
  margin: 0 4px 4px 0;
  padding: 0;
  box-sizing: border-box;   /* 加上边框正好 88×31，不然是 90×33 */
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  font-family: Tahoma, 'Tahoma,"Microsoft YaHei","微软雅黑",Verdana,SimSun,"宋体",'Mona12Emoji', sans-serif';
  text-align: center;
  text-decoration: none;
  overflow: hidden;
  border: 1px solid rgba(0,0,0,.45);
  box-shadow: inset 1px 1px 0 rgba(255,255,255,.45), inset -1px -1px 0 rgba(0,0,0,.30);
}

.btn88:hover { text-decoration: none; filter: brightness(1.15); }
.btn88-l1 { display: block; font-size: 8px; letter-spacing: .5px; line-height: 1.1; }
.btn88-l2 { display: block; font-size: 9px; font-weight: bold; line-height: 1.15; }

/* ---------- 15. 分页 ---------- */
.pager {
  margin-top: 11px;
  padding-top: 8px;
  font-size: 12px;
  border-top: 1px dashed #b9d0e8;
}

.pager-prev { float: left; }
.pager-next { float: right; }
.pager-info { float: none; display: block; text-align: center; color: #333333; font-size: 11px; }
.pager .disabled { color: #aaaaaa; }
.pager-total { color: #666666; }

/* ---------- 16. 分类 / 标签总览页 ---------- */
.taxo-list { list-style: none; }
.taxo-item { padding: 5px 0; border-bottom: 1px dotted #99bbdd; }
.taxo-item:last-child { border-bottom: 0; }
.taxo-name { font-size: 13px; }
.taxo-count { font-size: 11px; color: #555555; }

/* ---------- 17. 友情链接页 ---------- */
.link-list { list-style: none; }
.link-item { padding: 7px 0; border-bottom: 1px dotted #99bbdd; }
.link-item:last-child { border-bottom: 0; }
.link-name { font-size: 13px; font-weight: bold; }
.link-desc { display: block; margin-top: 2px; font-size: 11px; color: #444444; }

.link-apply {
  margin-top: 14px;
  padding: 10px;
  font-size: 12px;
  background: #f5f9ff;
  border: 1px dashed #6699cc;
}

.sub-title {
  margin-bottom: 5px;
  padding-left: 7px;
  font-size: 13px;
  color: #123f70;
  border-left: 4px solid #ff9900;
}

.codebox {
  width: 96%;
  margin-top: 6px;
  padding: 6px;
  font-family: Consolas, "Courier New", monospace;
  font-size: 12px;
  line-height: 1.6;
  color: #000000;
  background: #ffffff;
  border: 2px inset #a8c0d8;
  resize: vertical;
}

/* ---------- 18. 404 ---------- */
.error-body { text-align: center; padding: 20px 10px; }

.error-code {
  font-family: "Comic Sans MS", 'Tahoma,"Microsoft YaHei","微软雅黑",Verdana,SimSun,"宋体",'Mona12Emoji', sans-serif';
  font-size: 64px;
  line-height: 1;
  color: #dcebfa;
  text-shadow: 2px 2px 0 #9dbfe0, 4px 4px 0 #eef5fd;
}

.error-text { margin: 12px 0; font-size: 13px; color: #333333; }
.error-tips { font-size: 12px; color: #444444; }

.error-links {
  margin: 7px 0 12px;
  list-style: none;
}

.error-links li { display: inline-block; margin: 0 7px; }
.error-quote { font-size: 11px; color: #666666; }

/* ---------- 19. 留言板 ---------- */
.comments-tip { margin-bottom: 8px; font-size: 11px; color: #555555; }

/* ---------- 20. 页脚 ---------- */
#footer {
  padding: 11px 10px 14px;
  text-align: center;
  font-size: 11px;
  line-height: 1.9;
  color: #444444;
  background: #eef5fd;
  border-top: 3px double #6699cc;   /* 双线，比单线更有年代感 */
}

.footer-nav { margin-bottom: 5px; }
.footer-nav a { margin: 0 2px; }

.footer-tips { color: #444444; }
.footer-tips strong { color: #1b5a9e; }
.footer-copy { color: #444444; }

.sep { margin: 0 4px; color: #99bbdd; }

/* ---------- 21. 回到顶部 ----------
   原来是淡蓝灰底 + 细体字距，看着像现代排版；
   改回橙底白粗字，就是当年那种刺眼的 GIF 按钮。
   定位用 left:50% + margin-left:508px，让它永远贴在 1000px 版心右边线外侧
   （500 + 8 像素缝），而不是用 right 相对视窗定位 —— 那样在 1100 宽左右的
   视窗下会压到侧栏挂件上。视窗不够宽时(<=1140)退化成贴着右下角。 */
#gotop {
  position: fixed;
  left: 50%;
  margin-left: 508px;
  bottom: 14px;
  z-index: 999;
  padding: 5px 10px;
  font-size: 12px;
  font-weight: bold;
  color: #ffffff;
  background: #ff9900;
  border: 2px solid #a85c00;
  text-decoration: none;
  text-shadow: 1px 1px 0 #7a4200;
}

#gotop:hover { color: #ffff00; background: #e07d00; text-decoration: none; }

/* 视窗放不下版心外侧那条缝时（<=1179），退化成贴右下角并做窄一点，
   免得压在侧栏挂件的标题条上 */
@media (max-width: 1179px) {
  #gotop { left: auto; right: 6px; margin-left: 0; font-size: 11px; padding: 4px 7px; }
}

/* 老式滚动条（IE 时代的彩色滚动条，这里只用标准属性做个意思） */
::-webkit-scrollbar { width: 15px; height: 15px; }
::-webkit-scrollbar-track { background: #eef2f7; border-left: 1px solid #d5dde6; }
::-webkit-scrollbar-thumb { background: #cdd9e6; border: 1px solid #a8b8c8; }
::-webkit-scrollbar-thumb:hover { background: #b9cbe0; }

/* ---------- 22. 鼠标跟随小星星 ---------- */
.sparkle {
  position: fixed;
  z-index: 9999;
  pointer-events: none;
  line-height: 1;
  animation: sparkle-fade .9s linear forwards;
}

@keyframes sparkle-fade {
  0%   { opacity: 1; transform: translate(-50%, -50%) scale(1) rotate(0deg); }
  100% { opacity: 0; transform: translate(-50%, -160%) scale(.25) rotate(200deg); }
}

/* 系统里开了"减少动态效果"就把闪烁/星星关掉 */
@media (prefers-reduced-motion: reduce) {
  .notice-label,
  .post-item:first-child .post-title a::after,
  .sparkle { animation: none; }
}

/* ============================================================
   24. 「点阵宋体」小字（可选，hugo.toml: pixelSongSmall）
   ------------------------------------------------------------
   为什么只有小字能换宋体：宋体内嵌的点阵（bitmap）只覆盖
   12~17 设备像素那一段，实测（本机 Chrome + 逐像素数灰边）：

     CSS 字号   100%    125%    150%    200%
       8px      抗锯齿  抗锯齿  点阵    点阵
      10px      抗锯齿  点阵    点阵    抗锯齿
      11px      抗锯齿  点阵    点阵    抗锯齿
      12px      点阵    点阵    抗锯齿  抗锯齿
      14px      点阵    抗锯齿  抗锯齿  抗锯齿
      16px      点阵    抗锯齿  抗锯齿  抗锯齿

   也就是说：只有「字号 × 屏幕缩放 = 12~17 设备像素」时宋体才是真点阵。
   站长的屏是 150% 缩放，窗口就是 8~11px，所以这里统一取 11px
   （= 16.5 设备像素，落在窗口里）。

   正文故意不换：11px 宋体的物理尺寸只有 6pt 左右（这屏是 191 PPI，
   12~17 设备像素天生只有 2010 年 96 PPI 屏上的一半大），读长文太累。
   ============================================================ */


/* ---------- 23. 小屏幕退化（当年其实不做响应式，这里加一点点） ----------
   断点取 1004px 而不是常见的 1040：页脚自己写着「Best viewed in 1024×768」，
   而版心 1000 + 左右各 1px 边框 = 1002，1024 的窗口减掉 15px 常驻滚动条
   还剩 1009，放得下。原来断点 1040 会把 1024 当成小屏，底纹、版心投影、
   两栏全被关掉，等于把当年最常见的那个分辨率给拆了。 */
@media (max-width: 1004px) {
  body { background-image: none; }
  /* box-sizing: border-box 让 100% 把 1px 边框也算进去，
     否则版心会正好比视窗宽 2px、右边框被挤出屏幕 */
  #page { width: 100%; box-sizing: border-box; box-shadow: none; }
  #content, #sidebar { float: none; width: auto; }
  #sidebar { margin-top: 8px; }
  .site-name { font-size: 24px; }
  #site-logo { right: 16px; }
  /* 这里原来是 display:none，会把「EST. 2010」整块藏掉；
     改小一点保留 */
  #header-right { top: 10px; right: 10px; }
  .header-stamp { padding: 2px 6px; font-size: 10px; letter-spacing: 0; }
}

@media (max-width: 700px) {
  #header-right { display: none; }
}

/* ============================================================
   25. 像素字体模式（VonwaonBitmap 12px，hugo.toml: pixelFont）
   ------------------------------------------------------------
   这份字体是「轮廓即像素方块」的矢量字体：unitsPerEm = 1200，
   每个设计像素正好 100 单位（已全量核对，没有一个坐标落在网格外）。
   所以它锐利的**充要条件**是
       字号(CSS px) × devicePixelRatio = 12 的整数倍
   字号由 head.html 里的内联脚本按当前 DPR 算好，写进 --px / --px-lg /
   --px-xl。**千万不要在这里写死字号**，改了就会掉出整数倍。

   两条硬规则：
   1. 不能加粗。实测加粗后中间灰阶像素占比从 39% 涨到 52%，方块边缘全糊，
      所以这里把 font-weight 统一压成 normal，层级改用字号表达。
   2. 需要等宽或高亮的零件（LED 时钟、计数器数字、88×31 按钮）留在原字体，
      它们靠加粗和等宽表达，换点阵只会更糟。
   ============================================================ */






  
  



/* ============================================================
   宋体点阵：**分块 + unicode-range**
   ------------------------------------------------------------
   这份字体是全量的（28432 字形，整份约 690 KB）。整份一次性下发的话，
   每次访问都要多花 690 KB —— 实测首页负载 2.17 MB 里有 690 KB 是它。

   所以 tools/build-pixel-font.py 把它切成若干块：
     块1（本文件名的那个）  站点现在用到的 2511 字，约 72 KB，head.html 会 preload
     块2 起                其余的字按码位均分，每块约 165 KB
   浏览器**只下载页面上真正出现的字所在的那几块**。正常访问只花块1；
   哪天写了生僻字，才多下一块。

   块定义在 data/pixel-font.toml，由那个脚本生成，不要手改。

   ⚠️ 键名要用 `index hugo.Data "pixel-font"`：Hugo 对带连字符的文件名
      **保留连字符**（`hugo.Data.pixel-font` 这种写法在模板里没法解析，
      `hugo.Data.pixel_font` 也取不到 —— 实测两样都是 NIL）。
   ============================================================ */

@font-face {
  font-family: 'SimSun12Pixel';
  src: url(../fonts/simsun12-pixel.woff2) format('woff2');
  unicode-range: U+20-7E,U+B7,U+D7,U+F7,U+3C9,U+2014,U+2018-2019,U+201C-201D,U+2026,U+203B,U+2190-2193,U+2264-2265,U+2460-2462,U+25BD,U+25C7,U+2605,U+2640,U+2642,U+3000-3002,U+3007,U+300A-300D,U+3010-3011,U+3042,U+3044,U+3046,U+3048,U+304A-304D,U+304F-3051,U+3053-305B,U+305D-3061,U+3063-3064,U+3066-306B,U+306D-3071,U+3073,U+3078,U+307B-307C,U+307E-307F,U+3081-3084,U+3087-308D,U+308F,U+3092-3093,U+30A1-30A2,U+30A4,U+30A6-30A8,U+30AB-30AC,U+30AF-30BA,U+30BF-30C0,U+30C3-30C4,U+30C7-30C9,U+30CB,U+30CE,U+30D0,U+30D5-30D6,U+30D9,U+30DC-30E2,U+30E5-30E7,U+30E9-30ED,U+30F3,U+30FC,U+4E00-4E01,U+4E03,U+4E07,U+4E09-4E0B,U+4E0D-4E0E,U+4E11,U+4E13-4E14,U+4E16,U+4E18,U+4E1A-4E1D,U+4E22,U+4E24-4E25,U+4E27,U+4E2A,U+4E2D,U+4E30,U+4E32,U+4E34,U+4E3A-4E3B,U+4E3D-4E3E,U+4E45,U+4E48-4E49,U+4E4B-4E4C,U+4E4E-4E50,U+4E54,U+4E56,U+4E58,U+4E5D,U+4E5F-4E61,U+4E66,U+4E70-4E71,U+4E86,U+4E89,U+4E8B-4E8C,U+4E8E-4E8F,U+4E91-4E92,U+4E94-4E95,U+4E9A-4E9B,U+4EA1,U+4EA4,U+4EA6-4EA7,U+4EAB-4EAC,U+4EAE,U+4EB2,U+4EBA,U+4EC0-4EC1,U+4EC5-4EC6,U+4ECA-4ECB,U+4ECD-4ECE,U+4ED3-4ED4,U+4ED6,U+4ED8-4ED9,U+4EE3-4EE5,U+4EEA,U+4EEC,U+4EF0,U+4EF6-4EF7,U+4EFB,U+4EFD,U+4EFF,U+4F01,U+4F0A,U+4F11,U+4F17-4F1A,U+4F1E-4F20,U+4F24,U+4F26,U+4F2A,U+4F2F-4F30,U+4F34,U+4F38,U+4F3C-4F3D,U+4F46,U+4F4D-4F4F,U+4F53,U+4F55,U+4F59,U+4F5B-4F5C,U+4F60,U+4F73,U+4F7F,U+4F88,U+4F8B,U+4F9B,U+4F9D,U+4FA7,U+4FB5,U+4FBF,U+4FC3,U+4FDD,U+4FE1,U+4FE8-4FE9,U+4FEE-4FEF,U+4FF1,U+500D,U+5012,U+5019,U+501F,U+503C,U+503E,U+5047,U+504C,U+504F,U+505A,U+505C,U+5065,U+5076-5077,U+508D,U+50AC,U+50B2,U+50CF,U+50F5,U+50FB,U+512A,U+513F-5141,U+5143-5145,U+5148-5149,U+514B,U+514D,U+5154,U+515C,U+5165,U+5168,U+516B-516D,U+5171,U+5173-5174,U+5176-5179,U+517B-517D,U+5185,U+518C-518D,U+5192,U+5199,U+519B,U+51A0,U+51AC,U+51B0,U+51B2-51B3,U+51B5,U+51B7,U+51BB,U+51C0,U+51C6,U+51C9,U+51CB-51CC,U+51CF,U+51D1,U+51DD,U+51E0-51E1,U+51ED,U+51EF,U+51F8-51FB,U+5200,U+5203,U+5206-5207,U+520A,U+5212,U+5217,U+5219-521B,U+521D,U+5220,U+5224,U+5229,U+522B,U+522E,U+5230,U+5236-5237,U+523B,U+524D,U+5251,U+5254,U+5256,U+5265,U+5267,U+5269-526A,U+526F,U+5272,U+5288,U+529B,U+529E-52A1,U+52A3,U+52A8-52AA,U+52B1-52B3,U+52B5,U+52BF,U+52C3,U+52C7,U+52C9,U+52CB,U+52D2,U+52DF,U+52E4,U+52FA,U+52FE-52FF,U+5305-5306,U+5316-5317,U+5319,U+5320,U+5323,U+533A-533B,U+533F,U+5341,U+5343,U+5347-5348,U+534A,U+534E,U+5355-5357,U+535A,U+5360-5361,U+5367,U+536B,U+536F-5370,U+5373-5375,U+5377-5378,U+5382,U+5385-5386,U+5389,U+538B-538C,U+539A,U+539F,U+53A5,U+53A8,U+53BB,U+53C2,U+53C8-53CD,U+53D1,U+53D6-53D8,U+53DB,U+53E0,U+53E3-53E6,U+53E8,U+53EA-53EC,U+53EE-53F0,U+53F2-53F3,U+53F6-53F9,U+5403-5404,U+5408-540A,U+540C-540E,U+5410-5411,U+5413,U+5417,U+541B,U+541E-541F,U+5426-5427,U+542B-542C,U+542F,U+5435,U+5438-5439,U+5440,U+5443,U+5446,U+5448,U+544A,U+5450,U+5455,U+5458,U+545C,U+5462,U+5468,U+5473,U+5475,U+547B-547D,U+5480,U+548C,U+548E,U+5492,U+5494-5496,U+54A7,U+54AC,U+54AF,U+54B3,U+54B8,U+54BB,U+54BD,U+54C0-54C1,U+54C7-54C9,U+54CD,U+54D4,U+54D7,U+54DD-54DF,U+54E5-54E7,U+54E9-54EA,U+54ED,U+54FC,U+5509,U+5510,U+5514,U+5524,U+552E-552F,U+5531,U+5543-5544,U+5546,U+554A,U+555C,U+5561,U+5565-5566,U+556A,U+557E,U+5582,U+5584,U+5589-558A,U+5598-5599,U+559C-559D,U+55A7,U+55B1,U+55B5-55B7,U+55D2-55D4,U+55EB,U+55EF,U+561B,U+561F,U+562D,U+5634,U+563F,U+5668-566A,U+567C,U+5685,U+56BC,U+56CA,U+56D4,U+56DB,U+56DE,U+56E0,U+56E2,U+56ED,U+56F0,U+56F4,U+56FA,U+56FD-56FF,U+5706,U+5708,U+571F,U+5723,U+5728,U+5730,U+5733,U+573A,U+573E,U+5740,U+5747,U+574D,U+574F-5751,U+5757,U+575A,U+5761,U+5768,U+5782-5784,U+578B,U+57AB,U+57CB,U+57CE,U+57DF,U+57F9-57FA,U+5802,U+5806,U+5821,U+5824,U+582A,U+5831,U+5834,U+584C,U+5851,U+5854,U+585E,U+586B,U+5883,U+5893,U+5899,U+589E,U+58A8,U+58C1,U+58E4,U+58EB,U+58EE,U+58F0,U+58F3,U+5904,U+5907,U+5909,U+590D,U+590F,U+5915-5916,U+591A,U+591C,U+591F,U+5922,U+5927,U+5929-592B,U+592E,U+5931,U+5934,U+5938-593A,U+5947,U+5949,U+594B,U+594F,U+5951,U+5954-5957,U+5962,U+5965,U+5973,U+5976,U+5979,U+597D,U+5982,U+5984,U+5987,U+5992,U+5996,U+5999,U+59B9,U+59C6,U+59CB,U+59D0,U+59D3-59D4,U+59DA,U+59FF,U+5A01,U+5A03,U+5A1C,U+5A31,U+5A5A,U+5A9A,U+5AC9,U+5ACC,U+5AE9,U+5B09,U+5B50,U+5B54,U+5B57-5B58,U+5B63-5B64,U+5B66,U+5B69,U+5B81,U+5B83,U+5B85,U+5B88-5B89,U+5B8B-5B8C,U+5B8F,U+5B98,U+5B9A,U+5B9C-5BA4,U+5BB3,U+5BB5-5BB6,U+5BB9,U+5BBD,U+5BBF,U+5BC2,U+5BC4,U+5BC6,U+5BCC,U+5BD2,U+5BDE-5BDF,U+5BE1,U+5BF8-5BF9,U+5BFB-5BFC,U+5BFF,U+5C01,U+5C04,U+5C06,U+5C0A,U+5C0F,U+5C11,U+5C14,U+5C16,U+5C18,U+5C1A,U+5C1D,U+5C24,U+5C2C,U+5C31,U+5C34,U+5C3A,U+5C3C-5C42,U+5C45,U+5C48,U+5C4B,U+5C4E-5C4F,U+5C55,U+5C5E,U+5C71,U+5C81-5C82,U+5C94,U+5C9A-5C9B,U+5CA9,U+5CFB,U+5D07,U+5D29,U+5D2D,U+5D4C,U+5DDE,U+5DE1-5DE2,U+5DE5-5DE8,U+5DEE,U+5DF1-5DF2,U+5DF4,U+5DF7,U+5DFE,U+5E01-5E03,U+5E05,U+5E08,U+5E0C,U+5E15-5E16,U+5E18,U+5E1D,U+5E26-5E27,U+5E2D-5E2E,U+5E38,U+5E3D,U+5E45,U+5E55,U+5E72-5E74,U+5E76,U+5E78,U+5E7B-5E7C,U+5E7F,U+5E86-5E87,U+5E8A,U+5E8F,U+5E93-5E95,U+5E97,U+5E9E-5E9F,U+5EA6-5EA7,U+5EC9-5ECA,U+5ED3,U+5EF6,U+5EFA-5EFB,U+5F00,U+5F02-5F04,U+5F08,U+5F0F,U+5F15,U+5F1F-5F20,U+5F25-5F27,U+5F2F,U+5F31,U+5F35,U+5F39-5F3A,U+5F52-5F53,U+5F55,U+5F62,U+5F69,U+5F70-5F71,U+5F79,U+5F7B-5F7C,U+5F80-5F81,U+5F84-5F85,U+5F88,U+5F8B,U+5F90,U+5F92,U+5F97,U+5FA1,U+5FAA,U+5FAE,U+5FB7,U+5FBD,U+5FC3,U+5FC5-5FC6,U+5FCD,U+5FCF,U+5FD7-5FD9,U+5FE7,U+5FEA-5FEB,U+5FF5,U+5FFD,U+6000-6001,U+600E,U+6012,U+6014-6016,U+601C-601D,U+6025,U+6027-6028,U+602A,U+602F,U+603B,U+604B,U+604D,U+6050,U+6055,U+6062,U+6068-6069,U+606C,U+606F-6070,U+6076,U+607C,U+6084,U+6089,U+6094,U+609F-60A0,U+60A6,U+60A8,U+60AC,U+60B2,U+60C5,U+60CA,U+60D1,U+60D5,U+60DA,U+60DC,U+60E7-60E9,U+60EB-60EC,U+60EF,U+60F3,U+60F6,U+60FA,U+6108-6109,U+610F,U+611A,U+611F,U+6123-6124,U+6127,U+613F,U+614C,U+614E,U+6155,U+6162,U+6170,U+6175,U+61BE,U+61C2,U+61D2,U+620F-6211,U+6216,U+6218,U+621A,U+622A,U+6233-6234,U+6237,U+623F-6240,U+624B,U+624D-624E,U+6251,U+6253,U+6258,U+625B,U+6263,U+6267,U+6269,U+626B-626D,U+626F-6270,U+6276,U+6279,U+627C,U+627E-6280,U+6284,U+628A,U+6291,U+6293,U+6295-6298,U+629A-629B,U+62A2,U+62A4-62A5,U+62AB-62AC,U+62B1,U+62B5,U+62B9,U+62BD,U+62C5-62C6,U+62C9,U+62CC-62CE,U+62D0,U+62D2-62D4,U+62D6,U+62D9,U+62DB-62DC,U+62DF,U+62E3,U+62E5,U+62E7-62E9,U+62EC,U+62F1,U+62F3,U+62FC-62FF,U+6301-6302,U+6307,U+6309,U+630E,U+6311,U+6316,U+631F-6321,U+6323-6325,U+6328,U+632A-632B,U+632F,U+633A,U+6346,U+634B,U+634F,U+6355,U+635F,U+6361-6363,U+6367,U+636E,U+6376,U+6387-6389,U+638C,U+638F,U+6392,U+6398,U+63A2,U+63A5,U+63A7-63A8,U+63B0,U+63B3,U+63BA,U+63C9,U+63CF-63D0,U+63D2,U+63E1,U+63EA,U+63ED,U+63F4,U+63FD,U+6402,U+6413,U+641C,U+641E,U+642A,U+642C-642D,U+643A,U+6444,U+6446-6447,U+644A,U+6458,U+6469,U+6478,U+6487,U+6491-6492,U+6495,U+649E,U+64A4,U+64A9,U+64AD,U+64BA,U+64BC,U+64C5,U+64CD-64CE,U+64D2,U+64E6,U+6500,U+6512,U+6525,U+652F,U+6536,U+6539,U+653B,U+653E,U+6545,U+6548,U+654C,U+6551,U+6559,U+655E,U+6562-6563,U+656C,U+6570,U+6572,U+6574,U+6577,U+6587,U+658B,U+6591,U+6597,U+6599,U+659C,U+659F,U+65A4-65A5,U+65A9,U+65AD,U+65AF-65B0,U+65B9,U+65BD,U+65C1,U+65C5,U+65CF,U+65E0,U+65E2,U+65E5-65E7,U+65E9,U+65F6,U+6602,U+660E-660F,U+6613,U+661F-6620,U+6625,U+6628,U+662F,U+6635,U+663D-663E,U+6642-6643,U+6652,U+6655,U+665A,U+6668,U+666E-6670,U+6674,U+6676,U+667A,U+6682,U+6691,U+6696-6697,U+66B4,U+66DA,U+66DD,U+66F2-66F4,U+66F8,U+66FC,U+66FE-6700,U+6708-6709,U+670B,U+670D,U+6714,U+6717,U+671B,U+671D,U+671F,U+6726,U+6728,U+672A-672D,U+672F,U+6735,U+673A,U+6740,U+6742-6743,U+674E,U+6750-6751,U+675F,U+6761,U+6765,U+676D,U+676F,U+6773,U+677E-677F,U+6781,U+6784,U+6790,U+6795,U+6797,U+679C,U+67AA,U+67AD,U+67B6,U+67D0,U+67D3-67D4,U+67DC,U+67E0,U+67E5,U+6805,U+6807,U+680B,U+680F,U+6811,U+6816-6817,U+6821,U+6837-6839,U+683C,U+6840,U+6843,U+6846,U+6848,U+684C,U+6851,U+685C,U+6863,U+6869,U+6876,U+6885,U+68A6,U+68AD,U+68AF-68B0,U+68C0,U+68C9,U+68CD,U+68D2,U+68D5,U+68EE,U+68F1,U+6905,U+690D,U+6930,U+695A,U+697C-697D,U+6982,U+69A8,U+69DB,U+69FD,U+6A21,U+6A2A,U+6A59,U+6A61,U+6A71,U+6AAC,U+6B20-6B23,U+6B27,U+6B32,U+6B3E,U+6B47,U+6B49,U+6B4C,U+6B62-6B66,U+6B6A,U+6B79,U+6B7B,U+6B83,U+6B8A-6B8B,U+6BB5,U+6BC1,U+6BC5,U+6BCD,U+6BCF,U+6BD2,U+6BD4-6BD5,U+6BDB,U+6BEB,U+6BEF,U+6BFD,U+6C11,U+6C14,U+6C17,U+6C1B,U+6C34,U+6C37-6C38,U+6C41-6C42,U+6C49,U+6C5F-6C60,U+6C64,U+6C70,U+6C7D,U+6C83,U+6C89,U+6C99,U+6C9B,U+6C9F,U+6CA1,U+6CB3,U+6CB9,U+6CBB,U+6CBF,U+6CC4,U+6CCA,U+6CD5,U+6CDB,U+6CE1-6CE2,U+6CE5,U+6CE8,U+6CEA,U+6CF0,U+6CFC-6CFD,U+6D01,U+6D0B,U+6D12,U+6D17,U+6D1B,U+6D1E,U+6D25,U+6D2A,U+6D3B,U+6D41,U+6D45-6D46,U+6D4B,U+6D4E-6D4F,U+6D51,U+6D53,U+6D59,U+6D6A,U+6D6E,U+6D74,U+6D77-6D78,U+6D82,U+6D88-6D89,U+6D8C,U+6D9F,U+6DA6-6DA9,U+6DBC,U+6DD8,U+6DE1,U+6DF1,U+6DF3,U+6DF7,U+6DFB,U+6E05,U+6E0A,U+6E10,U+6E17,U+6E29,U+6E32,U+6E34,U+6E38,U+6E3A,U+6E7E-6E7F,U+6E83,U+6E90,U+6E9C,U+6EA2,U+6EAF,U+6ECB,U+6ED1,U+6EDA,U+6EDE,U+6EE1,U+6EE4-6EE5,U+6EE8-6EE9,U+6EF4,U+6F02,U+6F06,U+6F09,U+6F0F,U+6F14,U+6F20,U+6F2B,U+6F31,U+6F3E,U+6F47,U+6F6E,U+6F88,U+6F9C,U+6FC0,U+704C,U+706B,U+706D,U+706F-7070,U+7075,U+707C,U+707E-707F,U+708E,U+7092,U+709D,U+70AE,U+70B8-70B9,U+70BC,U+70C2,U+70C8,U+70D8-70D9,U+70DB,U+70DF,U+70E4,U+70E6-70E7,U+70EB,U+70ED,U+70F9,U+7121,U+7126,U+7130,U+7136,U+714C,U+7167,U+716E,U+717D,U+7184,U+718A,U+719F,U+71AC,U+71C3,U+71D5,U+7206,U+722A,U+722C,U+7231,U+7236-7237,U+723D,U+7247-7248,U+724C,U+7259,U+725B,U+7262,U+7269,U+7272,U+7275,U+7279-727A,U+72AF,U+72B6,U+72B9,U+72C2,U+72D7,U+72D9,U+72E0,U+72E9,U+72EC-72ED,U+72F1,U+72FC,U+730E,U+7316,U+731B-731C,U+732B,U+732E,U+7334,U+736D,U+7384,U+7387,U+738B,U+739B,U+73A9,U+73AF-73B0,U+73C0,U+73CD,U+73E0,U+73ED,U+7403,U+7406,U+7409,U+7410,U+7422,U+7425,U+7434,U+745E-745F,U+7470,U+7483,U+74F6,U+7518,U+751A,U+751C,U+751F,U+7528-7529,U+752B,U+7530-7533,U+7535,U+7537,U+753B,U+7545,U+754C,U+7554,U+7559,U+7565,U+756A,U+758F,U+7591,U+7597,U+759A,U+75AF,U+75B2,U+75BC-75BE,U+75C5,U+75D2,U+75D5,U+75DB,U+75F4,U+75FC,U+762B,U+763E,U+767B,U+767D-767E,U+7684,U+7690-7691,U+76AE,U+76B1,U+76C8,U+76D1,U+76D6,U+76D8,U+76DB,U+76DF,U+76EE-76EF,U+76F4,U+76F8,U+76FC,U+7701,U+7709,U+770B,U+771F-7720,U+7728,U+772F,U+7736,U+773C,U+7740-7741,U+775B,U+7761,U+7792,U+779F,U+77A5,U+77A7,U+77AA,U+77AC,U+77E2,U+77E5,U+77E9,U+77ED-77EE,U+77F3,U+77FF,U+7801,U+7814,U+7816,U+7825,U+7830,U+7834,U+783A,U+7840,U+785D,U+786C,U+786E,U+788C,U+788E,U+7897,U+789F,U+78B0,U+78C1,U+78D5,U+78E8,U+7901,U+793A,U+793C,U+793E,U+7948,U+7956,U+795D-795E,U+7960,U+7965,U+7968,U+796D,U+7977-7978,U+7981,U+7985,U+798F,U+79BB,U+79C0-79C1,U+79C9,U+79CB,U+79CD,U+79D1-79D2,U+79D8,U+79DF,U+79EF-79F0,U+79FB,U+7A00,U+7A0B,U+7A0D,U+7A1A,U+7A33,U+7A3F,U+7A76-7A77,U+7A7A,U+7A7F,U+7A81,U+7A84,U+7A96-7A97,U+7A9C-7A9D,U+7A9F,U+7AA5,U+7ACB,U+7AD6,U+7AD9,U+7ADF-7AE0,U+7AED,U+7AEF,U+7AF9,U+7AFD,U+7B11,U+7B14,U+7B20,U+7B26,U+7B28,U+7B2C,U+7B49,U+7B4B,U+7B51,U+7B54,U+7B56,U+7B77,U+7B7E,U+7B80,U+7B97,U+7BA1,U+7BAD,U+7BB1,U+7BC7,U+7BF7,U+7C07,U+7C27,U+7C38,U+7C73,U+7C7B,U+7C7D,U+7C89,U+7C97-7C98,U+7CA5,U+7CAE,U+7CB9,U+7CBE,U+7CCA,U+7CD5-7CD6,U+7CDF,U+7CFB,U+7D0A,U+7D20,U+7D22,U+7D27,U+7D2B,U+7D2F,U+7D39,U+7D42,U+7D50,U+7D6E,U+7D75,U+7E41,U+7EA0,U+7EA2,U+7EA6-7EA7,U+7EAA,U+7EAF,U+7EB2-7EB3,U+7EB5,U+7EB7-7EB9,U+7EBF,U+7EC3-7EC4,U+7EC6-7EC8,U+7ECA,U+7ECD,U+7ECF,U+7ED1-7ED3,U+7ED5,U+7ED8-7ED9,U+7EDC-7EDD,U+7EDF,U+7EE7,U+7EEA,U+7EED,U+7EF3-7EF5,U+7EF7,U+7EFC-7EFD,U+7EFF-7F00,U+7F13,U+7F15-7F16,U+7F18,U+7F1D,U+7F20,U+7F29,U+7F3A,U+7F50-7F51,U+7F55,U+7F57,U+7F5A,U+7F62,U+7F6A,U+7F6E,U+7F72,U+7F8E,U+7F9E,U+7FA1,U+7FA4,U+7FBD,U+7FD4,U+7FE0-7FE1,U+7FFB-7FFC,U+8000-8001,U+8003,U+8005,U+800C,U+8010,U+8017,U+8033,U+8037-8038,U+803B,U+803D,U+804A,U+804C,U+8054,U+805A,U+8083,U+8089,U+808C,U+809A,U+80A0-80A2,U+80A4-80A5,U+80A9,U+80AF,U+80B2,U+80BF-80C0,U+80C3,U+80C6,U+80CC,U+80D6,U+80DC,U+80DE,U+80E1,U+80E7,U+80F3,U+80F6,U+80F8,U+80FD,U+8102,U+8106,U+8109,U+810F,U+8111,U+8116,U+811A,U+812F,U+8131,U+8138,U+814A,U+8155,U+8165,U+816E,U+8170,U+8179,U+817B,U+817E-8180,U+818A,U+818F,U+819C,U+81A8,U+81BA,U+81C2,U+81E3,U+81EA,U+81ED,U+81F3-81F4,U+8200,U+820C-820D,U+8212,U+8214,U+821E,U+822A,U+822C,U+826F-8270,U+8272-8273,U+827A,U+827E,U+8282,U+8299,U+829D,U+82AC,U+82AF,U+82B1,U+82CF,U+82D4,U+82E5-82E6,U+82F1,U+8301,U+8303,U+8327,U+832B-832C,U+8336,U+8338,U+8349,U+8350,U+8352,U+835E,U+8361,U+8363-8364,U+8367,U+836F,U+8389,U+8393,U+83AB,U+83B1,U+83B7,U+83B9,U+83BD,U+83C7,U+83DC,U+840C,U+8425-8426,U+8428,U+843D,U+8457,U+8482,U+849C,U+84DD,U+8513,U+852C,U+854A,U+8574,U+85AF,U+85C9,U+85CF,U+85E4,U+8638,U+864E,U+8651,U+865A,U+866B,U+8679,U+867D-867E,U+8680-8681,U+86C4,U+86C6-86C7,U+86CB,U+86DB,U+86EE,U+86F9,U+8713,U+8718,U+871C,U+8721,U+8737,U+873B,U+8783,U+878D,U+87BA,U+87F9,U+8815,U+8822,U+8840,U+884C-884D,U+8857,U+8861,U+8863,U+8865,U+8868,U+886C,U+8877,U+888B,U+888D,U+8896,U+88AB,U+88AD,U+88B1,U+88C2,U+88C5,U+88D5,U+88D9,U+88E4,U+88F1,U+88F4,U+88F8-88F9,U+8925,U+897F,U+8981,U+8986,U+89C1-89C2,U+89C4-89C6,U+89C8-89C9,U+89D2,U+89E3,U+89E6,U+8A00,U+8A18,U+8A33,U+8A89,U+8A9E,U+8AAD,U+8AB0,U+8B66,U+8BA1-8BA2,U+8BA4,U+8BA8-8BA9,U+8BAD,U+8BAF-8BB0,U+8BB2,U+8BB6,U+8BB8,U+8BBA,U+8BBE-8BBF,U+8BC1,U+8BC4-8BC6,U+8BC9,U+8BCD,U+8BD1,U+8BD5,U+8BDD-8BDE,U+8BE1-8BE2,U+8BE5-8BE6,U+8BED,U+8BEF,U+8BF1,U+8BF4,U+8BF6-8BF7,U+8BFA-8BFB,U+8BFE,U+8C01,U+8C03,U+8C05,U+8C08,U+8C0A,U+8C13,U+8C1C,U+8C22,U+8C28,U+8C2C,U+8C31,U+8C34,U+8C37,U+8C41,U+8C46,U+8C61,U+8C6A,U+8C8C,U+8D1D,U+8D1F,U+8D21,U+8D23,U+8D25-8D29,U+8D2D,U+8D34-8D35,U+8D39-8D3A,U+8D3C,U+8D44,U+8D4B-8D4C,U+8D4F,U+8D56,U+8D5B,U+8D5E,U+8D60,U+8D62,U+8D64,U+8D6B,U+8D70,U+8D74,U+8D76-8D77,U+8D81,U+8D85,U+8D8A-8D8B,U+8D9F,U+8DA3,U+8DB3-8DB4,U+8DC3,U+8DCB-8DCC,U+8DD1,U+8DDD,U+8DDF,U+8DE8,U+8DEA,U+8DEF,U+8DF3,U+8DF5,U+8E0F,U+8E29-8E2A,U+8E48,U+8E6C-8E6D,U+8E72,U+8EAB-8EAC,U+8EB2,U+8EBA,U+8EFD,U+8F09,U+8F66,U+8F68,U+8F6C,U+8F6E-8F70,U+8F74,U+8F7B,U+8F7D,U+8F83,U+8F88-8F89,U+8F91,U+8F93,U+8F99,U+8F9B-8F9C,U+8FA3,U+8FA8,U+8FB1,U+8FB9,U+8FBE,U+8FC1,U+8FC5,U+8FC7-8FC8,U+8FCE,U+8FD0-8FD1,U+8FD4,U+8FD8-8FD9,U+8FDB-8FDF,U+8FE2,U+8FEA-8FEB,U+8FF0,U+8FF7-8FF9,U+8FFD,U+9000-9003,U+9006,U+9009,U+900F-9010,U+9012,U+9014,U+9017,U+901A-901B,U+901F-9020,U+9022,U+903B-903C,U+9042,U+9047,U+904A,U+904D,U+9053-9054,U+9057,U+906D-906E,U+9075,U+907F-9080,U+90A3,U+90AE,U+90BB,U+90C1,U+90CE,U+90E8,U+90FD,U+914C-914D,U+9152,U+9165,U+9171,U+9177-9178,U+917F,U+9189,U+9192,U+91C7,U+91CA,U+91CC-91CF,U+91D1,U+9274,U+9280,U+93D6,U+9488-9489,U+9493,U+949E-949F,U+94A2,U+94A5,U+94AE,U+94B1,U+94BB,U+94C1,U+94C3,U+94C5,U+94ED,U+94FA,U+94FE,U+9500,U+9505,U+950B,U+9510,U+9519-951A,U+952E-952F,U+9535,U+953B,U+9547,U+955C,U+9577,U+957F,U+958B,U+95E8,U+95EA,U+95ED-95EF,U+95F2,U+95F4,U+95F7,U+95F9,U+95FB,U+9602,U+9605,U+961F,U+962A,U+9632-9636,U+963B,U+963F,U+9644-9646,U+964B-964D,U+9650,U+9662,U+9664,U+9669-966A,U+9676-9677,U+9686,U+9688,U+968F-9690,U+9694,U+96BE,U+96C0,U+96C4-96C6,U+96C9,U+96E2,U+96E8,U+96EA,U+96F2,U+96F6-96F7,U+96FE,U+9700,U+9706-9707,U+970D,U+9732,U+9738,U+9752-9753,U+9759,U+975E,U+9760,U+9762,U+97A0,U+97AD,U+97E9,U+97F3,U+97F5,U+9811,U+9875-9876,U+9879-987B,U+987D-987F,U+9882,U+9884,U+9886-9888,U+988A,U+9890-9891,U+9893-9894,U+9897-9898,U+989A,U+989C-989D,U+98A0,U+98A4,U+98AF,U+98CE,U+98D8-98D9,U+98DB,U+98DE-98DF,U+9910,U+9965,U+996A,U+996D,U+9970-9971,U+9975-9976,U+997C,U+997F,U+9986,U+9988,U+998B,U+9996,U+9999,U+99A8,U+99C4,U+9A6C,U+9A6F,U+9A71,U+9A73,U+9A7B,U+9A82,U+9A84,U+9A87,U+9A8C,U+9A97,U+9A9A,U+9A9C,U+9AA8,U+9AD8,U+9B41-9B42,U+9B45,U+9B54,U+9C7C,U+9C7F,U+9C81,U+9C9C,U+9CA8,U+9CCD,U+9CD7,U+9CDE,U+9CF3,U+9E1F,U+9E21,U+9E3D,U+9E48,U+9EA6,U+9EBB,U+9EC4,U+9ECF,U+9ED1,U+9ED8,U+9F13,U+9F20,U+9F2C,U+9F3B,U+9F50,U+9F7F,U+9F84,U+9F8D,U+9F99,U+FF01,U+FF08-FF09,U+FF0C,U+FF12,U+FF1A-FF1B,U+FF1F,U+FF5C,U+FF5E,U+FFE3;
  font-display: swap;
}

@font-face {
  font-family: 'SimSun12Pixel';
  src: url(../fonts/simsun12-pixel-2.woff2) format('woff2');
  unicode-range: U+A0,U+A4,U+A7-A8,U+B0-B1,U+E0-E1,U+E8-EA,U+EC-ED,U+F2-F3,U+F9-FA,U+FC,U+101,U+113,U+11B,U+12B,U+144,U+148,U+14D,U+16B,U+1CE,U+1D0,U+1D2,U+1D4,U+1D6,U+1D8,U+1DA,U+1DC,U+1F9,U+251,U+261,U+2C7,U+2C9-2CB,U+2D9,U+391-3A1,U+3A3-3A9,U+3B1-3C1,U+3C3-3C8,U+401,U+410-44F,U+451,U+2010,U+2013,U+2015-2016,U+2025,U+2030,U+2032-2033,U+2035,U+20AC,U+2103,U+2105,U+2109,U+2116,U+2121,U+2160-216B,U+2170-2179,U+2196-2199,U+2208,U+220F,U+2211,U+2215,U+221A,U+221D-2220,U+2223,U+2225,U+2227-222B,U+222E,U+2234-2237,U+223D,U+2248,U+224C,U+2252,U+2260-2261,U+2264-2267,U+226E-226F,U+2295,U+2299,U+22A5,U+22BF,U+2312,U+2463-2469,U+2474-249B,U+2500-254B,U+2550-2573,U+2581-258F,U+2593-2595,U+25A0-25A1,U+25B2-25B3,U+25BC,U+25C6,U+25CB,U+25CE-25CF,U+25E2-25E5,U+2606,U+2609,U+2E81,U+2E84,U+2E88,U+2E8B-2E8C,U+2E97,U+2EA7,U+2EAA,U+2EAE,U+2EB3,U+2EB6-2EB7,U+2EBB,U+2ECA,U+2FF0-2FFB,U+3003,U+3005-3006,U+3008-3009,U+300E-300F,U+3012-3017,U+301D-301E,U+3021-3029,U+303E,U+3041,U+3043,U+3045,U+3047,U+3049,U+304E,U+3052,U+305C,U+3062,U+3065,U+306C,U+3072,U+3074-3077,U+3079-307A,U+307D,U+3080,U+3085-3086,U+308E,U+3090-3091,U+309B-309E,U+30A3,U+30A5,U+30A9-30AA,U+30AD-30AE,U+30BB-30BE,U+30C1-30C2,U+30C5-30C6,U+30CA,U+30CC-30CD,U+30CF,U+30D1-30D4,U+30D7-30D8,U+30DA-30DB,U+30E3-30E4,U+30E8,U+30EE-30F2,U+30F4-30F6,U+30FD-30FE,U+3105-3129,U+3220-3229,U+3231,U+32A3,U+338E-338F,U+339C-339E,U+33A1,U+33C4,U+33CE,U+33D1-33D2,U+33D5,U+3400-4AF3;
  font-display: swap;
}

@font-face {
  font-family: 'SimSun12Pixel';
  src: url(../fonts/simsun12-pixel-3.woff2) format('woff2');
  unicode-range: U+4AF4-4DB5,U+4E02,U+4E04-4E06,U+4E08,U+4E0C,U+4E0F-4E10,U+4E12,U+4E15,U+4E17,U+4E19,U+4E1E-4E21,U+4E23,U+4E26,U+4E28-4E29,U+4E2B-4E2C,U+4E2E-4E2F,U+4E31,U+4E33,U+4E35-4E39,U+4E3C,U+4E3F-4E44,U+4E46-4E47,U+4E4A,U+4E4D,U+4E51-4E53,U+4E55,U+4E57,U+4E59-4E5C,U+4E5E,U+4E62-4E65,U+4E67-4E6F,U+4E72-4E85,U+4E87-4E88,U+4E8A,U+4E8D,U+4E90,U+4E93,U+4E96-4E99,U+4E9C-4EA0,U+4EA2-4EA3,U+4EA5,U+4EA8-4EAA,U+4EAD,U+4EAF-4EB1,U+4EB3-4EB9,U+4EBB-4EBF,U+4EC2-4EC4,U+4EC7-4EC9,U+4ECC,U+4ECF-4ED2,U+4ED5,U+4ED7,U+4EDA-4EE2,U+4EE6-4EE9,U+4EEB,U+4EED-4EEF,U+4EF1-4EF5,U+4EF8-4EFA,U+4EFC,U+4EFE,U+4F00,U+4F02-4F09,U+4F0B-4F10,U+4F12-4F16,U+4F1B-4F1D,U+4F21-4F23,U+4F25,U+4F27-4F29,U+4F2B-4F2E,U+4F31-4F33,U+4F35-4F37,U+4F39-4F3B,U+4F3E-4F45,U+4F47-4F4C,U+4F50-4F52,U+4F54,U+4F56-4F58,U+4F5A,U+4F5D-4F5F,U+4F61-4F72,U+4F74-4F7E,U+4F80-4F87,U+4F89-4F8A,U+4F8C-4F9A,U+4F9C,U+4F9E-4FA6,U+4FA8-4FB4,U+4FB6-4FBE,U+4FC0-4FC2,U+4FC4-4FDC,U+4FDE-4FE0,U+4FE2-4FE7,U+4FEA-4FED,U+4FF0,U+4FF2-500C,U+500E-5011,U+5013-5018,U+501A-501E,U+5020-503B,U+503D,U+503F-5046,U+5048-504B,U+504D-504E,U+5050-5059,U+505B,U+505D-5064,U+5066-5075,U+5078-508C,U+508E-50AB,U+50AD-50B1,U+50B3-50CE,U+50D0-50F4,U+50F6-50FA,U+50FC-5129,U+512B-513E,U+5142,U+5146-5147,U+514A,U+514C,U+514E-5153,U+5155-515B,U+515D-5164,U+5166-5167,U+5169-516A,U+516E-5170,U+5172,U+5175,U+517A,U+517E-5184,U+5186-518B,U+518E-5191,U+5193-5198,U+519A,U+519C-519F,U+51A1-51AB,U+51AD-51AF,U+51B1,U+51B4,U+51B6,U+51B8-51BA,U+51BC-51BF,U+51C1-51C5,U+51C7-51C8,U+51CA,U+51CD-51CE,U+51D0,U+51D2-51DC,U+51DE-51DF,U+51E2-51EC,U+51EE,U+51F0-51F7,U+51FC-51FF,U+5201-5202,U+5204-5205,U+5208-5209,U+520B-5211,U+5213-5216,U+5218,U+521C,U+521E-521F,U+5221-5223,U+5225-5228,U+522A,U+522C-522D,U+522F,U+5231-5235,U+5238-523A,U+523C-524C,U+524E-5250,U+5252-5253,U+5255,U+5257-5264,U+5266,U+5268,U+526B-526E,U+5270-5271,U+5273-5287,U+5289-529A,U+529C-529D,U+52A2,U+52A4-52A7,U+52AB-52B0,U+52B4,U+52B6-52BE,U+52C0-52C2,U+52C4-52C6,U+52C8,U+52CA,U+52CC-52D1,U+52D3-52DE,U+52E0-52E3,U+52E5-52F9,U+52FB-52FD,U+5300-5304,U+5307-5315,U+5318,U+531A-531F,U+5321-5322,U+5324-5339,U+533C-533E,U+5340,U+5342,U+5344-5346,U+5349,U+534B-534D,U+534F-5354,U+5358-5359,U+535B-535F,U+5362-5366,U+5368-536A,U+536C-536E,U+5371-5372,U+5376,U+5379-5381,U+5383-5384,U+5387-5388,U+538A,U+538D-5399,U+539B-539E,U+53A0-53A4,U+53A6-53A7,U+53A9-53BA,U+53BC-53C1,U+53C3-53C7,U+53CE-53D0,U+53D2-53D5,U+53D9-53DA,U+53DC-53DF,U+53E1-53E2,U+53E7,U+53E9,U+53ED,U+53F1,U+53F4-53F5,U+53FA-5402,U+5405-5407,U+540B,U+540F,U+5412,U+5414-5416,U+5418-541A,U+541C-541D,U+5420-5425,U+5428-542A,U+542D-542E,U+5430-5434,U+5436-5437,U+543A-543F,U+5441-5442,U+5444-5445,U+5447,U+5449,U+544B-544F,U+5451-5454,U+5456-5457,U+5459-545B,U+545D-5461,U+5463-5467,U+5469-5472,U+5474,U+5476-547A,U+547E-547F,U+5481-548B,U+548D,U+548F-5491,U+5493,U+5497-54A6,U+54A8-54AB,U+54AD-54AE,U+54B0-54B2,U+54B4-54B7,U+54B9-54BA,U+54BC,U+54BE-54BF,U+54C2-54C6,U+54CA-54CC,U+54CE-54D3,U+54D5-54D6,U+54D8-54DC,U+54E0-54E4,U+54E8,U+54EB-54EC,U+54EE-54FB,U+54FD-5508,U+550A-550F,U+5511-5513,U+5515-5523,U+5525-552D,U+5530,U+5532-5542,U+5545,U+5547-5549,U+554B-555B,U+555D-5560,U+5562-5564,U+5567-5569,U+556B-557D,U+557F-5581,U+5583,U+5585-5588,U+558B-5597,U+559A-559B,U+559E-55A6,U+55A8-55B0,U+55B2-55B4,U+55B8-55D1,U+55D5-55EA,U+55EC-55EE,U+55F0-561A,U+561C-561E,U+5620-562C,U+562E-5633,U+5635-563E,U+5640-5667,U+566B-567B,U+567D-5684,U+5686-56BB,U+56BD-56C9,U+56CB-56D3,U+56D5-56DA,U+56DC-56DD,U+56DF,U+56E1,U+56E3-56EC,U+56EE-56EF,U+56F1-56F3,U+56F5-56F9,U+56FB-56FC,U+5700-5705,U+5707,U+5709-571E,U+5720-5722,U+5724-5727,U+5729-572F,U+5731-5732,U+5734-5739,U+573B-573D,U+573F,U+5741-5746,U+5748-574C,U+574E,U+5752-5756,U+5758-5759,U+575B-5760,U+5762-5767,U+5769-5781,U+5785-578A,U+578C-57AA,U+57AC-57CA,U+57CC-57CD,U+57CF-57DE,U+57E0-57F8,U+57FB-5801,U+5803-5805,U+5807-5820,U+5822-5823,U+5825-5829,U+582B-5830,U+5832-5833,U+5835-584B,U+584D-5850,U+5852-5853,U+5855-585D,U+585F-586A,U+586C-5882,U+5884-5892,U+5894-5898,U+589A-589D,U+589F-58A7,U+58A9-58C0,U+58C2-58E3,U+58E5-58EA,U+58EC-58ED,U+58EF,U+58F1-58F2,U+58F4-5903,U+5905-5906,U+5908,U+590A-590C,U+590E,U+5910-5914,U+5917-5919,U+591B,U+591D-591E,U+5920-5921,U+5923-5926,U+5928,U+592C-592D,U+592F-5930,U+5932-5933,U+5935-5937,U+593B-5946,U+5948,U+594A,U+594C-594E,U+5950,U+5952-5953,U+5958-5961,U+5963-5964,U+5966-5972,U+5974-5975,U+5977-5978,U+597A-597C,U+597E-5981,U+5983,U+5985-5986,U+5988-5991,U+5993-5995,U+5997-5998,U+599A-59B8,U+59BA-59C5,U+59C7-59CA,U+59CC-59CF,U+59D1-59D2,U+59D5-59D9,U+59DB-59FE,U+5A00,U+5A02,U+5A04-5A1B,U+5A1D-5A30,U+5A32-5A59,U+5A5B-5A99,U+5A9B-5AC8,U+5ACA-5ACB,U+5ACD-5AE8,U+5AEA-5B08,U+5B0A-5B4F,U+5B51-5B53,U+5B55-5B56,U+5B59-5B62,U+5B65,U+5B67-5B68,U+5B6A-5B80,U+5B82,U+5B84,U+5B86-5B87,U+5B8A,U+5B8D-5B8E,U+5B90-5B97,U+5B99,U+5B9B,U+5BA5-5BB2,U+5BB4,U+5BB7-5BB8,U+5BBA-5BBC,U+5BBE,U+5BC0-5BC1,U+5BC3,U+5BC5,U+5BC7-5BCB,U+5BCD-5BD1,U+5BD3-5BDD,U+5BE0,U+5BE2-5BF7,U+5BFA,U+5BFD-5BFE,U+5C00,U+5C02-5C03,U+5C05,U+5C07-5C09,U+5C0B-5C0E,U+5C10,U+5C12-5C13,U+5C15,U+5C17,U+5C19,U+5C1B-5C1C,U+5C1E-5C23,U+5C25-5C2B,U+5C2D-5C30,U+5C32-5C33,U+5C35-5C39,U+5C3B,U+5C43-5C44,U+5C46-5C47,U+5C49-5C4A,U+5C4C-5C4D,U+5C50-5C54,U+5C56-5C5D,U+5C5F-5C70,U+5C72-5C80,U+5C83-5C93,U+5C95-5C99,U+5C9C-5CA8,U+5CAA-5CFA,U+5CFC-5D06,U+5D08-5D28,U+5D2A-5D2C,U+5D2E-5D4B,U+5D4D-5DDD,U+5DDF-5DE0,U+5DE3-5DE4,U+5DE9-5DED,U+5DEF-5DF0,U+5DF3,U+5DF5-5DF6,U+5DF8-5DFD,U+5DFF-5E00,U+5E04,U+5E06-5E07,U+5E09-5E0B,U+5E0D-5E14,U+5E17,U+5E19-5E1C,U+5E1E-5E25,U+5E28-5E2C,U+5E2F-5E37,U+5E39-5E3C,U+5E3E-5E44,U+5E46-5E54,U+5E56-5E71,U+5E75,U+5E77,U+5E79-5E7A,U+5E7D-5E7E,U+5E80-5E85,U+5E88-5E89,U+5E8B-5E8E,U+5E90-5E92,U+5E96,U+5E98-5E9D,U+5EA0-5EA5,U+5EA8-5EC8,U+5ECB-5ED2,U+5ED4-5EF5,U+5EF7-5EF9,U+5EFC-5EFF,U+5F01,U+5F05-5F07,U+5F09-5F0E,U+5F10-5F14,U+5F16-5F1E,U+5F21-5F24,U+5F28-5F2E,U+5F30,U+5F32-5F34,U+5F36-5F38,U+5F3B-5F51,U+5F54,U+5F56-5F61,U+5F63-5F68,U+5F6A-5F6F,U+5F72-5F78,U+5F7A,U+5F7D-5F7F,U+5F82-5F83,U+5F86-5F87,U+5F89-5F8A,U+5F8C-5F8F,U+5F91,U+5F93-5F96,U+5F98-5FA0,U+5FA2-5FA9,U+5FAB-5FAD,U+5FAF-5FB6,U+5FB8-5FBC,U+5FBE-5FC2,U+5FC4,U+5FC7-5FCC,U+5FCE,U+5FD0-5FD6,U+5FDA-5FE6,U+5FE8-5FE9,U+5FEC-5FF4,U+5FF6-5FFC,U+5FFE-5FFF,U+6002-600D,U+600F-6011,U+6013,U+6017-601B,U+601E-6024,U+6026,U+6029,U+602B-602E,U+6030-603A,U+603C-604A,U+604C,U+604E-604F,U+6051-6054,U+6056-6061,U+6063-6067,U+606A-606B,U+606D-606E,U+6071-6075,U+6077-607B,U+607D-6083,U+6085-6088,U+608A-6093,U+6095-609E,U+60A1-60A5,U+60A7,U+60A9-60AB,U+60AD-60B1,U+60B3-60C4,U+60C6-60C9,U+60CB-60D0,U+60D2-60D4,U+60D6-60D9,U+60DB,U+60DD-60E6,U+60EA,U+60ED-60EE,U+60F0-60F2,U+60F4-60F5,U+60F7-60F9,U+60FB-6107,U+610A-610E,U+6110-6119,U+611B-611E,U+6120-6122,U+6125-6126,U+6128-613E,U+6140-614B,U+614D,U+614F-6154,U+6156-6161,U+6163-616F,U+6171-6174,U+6176-61BD,U+61BF-61C1,U+61C3-61D1,U+61D3-620E,U+6212-6215,U+6217,U+6219,U+621B-6229,U+622B-6232,U+6235-6236,U+6238-623E,U+6241-624A,U+624C,U+624F-6250,U+6252,U+6254-6257,U+6259-625A,U+625C-6262,U+6264-6266,U+6268,U+626A,U+626E,U+6271-6275,U+6277-6278,U+627A-627B,U+627D,U+6281-6283,U+6285-6289,U+628B-6290,U+6292,U+6294,U+6299,U+629C-62A1,U+62A3,U+62A6-62AA,U+62AD-62B0,U+62B2-62B4,U+62B6-62B8,U+62BA-62BC,U+62BE-62C4,U+62C7-62C8,U+62CA-62CB,U+62CF,U+62D1,U+62D5,U+62D7-62D8,U+62DA,U+62DD-62DE,U+62E0-62E2,U+62E4,U+62E6,U+62EA-62EB,U+62ED-62F0,U+62F2,U+62F4-62FB,U+6300,U+6303-6306,U+6308,U+630A-630D,U+630F-6310,U+6312-6315,U+6317-631E,U+6322,U+6326-6327,U+6329,U+632C-632E,U+6330-6339,U+633B-6345,U+6347-634A,U+634C-634E,U+6350-6354,U+6356-635E,U+6360,U+6364-6366,U+6368-636D,U+636F-6375,U+6377-6386,U+638A-638B,U+638D-638E,U+6390-6391,U+6393-6397,U+6399-63A1,U+63A3-63A4,U+63A6,U+63A9-63AF,U+63B1-63B2,U+63B4-63B9,U+63BB-63C8,U+63CA-63CE,U+63D1,U+63D3-63E0,U+63E2-63E9,U+63EB-63EC,U+63EE-63F3,U+63F5-63FC,U+63FE-6401,U+6403-6412,U+6414-641B,U+641D,U+641F-6429,U+642B,U+642E-6439,U+643B-6443,U+6445,U+6448-6449,U+644B-6457,U+6459-6468,U+646A-6477,U+6479-6486,U+6488-6490,U+6493-6494,U+6496-649D,U+649F-64A3,U+64A5-64A8,U+64AA-64AC,U+64AE-64B9,U+64BB,U+64BD-64C4,U+64C6-64CC,U+64CF-64D1,U+64D3-64E5,U+64E7-64FF,U+6501-6511,U+6513-6524,U+6526-652E,U+6530-6535,U+6537-6538,U+653A,U+653C-653D,U+653F-6544,U+6546-6547,U+6549-654B,U+654D-6550,U+6552-6558,U+655A-655D,U+655F-6561,U+6564-656B,U+656D-656F,U+6571,U+6573,U+6575-6576,U+6578-6586,U+6588-658A,U+658C-6590,U+6592-6596,U+6598,U+659A-659B,U+659D-659E,U+65A0-65A3,U+65A6-65A8,U+65AA-65AC,U+65AE,U+65B1-65B8,U+65BA-65BC,U+65BE-65C0,U+65C2-65C4,U+65C6-65CE,U+65D0-65DF,U+65E1,U+65E3-65E4,U+65E8,U+65EA-65F5,U+65F7-6601,U+6603-660D,U+6610-6612,U+6614-661E,U+6621-6624,U+6626-6627,U+6629-662E,U+6630-6634,U+6636-663C,U+663F-6641,U+6644-6651,U+6653-6654,U+6656-6659,U+665B-6667,U+6669-666D,U+6671-6673,U+6675,U+6677-6679,U+667B-6681,U+6683-6690,U+6692-6695,U+6698-66B3,U+66B5-66D9,U+66DB-66DC,U+66DE-66F1,U+66F5-66F7,U+66F9-66FB,U+66FD,U+6701-6707,U+670A,U+670C,U+670E-6713,U+6715-6716,U+6718-671A,U+671C,U+671E,U+6720-6725,U+6727,U+6729,U+672E,U+6730-6734,U+6736-6739,U+673B-673F,U+6741,U+6744-674D,U+674F,U+6752-675E,U+6760,U+6762-6764,U+6766-676C,U+676E,U+6770-6772,U+6774-677D,U+6780,U+6782-6783,U+6785-678F,U+6791-6794,U+6796,U+6798-679B,U+679D-67A9,U+67AB-67AC,U+67AE-67B5,U+67B7-67CF,U+67D1-67D2,U+67D5-67DB,U+67DD-67DF,U+67E1-67E4,U+67E6-6804,U+6806,U+6808-680A,U+680C-680E,U+6810,U+6812-6815,U+6818-6820,U+6822-6836,U+683A-683B,U+683D-683F,U+6841-6842,U+6844-6845,U+6847,U+6849-684B,U+684D-6850,U+6852-685B,U+685D-6862,U+6864-6868,U+686A-6875,U+6877-6884,U+6886-68A5,U+68A7-68AC,U+68AE,U+68B1-68BF,U+68C1-68C8,U+68CA-68CC,U+68CE-68D1,U+68D3-68D4,U+68D6-68ED,U+68EF-68F0,U+68F2-6904,U+6906-690C,U+690E-692D;
  font-display: swap;
}

@font-face {
  font-family: 'SimSun12Pixel';
  src: url(../fonts/simsun12-pixel-4.woff2) format('woff2');
  unicode-range: U+692E-692F,U+6931-6959,U+695B-697B,U+697E-6981,U+6983-69A7,U+69A9-69DA,U+69DC-69FC,U+69FE-6A20,U+6A22-6A29,U+6A2B-6A58,U+6A5A-6A60,U+6A62-6A70,U+6A72-6AAB,U+6AAD-6B1F,U+6B24-6B26,U+6B28-6B31,U+6B33-6B3D,U+6B3F-6B46,U+6B48,U+6B4A-6B4B,U+6B4D-6B61,U+6B67-6B69,U+6B6B-6B78,U+6B7A,U+6B7C-6B82,U+6B84-6B89,U+6B8C-6BB4,U+6BB6-6BC0,U+6BC2-6BC4,U+6BC6-6BCC,U+6BCE,U+6BD0-6BD1,U+6BD3,U+6BD6-6BDA,U+6BDC-6BEA,U+6BEC-6BEE,U+6BF0-6BFC,U+6BFE-6C10,U+6C12-6C13,U+6C15-6C16,U+6C18-6C1A,U+6C1C-6C33,U+6C35-6C36,U+6C39-6C40,U+6C43-6C48,U+6C4A-6C5E,U+6C61-6C63,U+6C65-6C6F,U+6C71-6C7C,U+6C7E-6C82,U+6C84-6C88,U+6C8A-6C98,U+6C9A,U+6C9C-6C9E,U+6CA0,U+6CA2-6CB2,U+6CB4-6CB8,U+6CBA,U+6CBC-6CBE,U+6CC0-6CC3,U+6CC5-6CC9,U+6CCB-6CD4,U+6CD6-6CDA,U+6CDC-6CE0,U+6CE3-6CE4,U+6CE6-6CE7,U+6CE9,U+6CEB-6CEF,U+6CF1-6CFB,U+6CFE-6D00,U+6D02-6D0A,U+6D0C-6D11,U+6D13-6D16,U+6D18-6D1A,U+6D1C-6D1D,U+6D1F-6D24,U+6D26-6D29,U+6D2B-6D3A,U+6D3C-6D40,U+6D42-6D44,U+6D47-6D4A,U+6D4C-6D4D,U+6D50,U+6D52,U+6D54-6D58,U+6D5A-6D69,U+6D6B-6D6D,U+6D6F-6D73,U+6D75-6D76,U+6D79-6D81,U+6D83-6D87,U+6D8A-6D8B,U+6D8D-6D9E,U+6DA0-6DA5,U+6DAA-6DBB,U+6DBD-6DD7,U+6DD9-6DE0,U+6DE2-6DF0,U+6DF2,U+6DF4-6DF6,U+6DF8-6DFA,U+6DFC-6E04,U+6E06-6E09,U+6E0B-6E0F,U+6E11-6E16,U+6E18-6E28,U+6E2A-6E31,U+6E33,U+6E35-6E37,U+6E39,U+6E3B-6E7D,U+6E80-6E82,U+6E84-6E8F,U+6E91-6E9B,U+6E9D-6EA1,U+6EA3-6EAE,U+6EB0-6ECA,U+6ECC-6ED0,U+6ED2-6ED9,U+6EDB-6EDD,U+6EDF-6EE0,U+6EE2-6EE3,U+6EE6-6EE7,U+6EEA-6EF3,U+6EF5-6F01,U+6F03-6F05,U+6F07-6F08,U+6F0A-6F0E,U+6F10-6F13,U+6F15-6F1F,U+6F21-6F2A,U+6F2C-6F30,U+6F32-6F3D,U+6F3F-6F46,U+6F48-6F6D,U+6F6F-6F87,U+6F89-6F9B,U+6F9D-6FBF,U+6FC1-704B,U+704D-706A,U+706C,U+706E,U+7071-7074,U+7076-707B,U+707D,U+7080-708D,U+708F-7091,U+7093-709C,U+709E-70AD,U+70AF-70B7,U+70BA-70BB,U+70BD-70C1,U+70C3-70C7,U+70C9-70D7,U+70DA,U+70DC-70DE,U+70E0-70E3,U+70E5,U+70E8-70EA,U+70EC,U+70EE-70F8,U+70FA-7120,U+7122-7125,U+7127-712F,U+7131-7135,U+7137-714B,U+714D-7166,U+7168-716D,U+716F-717C,U+717E-7183,U+7185-7189,U+718B-719E,U+71A0-71AB,U+71AD-71C2,U+71C4-71D4,U+71D6-7205,U+7207-7229,U+722B,U+722D-7230,U+7232-7235,U+7238-723C,U+723E-7246,U+7249-724B,U+724D-7258,U+725A,U+725C-7261,U+7263-7268,U+726A-7271,U+7273-7274,U+7276-7278,U+727B-72AE,U+72B0-72B5,U+72B7-72B8,U+72BA-72C1,U+72C3-72D6,U+72D8,U+72DA-72DF,U+72E1-72E8,U+72EA-72EB,U+72EE-72F0,U+72F2-72FB,U+72FD-730D,U+730F-7315,U+7317-731A,U+731D-732A,U+732C-732D,U+732F-7333,U+7335-736C,U+736E-7383,U+7385-7386,U+7388-738A,U+738C-739A,U+739C-73A8,U+73AA-73AE,U+73B1-73BF,U+73C1-73CC,U+73CE-73DF,U+73E1-73EC,U+73EE-7402,U+7404-7405,U+7407-7408,U+740A-740F,U+7411-7421,U+7423-7424,U+7426-7433,U+7435-745D,U+7460-746F,U+7471-7482,U+7484-74F5,U+74F7-7517,U+7519,U+751B,U+751D-751E,U+7520-7527,U+752A,U+752C-752F,U+7534,U+7536,U+7538-753A,U+753C-7544,U+7546-754B,U+754D-7553,U+7555-7558,U+755A-7564,U+7566-7569,U+756B-758E,U+7590,U+7592-7596,U+7598-7599,U+759B-75AE,U+75B0-75B1,U+75B3-75BB,U+75BF-75C4,U+75C6-75D1,U+75D3-75D4,U+75D6-75DA,U+75DC-75F3,U+75F5-75FB,U+75FD-762A,U+762C-763D,U+763F-767A,U+767C,U+767F-7683,U+7685-768F,U+7692-76AD,U+76AF-76B0,U+76B2-76C7,U+76C9-76D0,U+76D2-76D5,U+76D7,U+76D9-76DA,U+76DC-76DE,U+76E0-76ED,U+76F0-76F3,U+76F5-76F7,U+76F9-76FB,U+76FD-7700,U+7702-7708,U+770A,U+770C-771E,U+7721-7727,U+7729-772E,U+7730-7735,U+7737-773B,U+773D-773F,U+7742-775A,U+775C-7760,U+7762-7791,U+7793-779E,U+77A0-77A4,U+77A6,U+77A8-77A9,U+77AB,U+77AD-77E1,U+77E3-77E4,U+77E6-77E8,U+77EA-77EC,U+77EF-77F2,U+77F4-77FE,U+7800,U+7802-7813,U+7815,U+7817-7824,U+7826-782F,U+7831-7833,U+7835-7839,U+783B-783F,U+7841-785C,U+785E-786B,U+786D,U+786F-788B,U+788D,U+788F-7896,U+7898-789E,U+78A0-78AF,U+78B1-78C0,U+78C2-78D4,U+78D6-78E7,U+78E9-7900,U+7902-7939,U+793B,U+793D,U+793F-7947,U+7949-7955,U+7957-795C,U+795F,U+7961-7964,U+7966-7967,U+7969-796C,U+796E-7976,U+7979-7980,U+7982-7984,U+7986-798E,U+7990-79BA,U+79BC-79BF,U+79C2-79C8,U+79CA,U+79CC,U+79CE-79D0,U+79D3-79D7,U+79D9-79DE,U+79E0-79EE,U+79F1-79FA,U+79FC-79FF,U+7A01-7A0A,U+7A0C,U+7A0E-7A19,U+7A1B-7A32,U+7A34-7A3E,U+7A40-7A75,U+7A78-7A79,U+7A7B-7A7E,U+7A80,U+7A82-7A83,U+7A85-7A95,U+7A98-7A9B,U+7A9E,U+7AA0-7AA4,U+7AA6-7ACA,U+7ACC-7AD5,U+7AD7-7AD8,U+7ADA-7ADE,U+7AE1-7AEC,U+7AEE,U+7AF0-7AF8,U+7AFA-7AFC,U+7AFE-7B10,U+7B12-7B13,U+7B15-7B1F,U+7B21-7B25,U+7B27,U+7B29-7B2B,U+7B2D-7B48,U+7B4A,U+7B4C-7B50,U+7B52-7B53,U+7B55,U+7B57-7B76,U+7B78-7B7D,U+7B7F,U+7B81-7B96,U+7B98-7BA0,U+7BA2-7BAC,U+7BAE-7BB0,U+7BB2-7BC6,U+7BC8-7BF6,U+7BF8-7C06,U+7C08-7C26,U+7C28-7C37,U+7C39-7C72,U+7C74-7C7A,U+7C7C,U+7C7E-7C88,U+7C8A-7C96,U+7C99-7CA4,U+7CA6-7CAD,U+7CAF-7CB8,U+7CBA-7CBD,U+7CBF-7CC9,U+7CCB-7CD4,U+7CD7-7CDE,U+7CE0-7CFA,U+7CFC-7D09,U+7D0B-7D1F,U+7D21,U+7D23-7D26,U+7D28-7D2A,U+7D2C-7D2E,U+7D30-7D38,U+7D3A-7D41,U+7D43-7D4F,U+7D51-7D6D,U+7D6F-7D74,U+7D76-7E40,U+7E42-7E9F,U+7EA1,U+7EA3-7EA5,U+7EA8-7EA9,U+7EAB-7EAE,U+7EB0-7EB1,U+7EB4,U+7EB6,U+7EBA-7EBE,U+7EC0-7EC2,U+7EC5,U+7EC9,U+7ECB-7ECC,U+7ECE,U+7ED0,U+7ED4,U+7ED6-7ED7,U+7EDA-7EDB,U+7EDE,U+7EE0-7EE6,U+7EE8-7EE9,U+7EEB-7EEC,U+7EEE-7EF2,U+7EF6,U+7EF8-7EFB,U+7EFE,U+7F01-7F12,U+7F14,U+7F17,U+7F19-7F1C,U+7F1E-7F1F,U+7F21-7F28,U+7F2A-7F39,U+7F3B-7F4F,U+7F52-7F54,U+7F56,U+7F58-7F59,U+7F5B-7F61,U+7F63-7F69,U+7F6B-7F6D,U+7F6F-7F71,U+7F73-7F8D,U+7F8F-7F9D,U+7F9F-7FA0,U+7FA2-7FA3,U+7FA5-7FBC,U+7FBE-7FD3,U+7FD5-7FDF,U+7FE2-7FFA,U+7FFD-7FFF,U+8002,U+8004,U+8006-800B,U+800D-800F,U+8011-8016,U+8018-8032,U+8034-8036,U+8039-803A,U+803C,U+803E-8049,U+804B,U+804D-8053,U+8055-8059,U+805B-8082,U+8084-8088,U+808A-808B,U+808D-8099,U+809B-809F,U+80A3,U+80A6-80A8,U+80AA-80AE,U+80B0-80B1,U+80B3-80BE,U+80C1-80C2,U+80C4-80C5,U+80C7-80CB,U+80CD-80D5,U+80D7-80DB,U+80DD,U+80DF-80E0,U+80E2-80E6,U+80E8-80F2,U+80F4-80F5,U+80F7,U+80F9-80FC,U+80FE-8101,U+8103-8105,U+8107-8108,U+810A-810E,U+8110,U+8112-8115,U+8117-8119,U+811B-812E,U+8130,U+8132-8137,U+8139-8149,U+814B-8154,U+8156-8164,U+8166-816D,U+816F,U+8171-8178,U+817A,U+817C-817D,U+8181-8189,U+818B-818E,U+8190-819B,U+819D-81A7,U+81A9-81B9,U+81BB-81C1,U+81C3-81E2,U+81E4-81E9,U+81EB-81EC,U+81EE-81F2,U+81F5-81FF,U+8201-820B,U+820E-8211,U+8213,U+8215-821D,U+821F-8229,U+822B,U+822D-826E,U+8271,U+8274-8279,U+827B-827D,U+827F-8281,U+8283-8298,U+829A-829C,U+829E-82AB,U+82AD-82AE,U+82B0,U+82B2-82CE,U+82D0-82D3,U+82D5-82E4,U+82E7-82F0,U+82F2-8300,U+8302,U+8304-8326,U+8328-832A,U+832D-8335,U+8337,U+8339-8348,U+834A-834F,U+8351,U+8353-835D,U+835F-8360,U+8362,U+8365-8366,U+8368-836E,U+8370-8388,U+838A-8392,U+8394-83AA,U+83AC-83B0,U+83B2-83B6,U+83B8,U+83BA-83BC,U+83BE-83C6,U+83C8-83DB,U+83DD-840B,U+840D-8424,U+8427,U+8429-843C,U+843E-8456,U+8458-8481,U+8483-849B,U+849D-84DC,U+84DE-8512,U+8514-8520;
  font-display: swap;
}

@font-face {
  font-family: 'SimSun12Pixel';
  src: url(../fonts/simsun12-pixel-5.woff2) format('woff2');
  unicode-range: U+8521-852B,U+852D-8549,U+854B-8573,U+8575-85AE,U+85B0-85C8,U+85CA-85CE,U+85D0-85E3,U+85E5-8637,U+8639-864D,U+864F-8650,U+8652-8659,U+865B-866A,U+866C-8678,U+867A-867C,U+867F,U+8682-86C3,U+86C5,U+86C8-86CA,U+86CC-86DA,U+86DC-86ED,U+86EF-86F8,U+86FA-8712,U+8714-8717,U+8719-871B,U+871D-8720,U+8722-8736,U+8738-873A,U+873C-8782,U+8784-878C,U+878E-87B9,U+87BB-87F8,U+87FA-8814,U+8816-8821,U+8823-883F,U+8841-884B,U+884E-8856,U+8858-8860,U+8862,U+8864,U+8866-8867,U+8869-886B,U+886D-8876,U+8878-888A,U+888C,U+888E-8895,U+8897-88AA,U+88AC,U+88AE-88B0,U+88B2-88C1,U+88C3-88C4,U+88C6-88D4,U+88D6-88D8,U+88DA-88E3,U+88E5-88F0,U+88F2-88F3,U+88F5-88F7,U+88FA-8924,U+8926-897E,U+8980,U+8982-8985,U+8987-89C0,U+89C3,U+89C7,U+89CA-89D1,U+89D3-89E2,U+89E4-89E5,U+89E7-89FF,U+8A01-8A17,U+8A19-8A32,U+8A34-8A88,U+8A8A-8A9D,U+8A9F-8AAC,U+8AAE-8AAF,U+8AB1-8B65,U+8B67-8BA0,U+8BA3,U+8BA5-8BA7,U+8BAA-8BAC,U+8BAE,U+8BB1,U+8BB3-8BB5,U+8BB7,U+8BB9,U+8BBB-8BBD,U+8BC0,U+8BC2-8BC3,U+8BC7-8BC8,U+8BCA-8BCC,U+8BCE-8BD0,U+8BD2-8BD4,U+8BD6-8BDC,U+8BDF-8BE0,U+8BE3-8BE4,U+8BE7-8BEC,U+8BEE,U+8BF0,U+8BF2-8BF3,U+8BF5,U+8BF8-8BF9,U+8BFC-8BFD,U+8BFF-8C00,U+8C02,U+8C04,U+8C06-8C07,U+8C09,U+8C0B-8C12,U+8C14-8C1B,U+8C1D-8C21,U+8C23-8C27,U+8C29-8C2B,U+8C2D-8C30,U+8C32-8C33,U+8C35-8C36,U+8C38-8C40,U+8C42-8C45,U+8C47-8C60,U+8C62-8C69,U+8C6B-8C8B,U+8C8D-8D1C,U+8D1E,U+8D20,U+8D22,U+8D24,U+8D2A-8D2C,U+8D2E-8D33,U+8D36-8D38,U+8D3B,U+8D3D-8D43,U+8D45-8D4A,U+8D4D-8D4E,U+8D50-8D55,U+8D57-8D5A,U+8D5C-8D5D,U+8D5F,U+8D61,U+8D63,U+8D65-8D6A,U+8D6C-8D6F,U+8D71-8D73,U+8D75,U+8D78-8D80,U+8D82-8D84,U+8D86-8D89,U+8D8C-8D9E,U+8DA0-8DA2,U+8DA4-8DB2,U+8DB5-8DC2,U+8DC4-8DCA,U+8DCD-8DD0,U+8DD2-8DDC,U+8DDE,U+8DE0-8DE7,U+8DE9,U+8DEB-8DEE,U+8DF0-8DF2,U+8DF4,U+8DF6-8E0E,U+8E10-8E28,U+8E2B-8E47,U+8E49-8E6B,U+8E6E-8E71,U+8E73-8EAA,U+8EAD-8EB1,U+8EB3-8EB9,U+8EBB-8EFC,U+8EFE-8F08,U+8F0A-8F65,U+8F67,U+8F69-8F6B,U+8F6D,U+8F71-8F73,U+8F75-8F7A,U+8F7C,U+8F7E-8F82,U+8F84-8F87,U+8F8A-8F90,U+8F92,U+8F94-8F98,U+8F9A,U+8F9D-8FA2,U+8FA4-8FA7,U+8FA9-8FB0,U+8FB2-8FB8,U+8FBA-8FBD,U+8FBF-8FC0,U+8FC2-8FC4,U+8FC6,U+8FC9-8FCD,U+8FCF,U+8FD2-8FD3,U+8FD5-8FD7,U+8FDA,U+8FE0-8FE1,U+8FE3-8FE9,U+8FEC-8FEF,U+8FF1-8FF6,U+8FFA-8FFC,U+8FFE-8FFF,U+9004-9005,U+9007-9008,U+900A-900E,U+9011,U+9013,U+9015-9016,U+9018-9019,U+901C-901E,U+9021,U+9023-903A,U+903D-9041,U+9043-9046,U+9048-9049,U+904B-904C,U+904E-9052,U+9055-9056,U+9058-906C,U+906F-9074,U+9076-907E,U+9081-90A2,U+90A4-90AD,U+90AF-90BA,U+90BC-90C0,U+90C2-90CD,U+90CF-90E7,U+90E9-90FC,U+90FE-914B,U+914E-9151,U+9153-9164,U+9166-9170,U+9172-9176,U+9179-917E,U+9180-9188,U+918A-9191,U+9193-91C6,U+91C8-91C9,U+91CB,U+91D0,U+91D2-9273,U+9275-927F,U+9281-93D5,U+93D7-9487,U+948A-9492,U+9494-949D,U+94A0-94A1,U+94A3-94A4,U+94A6-94AD,U+94AF-94B0,U+94B2-94BA,U+94BC-94C0,U+94C2,U+94C4,U+94C6-94EC,U+94EE-94F9,U+94FB-94FD,U+94FF,U+9501-9504,U+9506-950A,U+950C-950F,U+9511-9518,U+951B-952D,U+9530-9534,U+9536-953A,U+953C-9546,U+9548-955B,U+955D-9576,U+9578-957E,U+9580-958A,U+958C-95E7,U+95E9,U+95EB-95EC,U+95F0-95F1,U+95F3,U+95F5-95F6,U+95F8,U+95FA,U+95FC-9601,U+9603-9604,U+9606-961E,U+9620-9629,U+962B-9631,U+9637-963A,U+963C-963E,U+9640-9643,U+9647-964A,U+964E-964F,U+9651-9661,U+9663,U+9665-9668,U+966B-9675,U+9678-9685,U+9687,U+9689-968E,U+9691-9693,U+9695-96BD,U+96BF,U+96C1-96C3,U+96C7-96C8,U+96CA-96E1,U+96E3-96E7,U+96E9,U+96EB-96F1,U+96F3-96F5,U+96F8-96FD,U+96FF,U+9701-9705,U+9708-970C,U+970E-9731,U+9733-9737,U+9739-9751,U+9754-9758,U+975A-975D,U+975F,U+9761,U+9763-979F,U+97A1-97AC,U+97AE-97E8,U+97EA-97F2,U+97F4,U+97F6-9810,U+9812-9874,U+9877-9878,U+987C,U+9880-9881,U+9883,U+9885,U+9889,U+988B-988F,U+9892,U+9895-9896,U+9899,U+989B,U+989E-989F,U+98A1-98A3,U+98A5-98AE,U+98B0-98CD,U+98CF-98D7,U+98DA,U+98DC-98DD,U+98E0-990F,U+9911-9964,U+9966-9969,U+996B-996C,U+996E-996F,U+9972-9974,U+9977-997B,U+997D-997E,U+9980-9985,U+9987,U+9989-998A,U+998C-9995,U+9997-9998,U+999A-99A7,U+99A9-99C3,U+99C5-9A6B,U+9A6D-9A6E,U+9A70,U+9A72,U+9A74-9A7A,U+9A7C-9A81,U+9A83,U+9A85-9A86,U+9A88-9A8B,U+9A8D-9A96,U+9A98-9A99,U+9A9B,U+9A9D-9AA7,U+9AA9-9AD7,U+9AD9-9B40,U+9B43-9B44,U+9B46-9B53,U+9B55-9C7B,U+9C7D-9C7E,U+9C80,U+9C82-9C9B,U+9C9D-9CA7,U+9CA9-9CCC,U+9CCE-9CD6,U+9CD8-9CDD,U+9CDF-9CF2,U+9CF4-9E1E,U+9E20,U+9E22-9E3C,U+9E3E-9E47,U+9E49-9EA5,U+9EA7-9EBA,U+9EBC-9EC3,U+9EC5-9ECE,U+9ED0,U+9ED2-9ED7,U+9ED9-9F12,U+9F14-9F1F,U+9F21-9F2B,U+9F2D-9F3A,U+9F3C-9F4F,U+9F51-9F7E,U+9F80-9F83,U+9F85-9F8C,U+9F8E-9F98,U+9F9A-9FA5,U+E78D-E796,U+E7C7,U+E816-E818,U+E831,U+E83B,U+E855,U+F92C,U+F979,U+F995,U+F9E7,U+F9F1,U+FA0C-FA0F,U+FA11,U+FA13-FA14,U+FA18,U+FA1F-FA21,U+FA23-FA24,U+FA27-FA29,U+FE10-FE19,U+FE30-FE31,U+FE33-FE44,U+FE49-FE52,U+FE54-FE57,U+FE59-FE66,U+FE68-FE6B,U+FF02-FF07,U+FF0A-FF0B,U+FF0D-FF11,U+FF13-FF19,U+FF1C-FF1E,U+FF20-FF5B,U+FF5D,U+FFE0-FFE2,U+FFE4-FFE5;
  font-display: swap;
}




/* 日文假名单独走 MS Gothic 的点阵（从 msgothic.ttc 的 12ppem 点阵提取）。
   用 unicode-range 做「按字符路由」：只有平假名 / 片假名 / 半角片假名
   会落到这份字体上，汉字和标点继续走上面那份宋体。
   这样不需要给 HTML 加任何 lang 标记或额外 class。
   注意它排在字体栈最前面，靠 unicode-range 把范围限死，不会抢走别的字符。

   度量对齐宋体（宋体 hhea = 1280/1536 = 83.3333%，MS Gothic 原本是 1320），
   否则同一行里日文和汉字的内容盒高度不同，行高会跳。 */
@font-face {
  font-family: 'MSGothic12JPPixel';
  src: url(../fonts/msgothic12-jp-pixel.woff2) format('woff2');
  /* 这里列的是这份字体**真正有的**字（由 tools/build-pixel-font.py --ja 打印出来）：
     假名 / 半角片假名 / 〜，外加 2026-09-14 补进来的一批符号。
     为什么补符号：站长想在台词里写 ♪，而 ♪（以及 ■ ★ ♥ ← 这一整片）宋体那份
     12px 点阵里没有、MS Gothic 的 12ppem 点阵里全有，所以塞进这份日文字体、
     由 unicode-range 把那些码位路由过来。
     ♡ ♢ ♤ ♧ ♨ ♩ ♬ ♮ 和 ゔゕゖ 这些**连 MS Gothic 也没有**，会退到宋体或系统字体上，
     所以「宝可梦台词」的校验脚本会把这些字直接拦下来（见 tools/build-pkmn.py
     里的 unsupported_char()：它读的就是这三份字体的 cmap）。 */
  unicode-range:
    U+2190-2193, U+25A0, U+25A1, U+25B2, U+25B3, U+25CB, U+25CE, U+25CF,
    U+2605, U+2606, U+2660, U+2663, U+2665, U+2666, U+266A, U+266B, U+266D, U+266F,
    U+301C, U+3041-3093, U+309B-309E, U+30A1-30F6, U+30FB-30FE, U+FF61-FF9F;
  ascent-override: 83.3333%;
  descent-override: 16.6667%;
  line-gap-override: 0%;
  font-display: swap;
}


/* 全站换字体。字号统一取自 --px，保证设备像素数是 12 的整数倍。
   这里必须用 !important：基础样式里有 #notice、#gotop、#navbar .nav li a
   这类 ID 选择器写死了 12px / 13px，优先级比通配规则高，不强制的话它们会停
   在 18 / 19.5 设备像素上 —— 不是 12 的整数倍，方块立刻糊（实测踩过）。
   text-shadow 一并清掉：带模糊的描边会把点阵边缘糊成灰的。 */
html.pxfont body,
html.pxfont body * {
  /* 字体栈：假名 -> 宋体 -> emoji -> 符号缺口 -> 系统宋体（兜底）。
     最后那个是安全网：前面几份都缺的字（比如 ゔゕゖ 这 14 个假名，
     MS Gothic 的 12px 点阵里根本没有）会落到系统宋体上 ——
     字形正确，只是边缘不点阵，总比掉到 monospace 变成完全不同的字体好。

     顺序很关键：**缺口字体排在宋体后面**。它的 unicode-range 已经把
     「现有字体已覆盖的码位」全排除了（见 tools/build-gap-font.py），
     与前面几份不重叠；这个顺序是再加一道保险 ——
     将来宋体补了某个符号，它会先命中，缺口字体不会抢。 */
  font-family: 'MSGothic12JPPixel', 'SimSun12Pixel', 'Mona12Emoji', 'FusionPixelGap', SimSun, "宋体", monospace !important;
  font-weight: normal !important;
  font-size: var(--px, 16px) !important;
  text-shadow: none !important;
}

/* letter-spacing 必须是整数个设备像素，否则单数字形会落在半个设备像素上、
   一半的字边缘发灰。1px 在 150% 缩放下 = 1.5 设备像素，正好是半个，所以清掉。 */
html.pxfont .site-name,
html.pxfont .header-stamp { letter-spacing: normal !important; }

/* 层级：不能靠加粗，只能靠字号。--px-lg / --px-xl 同样是 12 的整数倍 */
html.pxfont .site-name,
html.pxfont .error-code { font-size: var(--px-xl, 32px) !important; }
html.pxfont .entry-title,
html.pxfont .post-title,
html.pxfont .sub-title,
html.pxfont .link-name,
html.pxfont .entry-content h1,
html.pxfont .entry-content h2,
html.pxfont .entry-content h3,
html.pxfont .entry-content h4,
html.pxfont .error-text,
html.pxfont .about-name { font-size: var(--px-lg, 24px) !important; }
html.pxfont .tagcloud .tag-item sup,
html.pxfont sup,
html.pxfont .pd-y { font-size: var(--px-sm, 8px) !important; }

/* 这些零件保持原字体：它们靠加粗 / 等宽 / 固定尺寸表达。
   同样要 !important 才能从上面的通配规则手里抢回来。 */
html.pxfont .retro-clock,
html.pxfont .counter-num,
html.pxfont .btn88,
html.pxfont .btn88 span {
  font-family: Tahoma, Consolas, "Courier New", monospace !important;
  font-weight: bold !important;
}
html.pxfont .retro-clock { font-size: 24px !important; }
html.pxfont .counter-num { font-size: 12px !important; }
html.pxfont .btn88-l1 { font-size: 8px !important; }
html.pxfont .btn88-l2 { font-size: 9px !important; }
/* LED 的绿色辉光是故意留的 */
html.pxfont .retro-clock { text-shadow: 0 0 6px rgba(51,255,51,.9) !important; }
html.pxfont .counter-num { text-shadow: 0 0 4px rgba(51,255,51,.85) !important; }

/* 面板标题条是加粗蓝底白字，换点阵会糊，留原字体 */
html.pxfont .widget-title,
html.pxfont .box-title {
  font-family: 'Tahoma,"Microsoft YaHei","微软雅黑",Verdana,SimSun,"宋体",'Mona12Emoji', sans-serif' !important;
  font-weight: bold !important;
}
html.pxfont .widget-title {
  font-size: 12px !important;
  text-shadow: 1px 1px 0 #1b3a63 !important;
}
html.pxfont .box-title { font-size: 13px !important; }

/* 点阵下没有粗体，用「反白」代替页脚里的 <strong> 强调 */
html.pxfont #footer strong,
html.pxfont .footer-tips strong { background: #ffff00; color: #cc0000; }

/* 正文里的 <b>/<strong>：假粗体。
   点阵字体没有粗体字形，浏览器合成的粗体会把方块边缘糊掉（实测灰边
   39% -> 52%），所以上面把 font-weight 统一压成了 normal —— 结果是正文里
   加粗**完全看不出来**（实测 computed font-weight 400，和普通 span 一模一样）。
   这里的办法是「再画一遍」：用 text-shadow 把同一个字形往右错开**整一个
   设备像素**，两遍都是像素对齐的，不会产生半像素灰边，笔画稳定地从
   2 设备像素变成 3 设备像素（实测横切游程 2px×55 -> 3px×39）。
   偏移量必须走 --devpx（= 1/dpr），写死 1px 的话 150% 缩放下就是 1.5 个
   设备像素，又会糊。 */
html.pxfont .entry-content b,
html.pxfont .entry-content strong {
  text-shadow: var(--devpx, 1px) 0 0 currentColor !important;
}

/* 正文行高：16px 点阵配 1.55 倍行距，接近当年的密排 */
html.pxfont body { line-height: 1.55; }
html.pxfont .entry-content { line-height: 1.55; }


/* ============================================================
   26. 点阵 emoji（hugo.toml: emojiFont）
   ------------------------------------------------------------
   不换的话，Windows 上 emoji 会落到 Segoe UI Emoji —— 彩色、带抗锯齿、
   尺寸还跟正文对不上，是整站唯一"不是点阵"的地方。这里换成
   Mona12Emoji（Mona Font 的单色 emoji 子集，SIL OFL-1.1，
   https://github.com/MonadABXY/mona-font）。

   它跟站里另外两份点阵是同一个栅格：unitsPerEm = 1200，
   1 设计像素 = 正好 100 单位（1704 个字形、104012 个点全量核对过，
   0 个出格点、0 段曲线），所以「字号 × DPR = 12 的整数倍」这条规矩
   对它一样成立，不用另外算字号。

   两点要注意：
   1. 度量对齐宋体点阵。Mona 自己的 hhea 是 1100 / -300（em = 1200），
      宋体是 1280 / -256（em = 1536）。不覆盖的话，一行里只要有 emoji，
      行高就会比其它行高出一截。
   2. unicode-range 只放开 emoji 区段：没有 emoji 的页面就完全不会
      去下载这 55KB。范围里包含了 ©®™♀♂ 这些宋体点阵本来就有的字符，
      但没关系 —— 字体栈里宋体排在 Mona 前面，先命中就轮不到 Mona。
   ============================================================ */

@font-face {
  font-family: 'Mona12Emoji';
  /* 相对路径，理由同另外两份点阵字体：localhost / 127.0.0.1 互换访问时
     不会变成跨域请求（字体是 CORS 模式加载的，跨域没 ACAO 头就被拒） */
  src: url(../fonts/mona12emoji.woff2) format('woff2');
  unicode-range:
    U+200D, U+203C, U+2049, U+20E3, U+2122, U+2139,
    U+2194-2199, U+21A9-21AA, U+231A-231B, U+2328, U+23CF, U+23E9-23FA,
    U+24C2, U+25AA-25AB, U+25B6, U+25C0, U+25FB-2604, U+260E-2653,
    U+265F-2668, U+267B-267F, U+2692-26B1, U+26BD-26D4, U+26E9-2728, U+2733-2734,
    U+2744-2757, U+2763-2764, U+2795-2797, U+27A1, U+27B0, U+27BF,
    U+2934-2935, U+2B05-2B07, U+2B1B-2B1C, U+2B50-2B55, U+3030, U+303D,
    U+3297-3299, U+FE0F, U+1F000-1FAFF, U+E0020-E007F;
  ascent-override: 83.3333%;
  descent-override: 16.6667%;
  line-gap-override: 0%;
  font-display: swap;
}



/* ============================================================
   26b. 符号缺口字体（hugo.toml: pixelGapFont）
   ------------------------------------------------------------
   问题：宋体 12px 点阵里**根本没有** ⇆ ↻ © » ½ ⚙ ♡ ✓ 这些字形，
   它们会回退到字体栈末尾的系统宋体 —— 字形对，但边缘不点阵，
   混在同一行里一眼就能看出来（站长 2026-10-11 发现的就是这个）。

   「从宋体提取」的任何方案都补不出来（源里就没有），所以另找一份：
   缝合像素字体 / Fusion Pixel Font（TakWolf，SIL OFL 1.1），
   12 像素格的泛中日韩点阵，Arrows 112/112、Latin-1 95/95、
   Geometric Shapes 96/96 全都有。

   ⚠️ 这里**只切符号**，刻意不含汉字、韩文、CJK 扩展B：
      汉字那块我们自己更强（基本区 20902 字 vs 它的 19219；
      扩展A 6582 vs 1481），韩文和扩展B 又完全用不上。
      全切进去要多 250 KB，实际一次都用不到。

   由 tools/build-gap-font.py 生成（790 个码位，约 16 KB），
   范围写在 data/pixel-gap-font.toml 里 —— 那个脚本会把
   「现有字体已经覆盖的码位」全部排除，所以不会抢走宋体/日文/emoji 的字。

   度量按宋体对齐（同第 26 节的做法）：Fusion 自己的 hhea 是
   1300 / -300（em = 1200，比宋体那份高），不覆盖的话一行里有符号就可能行高跳。
   实测：正文 line-height 1.65 > 1.3333，行盒由 line-height 决定，
   所以正文行高本来就不受影响；这里再对齐一道，
   免得 .mp-btn（line-height:1）那类地方出偏差。
   ⚠️ 键名是 `pixel-gap-font`（**连字符保留**）—— Hugo 对带连字符的文件名
      不改写成下划线，写 `pixel_gap_font` 会取到 NIL、@font-face 静默不生成。
      （同 26b 那节里 `pixel-font` 的坑，实测确认过。）
   ============================================================ */

@font-face {
  font-family: 'FusionPixelGap';
  /* 相对路径，理由同其它点阵字体：localhost / 127.0.0.1 互换访问时不跨域 */
  src: url(../fonts/fusion-gap-symbols.woff2) format('woff2');
  unicode-range: U+00A1-00A3, U+00A5, U+00A6, U+00A9-00AC, U+00AE, U+00AF, U+00B2-00B6, U+00B8-00D6, U+00D8-00DF, U+00E2-00E7, U+00EB, U+00EE-00F1, U+00F4-00F6, U+00F8, U+00FB, U+00FD-0100, U+0102-0112, U+0114-011A, U+011C-012A, U+012C-0143, U+0145-0147, U+0149-014C, U+014E-016A, U+016C-017F, U+2011, U+2012, U+2017, U+201A, U+201B, U+201E-2024, U+2027, U+2031, U+2034, U+2036, U+2037, U+203E, U+2043, U+204B-204D, U+2057, U+2070, U+2071, U+2074-208E, U+2090-209C, U+2126, U+2127, U+212A, U+212B, U+212E, U+2150-215F, U+216C-216F, U+217A-218B, U+219A-21A8, U+21AB-21FF, U+230C-2311, U+2313-2319, U+231C-231F, U+23CE, U+23E8, U+23F4-23F7, U+23FB-23FF, U+246A-2473, U+249C-24C1, U+24C3-24FF, U+25A2-25A9, U+25AC-25B1, U+25B4, U+25B5, U+25B7-25BB, U+25BE, U+25BF, U+25C1-25C5, U+25C8-25CA, U+25CC, U+25CD, U+25D0-25E1, U+25E6-25FA, U+25FF, U+2607, U+2608, U+260A-260D, U+260F, U+2610, U+2612, U+2613, U+2616, U+2617, U+2619-261C, U+261E, U+261F, U+2621, U+2624, U+2625, U+2628, U+2629, U+262B-262D, U+2630-2637, U+263B-263F, U+2641, U+2643-2647, U+2654-265E, U+2661, U+2662, U+2664, U+2667, U+2669, U+266C, U+266E, U+2680-2691, U+2698, U+269A, U+26AC, U+26B2-26B5, U+26B8, U+26BC, U+26BF, U+26C6, U+26C7, U+26C9-26CC, U+26D2, U+26D8-26DE, U+26E0-26E8, U+26EB-26EF, U+26F6, U+26FC, U+26FF, U+2766, U+2767, U+2776-2793, U+3004, U+3018-301B, U+301F, U+3020, U+302A-302F, U+3031-303C, U+303F;
  ascent-override: 83.3333%;
  descent-override: 16.6667%;
  line-gap-override: 0%;
  font-display: swap;
}



/* ============================================================
   27. 宝可梦放养区（侧栏挂件）
   ------------------------------------------------------------
   素材来自 PMD Sprite Repository（PMDCollab/SpriteCollab，CC BY-NC 4.0），
   由 tools/build-pkmn.py 重新拼成精灵表，见 .notes/宝可梦放养区.md。

   锐利的前提和点阵字体是同一条：**美术像素 × 整数 = 设备像素**。
   精灵表里 1 个像素是美术像素，页面上按 2（小个子 3）个设备像素放大，
   画布 width/height 直接设成设备像素数，CSS 尺寸 = 设备像素 / dpr，
   于是浏览器把画布 1:1 贴到设备像素上，不重采样、不糊。
   JS 还会把元素的 left/top 吸到整设备像素（见 pkmn.js 里的 snap()），
   否则位置落在半个设备像素上，整张图会被重新采样一遍。

   草地贴图同理：background-size 必须是整数设备像素，所以不用 em/百分比，
   而是由 JS 按 dpr 写死（CSS 里那个 43px 只是首屏兜底）。

   天空（第 27 节下面那张画布）走的是同一条规矩：整片天画在「美术像素」分辨率
   的小画布上，再按 2 设备像素 = 1 美术像素整倍贴上来，所以云是一格一格挪的。
   它把草地也在画布上重画了一遍（位置和下面那条 CSS 兜底背景完全对齐），
   于是夜里压暗、下雨变暗这些都能在画布里一次做完。
   ============================================================ */
.pkmn-pasture .pasture-pen {
  position: relative;
  height: 150px;
  overflow: hidden;
  cursor: pointer;
  border: 1px solid #7f9db9;
  background-color: #d9ecff;
  background-image: url(../pkmn/pen-tile.png);
  background-repeat: repeat-x;
  background-position: left bottom;
  background-size: 43px auto;   /* = 64 设备像素 ÷ 1.5，JS 会按真实 DPR 覆盖 */
  image-rendering: pixelated;
}

/* 天空画布：铺满围栏，压在所有东西底下（宝可梦 z2/z3、图标 z4） */
.pkmn-pasture .pasture-sky {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 0;
  display: block;
  image-rendering: pixelated;
}

/* 夜里把天空调暗。用「半透明罩子」而不是 filter ——
   filter 会先把这个盒子栅格化再处理，里面的点阵画布就被重采样了。
   天空画布画起来之后这层罩子就撤掉（白天黑夜的调色板在画布里），
   否则会压两次、糊成一片灰。 */
.pkmn-pasture .pasture-pen::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}

html.pkmn-night .pkmn-pasture .pasture-pen { background-color: #24365c; }
html.pkmn-night .pkmn-pasture .pasture-pen::before { background: rgba(12, 22, 48, .34); }
.pkmn-pasture .pasture-pen.pkmn-sky::before { background: none; }

.pkmn-pasture .pasture-sprite,
.pkmn-pasture .pasture-shadow {
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  image-rendering: pixelated;
}

.pkmn-pasture .pasture-shadow { z-index: 2; }
.pkmn-pasture .pasture-sprite { z-index: 3; }

/* 右上角的天气 / 时间图标：半透明、不吃鼠标事件。
   放在「上面的角」是有讲究的 —— 宝可梦是贴着地面站、而且水平居中的，
   所以两个上角它永远碰不到，不会挡到它。 */
.pkmn-pasture .pasture-icons {
  position: absolute;
  top: 3px;
  right: 3px;
  z-index: 4;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 2px;
  pointer-events: none;
  opacity: .72;
}

.pkmn-pasture .pasture-icon {
  display: block;
  image-rendering: pixelated;
}

/* 睡着时头顶飘的 Z。位移必须是整数个设备像素（用 --devpx），
   配 steps() 一跳一跳地走 —— 不然文字会落在半个设备像素上，点阵就糊了。 */
.pkmn-pasture .pasture-zzz {
  position: absolute;
  z-index: 5;
  pointer-events: none;
  color: #3b6ea5;
  font-size: var(--px-sm, 11px) !important;
  animation: pkmn-zzz 2.8s steps(10) infinite;
}

.pkmn-pasture .pasture-zzz-b { animation-delay: 1.4s; }

html.pkmn-night .pkmn-pasture .pasture-zzz { color: #9fc4ea; }

@keyframes pkmn-zzz {
  0%   { opacity: 0; transform: translate(0, 0); }
  25%  { opacity: .9; }
  100% { opacity: 0; transform: translate(calc(var(--devpx, 0.6667px) * 5), calc(var(--devpx, 0.6667px) * -12)); }
}

.pkmn-pasture .pasture-hint {
  margin: 4px 0 0;
  text-align: right;
  color: #7488a0;
  font-size: var(--px-sm, 11px) !important;
}

/* 「台词框」—— 上半行是脸图 + 名字/心情，下半行是台词。
   固定最小高度，换台词时下面的挂件不会被挤得跳来跳去。 */
.pkmn-pasture .pkmn-box {
  margin-top: 6px;
  padding: 6px;
  min-height: 118px;
  border: 1px solid #6699cc;
  background: #fbfdff;
}

.pkmn-pasture .pkmn-head {
  display: flex;
  align-items: center;
  gap: 6px;
}

/* 脸图做成小相框，和侧栏头像一个语言 */
.pkmn-pasture .pkmn-face {
  display: block;
  padding: 1px;
  background: #ffffff;
  border: 1px solid #7f9db9;
  box-shadow: 1px 1px 0 #c3d9ef;
}

.pkmn-pasture .pkmn-who { min-width: 0; }

.pkmn-pasture .pkmn-name {
  margin: 0;
  color: #123f70;
  white-space: nowrap;
}

/* 心情那行用小一号（--px-sm 也是 12 的整数倍设备像素，所以不会糊） */
.pkmn-pasture .pkmn-mood {
  margin: 2px 0 0;
  color: #7488a0;
  white-space: nowrap;
  font-size: var(--px-sm, 11px) !important;
}

.pkmn-pasture .pkmn-line {
  margin: 5px 0 0;
  color: #222222;
  word-break: break-word;
}

.pkmn-pasture .pkmn-credit {
  margin: 5px 0 0;
  text-align: right;
  color: #8a9aad;
  font-size: var(--px-sm, 11px) !important;
}

.pkmn-pasture .pkmn-credit a { color: #0033cc; }

/* ============================================================
   28. 始祖小鸟页面的放养区（/tobitaiaaken/ 底部、留言板上面那一格）
   ------------------------------------------------------------
   和侧栏那只（第 27 节）是同一套做法：天由 pkmn-sky.js 画（画布尺寸 = 美术像素 × 2），
   角色的走图是 RPG Maker 的 3 帧走图，按整数倍设备像素放大、位置吸到整设备像素，
   所以边缘永远是硬的。区别只是这一格宽得多、一次上 1~2 位。

   角色画布（.tbtak-sprite / .tbtak-shadow）是 JS 按上场人数插进来的，
   所以这里只写通用规则；它们的 z-index 由 JS 按前后排定。
   ============================================================ */
#tbtak-pasture .tbtak-pen {
  position: relative;
  height: 180px;
  overflow: hidden;
  cursor: pointer;
  border: 1px solid #7f9db9;
  background-color: #d9ecff;
  background-image: url(../tbtak/pen-tile.png);
  background-repeat: repeat-x;
  background-position: left bottom;
  background-size: 43px auto;   /* = 64 设备像素 ÷ 1.5，JS 会按真实 DPR 覆盖 */
  image-rendering: pixelated;
}

#tbtak-pasture .tbtak-sky {
  position: absolute;
  left: 0;
  top: 0;
  z-index: 0;
  display: block;
  image-rendering: pixelated;
}

#tbtak-pasture .tbtak-sprite,
#tbtak-pasture .tbtak-shadow {
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  image-rendering: pixelated;
}

/* 右上角的天气 / 时间图标：半透明、不吃鼠标事件（z-index 要高过角色） */
#tbtak-pasture .tbtak-icons {
  position: absolute;
  top: 4px;
  right: 4px;
  z-index: 30;
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 2px;
  pointer-events: none;
  opacity: .72;
}

#tbtak-pasture .tbtak-icon {
  display: block;
  image-rendering: pixelated;
}

/* 夜空画布自己会压暗，这里只留一条兜底（JS 没跑起来时用的浅蓝底） */
html.tbtak-night #tbtak-pasture .tbtak-pen { background-color: #24365c; }

#tbtak-pasture .tbtak-hint {
  margin: 4px 0 0;
  text-align: right;
  color: #7488a0;
  font-size: var(--px-sm, 11px) !important;
}

/* 说话的那一格：左边脸图相框 + 右边名字/种类，下面一句台词 */
#tbtak-pasture .tbtak-box {
  margin-top: 7px;
  padding: 7px;
  min-height: 120px;
  border: 1px solid #6699cc;
  background: #fbfdff;
}

#tbtak-pasture .tbtak-head {
  display: flex;
  align-items: center;
  gap: 7px;
}

#tbtak-pasture .tbtak-face {
  display: block;
  padding: 1px;
  background: #ffffff;
  border: 1px solid #7f9db9;
  box-shadow: 1px 1px 0 #c3d9ef;
}

#tbtak-pasture .tbtak-who { min-width: 0; }

#tbtak-pasture .tbtak-name {
  margin: 0;
  color: #123f70;
  white-space: nowrap;
}

#tbtak-pasture .tbtak-kind {
  margin: 2px 0 0;
  color: #7488a0;
  white-space: nowrap;
  font-size: var(--px-sm, 11px) !important;
}

#tbtak-pasture .tbtak-line {
  margin: 6px 0 0;
  color: #222222;
  word-break: break-word;
  min-height: 1.6em;
}

#tbtak-pasture .tbtak-credit {
  margin: 5px 0 0;
  text-align: right;
  color: #8a9aad;
  font-size: var(--px-sm, 11px) !important;
}
