/* ============================================================
   《空座》全局视觉体系
   论坛 / 博客 / 同学会 / 结局 四套皮肤 + 共享层
   基调：旧网页考古质感，克制，纸色/墨色/低饱和砖红
   ============================================================ */

@import url("tokens.css");

* { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
button { font: inherit; color: inherit; padding: 0; border: none; background: none; cursor: pointer; }
h1, h2, h3 { margin: 0; font-weight: 700; }
a { color: inherit; }
a, button, [role="button"] { -webkit-tap-highlight-color: transparent; }

body {
  font-family: var(--font-ui);
  font-size: 14px;
  line-height: 1.85;
  color: var(--ink);
  user-select: text;
  -webkit-user-select: text;
}

/* ---------- 噪点 ---------- */
.noise {
  position: fixed;
  inset: 0;
  z-index: 50;
  pointer-events: none;
  opacity: 0.05;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

/* ---------- 闪现文字 ---------- */
.memory-flash {
  position: fixed;
  top: 38%;
  right: 0;
  left: 0;
  z-index: 60;
  text-align: center;
  font-size: 24px;
  letter-spacing: 0.4em;
  color: var(--brick);
  text-shadow: 0 0 14px rgba(143, 43, 37, 0.35);
  opacity: 0;
  transform: translateY(4px);
  transition: opacity 0.16s ease, transform 0.16s ease;
  pointer-events: none;
}
.memory-flash.show { opacity: 0.85; transform: translateY(0); }

/* ---------- 词云残留层：只参与氛围，不遮挡文字或接管交互 ---------- */
.whisper-layer {
  position: absolute;
  inset: 0;
  z-index: 0;
  overflow: hidden;
  pointer-events: none;
  user-select: none;
  opacity: 0;
  transition: opacity 1.2s ease;
}
.whisper-layer.show { opacity: 1; }
.whisper-word {
  position: absolute;
  left: var(--x);
  top: var(--y);
  max-width: 38%;
  color: currentColor;
  line-height: 1.2;
  white-space: nowrap;
  opacity: 0;
  transform: translate(-50%, -50%);
  animation: whisper-in 0.85s ease var(--delay) both, whisper-float 5.4s ease-in-out var(--delay) infinite alternate;
}
.whisper-final {
  position: absolute;
  left: 50%;
  top: 50%;
  color: currentColor;
  font-size: 14px;
  letter-spacing: 0.24em;
  opacity: 0;
  transform: translate(-50%, -50%);
  transition: opacity 2.6s ease;
}
.whisper-final.show { opacity: 0.58; }
.whisper-layer.dissolve .whisper-word { animation: none; opacity: 0; transition: opacity 2.4s ease; }
@keyframes whisper-in { to { opacity: 0.52; } }
@keyframes whisper-float { to { transform: translate(-50%, calc(-50% - 2px)); } }

/* ---------- 记忆碎片浮现层 ---------- */
.fragment-layer {
  position: fixed;
  inset: 0;
  z-index: 80;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(18, 16, 12, 0);
  backdrop-filter: blur(0px);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.5s ease, background 0.5s ease;
}
.fragment-layer.show {
  opacity: 1;
  background: rgba(18, 16, 12, 0.82);
  backdrop-filter: blur(3px);
  pointer-events: auto;
}
.fragment-layer .fragment-whispers { color: rgba(204, 182, 151, 0.38); font-family: var(--font-ui); }
.fragment-layer .fragment-whispers .whisper-word { letter-spacing: 0.12em; }
.fragment-box {
  position: relative;
  z-index: 1;
  max-width: 460px;
  padding: 36px 38px 28px;
  background: #efe9db;
  border: 1px solid #c2baa4;
  border-radius: 4px;
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.5);
  transform: translateY(10px);
  transition: transform 0.5s ease;
}
.fragment-layer.show .fragment-box { transform: translateY(0); }
.fragment-tag {
  margin: 0 0 18px;
  color: var(--brick);
  font-size: 12px;
  letter-spacing: 0.3em;
}
.fragment-text p { margin: 0 0 6px; }
.fragment-text p:last-child { margin-bottom: 0; }
.fragment-close {
  display: block;
  margin: 24px auto 0;
  padding: 6px 18px;
  color: #8d8778;
  font-size: 12px;
  letter-spacing: 0.14em;
  border-bottom: 1px dashed #8d8778;
}
.fragment-close:hover { color: var(--brick); border-bottom-color: var(--brick); }

/* ---------- 剪报层（论坛 8 楼） ---------- */
.news-box { max-width: 480px; text-align: left; }
.news-head {
  margin: 0 0 14px;
  font-size: 19px;
  letter-spacing: 0.1em;
  text-align: center;
}
.news-body p { margin: 0 0 10px; }
.news-body .news-note { margin: 0; color: #8d8778; }
/* 剪报里的引导链接（同学会旧站公告快照） */
.news-box .ext-link {
  display: inline-block;
  margin: 14px 0 2px;
  padding: 7px 14px;
  color: var(--brick);
  border: 1px solid var(--brick-soft);
  border-radius: 2px;
  text-decoration: none;
  font-size: 12px;
  letter-spacing: 0.06em;
}
.news-box .ext-link:hover { color: #efe9db; background: var(--brick); }
.news-fold {
  display: block;
  margin-top: 14px;
  color: #8d8778;
  font-size: 12px;
  font-style: normal;
}

/* ---------- 线索记录：按需提供方向与提示 ---------- */
.clue-tracker {
  position: fixed;
  top: 14px;
  right: 14px;
  z-index: 55;
  width: auto;
  padding: 8px 11px;
  background: rgba(246, 243, 234, 0.92);
  border: 1px solid #c2baa4;
  border-radius: 3px;
  box-shadow: 0 2px 10px rgba(62, 55, 40, 0.12);
  font-size: 12px;
  opacity: 0;
  transform: translateY(-4px);
  transition: opacity 0.4s ease;
}
.clue-tracker.visible { opacity: 1; transform: translateY(0); }
.clue-tracker button {
  display: flex;
  align-items: baseline;
  gap: 7px;
  color: #8d8778;
  font-size: 11px;
  letter-spacing: 0.14em;
}
.clue-tracker button small { color: var(--brick-soft); font-family: var(--font-mono); font-size: 10px; letter-spacing: 0; }
.clue-tracker button:hover { color: var(--brick); }
.clue-tracker.needs-attention { animation: tracker-pulse 0.72s ease 2; }
@keyframes tracker-pulse { 50% { border-color: var(--brick); box-shadow: 0 2px 14px rgba(143, 43, 37, 0.26); } }
.clue-list {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  width: 270px;
  max-height: min(380px, calc(100vh - 70px));
  overflow-y: auto;
  padding: 13px 14px;
  background: rgba(246, 243, 234, 0.97);
  border: 1px solid #c2baa4;
  border-radius: 3px;
  box-shadow: 0 8px 24px rgba(62, 55, 40, 0.18);
  font-family: var(--font-ui);
  line-height: 1.7;
}
.clue-list .clue-kicker { margin: 0 0 5px; color: var(--faint); font-size: 10px; letter-spacing: 0.18em; }
.clue-list b { display: block; color: var(--ink); font-family: var(--font-kai); font-size: 16px; font-weight: 400; }
.clue-list p { margin: 7px 0 0; color: var(--ink-soft); font-size: 12px; }
.clue-list button { margin: 11px 7px 0 0; padding: 5px 7px; color: var(--faint); border: 1px solid var(--line); font-size: 11px; letter-spacing: 0.08em; }
.clue-list button:hover { color: var(--brick); border-color: var(--brick); }
.clue-list .clue-progress-note { display: block; margin-top: 9px; color: var(--faint); font-size: 11px; line-height: 1.6; }
.clue-list .clue-help-actions { display: flex; gap: 7px; flex-wrap: wrap; }
.clue-list .clue-help { padding: 8px 9px; color: var(--faint); background: rgba(156, 59, 46, 0.04); border-left: 2px solid var(--brick); }
.clue-list .clue-help b { margin-bottom: 2px; color: var(--ink-soft); font-family: var(--font-ui); font-size: 11px; }
.clue-list .restart-game {
  display: block;
  margin: 18px 0 0;
  padding: 0;
  color: var(--faint);
  border: 0;
  border-bottom: 1px dashed currentColor;
  font-size: 10px;
  letter-spacing: 0.12em;
  opacity: 0.72;
}
.clue-list .restart-game:hover { color: var(--brick); opacity: 1; }

/* 页面正文不直接给出路线；引导统一收进右上角线索簿。 */
.path-guide { display: none !important; }
.forum-exit { margin: 18px 0 0; text-align: center; }
.forum-exit a { color: var(--faint); font-size: 12px; letter-spacing: 0.14em; text-decoration: none; }
.forum-exit a:hover { color: var(--brick); text-decoration: underline; }

/* ============================================================
   皮肤一：本地论坛「雁城门户网」
   ============================================================ */
body.forum {
  background:
    radial-gradient(ellipse at 50% 0%, rgba(255, 255, 255, 0.4), transparent 60%),
    var(--paper);
}

.forum-wrap {
  max-width: 780px;
  margin: 0 auto;
  padding: 0 16px 60px;
}

/* 顶部导航条：仿早期论坛站 */
.forum-topnav {
  background: var(--brick);
  font-size: 12px;
  color: var(--paper-2);
}
.forum-topnav .inner {
  max-width: 980px;
  margin: 0 auto;
  display: flex;
  gap: 18px;
  padding: 6px 16px;
  letter-spacing: 0.1em;
}
.forum-topnav a, .forum-topnav .inner > span:not(.hot) { color: var(--paper-2); text-decoration: none; opacity: 0.85; }
.forum-topnav a:hover { opacity: 1; text-decoration: underline; }
.forum-topnav .hot { margin-left: auto; opacity: 0.8; }

.forum-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 0;
  border-bottom: 2px solid var(--brick);
}
.forum-header .board { display: flex; align-items: baseline; gap: 10px; }
.forum-header .board b {
  font-size: 18px;
  letter-spacing: 0.12em;
  color: var(--brick);
  font-family: var(--font-ui);
}
.forum-header .board small { color: var(--faint); font-size: 11px; letter-spacing: 0.24em; }
.forum-header .user { color: var(--faint); font-size: 12px; font-family: var(--font-ui); }
.forum-header .user button { color: var(--brick); }

.forum-crumbs {
  padding: 8px 2px;
  color: var(--faint);
  font-size: 12px;
  border-bottom: 1px solid var(--line);
  font-family: var(--font-ui);
}
.forum-crumbs a, .forum-crumbs span { color: var(--brick); text-decoration: none; }
.forum-crumbs a:hover { text-decoration: underline; }

.forum-title {
  margin: 26px 0 8px;
  font-size: 22px;
  letter-spacing: 0.04em;
  line-height: 1.5;
  font-family: var(--font-ui);
  font-weight: 700;
}

.forum-meta {
  display: flex;
  gap: 14px;
  padding-bottom: 12px;
  color: var(--faint);
  font-size: 12px;
  border-bottom: 1px solid var(--line);
  font-family: var(--font-ui);
}
.forum-now {
  margin-left: auto;
  font-family: var(--font-mono);
}

.floor {
  display: grid;
  grid-template-columns: 130px 1fr;
  gap: 0;
  padding: 20px 0;
  border-bottom: 1px solid var(--line);
  font-family: var(--font-ui);
}
.floor-author { text-align: center; }
.floor-author .avatar {
  display: grid;
  place-items: center;
  width: 56px;
  height: 56px;
  margin: 0 auto 8px;
  color: var(--paper-2);
  background: var(--faint);
  border-radius: 3px;
  font-size: 20px;
  font-family: var(--font-ui);
}
.floor-author .avatar.op { background: var(--brick); }
.floor-author b { display: block; font-size: 12px; color: var(--ink); }
.floor-author .uid { display: block; color: var(--faint); font-size: 11px; font-family: var(--font-mono); }
.floor-author small { display: block; color: var(--faint); font-size: 11px; }
.floor-body { padding-left: 18px; }
.floor-body p { margin: 0 0 12px; }
.floor-body p:last-child { margin-bottom: 0; }
.floor-body .floor-time { display: block; margin-bottom: 10px; color: var(--faint); font-size: 11px; font-family: var(--font-mono); }
.floor-body .floor-no {
  float: right;
  color: var(--faint);
  font-size: 11px;
  font-family: var(--font-mono);
}
/* 楼层操作条：引用 / 回复 / 报告，仿真实论坛 */
.floor-actions {
  margin-top: 14px;
  display: flex;
  gap: 14px;
  font-size: 11px;
}
.floor-actions button {
  color: var(--faint);
  font-family: var(--font-ui);
  letter-spacing: 0.05em;
}
.floor-actions button:hover { color: var(--brick); }
.floor-actions .ip { margin-left: auto; color: var(--faint); font-family: var(--font-mono); }
.floor-body .ext-link {
  display: inline-block;
  padding: 8px 16px;
  color: var(--brick);
  border: 1px solid var(--brick-soft);
  border-radius: 2px;
  text-decoration: none;
  letter-spacing: 0.08em;
  background: var(--paper-2);
}
.floor-body .ext-link:hover { color: var(--paper-2); background: var(--brick); }
.floor-body .subtle-return {
  display: block;
  width: fit-content;
  margin: 12px 0 2px;
  color: var(--ink-soft);
  border-bottom: 1px dashed var(--ink-soft);
  font-family: var(--font-kai);
  font-size: 12px;
  line-height: 1.7;
}
.floor-body .subtle-return:hover { color: var(--brick); border-bottom-color: var(--brick); }
.floor.newly {
  animation: floor-in 1.2s ease;
}
@keyframes floor-in {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

/* 楼主贴内的链接卡片（同学会/博客） */
.site-card {
  margin-top: 6px;
  padding: 12px 14px;
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-left: 3px solid var(--brick);
  border-radius: 2px;
  max-width: 320px;
}
.site-card b { display: block; font-size: 13px; color: var(--ink); margin-bottom: 3px; }
.site-card span { font-size: 11px; color: var(--faint); font-family: var(--font-mono); word-break: break-all; }
.site-card a { color: var(--brick); text-decoration: none; }
.site-card a:hover { text-decoration: underline; }

.forum-reply-box {
  margin-top: 26px;
  padding: 16px;
  background: var(--paper-2);
  border: 1px solid var(--line);
  border-radius: 3px;
  font-family: var(--font-ui);
}
.forum-reply-box label {
  display: block;
  margin-bottom: 8px;
  color: var(--faint);
  font-size: 12px;
  letter-spacing: 0.2em;
}
.forum-reply-box textarea {
  display: block;
  width: 100%;
  height: 72px;
  margin-bottom: 10px;
  padding: 9px 12px;
  font: inherit;
  background: #fdfbf5;
  border: 1px solid var(--line-2);
  border-radius: 2px;
  resize: vertical;
}
.forum-reply-box button {
  padding: 7px 22px;
  color: var(--paper-2);
  background: var(--brick);
  border-radius: 2px;
  letter-spacing: 0.2em;
  font-size: 13px;
}
.forum-tip {
  margin-top: 30px;
  color: var(--faint);
  font-size: 12px;
  text-align: center;
  letter-spacing: 0.2em;
  font-family: var(--font-ui);
}
/* 中段被折叠的灌水回复（10 楼更完后出现，让楼层编号闭合） */
.forum-folded {
  margin: 26px 0 8px;
  color: var(--faint);
  font-size: 11px;
  text-align: center;
  letter-spacing: 0.24em;
}

/* 底部跑马灯：核心句 */
.forum-marquee {
  margin-top: 26px;
  overflow: hidden;
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  padding: 8px 0;
  white-space: nowrap;
}
.forum-marquee span {
  display: inline-block;
  padding-left: 100%;
  color: var(--faint);
  font-size: 12px;
  letter-spacing: 0.3em;
  animation: marquee 26s linear infinite;
}
@keyframes marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-100%); }
}

/* 循环闭环后出现的匿名回复 */
.loop-reply { border-left: 2px solid var(--brick); }

/* ============================================================
   皮肤二：博客「迟夏」
   ============================================================ */
body.blog {
  background:
    radial-gradient(ellipse at 50% 0%, rgba(255, 253, 245, 0.6), transparent 55%),
    var(--paper-2);
}

.blog-wrap {
  position: relative;
  max-width: 860px;
  margin: 0 auto;
  padding: 0 18px 60px;
}

/* 背景水印：核心句（竖排） */
.blog-wrap::before {
  content: attr(data-watermark);
  position: fixed;
  top: 50%;
  right: clamp(10px, calc((100vw - 980px) / 2), 46px);
  color: rgba(141, 135, 120, 0.07);
  font-size: clamp(24px, 2vw, 34px);
  letter-spacing: 0.38em;
  transform: translateY(-50%);
  writing-mode: vertical-rl;
  font-family: var(--font-kai);
  pointer-events: none;
}

.blog-header {
  padding: 40px 0 22px;
  text-align: center;
  border-bottom: 1px solid var(--line-2);
}
.blog-header .blog-title {
  font-family: var(--font-kai);
  font-size: 40px;
  letter-spacing: 0.4em;
  text-indent: 0.4em;
  color: var(--brick);
}
.blog-header .blog-sub {
  margin: 12px 0 0;
  color: var(--faint);
  font-size: 12px;
  letter-spacing: 0.18em;
  font-family: var(--font-ui);
}
/* 心情 / 天气 小徽标，仿个人空间 */
.blog-header .blog-mood {
  margin: 14px 0 0;
  display: flex;
  gap: 16px;
  justify-content: center;
  color: var(--faint);
  font-size: 11px;
  letter-spacing: 0.1em;
  font-family: var(--font-ui);
}
.blog-header .blog-mood span b { color: var(--ink-soft); font-weight: 400; }
.blog-header .blog-info {
  margin: 14px 0 0;
  color: var(--faint);
  font-size: 11px;
  letter-spacing: 0.12em;
  font-family: var(--font-mono);
}
.blog-header .blog-info b { color: var(--faint); font-weight: 400; }
/* 首屏站点索引：跨页回访可见，但不伪装成固定任务步骤。 */
.blog-header .blog-crossnav { margin: 10px 0 0; color: var(--faint); font-family: var(--font-ui); font-size: 11px; letter-spacing: .1em; }
.blog-header .blog-crossnav a { color: var(--ink-soft); text-decoration: none; border-bottom: 1px solid rgba(137, 118, 88, .28); }
.blog-header .blog-crossnav a:hover, .blog-header .blog-crossnav a:focus-visible { color: var(--brick); border-bottom-color: currentColor; }
.blog-header .blog-crossnav span { margin: 0 7px; color: var(--line-2); }
.blog-header .blog-newmsg {
  margin: 12px 0 0;
  color: var(--brick);
  font-size: 12px;
  letter-spacing: 0.14em;
  font-family: var(--font-ui);
  animation: newmsg-blink 1.6s steps(2, start) infinite;
}
.blog-header .blog-newmsg b { font-family: var(--font-mono); }
@keyframes newmsg-blink { 50% { opacity: 0.35; } }

.blog-nav {
  display: flex;
  justify-content: center;
  gap: 26px;
  padding: 12px 0;
  border-bottom: 1px solid var(--line);
  font-family: var(--font-ui);
}
.blog-nav button {
  color: var(--faint);
  font-size: 13px;
  letter-spacing: 0.3em;
}
.blog-nav button.active { color: var(--brick); border-bottom: 2px solid var(--brick); }

.blog-main[hidden] { display: none; }

.blog-list ol { margin: 0; padding: 0; list-style: none; font-family: var(--font-ui); }
.blog-list li { border-bottom: 1px dashed var(--line); }
.blog-list button {
  display: block;
  width: 100%;
  padding: 11px 10px;
  text-align: left;
  border-left: 2px solid transparent;
}
.blog-list button:hover { background: rgba(156, 59, 46, 0.04); }
.blog-list button.selected {
  background: rgba(156, 59, 46, 0.07);
  border-left-color: var(--brick);
}
.blog-list button small { display: block; color: var(--faint); font-size: 11px; letter-spacing: 0.06em; font-family: var(--font-mono); }
.blog-list button b { font-weight: 400; font-size: 13px; letter-spacing: 0.08em; }
.blog-list button.selected b { color: var(--brick); font-family: var(--font-kai); }

.blog-entry { min-height: 380px; font-family: var(--font-ui); scroll-margin-top: 18px; }
.blog-entry .entry-head { margin-bottom: 16px; padding-bottom: 12px; border-bottom: 1px solid var(--line); }

/* 正文 / 草稿：点击后滚动定位 + 「新内容」高亮闪光 */
#draftsBox { scroll-margin-top: 18px; }
.blog-entry.flash,
#draftsBox.flash { animation: entry-flash 1.8s ease; }
@keyframes entry-flash {
  0%   { box-shadow: 0 0 0 0 rgba(156, 59, 46, 0); }
  25%  { box-shadow: 0 0 0 5px rgba(156, 59, 46, 0.16); }
  100% { box-shadow: 0 0 0 0 rgba(156, 59, 46, 0); }
}
.blog-entry .entry-head small { color: var(--faint); font-size: 11px; letter-spacing: 0.1em; font-family: var(--font-mono); }
.blog-entry .entry-head h3 {
  margin-top: 4px;
  font-size: 22px;
  letter-spacing: 0.1em;
  font-family: var(--font-kai);
  color: var(--ink);
}
.blog-entry .entry-body p { margin: 0 0 10px; }
.blog-entry .entry-comments {
  margin-top: 28px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
}
.entry-comments h4 { margin: 0 0 5px; color: var(--ink-soft); font-family: var(--font-ui); font-size: 12px; font-weight: 400; letter-spacing: 0.12em; }
.entry-comments h4 small { margin-left: 8px; color: var(--faint); font-family: var(--font-mono); font-size: 10px; letter-spacing: 0; }
.entry-comment { padding: 8px 0; border-bottom: 1px dashed var(--line); }
.entry-comment p { margin: 0; }
.entry-comment b { color: var(--brick-soft); font-family: var(--font-ui); font-size: 11px; font-weight: 400; }
.entry-comment small { margin-left: 8px; color: var(--faint); font-family: var(--font-mono); font-size: 10px; }
.entry-comment span { display: block; margin-top: 2px; color: var(--ink-soft); font-family: var(--font-kai); font-size: 12px; line-height: 1.65; }
.entry-comment.pressure { padding-left: 10px; border-left: 2px solid rgba(143, 43, 37, 0.32); background: rgba(143, 43, 37, 0.025); }
.entry-comment.author b { color: var(--ink-soft); }
.entry-comment-closed { margin: 8px 0 0; color: var(--faint); font-family: var(--font-kai); font-size: 12px; }
.blog-entry .entry-foot {
  margin-top: 26px;
  padding-top: 12px;
  color: var(--faint);
  font-size: 11px;
  letter-spacing: 0.14em;
  border-top: 1px dashed var(--line);
  font-family: var(--font-mono);
}
/* 旧博客式前后文：顺着读得到下一篇，但不把叙事写成任务按钮。 */
.blog-entry .entry-next { display: inline-block; margin-top: 14px; padding: 0; color: var(--faint); border: 0; border-bottom: 1px solid var(--line-2); background: none; font-family: var(--font-kai); font-size: 13px; letter-spacing: .04em; }
.blog-entry .entry-next:hover, .blog-entry .entry-next:focus-visible { color: var(--brick); border-bottom-color: currentColor; }
.blog-entry .entry-next span { margin-left: 5px; font-family: var(--font-ui); }

/* 日志插画（手绘纸框） */
.blog-entry .entry-illu {
  margin: 0 0 16px;
  padding: 8px;
  background: var(--paper-2);
  border: 1px solid var(--line);
  box-shadow: var(--shadow);
}
.blog-entry .entry-illu img {
  display: block;
  width: 100%;
  border: 1px solid var(--line-2);
  filter: saturate(0.9) contrast(0.97) sepia(0.05);
}
.blog-entry .entry-illu figcaption {
  margin-top: 6px;
  text-align: right;
  font-family: var(--font-kai);
  font-size: 11px;
  color: var(--faint);
  letter-spacing: 0.08em;
}

/* ============ 三栏布局：侧栏 / 列表 / 正文 ============ */
.blog-main {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 26px;
  padding-top: 26px;
  align-items: start;
}
/* 显式列归属：侧栏固定 col1，其它正文（导航 / 日志 / 画册 / 留言 / 贴纸）一律 col2
   避免 view 切换时（隐藏的 view 不占格）自动布局把 view 错塞进侧栏导致变窄 */
.blog-main > .blog-side { grid-column: 1; }
.blog-main > nav.blog-nav,
.blog-main > .blog-list,
.blog-main > .blog-gallery,
.blog-main > .blog-comments,
.blog-main > .blog-stickers {
  grid-column: 2;
  min-width: 0;
}
.blog-side {
  display: flex;
  flex-direction: column;
  gap: 14px;
  position: sticky;
  top: 14px;
}
.blog-center { min-width: 0; }

/* 侧栏卡片通用 */
.side-card {
  background: var(--paper-2);
  border: 1px solid var(--line);
  padding: 12px 14px;
}
.side-card h5 {
  margin: 0 0 8px;
  padding-bottom: 6px;
  font-size: 12px;
  letter-spacing: 0.16em;
  color: var(--brick);
  border-bottom: 1px solid var(--line);
  font-family: var(--font-ui);
}

/* 博主资料卡 */
.side-card.profile { text-align: center; }
.side-card.profile .avatar {
  position: relative;
  width: 72px; height: 72px;
  margin: 0 auto 8px;
  border-radius: 4px;
  overflow: hidden;
  background: #e7ecdf;
}
.side-card.profile .avatar img {
  width: 100%; height: 100%;
  object-fit: cover;
  display: block;
  filter: saturate(0.92) contrast(0.96);
}
.side-card.profile .avatar .online {
  position: absolute;
  right: -2px; bottom: -2px;
  width: 13px; height: 13px;
  border-radius: 50%;
  background: #8a8578;
  border: 2px solid var(--paper-2);
  box-shadow: 0 0 0 1px rgba(90, 80, 60, 0.18);
}
.side-card.profile h4 { margin: 2px 0; font-size: 14px; color: var(--ink); letter-spacing: 0.08em; }
.side-card.profile .sig {
  margin: 6px 0 10px;
  font-family: var(--font-kai);
  font-size: 12px;
  color: var(--ink-soft);
  line-height: 1.6;
}
.side-card.profile .meta {
  list-style: none;
  margin: 0; padding: 0;
  text-align: left;
  font-size: 11px;
  color: var(--faint);
  font-family: var(--font-mono);
}
.side-card.profile .meta li { padding: 3px 0; border-top: 1px dashed var(--line); }
.side-card.profile .meta li span { display: inline-block; width: 40px; color: #b9b2a0; }
.side-card.profile .meta li b { color: var(--brick); }

/* 背景音乐播放器 */
.side-card.player { padding: 10px 12px; }
.side-card.player .player-bar { display: flex; align-items: center; gap: 8px; }
.side-card.player .player-bar .pname { font-size: 12px; color: var(--ink-soft); font-family: var(--font-ui); }
.side-card.player .eq { display: inline-flex; gap: 2px; align-items: flex-end; height: 14px; }
.side-card.player .eq b {
  width: 3px; height: 4px; background: var(--brick); border-radius: 1px;
}
.side-card.player.playing .eq b { animation: eq 0.9s ease-in-out infinite; }
.side-card.player.playing .eq b:nth-child(2) { animation-delay: 0.2s; }
.side-card.player.playing .eq b:nth-child(3) { animation-delay: 0.4s; }
.side-card.player.playing .eq b:nth-child(4) { animation-delay: 0.1s; }
@keyframes eq { 0%, 100% { height: 4px; } 50% { height: 14px; } }
.side-card.player .player-ctrl {
  display: flex; align-items: center; gap: 10px;
  margin-top: 8px;
  font-family: var(--font-mono);
  font-size: 11px;
  color: var(--faint);
}
.side-card.player .player-ctrl button {
  width: 24px; height: 22px;
  border: 1px solid var(--line-2);
  color: var(--brick);
  font-size: 11px;
}

/* 静态音乐盒：独立页呈现，是博客主人留下的歌单，不承担播放器功能。 */
.blog-music { max-width: 720px; margin: 28px auto 0; }
.blog-music .music-box { padding: 24px 26px; background: rgba(255, 253, 245, 0.74); border: 1px solid var(--line); }
.music-box h5 { margin: 0 0 16px; padding-bottom: 8px; color: var(--brick); border-bottom: 1px solid var(--line); font-family: var(--font-ui); font-size: 13px; letter-spacing: 0.16em; }
.music-box h5 small { float: right; color: var(--faint); font-size: 10px; font-weight: 400; letter-spacing: 0; }
.music-now { margin: 0; color: var(--ink-soft); font-family: var(--font-kai); font-size: 14px; }
.music-now i { display: inline-block; width: 5px; height: 5px; margin-right: 6px; border-radius: 50%; background: var(--brick-soft); animation: music-flicker 3.8s ease-in-out infinite; }
@keyframes music-flicker { 50% { opacity: 0.32; } }
.music-note, .music-wish, .music-private small { display: block; margin: 7px 0 0; color: var(--faint); font-family: var(--font-kai); font-size: 12px; line-height: 1.7; }
.music-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 24px; margin: 14px 0 0; padding: 0; list-style: none; }
.music-list li { padding: 6px 0; color: var(--ink-soft); border-bottom: 1px dashed var(--line); font-family: var(--font-ui); font-size: 12px; line-height: 1.45; }
.music-list li:last-child { border-bottom: 0; }
.music-wish { padding: 12px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.music-wish b, .music-private b, .music-drawing b { display: block; color: var(--brick-soft); font-family: var(--font-ui); font-size: 11px; font-weight: 400; letter-spacing: 0.12em; }
.music-private, .music-drawing { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--line); }
.music-private > p, .music-drawing > p { display: flex; justify-content: space-between; gap: 8px; margin: 0; }
.music-private > p span, .music-drawing > p span { color: var(--faint); font-size: 11px; }
.music-private:not(.unlocked) { opacity: 0.68; }
.music-private:not(.unlocked) > p::before { content: '锁'; display: inline-grid; place-items: center; width: 14px; height: 14px; margin-right: 4px; color: var(--faint); border: 1px solid var(--line-2); font-size: 9px; }
.music-private:not(.unlocked) > p { justify-content: flex-start; }
@media (max-width: 560px) {
  .blog-music .music-box { padding: 18px; }
  .music-list { grid-template-columns: 1fr; }
}

/* 最新访客 */
.side-card .visitors { display: flex; gap: 6px; flex-wrap: wrap; }
.side-card .visitors .v {
  width: 30px; height: 30px;
  display: grid; place-items: center;
  background: #e7ecdf;
  border: 1px solid var(--line);
  border-radius: 3px;
  font-size: 12px;
  color: var(--ink-soft);
  font-family: var(--font-kai);
}
.side-card .visitors .v.more { background: var(--paper-3); color: var(--faint); font-size: 11px; font-family: var(--font-mono); }
.side-card .visitors-note { margin: 8px 0 0; font-size: 11px; color: var(--faint); font-family: var(--font-ui); }
.side-card.micro-posts ol { margin: 0; padding: 0; list-style: none; }
.side-card.micro-posts li { padding: 7px 0; border-bottom: 1px dashed var(--line); }
.side-card.micro-posts li:last-child { border-bottom: none; }
.side-card.micro-posts small { display: block; color: var(--faint); font-family: var(--font-mono); font-size: 10px; }
.side-card.micro-posts span { display: block; margin-top: 2px; color: var(--ink-soft); font-family: var(--font-kai); font-size: 12px; line-height: 1.55; }
.side-card.micro-posts li:last-child span { color: var(--brick-soft); }

/* 文章分类 / 友情链接 */
.side-card .cats, .side-card .links { list-style: none; margin: 0; padding: 0; }
.side-card .cats li, .side-card .links li {
  display: flex; justify-content: space-between; align-items: center;
  padding: 5px 0;
  border-bottom: 1px dashed var(--line);
  font-size: 12px;
  font-family: var(--font-ui);
}
.side-card .cats li:last-child, .side-card .links li:last-child { border-bottom: none; }
.side-card .cats a, .side-card .links a { color: var(--ink-soft); text-decoration: none; }
.side-card .cats a:hover, .side-card .links a:hover { color: var(--brick); }
.side-card .cats em { color: var(--faint); font-family: var(--font-mono); font-style: normal; }

/* 当月日历 */
.side-card.calendar table { width: 100%; border-collapse: collapse; font-family: var(--font-mono); font-size: 11px; }
.side-card.calendar th { color: var(--faint); font-weight: 400; padding: 3px 0; }
.side-card.calendar td { text-align: center; padding: 4px 0; color: var(--ink-soft); border: 1px solid var(--line); }
.side-card.calendar td.today { background: var(--brick); color: #fff; }

/* 日志列表项计数 */
.blog-list button .entry-stat {
  display: block;
  margin-top: 4px;
  font-size: 11px;
  color: #b9b2a0;
  letter-spacing: 0.04em;
  font-family: var(--font-mono);
}
.blog-list button.selected .entry-stat { color: var(--faint); }

/* 日志阶段的情绪色彩：仅日期颜色渐变示意 */
.blog-list button.stage-1 small { color: #93ab8c; }
.blog-list button.stage-3 small { color: var(--brick-soft); }

/* 角落挂件贴纸（静止，像主人贴上去的） */
.blog-stickers { position: absolute; inset: 0; pointer-events: none; }
.blog-stickers .sticker {
  position: absolute;
  color: var(--brick-soft);
  opacity: 0.55;
  font-family: var(--font-kai);
}
.blog-stickers .sticker-flower { top: 14px; left: 22px; font-size: 18px; transform: rotate(-12deg); }
.blog-stickers .sticker-star { top: 14px; right: 24px; font-size: 14px; color: var(--tint); }
.blog-stickers .sticker-tag {
  bottom: 18px; right: 26px;
  font-size: 11px;
  padding: 2px 8px;
  border: 1px solid var(--brick-soft);
  border-radius: 10px;
  letter-spacing: 0.1em;
  background: rgba(255, 255, 255, 0.45);
}

@media (max-width: 820px) {
  .blog-main { grid-template-columns: 1fr; }
  .blog-side { position: static; }
}


/* 渐进解锁：未翻开的日志 */
.blog-list button.locked { opacity: 0.45; }
.blog-list button.locked:hover { background: none; }
.blog-list button .lock-tag {
  display: inline-block;
  margin-left: 8px;
  color: var(--faint);
  font-size: 10px;
  letter-spacing: 0.16em;
}
.entry-locked .blurred {
  filter: blur(5px);
  user-select: none;
  color: var(--faint);
}
.entry-locked .lock-note {
  margin: 18px 0 0;
  color: #8d8778;
  font-size: 12px;
  letter-spacing: 0.1em;
}

/* 草稿箱 */
.drafts-note {
  margin-top: 30px;
  padding: 18px 20px;
  border: 1px dashed #c2baa4;
  border-radius: 3px;
}
.drafts-note p { margin: 0 0 4px; color: #8d8778; font-size: 12px; letter-spacing: 0.14em; }
.drafts-note em { color: var(--faint); font-size: 12px; font-style: normal; }
.blog-cache { margin: 8px 0 0; font-size: 12px; letter-spacing: 0.08em; }
.blog-cache button { padding: 0; border: 0; background: none; color: #8d8778; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; font: inherit; }
.blog-cache button:hover, .blog-cache button:focus-visible { color: var(--brick-soft); outline: none; }
.draft-item {
  margin-bottom: 18px;
  padding: 16px 18px;
  background: rgba(246, 243, 234, 0.7);
  border: 1px solid #d5cfbf;
  border-radius: 3px;
}
.draft-item p { margin: 0 0 6px; }
.draft-item .draft-tag { color: var(--brick-soft); font-size: 11px; letter-spacing: 0.2em; }
.draft-lock { margin-top: 26px; padding: 16px 18px; background: rgba(246, 243, 234, 0.7); border: 1px dashed #c2baa4; border-radius: 3px; scroll-margin-top: 18px; }
.draft-lock .draft-tag { margin: 0 0 4px; color: var(--brick-soft); font-size: 11px; letter-spacing: 0.2em; }
.draft-lock h3 { margin: 0 0 6px; color: var(--ink); font-size: 14px; font-weight: 400; }
.draft-lock > p:not(.draft-tag):not(.draft-lock-hint) { margin: 0; color: var(--ink-soft); font-size: 12px; }
.draft-lock form { display: grid; grid-template-columns: 1fr auto; gap: 8px; align-items: end; margin-top: 12px; }
.draft-lock label { grid-column: 1 / -1; color: #8d8778; font-size: 11px; letter-spacing: 0.12em; }
.draft-lock input { min-width: 0; padding: 7px 10px; color: var(--ink); background: #fffdf7; border: 1px solid #c2baa4; border-radius: 2px; font: inherit; letter-spacing: 0.22em; }
.draft-lock button { padding: 7px 11px; color: var(--brick); background: #fffdf7; border: 1px solid var(--brick-soft); border-radius: 2px; font-size: 12px; }
.draft-lock button:hover { color: #fffdf7; background: var(--brick); }
.draft-lock-hint { min-height: 1.7em; margin: 10px 0 0; color: var(--brick-soft); font-size: 12px; }

/* 留言板 */
.blog-comments { position: relative; padding-top: 4px; overflow: hidden; }
.blog-comments > div:not(.comment-whispers) { position: relative; z-index: 1; }
.comment-whispers { color: rgba(128, 111, 96, 0.34); font-family: var(--font-kai); }
.comment-whispers .whisper-word { letter-spacing: 0.08em; }
.blog-comments .comment {
  padding: 12px 4px;
  border-bottom: 1px dashed #d5cfbf;
}
.blog-comments .comment b { font-weight: 400; color: var(--brick); font-size: 12px; }
.blog-comments .comment small { color: var(--faint); font-size: 11px; margin-left: 10px; }
.blog-comments .comment p { margin: 4px 0 0; }
.blog-comments .comment.pressure { padding-left: 12px; border-left: 2px solid rgba(143, 43, 37, 0.45); background: rgba(143, 43, 37, 0.035); }
.blog-comments .comment.author { padding-left: 12px; border-left: 2px solid #9a9180; background: rgba(80, 73, 61, 0.035); }
.blog-comments .comment.author b { color: var(--ink-soft); }
.blog-comments .comment.system { padding-left: 12px; color: var(--faint); border-left: 2px solid var(--line-2); font-size: 12px; }
.blog-comments .comment.system b { color: var(--faint); }
.blog-comments .comment.late { background: rgba(113, 138, 105, 0.07); }
.blog-comments .comment.kindness { background: rgba(147, 171, 140, 0.1); }
.reply-recovery { margin-top: 24px; padding: 14px; border: 1px dashed #c2baa4; background: rgba(246, 243, 234, 0.68); }
.reply-recovery > p { margin: 0; color: var(--ink-soft); font-size: 12px; line-height: 1.7; }
.reply-recovery .evidence-kicker { margin-bottom: 4px; color: #8d8778; font-size: 10px; letter-spacing: 0.16em; }
.reply-recovery h3 { margin: 0 0 7px; color: var(--ink); font-size: 14px; }
.reply-recovery .evidence-cards article { border-left-color: #b4a797; }
.reply-recovery .evidence-cards small { color: #8d8778; }
.reply-recovery .evidence-options button { border-color: #d5cfbf; }
.reply-recovery .evidence-options button:hover { border-color: var(--brick-soft); background: rgba(143, 43, 37, 0.035); }
.reply-evidence { display: grid; gap: 4px; width: 100%; padding: 9px 10px; color: var(--ink-soft); text-align: left; background: #fff; border: 1px solid #d5cfbf; font: inherit; font-size: 12px; line-height: 1.6; cursor: pointer; }
.reply-evidence:hover { border-color: var(--brick-soft); }
.reply-evidence.accepted, .reply-evidence:disabled { color: #7b8c78; border-color: #b6c4ae; background: #f3f6f0; cursor: default; }

/* 画册 —— 横向自适应布局（横图，多列自动换行） */
/* 画册视图没有侧栏，把 view 自身的 220+1fr 网格改为单列满宽，让画册横排 */
.blog-main.blog-gallery { grid-template-columns: 1fr; }
.blog-gallery { padding-top: 4px; }
.gallery-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 18px;
}
.gallery-item {
  margin: 0;
  background: #f5efe2;
  border: 1px solid #c2baa4;
  border-radius: 4px;
  overflow: hidden;
  cursor: zoom-in;
  transition: transform .25s ease, box-shadow .25s ease;
}
.gallery-item:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 26px rgba(60, 40, 30, 0.16);
}
.gallery-item img {
  width: 100%;
  display: block;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  background: #e7e0d0;
}
.gallery-item figcaption { padding: 10px 13px 13px; }
.gallery-item figcaption b {
  display: block;
  font-weight: 400;
  font-family: var(--font-kai, "KaiTi", serif);
  font-size: 16px;
  color: #4a4136;
  letter-spacing: .06em;
}
.gallery-item figcaption small {
  display: block;
  margin-top: 2px;
  color: #b9b2a0;
  font-size: 11px;
  font-family: var(--font-mono, monospace);
}
.gallery-item figcaption span {
  display: block;
  margin-top: 5px;
  font-size: 12px;
  color: #6f6657;
  line-height: 1.55;
}
@media (max-width: 560px) {
  .gallery-grid { grid-template-columns: 1fr; }
}

/* 画册灯箱 */
.gallery-lightbox {
  position: fixed;
  inset: 0;
  z-index: 90;
  background: rgba(30, 22, 18, 0.88);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  padding: 24px;
  cursor: zoom-out;
}
.gallery-lightbox img {
  max-width: 90vw;
  max-height: 76vh;
  border: 6px solid #f5efe2;
  box-shadow: 0 14px 44px rgba(0, 0, 0, 0.45);
}
.gallery-lightbox figcaption {
  color: #f3ece0;
  font-family: var(--font-kai, "KaiTi", serif);
  font-size: 17px;
  letter-spacing: .1em;
}
.gallery-lightbox .lb-note {
  color: #cbbca8;
  font-family: var(--font-ui, sans-serif);
  font-size: 12px;
  max-width: 56ch;
  text-align: center;
  line-height: 1.6;
  margin: 0;
}

/* ============================================================
   皮肤三：结局页
   ============================================================ */
body.ending {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  min-height: 100vh;
  padding: 3.5vh 16px 0.5vh;
  /* 黑屏，但留一丝窗边的暖余晖，呼应游戏暖色调，避免死黑 */
  background:
    radial-gradient(120% 78% at 50% 34%, rgba(176, 92, 62, 0.10), transparent 60%),
    radial-gradient(90% 60% at 50% 104%, rgba(120, 80, 50, 0.08), transparent 70%),
    #141009;
  color: #b3a892;
  font-family: var(--font-song);
  transition: opacity 1.4s ease;
}
body.ending.fade-out { opacity: 0; }

.ending-whispers {
  position: fixed;
  inset: 0;
  color: rgba(180, 158, 133, 0.44);
  font-family: var(--font-ui);
}
.ending-whispers .whisper-word { letter-spacing: 0.14em; }
.ending-whispers .whisper-final { color: #d3b480; }
.ending-wrap {
  position: relative;
  z-index: 1;
  max-width: 520px;
  padding: 14px 24px 16px;
  text-align: center;
}

.ending-fantasy {
  color: #cfc6b0;
  font-style: italic;
  opacity: 0;
  transition: opacity 2s ease;
}
.ending-fantasy.show { opacity: 0.85; }

.ending-line {
  margin: 0 0 4px;
  font-size: 13.5px;
  letter-spacing: 0.1em;
  opacity: 0;
  transform: translateY(6px);
  transition: opacity 1.4s ease, transform 1.4s ease;
}
.ending-line.show { opacity: 1; transform: translateY(0); }

.ending-anchor {
  margin: 15px 0 0;
  color: var(--brick);
  font-family: var(--font-kai, "KaiTi", serif);
  font-size: 17px;
  letter-spacing: 0.34em;
  text-indent: 0.34em;
  opacity: 0;
  transition: opacity 2.4s ease;
}
.ending-anchor.show { opacity: 0.95; }

.ending-anchor-after {
  margin: 9px 0 0;
  color: #8a8068;
  font-family: var(--font-kai, "KaiTi", serif);
  font-size: 13px;
  letter-spacing: 0.22em;
  text-indent: 0.22em;
  opacity: 0;
  transition: opacity 2s ease;
}
.ending-anchor-after.show { opacity: 1; }

/* 空椅子手绘插画：作为收尾的暖光焦点 */
.ending-chair {
  display: block;
  margin: 8px auto 4px;
  width: 146px;
  height: 176px;
  object-fit: contain;
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 2.4s ease, transform 2.4s ease, filter 2.4s ease;
  filter: saturate(0.9) contrast(0.97) sepia(0.05)
          drop-shadow(0 0 26px rgba(200, 120, 70, 0.28));
}
.ending-chair.show {
  opacity: 0.92;
  transform: translateY(0);
}

.ending-egg {
  margin: 8px 0 0;
  color: rgba(168, 159, 140, 0.42);
  font-size: 12px;
  letter-spacing: 0.22em;
  text-align: center;
  opacity: 0;
  transition: opacity 6s ease;
  font-family: var(--font-song);
}
.ending-egg.show { opacity: 1; }
.ending-credit {
  margin: 22px 0 0;
  color: rgba(168, 159, 140, 0.3);
  font-size: 10px;
  letter-spacing: 0.16em;
  text-align: center;
}
.work-credit {
  margin: 14px 0 0;
  color: rgba(100, 92, 78, 0.62);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-align: center;
}
.ending-action { min-height: 38px; margin: 18px auto 0; text-align: center; opacity: 0; transition: opacity 0.8s ease; }
.ending-action.show { opacity: 1; }
.ending-action button { padding: 8px 13px; color: #e8dfcc; border: 1px solid rgba(232, 223, 204, 0.55); background: transparent; font-family: var(--font-ui); font-size: 12px; letter-spacing: 0.1em; }
.ending-action button:hover { color: #211e18; background: #e8dfcc; }
.ending-action p { margin: 0; color: rgba(232, 223, 204, 0.78); font-size: 12px; line-height: 1.7; }
.ending-action .memo-builder,
.ending-action .memo-published {
  max-width: 490px;
  margin: 0 auto;
  padding: 18px;
  text-align: left;
  border: 1px solid rgba(232, 223, 204, 0.32);
  background: rgba(20, 18, 14, 0.32);
}
.ending-action .memo-kicker { margin-bottom: 8px; color: #d8c59b; font-size: 10px; letter-spacing: 0.2em; }
.ending-action .memo-builder h2 { margin: 0 0 8px; color: #eee4cf; font-size: 15px; font-weight: 400; letter-spacing: 0; }
.ending-action .memo-builder > p:not(.memo-kicker):not(.memo-selection) { margin-bottom: 14px; }
.ending-action .memo-facts { display: grid; gap: 7px; }
.ending-action .memo-fact {
  width: 100%;
  padding: 9px 10px;
  color: rgba(232, 223, 204, 0.8);
  text-align: left;
  letter-spacing: 0;
  line-height: 1.55;
  border-color: rgba(232, 223, 204, 0.28);
}
.ending-action .memo-fact:hover,
.ending-action .memo-fact.selected { color: #211e18; background: #e8dfcc; }
.ending-action .memo-fact:focus-visible,
.ending-action .memo-publish:focus-visible { outline: 2px solid #d8c59b; outline-offset: 3px; }
.ending-action .memo-selection { min-height: 1.7em; margin: 14px 0 10px; color: #d8c59b; }
.ending-action .memo-publish { width: 100%; }
.ending-action .memo-publish:disabled { cursor: not-allowed; opacity: 0.42; }
.ending-action .memo-published ul { margin: 12px 0; padding-left: 18px; color: rgba(232, 223, 204, 0.86); font-size: 12px; line-height: 1.7; }
.ending-action .memo-published li + li { margin-top: 4px; }

/* 跳过：右下角常驻小字，点击直接落幕到结尾 */
.ending-skip {
  position: fixed;
  right: 18px;
  bottom: 16px;
  z-index: 5;
  padding: 6px 12px;
  color: rgba(179, 168, 146, 0.5);
  background: transparent;
  border: 1px solid rgba(179, 168, 146, 0.22);
  border-radius: 2px;
  font-family: var(--font-ui);
  font-size: 11px;
  letter-spacing: 0.18em;
  cursor: pointer;
  opacity: 0;
  transition: opacity 1.6s ease, color 0.25s ease, border-color 0.25s ease;
}
.ending-skip.show { opacity: 1; }
.ending-skip:hover { color: #e8dfcc; border-color: rgba(232, 223, 204, 0.5); }

/* 结局主题曲分享卡（网易云单曲） */
.ending-theme {
  margin: 8px auto 0;
  opacity: 0;
  transform: translateY(8px);
  transition: opacity 2s ease, transform 2s ease;
}
.ending-theme.show { opacity: 1; transform: translateY(0); }
.theme-card {
  display: inline-flex;
  align-items: center;
  gap: 13px;
  max-width: 440px;
  padding: 12px 16px;
  text-decoration: none;
  color: #cdc3ad;
  border: 1px solid rgba(208, 110, 74, 0.30);
  border-radius: 8px;
  background: rgba(208, 110, 74, 0.06);
  transition: border-color 0.25s ease, background 0.25s ease;
}
.theme-card:hover { border-color: rgba(224, 140, 90, 0.6); background: rgba(208, 110, 74, 0.13); }
.theme-ico { font-size: 20px; line-height: 1; color: #e0533a; }
.theme-meta { display: flex; flex-direction: column; line-height: 1.45; text-align: left; }
.theme-title { font-family: var(--font-kai, "KaiTi", serif); font-size: 14px; letter-spacing: 0.08em; color: #ece3d0; }
.theme-sub { font-size: 11px; letter-spacing: 0.08em; color: rgba(179, 168, 146, 0.72); }
.theme-go { margin-left: 8px; font-size: 12px; letter-spacing: 0.06em; color: #e0533a; white-space: nowrap; }

/* ---------- 响应式 ---------- */
@media (max-width: 760px) {
  /* ---- 论坛：楼层单栏 / 顶部导航可换行 / 回复框更好点 ---- */
  .floor { grid-template-columns: 1fr; }
  .floor-author { display: flex; align-items: center; gap: 10px; text-align: left; margin-bottom: 10px; }
  .floor-author .avatar { width: 38px; height: 38px; margin: 0; font-size: 15px; }
  .floor-body { padding-left: 0; }
  .floor-body .floor-no { float: none; display: block; margin: -2px 0 8px; }
  .forum-title { font-size: 19px; }
  .forum-topnav .inner { flex-wrap: wrap; gap: 6px 14px; }
  .forum-topnav .hot { font-size: 11px; }
  .forum-meta { flex-wrap: wrap; gap: 6px 14px; }
  .forum-now { margin-left: 0; }
  .forum-reply-box textarea { height: 92px; font-size: 16px; }
  .forum-reply-box button { padding: 10px 26px; font-size: 14px; }
  .site-card { max-width: 100%; }

  /* ---- 博客：头部紧凑 / 日志横条顺滑 / 点按目标加大 ---- */
  .blog-main { grid-template-columns: 1fr; }
  .blog-header { padding: 26px 0 16px; }
  .blog-header .blog-title { font-size: 30px; letter-spacing: 0.3em; text-indent: 0.3em; }
  .blog-header .blog-sub { margin-top: 8px; letter-spacing: 0.12em; }
  .blog-header .blog-mood { flex-wrap: wrap; gap: 6px 14px; }
  .blog-header .blog-info { line-height: 1.8; }
  .blog-nav { gap: 18px; justify-content: flex-start; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
  .blog-nav::-webkit-scrollbar { display: none; }
  .blog-nav button { flex: none; padding: 8px 2px; }
  .blog-list ol { display: flex; overflow-x: auto; gap: 8px; padding: 2px 2px 10px; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
  .blog-list ol::-webkit-scrollbar { display: none; }
  .blog-list li { flex: none; border-bottom: none; }
  .blog-list button { border-left: none; border-bottom: 2px solid transparent; white-space: nowrap; padding: 12px 14px; }
  .blog-list button.selected { border-bottom-color: var(--brick); }
  .blog-entry .entry-head h3 { font-size: 20px; }
  .blog-cache button { padding: 8px 4px; }
  .blog-comments .comment { padding: 14px 2px; }
  .blog-wrap::before { display: none; }
}

@media (max-width: 400px) {
  .fragment-layer { padding: 12px; }
  .fragment-box { width: 100%; padding: 24px 20px 20px; }
  .news-head { font-size: 17px; }
  .ending-wrap { padding-inline: 16px; }
  .ending-line { letter-spacing: 0.06em; }
  .ending-anchor { letter-spacing: 0.22em; text-indent: 0.22em; }
  .theme-card { width: 100%; max-width: calc(100vw - 32px); gap: 10px; padding: 11px 12px; }
  .theme-meta { min-width: 0; }
  .theme-go { margin-left: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .fragment-layer, .fragment-box, .floor.newly, .ending-line, .ending-anchor { transition: none; }
  .whisper-word { animation: none; opacity: 0.3; }
  .whisper-layer.dissolve .whisper-word { opacity: 0; }
}

/* ---------- 博客自定义鼠标：云朵 / 小花 / 猫爪 ---------- */
/* 仅当 JS 确认有鼠标后（body.blog.cursor-active）隐藏系统光标，触摸/降级时保留系统光标 */
body.blog.cursor-active,
body.blog.cursor-active * { cursor: none !important; }

.blog-cursor-dot,
.blog-cursor-ring {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 9999;
  border-radius: 50%;
  pointer-events: none;
  opacity: 0;
  will-change: transform;
}
body.blog.cursor-active .blog-cursor-dot,
body.blog.cursor-active .blog-cursor-ring { opacity: 1; }

/* 外圈淡环（颜色由各主题决定） */
.blog-cursor-ring {
  width: 30px;
  height: 30px;
  border: 1px solid rgba(156, 59, 46, 0.35);
  background: rgba(156, 59, 46, 0.05);
  transition: width 0.22s ease, height 0.22s ease,
              border-color 0.22s ease, background 0.22s ease;
}

/* 悬停可点内容：淡环晕开 */
body.blog.cursor-hover .blog-cursor-ring {
  width: 44px;
  height: 44px;
  border-color: rgba(156, 59, 46, 0.55);
  background: rgba(156, 59, 46, 0.10);
}

/* 画册放大查看：淡环变「＋」，呼应放大缩小 */
body.blog.cursor-zoom .blog-cursor-ring {
  width: 42px;
  height: 42px;
  border-color: rgba(156, 59, 46, 0.6);
}
body.blog.cursor-zoom .blog-cursor-ring::after {
  content: '';
  position: absolute;
  inset: 0;
  margin: auto;
  width: 16px;
  height: 16px;
  background:
    linear-gradient(rgba(156, 59, 46, 0.85), rgba(156, 59, 46, 0.85)) center / 14px 1.5px no-repeat,
    linear-gradient(90deg, rgba(156, 59, 46, 0.85), rgba(156, 59, 46, 0.85)) center / 1.5px 14px no-repeat;
}

@media (hover: none), (prefers-reduced-motion: reduce) {
  body.blog.cursor-active, body.blog.cursor-active * { cursor: auto; }
  .blog-cursor-dot, .blog-cursor-ring { display: none; }
}

/* 光标样式切换按钮（低调圆钮，点击循环切换，主题记忆） */
.blog-cursor-switch {
  position: fixed;
  right: 14px;
  bottom: 64px;
  z-index: 9990;
  width: 27px;
  height: 27px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: 1px solid rgba(156, 59, 46, 0.28);
  background: rgba(255, 253, 245, 0.72);
  color: rgba(156, 59, 46, 0.75);
  font-family: var(--font-ui);
  font-size: 13px;
  line-height: 1;
  opacity: 0.55;
  transition: opacity 0.25s ease, border-color 0.25s ease, transform 0.35s ease;
}
.blog-cursor-switch:hover { opacity: 1; border-color: rgba(156, 59, 46, 0.55); transform: rotate(180deg); }

/* ---- 光标主题：云朵 / 小花 / 猫爪 ---- */
body.blog[data-cursor="cloud"] .blog-cursor-dot,
body.blog[data-cursor="flower"] .blog-cursor-dot,
body.blog[data-cursor="cat"] .blog-cursor-dot {
  width: 22px;
  height: 22px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: none;
  box-shadow: none;
  font-size: 22px;
  line-height: 1;
  transition: width 0.2s ease, height 0.2s ease, font-size 0.2s ease;
}
body.blog[data-cursor="cloud"] .blog-cursor-dot::before { content: '☁'; color: rgba(110, 138, 160, 0.8); }
body.blog[data-cursor="cloud"] .blog-cursor-ring { border-color: rgba(110, 138, 160, 0.3); background: rgba(110, 138, 160, 0.04); }
body.blog[data-cursor="cloud"].cursor-hover .blog-cursor-dot { width: 27px; height: 27px; font-size: 27px; }

body.blog[data-cursor="flower"] .blog-cursor-dot::before { content: '❀'; color: rgba(156, 59, 46, 0.75); }
body.blog[data-cursor="flower"] .blog-cursor-ring { border-color: rgba(156, 59, 46, 0.3); }
body.blog[data-cursor="flower"].cursor-hover .blog-cursor-dot { width: 26px; height: 26px; font-size: 26px; }

body.blog[data-cursor="cat"] .blog-cursor-dot::before { content: '🐾'; }
body.blog[data-cursor="cat"] .blog-cursor-ring { border-color: rgba(180, 110, 60, 0.35); background: rgba(180, 110, 60, 0.05); }
body.blog[data-cursor="cat"].cursor-hover .blog-cursor-dot { width: 27px; height: 27px; font-size: 27px; }

@media (hover: none), (prefers-reduced-motion: reduce) {
  .blog-cursor-switch { display: none; }
}

/* 校友网的旧物登记：像普通班务纸面，不做独立玩法面板。 */
.class-ledger { background: rgba(249, 246, 236, 0.74); }
.ledger-row { display: grid; grid-template-columns: 80px 1fr; gap: 10px; padding: 10px 0; border-top: 1px dashed var(--line); }
.ledger-row time { color: var(--faint); font-family: var(--font-mono); font-size: 10px; }
.ledger-row b, .ledger-row span, .ledger-row small { display: block; }
.ledger-row b { color: var(--ink-soft); font-family: var(--font-ui); font-size: 12px; font-weight: 400; }
.ledger-row span { margin-top: 2px; color: var(--ink); font-family: var(--font-kai); font-size: 13px; }
.ledger-row small, .ledger-recovered { margin: 3px 0 0; color: var(--faint); font-family: var(--font-kai); font-size: 11px; line-height: 1.6; }
.ledger-recovered { padding-top: 9px; border-top: 1px dashed var(--line); }

/* 画册随日志恢复；夹层标签只在故事读到最后时出现。 */
.gallery-recovery { margin: 0 0 14px; color: var(--faint); font-family: var(--font-kai); font-size: 12px; line-height: 1.7; }
.pencil-cache { margin-top: 24px; padding: 18px 20px; background: rgba(246, 243, 234, 0.68); border: 1px dashed var(--line-2); }
.pencil-cache .pencil-kicker { margin: 0 0 5px; color: var(--brick-soft); font-family: var(--font-ui); font-size: 11px; letter-spacing: 0.16em; }
.pencil-cache h3 { margin: 0 0 6px; color: var(--ink); font-size: 14px; font-weight: 400; }
.pencil-cache > p:not(.pencil-kicker):not(.pencil-hint) { margin: 0; color: var(--ink-soft); font-family: var(--font-kai); font-size: 13px; line-height: 1.75; }
.pencil-cache form { display: grid; grid-template-columns: 1fr auto; gap: 8px; margin-top: 12px; }
.pencil-cache label { grid-column: 1 / -1; color: var(--faint); font-size: 11px; letter-spacing: 0.1em; }
.pencil-cache input { min-width: 0; padding: 7px 10px; color: var(--ink); background: #fffdf7; border: 1px solid var(--line-2); font: inherit; }
.pencil-cache button { padding: 7px 12px; color: var(--brick); background: #fffdf7; border: 1px solid var(--brick-soft); font-size: 12px; }
.pencil-cache button:hover { color: #fffdf7; background: var(--brick); }
.pencil-cache .pencil-hint { min-height: 1.7em; margin: 9px 0 0; color: var(--brick-soft); font-size: 12px; }
.blog-nav button:disabled { color: var(--faint); cursor: not-allowed; opacity: 0.62; }
@media (max-width: 560px) { .ledger-row { grid-template-columns: 70px 1fr; } .pencil-cache { padding: 15px; } }
/* 首次案件说明：只交代调查路径，不替玩家逐题下指令。 */
.case-guide { position: fixed; inset: 0; z-index: 10020; display: grid; place-items: center; padding: 22px; background: rgba(31, 29, 25, 0.58); }
.case-guide[hidden] { display: none; }
.case-guide-card { width: min(560px, 100%); max-height: min(680px, calc(100vh - 44px)); overflow: auto; padding: 30px 32px; background: #fbf8ef; border: 1px solid #9e9585; box-shadow: 0 14px 48px rgba(0,0,0,.32); color: #3e3931; }
.case-kicker, .case-guide-card p { margin: 0 0 13px; font-family: var(--font-kai); font-size: 14px; line-height: 1.85; }
.case-kicker { color: var(--brick-soft); font-family: var(--font-ui); font-size: 11px; letter-spacing: .14em; }
.case-guide-card h2 { margin: 0 0 16px; font-family: var(--font-kai); font-size: 23px; font-weight: 400; line-height: 1.45; }
.case-guide-card .case-route { padding: 12px 14px; border-left: 2px solid var(--brick-soft); background: rgba(156,59,46,.06); }
.case-route b, .case-route span { display: block; }
.case-route b { margin-bottom: 5px; color: var(--brick); font-family: var(--font-ui); font-size: 11px; letter-spacing: .12em; }
.case-route span { color: var(--ink-soft); }
.case-boundary { color: #746c60; font-size: 12px !important; }
.case-cross-link { display: inline-block; margin: 0 0 16px; color: var(--brick); font-size: 13px; }
.case-enter { display: block; width: 100%; padding: 10px 14px; border: 1px solid var(--brick-soft); background: transparent; color: var(--brick); font-family: var(--font-ui); font-size: 13px; }
.case-enter:hover, .case-enter:focus-visible { background: var(--brick); color: #fffdf7; }
.work-credit span { color: var(--faint); font-size: 10px; letter-spacing: .1em; }

/* 桌面端日志目录与阅读器各自滚动，点击目录不会拖动整页到底部。 */
@media (min-width: 821px) {
  .blog-center { display: grid; grid-template-columns: minmax(190px, 0.36fr) minmax(0, 1fr); gap: 18px; align-items: start; }
  .blog-center > .blog-list { position: sticky; top: 14px; max-height: calc(100vh - 28px); overflow: auto; padding-right: 8px; }
  .blog-center > .blog-entry { min-height: min(700px, calc(100vh - 28px)); max-height: calc(100vh - 28px); overflow: auto; overscroll-behavior: contain; padding-right: 18px; scroll-behavior: smooth; }
  .blog-center > .blog-entry::-webkit-scrollbar, .blog-center > .blog-list::-webkit-scrollbar { width: 7px; }
  .blog-center > .blog-entry::-webkit-scrollbar-thumb, .blog-center > .blog-list::-webkit-scrollbar-thumb { background: rgba(156,59,46,.26); }
}
@media (max-width: 560px) { .case-guide { padding: 12px; } .case-guide-card { padding: 23px 20px; } .case-guide-card h2 { font-size: 20px; } }
/* 补记完成后的回声不是号召分享，只留一句可带走的话。 */
.ending-action .memo-echo { margin: 18px 0 10px; padding: 11px 14px; border-left: 2px solid #d8c59b; color: #eee4cf; font-family: var(--font-kai); font-size: 16px; line-height: 1.65; text-align: left; }
.ending-action .memo-copy { padding: 6px 10px; color: #d8c59b; border-color: rgba(216, 197, 155, .48); font-size: 11px; letter-spacing: .04em; }
.ending-action .memo-copy-status { min-height: 1.7em; margin-top: 7px; color: rgba(232, 223, 204, .6); font-size: 11px; }
/* 补记把事实与来源并置：玩家是在整理证据，不是在替故事补设定。 */
.memo-source { display: block; margin-top: 4px; color: rgba(216, 197, 155, 0.72); font-family: var(--font-mono); font-size: 10px; line-height: 1.55; letter-spacing: 0; }
.ending-action .memo-fact { display: grid; gap: 3px; }
.ending-action .memo-fact.selected .memo-source, .ending-action .memo-fact:hover .memo-source { color: rgba(50, 42, 30, 0.72); }
.memo-floor .memo-source { margin-top: 5px; color: var(--faint); }

/* 子页只在确有新楼层时标记返回入口。 */
.forum-return-unread { color: var(--brick) !important; font-weight: 600; }
.forum-return-unread::before { content: '● '; font-size: 8px; vertical-align: 1px; }

/* 侧栏的无内容栏目是文字，不再伪装成会跳转的链接。 */
.side-card .cats span, .side-card .links span, .side-card .cats button { color: var(--ink-soft); font: inherit; text-decoration: none; }
.side-card .cats button { padding: 0; border: 0; background: none; cursor: pointer; }
.side-card .cats button:hover, .side-card .cats button:focus-visible, .side-card .links a:hover, .side-card .links a:focus-visible { color: var(--brick); }

/* 未完成的作品集：她仍在为自己安排一个以后。 */
.portfolio-index { margin: 22px 0 0; padding: 17px 20px; border: 1px dashed var(--line-2); background: rgba(249, 246, 236, 0.68); color: var(--ink-soft); }
.portfolio-index .portfolio-kicker { margin: 0 0 5px; color: var(--brick-soft); font-family: var(--font-ui); font-size: 10px; letter-spacing: .16em; }
.portfolio-index h3 { margin: 0; color: var(--ink); font-family: var(--font-kai); font-size: 15px; font-weight: 400; }
.portfolio-index time { display: block; margin-top: 4px; color: var(--faint); font-family: var(--font-mono); font-size: 10px; }
.portfolio-index ol { margin: 12px 0; padding-left: 22px; font-family: var(--font-kai); font-size: 13px; line-height: 1.8; }
.portfolio-index li:last-child { color: var(--faint); }
.portfolio-index > p:last-child { margin: 0; color: var(--faint); font-family: var(--font-kai); font-size: 12px; }
/* 画本最后夹页：不是新线索，而是一份可被翻开的未完成创作。 */
.portfolio-story { margin: 16px 0 0; padding: 17px 20px; border: 1px solid rgba(164, 143, 106, .34); background: rgba(253, 250, 240, .8); }
.portfolio-story .portfolio-kicker { margin: 0 0 7px; color: var(--brick-soft); font-family: var(--font-ui); font-size: 10px; letter-spacing: .16em; }
.portfolio-story details { color: var(--ink); }
.portfolio-story summary { width: fit-content; cursor: pointer; color: var(--ink); font-family: var(--font-kai); font-size: 15px; }
.portfolio-story summary:hover, .portfolio-story summary:focus-visible { color: var(--brick); }
.fourth-page-book { margin-top: 16px; padding: 17px 18px; border-left: 2px solid rgba(91, 119, 149, .44); background: rgba(239, 242, 241, .48); }
.fourth-page-book header { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.fourth-page-book h3 { margin: 0; font-family: var(--font-kai); font-size: 17px; font-weight: 400; }
.fourth-page-book time { flex: 0 0 auto; color: var(--faint); font-family: var(--font-mono); font-size: 10px; }
.fourth-page-cover, .fourth-page-note { margin: 13px 0; color: var(--ink-soft); font-family: var(--font-kai); font-size: 13px; line-height: 1.85; }
.fourth-page-book ol { margin: 14px 0; padding: 0; list-style: none; }
.fourth-page-book li { padding: 10px 0; border-top: 1px solid rgba(164, 143, 106, .2); }
.fourth-page-book li b { color: var(--faint); font-family: var(--font-mono); font-size: 10px; font-weight: 400; letter-spacing: .04em; }
.fourth-page-book li p { margin: 5px 0 0; color: var(--ink); font-family: var(--font-kai); font-size: 14px; line-height: 1.85; }
.fourth-page-note { margin-bottom: 0; padding-top: 11px; border-top: 1px dashed rgba(91, 119, 149, .38); color: #667687; }
@media (max-width: 560px) { .portfolio-story, .fourth-page-book { padding: 14px; } .fourth-page-book header { display: block; } .fourth-page-book time { display: block; margin-top: 5px; } }
/* 真相结局回到画册：它是回访邀请，不替代结局本身。 */
.ending-gallery-return { margin: 14px auto 18px; color: rgba(232, 223, 204, .72); font-family: var(--font-kai); font-size: 13px; line-height: 1.8; opacity: 0; transition: opacity .8s ease; }
.ending-gallery-return.show { opacity: 1; }
.ending-gallery-return span { display: block; }
.ending-gallery-return a { display: inline-block; margin-top: 5px; color: #d8c59b; font-family: var(--font-ui); font-size: 11px; letter-spacing: .08em; text-decoration: none; border-bottom: 1px solid rgba(216, 197, 155, .46); }
.ending-gallery-return a:hover, .ending-gallery-return a:focus-visible { color: #fff1ca; }
.fourth-page-deep-note { margin: 13px 0 0; padding-top: 10px; border-top: 1px dashed rgba(91, 119, 149, .32); color: #6685a2; font-family: var(--font-kai); font-size: 12px; line-height: 1.75; }