/**
 * 到场 · 趣味层/陪伴营/问一下 样式（V2.2.0）
 * 夜空四层：var(--night-bg) 底 / var(--night-panel) / var(--night-panel-2) / var(--night-line) 面板
 * 唯一强调色：暖灯 var(--night-lamp)（亮芯 var(--night-lamp-2)）。禁渐变标题/玻璃拟态/emoji/红色。
 *
 * V3.5 去割裂：夜空色值统一映射到前台同源令牌（style.css 的 --bg/--panel 等），
 * 夜空氛围靠渐变与光影保留，不再锁死色值；深浅主题切换时夜空页也能统一。
 */

/* ---------- 夜空令牌（与前台 style.css 同源，仅本文件作用域） ---------- */
:root {
  --night-bg: #141B2B;      /* 夜空底（= --panel-solid） */
  --night-panel: #1B2436;   /* 夜空面板 */
  --night-panel-2: #212C42; /* 夜空面板二档 */
  --night-line: #2A3550;    /* 夜空描边 */
  --night-line-2: #2A3346;  /* 夜空描边 hover */
  --night-text: #F5EFE4;    /* 夜空近白标题 */
  --night-body: #C9CFDC;    /* 夜空正文 */
  --night-muted: #8A93A8;   /* 夜空弱化 */
  --night-muted-2: #AAB2C5; /* 夜空次级弱化 */
  --night-lamp: #F5C97A;    /* 暖灯（= --accent） */
  --night-lamp-2: #FFE8B8;  /* 亮芯 */
  --night-ink: #2A2213;     /* 灯上深字 */
  --night-danger: #E0938A;  /* 夜空警示 */
  --night-danger-line: #4a3532;
}

/* ---------- 0. 夜空容器 ---------- */
.night-sky {
  min-height: 100vh;
  background: var(--night-bg);
  padding: 20px 16px 48px;
  position: relative;
  overflow: hidden;
  max-width: 560px;
  margin: 0 auto;
}
.night-sky::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: rgba(245, 201, 122, 0.10);
  pointer-events: none;
}
.night-sky.wx-rain::before {
  background: repeating-linear-gradient(115deg,
    rgba(138, 147, 168, 0.14) 0 1px, transparent 1px 7px);
  height: 120px;
}
.night-sky.wx-fog::before {
  background: radial-gradient(ellipse 90% 40px at 50% 0,
    rgba(138, 147, 168, 0.12), transparent 70%);
  height: 90px;
}
.night-sky.wx-snow::before {
  background: radial-gradient(circle 1px at 12% 20px, rgba(245,201,122,.28) 0 1px, transparent 2px),
              radial-gradient(circle 1px at 48% 46px, rgba(255,232,184,.22) 0 1px, transparent 2px),
              radial-gradient(circle 1px at 82% 14px, rgba(255,232,184,.2) 0 1px, transparent 2px);
  height: 80px;
}

/* ---------- 1. 夜色 hero ---------- */
.night-hero { background: var(--night-panel); border: 1px solid var(--night-line); }
.night-hero h1 { margin: 4px 0 6px; color: var(--night-text); }
.night-seq { letter-spacing: 1px; margin-bottom: 2px; }
.night-sub { color: var(--night-muted-2); font-size: 15px; margin: 0; }
.night-head {
  display: flex; align-items: center; gap: 14px;
  color: var(--night-muted); font-size: 14px; margin: 0 2px 14px;
}
.night-head .seq { color: var(--night-muted-2); letter-spacing: 1px; }

/* ---------- 2. 房东在：呼吸点（配色随主题变量，深浅主题自动适配） ---------- */
.host-line {
  display: inline-flex; align-items: center; gap: 8px;
  color: var(--muted, var(--night-muted-2)); font-size: 14px; margin: 0 2px 14px;
}
.host-dot, .host-line .dot {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--accent, var(--night-lamp)); display: inline-block;
  animation: host-breathe 5.4s ease-in-out infinite;
}
@keyframes host-breathe {
  0%, 100% { transform: scale(.82); opacity: .55; }
  50%      { transform: scale(1);   opacity: 1; }
}

/* ---------- 3. 窗排 ---------- */
.street { margin: 6px 2px 18px; }
.building {
  display: flex; align-items: flex-end; gap: 10px;
  background: var(--night-panel); border: 1px solid var(--night-line);
  border-radius: 8px; padding: 18px 16px;
}
.window {
  width: 14px; height: 18px; border-radius: 2px;
  background: var(--night-line); position: relative; display: inline-block;
}
.window.lit {
  background: var(--night-lamp);
  box-shadow: 0 0 6px rgba(245, 201, 122, 0.45), 0 0 2px rgba(245, 201, 122, 0.6);
}
.window.lit.mine {
  outline: 1px solid var(--night-lamp-2); outline-offset: 1px;
}
.window .you {
  position: absolute; right: -2px; bottom: -16px;
  font-size: 12px; font-style: normal; color: var(--night-lamp);
  white-space: nowrap;
}
.building { padding-bottom: 26px; }

/* ---------- 4. 小引（窗台上的小灯灵，V2.2.2 动画化） ----------
   形象：一团漂浮的暖光小灵。外层 .spirit 固定尺寸防布局抖动，
   光核 ::before、外晕 ::after 全部 CSS 绘制；fun.js 只切
   spirit-sleep / spirit-awake / spirit-talk 三个类，接口不动。 */
.spirit-box {
  display: flex; flex-direction: column; align-items: center; gap: 10px;
  margin: 4px 0 18px; padding: 16px 0 6px;
}
.spirit {
  position: relative;
  width: 52px; height: 52px;
  animation: spirit-float 7s ease-in-out infinite;
}
.spirit::before {
  content: '';
  position: absolute;
  left: 50%; top: 50%;
  width: 12px; height: 12px;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: var(--night-lamp);
  box-shadow: 0 0 10px rgba(245, 201, 122, .7), 0 0 3px rgba(255, 232, 184, .8);
  animation: spirit-breathe 6.2s ease-in-out infinite;
}
.spirit::after {
  content: '';
  position: absolute;
  left: 50%; top: 50%;
  width: 30px; height: 30px;
  transform: translate(-50%, -50%);
  border-radius: 50%;
  background: radial-gradient(circle, rgba(245, 201, 122, .18), transparent 68%);
  animation: spirit-breathe 6.2s ease-in-out infinite;
}
.spirit-sleep::before { background: #6f7a92; box-shadow: 0 0 6px rgba(111, 122, 146, .5); }
.spirit-sleep::after  { background: radial-gradient(circle, rgba(138, 147, 168, .12), transparent 68%); }
.spirit-awake::before {
  background: var(--night-lamp);
  box-shadow: 0 0 14px rgba(245, 201, 122, .8), 0 0 4px rgba(255, 232, 184, .9);
  animation: spirit-breathe 5.4s ease-in-out infinite;
}
.spirit-awake::after { animation: spirit-breathe 5.4s ease-in-out infinite; }
.spirit-talk::before {
  background: var(--night-lamp-2);
  animation: spirit-talk-pulse 1.6s ease-in-out infinite;
}
.spirit-talk::after {
  background: radial-gradient(circle, rgba(255, 232, 184, .3), transparent 70%);
  animation: spirit-talk-ring 1.6s ease-in-out infinite;
}
@keyframes spirit-breathe {
  0%, 100% { transform: translate(-50%, -50%) scale(.85); opacity: .6; }
  50%      { transform: translate(-50%, -50%) scale(1);   opacity: 1; }
}
@keyframes spirit-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-6px); }
}
@keyframes spirit-talk-pulse {
  0%, 100% { transform: translate(-50%, -50%) scale(.9); }
  50%      { transform: translate(-50%, -50%) scale(1.15); }
}
@keyframes spirit-talk-ring {
  0%   { transform: translate(-50%, -50%) scale(.7); opacity: .8; }
  100% { transform: translate(-50%, -50%) scale(1.5); opacity: 0; }
}
html[data-motion="off"] .spirit,
html[data-motion="off"] .spirit::before,
html[data-motion="off"] .spirit::after { animation: none; }
@media (prefers-reduced-motion: reduce) {
  .spirit, .spirit::before, .spirit::after { animation: none; }
}

/* ---------- 5. 文本层级 ---------- */
.task-card { background: var(--night-panel); border: 1px solid var(--night-line); }
.t-kicker { color: var(--night-muted); font-size: 13px; margin: 0 0 6px; }
.t-main { color: var(--night-text); font-size: 20px; font-weight: 500; line-height: 1.5; margin: 0 0 8px; }
.t-alt, .t-meta { color: var(--night-muted); font-size: 14px; margin: 0; }
.t-meta a { color: var(--night-muted); text-decoration: underline; text-underline-offset: 3px; }
.total-line { margin: 0 2px 16px; text-align: center; }
.chair-line { background: var(--night-panel); border: 1px solid var(--night-lamp)33; margin-bottom: 16px; }
.chair-line p { margin: 0 0 10px; color: var(--night-body); }
.center { text-align: center; }

/* ---------- 5.1 房间页 · 夜屋沉浸版（V2.2.2）：整页夜空，房间即夜屋 ---------- */
/* 作用域全部收在 .room-night 下，营页与其它页面不受影响 */
.room-night {
  min-height: 100vh;
  background: var(--night-bg);
  color: var(--night-body);
  max-width: 560px;
  margin: 0 auto;
  padding: 18px 16px 48px;
  position: relative;
  overflow: hidden;
}
.room-night::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: rgba(245, 201, 122, 0.10);
  pointer-events: none;
}
.room-night.wx-rain::before {
  height: 120px;
  background: repeating-linear-gradient(115deg,
    rgba(138, 147, 168, 0.14) 0 1px, transparent 1px 7px);
}
.room-night.wx-fog::before {
  height: 90px;
  background: radial-gradient(ellipse 90% 40px at 50% 0,
    rgba(138, 147, 168, 0.12), transparent 70%);
}
.room-night.wx-snow::before {
  height: 80px;
  background: radial-gradient(circle 1px at 12% 20px, rgba(245,201,122,.28) 0 1px, transparent 2px),
              radial-gradient(circle 1px at 48% 46px, rgba(255,232,184,.22) 0 1px, transparent 2px),
              radial-gradient(circle 1px at 82% 14px, rgba(255,232,184,.2) 0 1px, transparent 2px);
}
.room-night .rn-back {
  display: inline-block;
  color: var(--night-muted); font-size: 14px; text-decoration: none;
  padding: 6px 12px; border: 1px solid var(--night-line); border-radius: 999px;
  margin: 6px 0 4px;
}
.room-night .rn-back:hover { color: var(--night-body); border-color: var(--night-line-2); }
.rn-head {
  display: flex; justify-content: space-between; flex-wrap: wrap; gap: 4px 12px;
  margin: 10px 2px 4px; padding: 0;
  color: var(--night-muted); font-size: 13px; letter-spacing: 1px;
}
.rn-head span:last-child { margin-left: auto; }
/* 窗排主视觉：楼体透明、窗居中成排，人少也不空旷 */
.room-night .street { margin: 6px 0 4px; }
.room-night .building {
  background: transparent; border: 0; border-radius: 0;
  justify-content: center; flex-wrap: wrap; gap: 12px 14px;
  padding: 14px 8px 24px;
}
.room-night .win-slot { position: relative; display: inline-block; }
.room-night .window { width: 16px; height: 22px; }
.room-night .window.lit { box-shadow: 0 0 10px rgba(245, 201, 122, 0.5), 0 0 3px rgba(245, 201, 122, 0.65); }
.room-night .you { position: absolute; left: 50%; transform: translateX(-50%); bottom: -18px; font-style: normal; }
/* 灯：倒计时即夜里的那盏灯 */
.room-night .room-label { color: var(--night-muted); text-align: center; }
.room-night .countdown {
  color: var(--night-lamp);
  text-shadow: 0 0 26px rgba(245, 201, 122, 0.22), 0 0 6px rgba(245, 201, 122, 0.25);
}
.room-night .countdown-sub { color: var(--night-muted); }
.room-night .reminder-line { background: rgba(216, 181, 106, .10); border-color: rgba(216, 181, 106, .4); }
/* 夜色面板：成员 / 邀请 / 鼓励共用一块底 */
.night-panel {
  background: var(--night-panel);
  border: 1px solid var(--night-line);
  border-radius: 12px;
  padding: 14px 16px;
  margin: 14px 0 0;
}
.room-night .roster { text-align: left; margin-top: 18px; }
.room-night .roster h2 { color: var(--night-muted); }
.room-night .member-label { color: var(--night-body); }
.room-night .tg-roster .member-label { color: var(--night-body); }
.room-night .rn-note, .room-night .muted, .room-night .tg-cheer-log { color: var(--night-muted); }
.room-night .tg-cheer-log li { border-top-color: var(--night-line); }
.room-night code { color: var(--night-lamp-2); }
/* 夜色按钮：统一深面板描边，主操作给一盏灯 */
.room-night .btn {
  background: var(--night-panel-2);
  border-color: var(--night-line);
  color: var(--night-body);
}
.room-night .btn:hover { border-color: var(--night-lamp)66; }
.room-night .btn.ghost { background: transparent; color: var(--night-muted-2); border-color: var(--night-line-2); }
.room-night .btn.ghost:hover { color: var(--night-lamp-2); border-color: var(--night-lamp); }
.room-night .btn.primary { background: var(--night-lamp); border-color: var(--night-lamp); color: var(--night-ink); font-weight: 700; }
.room-night .btn.primary:hover { background: var(--night-lamp-2); }
.room-night .btn.rn-primary {
  background: var(--night-lamp); border-color: var(--night-lamp);
  color: var(--night-ink); font-weight: 700;
  box-shadow: 0 0 14px rgba(245, 201, 122, 0.28);
}
.room-night .btn.rn-primary:hover { background: var(--night-lamp-2); }
.room-night .btn.danger { color: var(--night-danger); border-color: var(--night-danger-line); background: transparent; }
.room-night .btn.danger:hover { border-color: var(--night-danger); background: rgba(232, 176, 122, .08); }
.room-night .interrupt-count { background: var(--night-panel); border-color: var(--night-line); color: var(--night-muted); }
/* 预测卡 / 完成卡 / 房东 / 小引的夜色适配 */
.room-night .predict-card { background: var(--night-panel); border-color: var(--night-line); }
.room-night .predict-head, .room-night .predict-line b, .room-night .predict-note { color: var(--night-muted); }
.room-night .predict-line { color: var(--night-body); }
.room-night .predict-prob { color: var(--night-lamp); }
.room-night .done-card { background: var(--night-panel); border-color: rgba(245, 201, 122, 0.3); }
.room-night .done-card .done-title { color: var(--night-lamp); }
.room-night .rn-host { color: var(--night-muted-2); margin: 16px 2px 0; }
.room-night .rn-spirit .t-meta { color: var(--night-muted); }
/* 空椅子：夜色里的一行 */
.rn-chair {
  text-align: center; color: var(--night-muted); font-size: 14px;
  margin: 14px 0 0; padding: 10px 14px;
  border: 1px dashed rgba(245, 201, 122, 0.25); border-radius: 12px;
  background: var(--night-panel);
}
.rn-chair a { color: var(--night-lamp); text-decoration: underline; text-underline-offset: 3px; }
.rn-chair .sep { margin: 0 8px; opacity: .5; }
/* 同行房元素在夜色下的适配（together.css 用的是灰底，这里压成夜色面板同调） */
.room-night .tg-roster li { background: var(--night-panel-2); }
.room-night .tg-state { background: var(--night-line); color: var(--night-body); }
.room-night .tg-state.is-acting   { background: rgba(96, 165, 133, .25); color: #E8EAEF; }
.room-night .tg-state.is-paused   { background: rgba(227, 197, 132, .30); color: var(--night-ink); }
.room-night .tg-state.is-away     { background: rgba(168, 184, 224, .28); color: #E8EAEF; }
.room-night .tg-state.is-done     { background: rgba(245, 201, 122, .28); color: var(--night-lamp-2); }
.room-night .tg-invite { background: transparent; }
.room-night .tg-cheer-log li { border-bottom-color: var(--night-line); }
.room-night .tg-own { color: var(--night-muted); opacity: 1; }

/* ---------- 5.2 房间页导航夜色化（body.theme-night）：只作用于房间页 ---------- */
html:not([data-theme="light"]) body.theme-night {
  background:
    radial-gradient(1000px 520px at 12% -8%, rgba(245, 201, 122, .08), transparent 62%),
    var(--night-bg);
  background-attachment: fixed;
}
html:not([data-theme="light"]) body.theme-night .topbar {
  background: rgba(11, 15, 24, .86);
  border-bottom-color: var(--night-line);
}
html:not([data-theme="light"]) body.theme-night .topbar::after { background: linear-gradient(90deg, rgba(245, 201, 122, .4), rgba(245, 201, 122, .04)); }
html:not([data-theme="light"]) body.theme-night .topbar .brand { color: var(--night-text); }
html:not([data-theme="light"]) body.theme-night .topbar .nav a,
html:not([data-theme="light"]) body.theme-night .topbar .nav button { color: var(--night-muted); }
html:not([data-theme="light"]) body.theme-night .topbar .nav a:hover,
html:not([data-theme="light"]) body.theme-night .topbar .nav button:hover { color: var(--night-body); background: var(--night-panel-2); border-color: var(--night-line); }
html:not([data-theme="light"]) body.theme-night .topbar .nav a.on { color: var(--night-lamp); }
html:not([data-theme="light"]) body.theme-night .topbar .nav-id.on { color: var(--night-lamp); }
html:not([data-theme="light"]) body.theme-night .tabbar {
  background: rgba(11, 15, 24, .9);
  border-top-color: var(--night-line);
}
html:not([data-theme="light"]) body.theme-night .tabbar .tab { color: var(--night-muted); }
html:not([data-theme="light"]) body.theme-night .tabbar .tab.on { color: var(--night-lamp); }
/* 内容容器与夜空衔接：房间页主内容占满夜色 */
html:not([data-theme="light"]) body.theme-night > .wrap { max-width: 560px; padding: 8px 0 40px; }

/* ---------- 5.3 活的夜（V2.2.2）：星空 / 月亮 / 流星 / 雨雪 / 窗呼吸 / 灯焰 ---------- */
.rn-sky {
  position: absolute; top: 0; left: 0; right: 0;
  height: 330px;
  pointer-events: none;
  overflow: hidden;
}
.room-night > *:not(.rn-sky) { position: relative; z-index: 1; }
/* 星空：一张 box-shadow 画布，错峰闪烁 */
.rn-stars {
  position: absolute; top: 0; left: 0;
  width: 1px; height: 1px;
  background: transparent;
  box-shadow:
    22px 14px #FFF6E0, 64px 46px #DCE2F2, 110px 22px #FFF6E0, 152px 78px #C9D4EE,
    196px 34px #FFF3D6, 238px 60px #DCE2F2, 284px 16px #FFF6E0, 330px 52px #C9D4EE,
    372px 26px #FFF3D6, 418px 70px #DCE2F2, 460px 18px #FFF6E0, 502px 44px #C9D4EE,
    38px 108px #C9D4EE, 92px 132px #FFF6E0, 148px 118px #DCE2F2, 214px 142px #FFF3D6,
    268px 122px #C9D4EE, 322px 150px #FFF6E0, 384px 126px #DCE2F2, 444px 148px #FFF3D6,
    500px 118px #C9D4EE, 16px 178px #FFF6E0, 70px 198px #DCE2F2, 126px 182px #C9D4EE,
    182px 208px #FFF3D6, 244px 188px #DCE2F2, 304px 212px #FFF6E0, 362px 192px #C9D4EE,
    424px 214px #FFF6E0, 486px 186px #DCE2F2, 40px 258px #C9D4EE, 108px 272px #FFF3D6,
    168px 262px #DCE2F2, 232px 286px #FFF6E0, 296px 266px #C9D4EE, 358px 290px #DCE2F2,
    426px 264px #FFF6E0, 494px 284px #C9D4EE, 556px 30px #FFF6E0, 560px 150px #DCE2F2;
  animation: rn-twinkle 4s ease-in-out infinite;
}
@keyframes rn-twinkle {
  0%, 100% { opacity: .55; }
  50%      { opacity: 1; }
}
/* 月亮：右上角一轮弯月，缓慢明暗 */
.rn-moon {
  position: absolute; top: 26px; right: 34px;
  width: 26px; height: 26px; border-radius: 50%;
  box-shadow: inset 9px -5px 0 0 #EFE3C8;
  animation: rn-moon-glow 9s ease-in-out infinite;
}
@keyframes rn-moon-glow {
  0%, 100% { opacity: .55; filter: drop-shadow(0 0 4px rgba(239, 227, 200, .2)); }
  50%      { opacity: .95; filter: drop-shadow(0 0 10px rgba(239, 227, 200, .45)); }
}
/* 流星：每 20~40 秒一颗，斜划天际 */
.rn-meteor {
  position: absolute;
  top: 40px; left: -90px;
  width: 84px; height: 1.5px;
  background: linear-gradient(90deg, rgba(255, 246, 224, .9), transparent);
  border-radius: 2px;
  transform: rotate(18deg);
  opacity: 0;
}
.rn-m1 { animation: rn-meteor 14s linear infinite; animation-delay: 4s; }
.rn-m2 { animation: rn-meteor 23s linear infinite; animation-delay: 13s; top: 110px; }
@keyframes rn-meteor {
  0%   { transform: translate(0, 0) rotate(18deg); opacity: 0; }
  3%   { opacity: .9; }
  9%   { transform: translate(480px, 160px) rotate(18deg); opacity: 0; }
  100% { transform: translate(480px, 160px) rotate(18deg); opacity: 0; }
}
/* 雨：细雨丝整片下落 */
.rn-rain {
  display: none;
  position: absolute; top: 0; left: 0; right: 0; height: 180px;
  background: linear-gradient(105deg, transparent 46%, rgba(138, 147, 168, .35) 50%, transparent 54%) 0 0 / 16px 30px repeat;
  animation: rn-rain-fall .8s linear infinite;
}
.room-night.wx-rain .rn-rain { display: block; }
@keyframes rn-rain-fall {
  from { background-position: 0 0; }
  to   { background-position: 16px 60px; }
}
/* 雪：两层错峰雪点，缓慢飘落再循环 */
.rn-snow { display: none; position: absolute; inset: 0; }
.room-night.wx-snow .rn-snow { display: block; }
.rn-snow1, .rn-snow2 {
  width: 1px; height: 1px; background: transparent;
}
.rn-snow1 {
  box-shadow: 40px 20px 0 .5px #E8EAF2, 120px 70px 0 .5px rgba(232,234,242,.8), 210px 30px 0 .5px #E8EAF2, 300px 90px 0 .5px rgba(232,234,242,.7), 380px 44px 0 .5px #E8EAF2, 460px 76px 0 .5px rgba(232,234,242,.8), 90px 150px 0 .5px rgba(232,234,242,.6), 250px 170px 0 .5px #E8EAF2, 420px 160px 0 .5px rgba(232,234,242,.7);
  animation: rn-snow-drift 11s ease-in-out infinite alternate;
}
.rn-snow2 {
  box-shadow: 70px 110px 0 .5px rgba(232,234,242,.5), 160px 190px 0 .5px rgba(232,234,242,.6), 340px 140px 0 .5px rgba(232,234,242,.5), 480px 200px 0 .5px rgba(232,234,242,.6), 30px 240px 0 .5px rgba(232,234,242,.4), 390px 250px 0 .5px rgba(232,234,242,.5);
  animation: rn-snow-drift 16s ease-in-out infinite alternate-reverse;
}
@keyframes rn-snow-drift {
  from { transform: translate(0, 0); opacity: .7; }
  to   { transform: translate(-14px, 46px); opacity: 1; }
}
/* 各家的窗：错峰呼吸，像有人刚坐下/刚起身 */
.room-night .window.lit { animation: rn-window-breathe 4.4s ease-in-out infinite; }
.win-slot:nth-child(2n) .window.lit { animation-delay: 1.4s; animation-duration: 5.2s; }
.win-slot:nth-child(3n) .window.lit { animation-delay: 2.6s; animation-duration: 6s; }
@keyframes rn-window-breathe {
  0%, 100% { opacity: .82; }
  50%      { opacity: 1; }
}
/* 灯焰感：倒计时光晕缓慢摇曳 */
.room-night .countdown { animation: rn-lamp 3s ease-in-out infinite; }
@keyframes rn-lamp {
  0%, 100% { text-shadow: 0 0 22px rgba(245, 201, 122, .20), 0 0 5px rgba(245, 201, 122, .22); }
  40%      { text-shadow: 0 0 30px rgba(245, 201, 122, .30), 0 0 8px rgba(245, 201, 122, .30); }
  70%      { text-shadow: 0 0 26px rgba(245, 201, 122, .24), 0 0 6px rgba(245, 201, 122, .26); }
}
/* 走神提醒出现时灯变暗（:has 不支持的浏览器只是不暗，无副作用） */
.room-night:has(#js-reminder:not([hidden])) .countdown { animation-play-state: paused; opacity: .55; }
/* 结束态：夜更深，星星更亮 */
body.rn-ended { background: #070A12 !important; }
body.rn-ended .rn-stars { animation-duration: 2.6s; }
/* 小灵的眼睛 + 弹跳 */
.spirit { cursor: pointer; }
.spirit i {
  display: block;
  position: absolute; left: 50%; top: 34%;
  width: 14px; height: 4px;
  transform: translateX(-50%);
  z-index: 2;
}
.spirit i::before, .spirit i::after {
  content: '';
  position: absolute; top: 0;
  width: 3px; height: 3px;
  border-radius: 50%;
  background: #261F0E;
  animation: rn-blink 5.5s ease-in-out infinite;
}
.spirit i::before { left: 0; }
.spirit i::after  { right: 0; animation-delay: .08s; }
@keyframes rn-blink {
  0%, 92%, 100% { transform: scaleY(1); }
  95%           { transform: scaleY(.1); }
}
.spirit-sleep i::before, .spirit-sleep i::after {
  height: 1.5px; width: 4px; border-radius: 1px; top: 1px;
  animation: none;
}
.spirit-talk i::before, .spirit-talk i::after { transform: scale(1.35); }
.spirit-hop { animation: spirit-hop .7s cubic-bezier(.3, 1.6, .5, 1); }
@keyframes spirit-hop {
  0%   { transform: translateY(0) scale(1); }
  35%  { transform: translateY(-14px) scale(1.12); }
  65%  { transform: translateY(0) scale(.94); }
  100% { transform: translateY(0) scale(1); }
}
html[data-motion="off"] .rn-stars,
html[data-motion="off"] .rn-moon,
html[data-motion="off"] .rn-meteor,
html[data-motion="off"] .rn-rain,
html[data-motion="off"] .rn-snow,
html[data-motion="off"] .room-night .window.lit,
html[data-motion="off"] .room-night .countdown,
html[data-motion="off"] .spirit i::before,
html[data-motion="off"] .spirit i::after { animation: none; }
html[data-motion="off"] .rn-meteor { opacity: 0; }

/* ---------- 5.4 昼夜天色（V2.2.2）：昼=日光书房，暮=过渡，夜=夜屋 ---------- */
/* 夜：进场 1.6 秒从暖光渐暗，像眼睛适应黑暗 */
.room-night.rn-night::after {
  content: '';
  position: absolute; inset: 0;
  background: #F3ECDA;
  animation: rn-adapt 1.6s ease-out forwards;
  pointer-events: none;
  z-index: 6;
}
@keyframes rn-adapt { to { opacity: 0; } }
/* 暮：18 点的过渡天色 */
.room-night.rn-dusk {
  background: linear-gradient(180deg, #4A3E56 0%, #2C2B42 52%, var(--night-line) 100%);
}
.room-night.rn-dusk .rn-moon { opacity: .5; }
.room-night.rn-dusk .rn-stars { animation-duration: 7s; }
/* 暮色下的文字与面板随天色压暗 */
.room-night.rn-dusk .rn-head, .room-night.rn-dusk .room-label,
.room-night.rn-dusk .countdown-sub, .room-night.rn-dusk .rn-back { color: #A8A2B5; }
.room-night.rn-dusk .rn-back { border-color: #3A3450; }
.room-night.rn-dusk .night-panel, .room-night.rn-dusk .predict-card,
.room-night.rn-dusk .done-card, .room-night.rn-dusk .rn-chair,
.room-night.rn-dusk .tg-roster li { background: rgba(22, 24, 44, .82); border-color: #3A3450; }
.room-night.rn-dusk .btn { background: rgba(28, 26, 48, .9); border-color: #3A3450; color: #CFC9DB; }
/* ───── 白天：晴日书房，暖奶油天光，与浅色主题同族、进场无跳变 ───── */
.room-night.rn-day {
  background: linear-gradient(180deg, #FDF7E7 0%, #F6EFDC 58%, #EFE6CF 100%);
  color: #5C5243;
}
.room-night.rn-day::before { height: 2px; background: rgba(214, 164, 74, .18); }
.rn-sun {
  display: none;
  position: absolute; top: 30px; right: 36px;
  width: 42px; height: 42px; border-radius: 50%;
  background: radial-gradient(circle at 38% 34%, #FBD87E, #F0B44E 70%);
  box-shadow: 0 0 22px rgba(240, 180, 78, .5), 0 0 6px rgba(240, 180, 78, .6);
  animation: rn-sun-glow 8s ease-in-out infinite;
}
.room-night.rn-day .rn-sun { display: block; }
@keyframes rn-sun-glow {
  0%, 100% { box-shadow: 0 0 18px rgba(240, 180, 78, .4), 0 0 5px rgba(240, 180, 78, .5); }
  50%      { box-shadow: 0 0 28px rgba(240, 180, 78, .6), 0 0 8px rgba(240, 180, 78, .7); }
}
/* 白天星星/月亮/流星收起来 */
.room-night.rn-day .rn-stars,
.room-night.rn-day .rn-meteor,
.room-night.rn-day .rn-moon { display: none; }
/* 云：两朵缓慢横漂 */
.rn-cloud {
  display: none;
  position: absolute;
  width: 76px; height: 20px;
  border-radius: 999px;
  background: rgba(255, 255, 255, .8);
  box-shadow: 18px -10px 0 -4px rgba(255, 255, 255, .85), -16px -8px 0 -6px rgba(255, 255, 255, .7);
}
.room-night.rn-day .rn-cloud { display: block; }
.rn-c1 { top: 44px; left: -100px; animation: rn-cloud-drift 46s linear infinite; }
.rn-c2 { top: 104px; left: -140px; animation: rn-cloud-drift 68s linear infinite 12s; transform: scale(.8); }
@keyframes rn-cloud-drift {
  from { transform: translateX(0); }
  to   { transform: translateX(700px); }
}
/* 白天文字/面板换成暖纸色系 */
.room-night.rn-day .rn-head, .room-night.rn-day .room-label,
.room-night.rn-day .countdown-sub, .room-night.rn-day .rn-note,
.room-night.rn-day .muted, .room-night.rn-day .roster h2,
.room-night.rn-day .tg-own, .room-night.rn-day .tg-cheer-log,
.room-night.rn-day .predict-head, .room-night.rn-day .predict-line b,
.room-night.rn-day .predict-note, .room-night.rn-day .rn-spirit .t-meta { color: #6B5F4B; }
.room-night.rn-day .rn-back { color: #6B5F4B; border-color: #E2D7BC; }
.room-night.rn-day .rn-back:hover { color: #5C5243; border-color: #C9B98F; }
/* 倒计时：日光下的暖琥珀 */
.room-night.rn-day .countdown {
  color: #D89A3E;
  animation: rn-lamp-day 3s ease-in-out infinite;
}
@keyframes rn-lamp-day {
  0%, 100% { text-shadow: 0 0 18px rgba(216, 154, 62, .18), 0 0 4px rgba(216, 154, 62, .2); }
  50%      { text-shadow: 0 0 26px rgba(216, 154, 62, .3), 0 0 7px rgba(216, 154, 62, .28); }
}
.room-night.rn-day .countdown:active { color: #D89A3E; }
/* 窗：白天是晒着太阳的窗 */
.room-night.rn-day .window { background: #E4DBC2; }
.room-night.rn-day .window.lit { background: #F2C879; box-shadow: 0 0 8px rgba(242, 200, 121, .55); }
.room-night.rn-day .you { color: #B9852E; }
/* 面板/按钮：暖纸卡片 */
.room-night.rn-day .night-panel, .room-night.rn-day .predict-card,
.room-night.rn-day .done-card, .room-night.rn-day .rn-chair,
.room-night.rn-day .tg-roster li, .room-night.rn-day .interrupt-count {
  background: #FFFDF4;
  border-color: #E6DBC0;
}
.room-night.rn-day .done-card { border-color: rgba(216, 154, 62, .4); }
.room-night.rn-day .done-card .done-title { color: #B9852E; }
.room-night.rn-day .member-label, .room-night.rn-day .tg-roster .member-label { color: #5C5243; }
.room-night.rn-day code { color: #B9852E; }
.room-night.rn-day .tg-state { background: #EFE6CF; color: #5C5243; }
.room-night.rn-day .btn { background: #FFFDF4; border-color: #E6DBC0; color: #5C5243; }
.room-night.rn-day .btn:hover { border-color: #C9B98F; }
.room-night.rn-day .btn.ghost { background: transparent; color: #5C5243; border-color: #D8C3B6; }
.room-night.rn-day .btn.rn-primary, .room-night.rn-day .btn.primary {
  background: #E9B45A; border-color: #E9B45A; color: #3D3218;
  box-shadow: 0 0 10px rgba(233, 180, 90, .3);
}
.room-night.rn-day .btn.rn-primary:hover { background: #F2C879; }
.room-night.rn-day .btn.danger { color: #B96A5E; border-color: #D8C3B6; background: transparent; }
.room-night.rn-day .predict-prob { color: #B9852E; }
.room-night.rn-day .reminder-line { background: rgba(216, 154, 62, .1); border-color: rgba(216, 154, 62, .4); }
.room-night.rn-day .rn-chair { border-style: dashed; border-color: rgba(216, 154, 62, .35); }
.room-night.rn-day .rn-chair a { color: #B9852E; }
.room-night.rn-day .rn-host { color: #6B5F4B; }
.room-night.rn-day .host-dot { background: #E9B45A; }
/* 小灵白天变暖金 */
.room-night.rn-day .spirit::before { background: #F2B94B; box-shadow: 0 0 10px rgba(242, 185, 75, .7); }
.room-night.rn-day .spirit::after { background: radial-gradient(circle, rgba(242, 185, 75, .2), transparent 68%); }
.room-night.rn-day .spirit-sleep::before { background: #C9B98F; box-shadow: 0 0 6px rgba(201, 185, 143, .5); }
.room-night.rn-day .spirit-talk::before { background: #FFD98E; }
/* 白天雨雪更轻 */
.room-night.rn-day .rn-rain { background: linear-gradient(105deg, transparent 46%, rgba(150, 165, 190, .28) 50%, transparent 54%) 0 0 / 16px 30px repeat; }
.room-night.rn-day .rn-snow1, .room-night.rn-day .rn-snow2 { box-shadow: none; background: transparent; }
/* 结束态在白天只轻微压暗，不搞深夜黑 */
body.rn-ended:not(.theme-night):not([data-theme]) { background: #EFE6CF !important; }
@media (prefers-reduced-motion: reduce) {
  .room-night .window.lit { box-shadow: 0 0 6px rgba(245, 201, 122, 0.4); }
}

/* ---------- 6. 口令 / 结营卡 ---------- */
.pass-code {
  font-size: 26px; letter-spacing: 2px;
  font-variant-numeric: tabular-nums;
  color: var(--night-lamp-2); margin: 6px 0 10px;
  word-break: break-all;
}
.report-card {
  background: var(--night-panel); border: 1px solid rgba(245, 201, 122, 0.2);
  border-radius: 10px; padding: 26px 20px; position: relative;
  max-width: 560px; margin: 0 auto 16px;
}
.report-sample {
  position: absolute; top: 10px; right: 12px;
  font-size: 12px; color: var(--night-muted);
}
.report-title { color: var(--night-text); font-size: 18px; font-weight: 500; margin: 0 0 18px; letter-spacing: 1px; }
.report-nums { margin: 0 0 16px; display: flex; flex-direction: column; gap: 12px; }
.report-nums .rn { display: flex; align-items: baseline; justify-content: space-between; }
.report-nums dt { color: var(--night-muted); font-size: 14px; }
.report-nums dd { color: var(--night-text); font-size: 18px; margin: 0; font-variant-numeric: tabular-nums; }
.report-nums dd small { color: var(--night-muted); font-size: 13px; }
.report-spirit { color: var(--night-body); font-size: 14px; margin: 0 0 14px; }
.report-insight { color: var(--night-text); font-size: 15px; line-height: 1.8; margin: 0 0 16px; padding: 12px 14px; border-left: 3px solid var(--night-lamp); background: rgba(245, 201, 122, 0.06); border-radius: 0 8px 8px 0; }
.report-sign { color: var(--night-lamp); font-size: 13px; letter-spacing: 2px; margin: 0; }
.report-btns { display: flex; gap: 10px; max-width: 560px; margin: 0 auto 10px; }
.report-ask { text-align: center; }
.camp-empty { text-align: center; }

/* ---------- 7. 问一下 ---------- */
.ask-page { max-width: 560px; margin: 0 auto; }
.ask-promise { padding: 10px 4px 18px; }
.ask-promise h2 { color: var(--night-text); margin: 0 0 8px; }
.ask-promise p { color: var(--night-muted-2); font-size: 15px; margin: 0 0 4px; }
.ask-flash { margin: 0 0 10px; }
.ask-kinds { border: 0; padding: 0; margin: 0 0 14px; display: flex; flex-direction: column; gap: 8px; }
.ask-kinds legend { color: var(--night-muted); font-size: 14px; padding: 0 0 8px; }
.ask-kind {
  display: flex; align-items: center; gap: 10px;
  border: 1px solid var(--night-line); border-radius: 8px;
  padding: 10px 12px; cursor: pointer; background: var(--night-panel-2);
}
.ask-kind span { color: var(--night-body); font-size: 15px; }
.ask-kind:has(input:checked), .ask-kind.on {
  border-color: var(--night-lamp);
  box-shadow: 0 0 0 1px rgba(245, 201, 122, 0.35);
}
.ask-kind input { accent-color: var(--night-lamp); }
.ask-receipt p { color: var(--night-text); margin: 0 0 6px; }
.ask-self details { border-top: 1px solid var(--night-line); padding: 10px 2px; }
.ask-self details:first-of-type { border-top: 0; }
.ask-self summary { cursor: pointer; color: var(--night-body); font-size: 15px; }
.ask-self details p { margin: 8px 0 0; }
/* 后台 P0 竖条（问一下收件箱） */
.rank-p0 { border-left: 3px solid var(--night-lamp); padding-left: 10px; }

/* ---------- 8. 许愿池 ---------- */
.wish-list { list-style: none; margin: 0; padding: 0; }
.wish-item {
  display: flex; align-items: center; gap: 10px;
  padding: 10px 2px; border-top: 1px solid var(--night-line); font-size: 14px;
}
.wish-item:first-child { border-top: 0; }
.wish-desc { color: var(--night-muted-2); flex: 1; }
.wish-date { color: var(--night-muted); font-size: 13px; font-variant-numeric: tabular-nums; }
.badge {
  display: inline-block; font-size: 12px; padding: 2px 8px;
  border-radius: 999px; border: 1px solid var(--night-line); color: var(--night-muted);
}
.wish-badge-done { color: var(--night-lamp); border-color: rgba(245, 201, 122, 0.35); }
.wish-badge-doing { color: var(--night-body); }
.enroll-done { border-color: rgba(245, 201, 122, 0.25); }
.enroll-order { border-color: rgba(245, 201, 122, 0.25); }
.camp-pay-guide { margin: 10px 0; padding: 10px 12px; border: 1px dashed rgba(245, 201, 122, 0.4); border-radius: 8px; background: rgba(245, 201, 122, 0.05); }
.camp-echo-kicker { color: var(--night-lamp); font-size: 12px; letter-spacing: 2px; margin: 0 0 6px; }
.camp-echo-text { color: var(--night-text); font-size: 15px; line-height: 1.7; margin: 0; }

/* ---------- 9. 动效降级 / 打印 ---------- */
@media (prefers-reduced-motion: reduce) {
  .host-dot, .host-line .dot, .spirit-sleep, .spirit-awake, .spirit-talk {
    animation: none;
  }
}
@media print {
  body { background: #FAF6EE; }
  .night-sky { background: #FAF6EE; padding: 0; }
  .report-card { background: #FFF; border: 1px solid #D8C9A8; color: #2B2B2B; }
  .report-title, .report-nums dd { color: #2B2B2B; }
  .report-nums dt, .report-sample, .report-spirit { color: #6B6552; }
  .report-sign { color: #8A6D1F; }
  .btns, .report-btns, .report-ask, .night-head, .host-line, .street, .spirit-box, .task-card, .total-line { display: none !important; }
}

/* ── V2.2.1：独立宣传卡已撤（三条入口并入首页功能探索宫格）── */

/* ---------- 10. 营首页「三步手册」折叠卡（V2.2.0 / V2.2.1 修对比度） ---------- */
/* 注意：营首页卡片是浅色主题的白卡（夜空只包 hero），文字必须按浅底配色 */
.how-card { cursor: pointer; }
.how-card summary { list-style: none; cursor: pointer; }
.how-card summary::-webkit-details-marker { display: none; }
.how-card summary::after { content: '展开 ▾'; font-size: 12px; color: var(--night-muted); margin-left: 8px; }
.how-card[open] summary::after { content: '收起 ▴'; }
.how-list { margin: 10px 0 0; padding-left: 20px; display: grid; gap: 8px; }
.how-list li { color: #4A5160; line-height: 1.75; }
.how-list li::marker { color: #A6791E; }
.how-list b { color: #A6791E; font-weight: 600; }
.how-card .muted.small { color: #6B7180; }
.how-card[open] .how-list { animation: spirit-breathe-fade .24s ease both; }
@keyframes spirit-breathe-fade {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .how-card[open] .how-list { animation: none; }
}

/* ---------- 11. 期次封面 / 权益 / 价格（V2.2.1） ---------- */
.camp-meta { padding: 0; overflow: hidden; }
.camp-cover { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; }
.camp-meta .camp-benefits { padding: 16px 18px 4px; }
.camp-meta .camp-price {
  margin: 0; padding: 10px 18px 14px;
  font-size: 13px; color: #6B7180;
  border-top: 1px solid rgba(0, 0, 0, .06);
}
.camp-meta .camp-price:first-child { padding-top: 14px; border-top: 0; }

/* ---------- 4.1 小灵三维形象（V2.2.2）：assets/img/spirit.png（AI 原创生成） ----------
 形象由图片承载（含表情）；CSS 光核与眼睛退场，状态仍走 fun.js 的三个类：
 sleep=整体压暗发灰，talk=提亮+外发光，awake=原色。漂浮/呼吸/弹跳动画全保留。 */
.spirit {
 background: url('../img/spirit.png?v=3') center / contain no-repeat;
}
.spirit::before { display: none; }
.spirit i::before, .spirit i::after { display: none; }
.spirit-sleep { filter: grayscale(.45) brightness(.62) saturate(.8); }
.spirit-talk {
 filter: brightness(1.12) saturate(1.1) drop-shadow(0 0 10px rgba(255, 232, 184, .55));
}
.room-night.rn-day .spirit { filter: drop-shadow(0 1px 5px rgba(214, 164, 74, .3)); }

/* ═══════ 7. 桌面端适配（V2.2.2）：≥768px 放开宽度、放大主视觉，不再整条窄柱 ═══════ */
@media (min-width: 768px) {
 .night-sky, .room-night { max-width: 760px; padding: 30px 36px 72px; }
 body.theme-night > .wrap { max-width: 760px; padding: 14px 0 56px; }
 /* 天幕更高，星空/太阳/云有施展空间 */
 .rn-sky { height: 460px; }
 .rn-sun { top: 44px; right: 60px; width: 56px; height: 56px; }
 .rn-cloud { width: 110px; height: 28px; }
 .rn-c2 { top: 150px; }
 /* 灯：倒计时在宽屏放大成真正的招牌灯 */
 .room-night .countdown { font-size: clamp(96px, 14vw, 150px); }
 .room-night .countdown-sub { font-size: 16px; }
 .room-night .rn-head { font-size: 14px; }
 .room-night .rn-back { font-size: 15px; padding: 7px 14px; }
 /* 窗排与楼体放大 */
 .room-night .building { gap: 18px 24px; padding: 22px 12px 40px; }
 .room-night .window { width: 24px; height: 32px; }
 .room-night .you { bottom: -22px; font-size: 13px; }
 /* 小灵放大 */
 .room-night .spirit { width: 72px; height: 72px; }
 .room-night .spirit-box { padding-top: 20px; }
 /* 面板与列表 */
 .night-panel { padding: 16px 20px; }
 .room-night .roster h2 { font-size: 16px; }
 .room-night .member-label, .room-night .tg-roster .member-label { font-size: 15px; }
}
@media (min-width: 1100px) {
 .night-sky, .room-night { max-width: 880px; }
 body.theme-night > .wrap { max-width: 880px; }
 .room-night .countdown { font-size: 150px; }
}

/* =========================================================
   8. 夜屋 3D（V2.4.0）— 纯 CSS 3D transforms，零依赖零外链。
   只加观感：DOM id / room.js / together.js / fun.js 契约零改动。
   ========================================================= */

/* ── 房间根：给整屋一个透视舞台 ── */
.room-night {
  perspective: 760px;
  perspective-origin: 50% 28%;
}
/* 天空三层视差：星 / 月 / 流星各自深度（景深差拉大，一眼可感） */
.room-night .rn-sky { transform-style: preserve-3d; }
.room-night .rn-stars  { transform: translateZ(-150px); }
.room-night .rn-moon   { transform: translateZ(-80px); }
.room-night .rn-meteor { transform: translateZ(-40px); }

/* ── 窗排变立体楼体：正面 + 左侧墙 + 楼顶 ── */
.room-night .building {
  position: relative;
  transform-style: preserve-3d;
  transform: rotateX(13deg);
}
.room-night .building::before {
  content: "";
  position: absolute; top: 6px; bottom: 34px; left: -16px; width: 16px;
  background: linear-gradient(180deg, var(--night-line), var(--night-panel));
  transform: rotateY(58deg); transform-origin: 100% 50%;
  border-radius: 6px 0 0 6px;
  box-shadow: inset -4px 0 10px rgba(11, 15, 24, .6);
}
.room-night .building::after {
  content: "";
  position: absolute; top: -10px; left: -8px; right: -8px; height: 12px;
  background: linear-gradient(180deg, var(--night-panel-2), var(--night-line));
  transform: rotateX(52deg); transform-origin: 50% 100%;
  border-radius: 6px;
}
/* 窗：亮窗有进深，像嵌进楼体 */
.room-night .window {
  transform: translateZ(18px);
  box-shadow: inset 0 0 0 2px rgba(11, 15, 24, .5), 0 0 14px rgba(245, 201, 122, .25);
}
.room-night .window.lit { box-shadow: inset 0 0 0 2px rgba(245,201,122,.35), 0 0 20px rgba(245,201,122,.4); }

/* ── 倒计时灯：灯焰光晕（不做 translateZ，避免与下方模块错位重叠） ── */
.room-night .countdown {
  transform: none;
  text-shadow:
    0 1px 0 rgba(255, 233, 190, .5),
    0 0 18px rgba(245, 201, 122, .35),
    0 0 44px rgba(245, 201, 122, .18);
}
/* 面板与卡片：垂直堆叠的内容模块不做 translateZ 景深——
   透视下不同景深会让上下相邻的卡片放大错位、互相重叠。
   景深只保留给天空视差层（rn-stars/moon/meteor）与窗排楼体。 */
.room-night .night-panel { transform: none; }
.room-night .predict-card { transform: none; }
.room-night .done-card { transform: none; }
.room-night .room-actions .btn { transform: none; }
.room-night .spirit { transform: none; }

/* =========================================================
   9. 陪伴营 3D（V2.4.0）— 夜景门楼 / 翻转任务卡 / 立体结营卡
   ========================================================= */

/* ── 营首页：night-hero 变夜景门楼，进场推门 ── */
.night-hero {
  position: relative;
  perspective: 640px;
  transform-style: preserve-3d;
}
.night-hero::before {
  content: "";
  position: absolute; inset: 0;
  border-radius: inherit;
  background:
    linear-gradient(180deg, rgba(245,201,122,.06), transparent 40%),
    linear-gradient(180deg, var(--night-panel) 0%, var(--night-bg) 100%);
  transform: translateZ(-28px);
  z-index: -1;
}
.night-hero h1 { transform: translateZ(16px); }
.night-hero .night-sub { transform: translateZ(8px); }
.night-hero { animation: camp-door .7s var(--ease, ease) both; }
@keyframes camp-door {
  from { opacity: 0; transform: perspective(640px) rotateX(22deg) translateZ(-70px); }
  to   { opacity: 1; transform: perspective(640px) rotateX(0) translateZ(0); }
}

/* ── 营·今晚：任务卡 3D 翻转（正面主任务 / 背面备选与进度）── */
.tc-flip { perspective: 900px; }
.tc-flip .tc-inner {
  position: relative;
  transform-style: preserve-3d;
  transition: transform .5s var(--ease, ease);
}
.tc-flip.is-flipped .tc-inner { transform: rotateY(180deg); }
.tc-face {
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}
.tc-back {
  position: absolute; inset: 0;
  transform: rotateY(180deg);
  display: flex; flex-direction: column; justify-content: center;
}
.tc-toggle {
  margin-top: 10px;
  background: none; border: none; cursor: pointer;
  color: var(--accent, #C08A2E);
  font-size: 13px; padding: 4px 0;
}
/* V3.5 微动作一键生成：空态时给营员一个「排上今晚动作」的入口 */
.tc-seed { margin: 12px 0 2px; }
.tc-seed .btn { width: 100%; }
/* ── 结营卡：立体卡片，进场轻抬 ── */
.report-card {
  perspective: 640px;
  animation: report-lift .6s var(--ease, ease) both;
}
.report-card > * { transform: translateZ(18px); }
@keyframes report-lift {
  from { opacity: 0; transform: perspective(640px) rotateX(12deg) translateZ(-50px); }
  to   { opacity: 1; transform: perspective(640px) rotateX(0) translateZ(0); }
}

/* ── 打印：结营卡退回平面（与 695-709 打印段一致口径）── */
@media print {
  .report-card, .report-card > * { animation: none !important; transform: none !important; }
  .night-hero, .night-hero::before, .night-hero h1, .night-hero .night-sub { animation: none !important; transform: none !important; }
}

/* ── 动效降级：3D 全关停，页面照常 ── */
[data-motion="off"] .room-night .rn-sky *,
[data-motion="off"] .room-night .building,
[data-motion="off"] .room-night .countdown,
[data-motion="off"] .night-hero,
[data-motion="off"] .tc-flip .tc-inner,
[data-motion="off"] .report-card { animation: none !important; transform: none !important; transition: none !important; }
@media (prefers-reduced-motion: reduce) {
  .room-night .rn-sky *, .room-night .building, .room-night .countdown,
  .night-hero, .tc-flip .tc-inner, .report-card { animation: none !important; transform: none !important; }
  .tc-face, .tc-back { backface-visibility: visible; -webkit-backface-visibility: visible; }
  .tc-back { position: static; transform: none; display: none; }
  .tc-flip.is-flipped .tc-back { display: flex; }
}

/* ── 3D 总开关关闭（后台 motion3d_enabled 关 → html[data-flat3d]）：
   立体层全部压回平面，结构与功能完全不变 ── */
[data-flat3d] .room-night,
[data-flat3d] .room-night .rn-sky,
[data-flat3d] .room-night .building,
[data-flat3d] .room-night .building::before,
[data-flat3d] .room-night .building::after,
[data-flat3d] .room-night .window,
[data-flat3d] .room-night .countdown,
[data-flat3d] .room-night .night-panel,
[data-flat3d] .room-night .predict-card,
[data-flat3d] .room-night .done-card,
[data-flat3d] .room-night .room-actions .btn,
[data-flat3d] .room-night .spirit,
[data-flat3d] .night-hero,
[data-flat3d] .night-hero::before,
[data-flat3d] .night-hero h1,
[data-flat3d] .night-hero .night-sub,
[data-flat3d] .tc-flip,
[data-flat3d] .tc-flip .tc-inner,
[data-flat3d] .report-card,
[data-flat3d] .report-card > * {
  perspective: none !important;
  transform: none !important;
  transform-style: flat !important;
  animation: none !important;
}

/* ---------- 10. V2.5 昼夜双轨：余温窗 + 晨光窗形态 + 常开屋文案 ---------- */
/* 余温窗：最近一小时亮过已离开，无归属、不发光，只留一层淡暖 */
.window.warm {
 background: rgba(245, 201, 122, .20);
 box-shadow: none;
}
html[data-theme="light"] .window.warm { background: rgba(192, 138, 46, .15); }
/* 晨光窗形态：浅色主题下亮窗改为描边浅填充，无光晕 */
html[data-theme="light"] .window.lit {
 background: rgba(192, 138, 46, .22);
 box-shadow: none;
 outline: 1px solid #C08A2E;
 outline-offset: 0;
}
html[data-theme="light"] .window.lit.mine { outline-color: #96702B; }
html[data-theme="light"] .window .you { color: #96702B; }
/* 余温文案行 */
.rn-warm-line { margin: 10px 0 0; font-size: 13px; line-height: 1.6; color: var(--night-body); text-align: center; }
.rn-warm-line:empty { display: none; }
/* 首页灯窗墙：余温窗档 */
.lamp-win.warm { background: rgba(245, 201, 122, .32); box-shadow: none; }
html[data-theme="light"] .lamp-win.warm { background: rgba(192, 138, 46, .22); }

/* ---------- 11. V3.1 营3/营4：营火长桌与七盏灯（付费营视觉独占）+ 结营灯箱 ---------- */
/* 场景容器：8 层视差中的 L1-L4 简化层，只动 transform/opacity */
.camp-fire-scene {
 position: relative; overflow: hidden; border-radius: 18px;
 min-height: 190px; margin: 0 0 14px;
 background: linear-gradient(180deg, #121826 0%, #161D2E 62%, #1B2233 100%);
 perspective: 900px;
}
/* 天幕星点（≤60 星，静态 canvas 感） */
.camp-fire-scene::before {
 content: ''; position: absolute; inset: 0;
 background-image:
 radial-gradient(1.5px 1.5px at 12% 18%, rgba(255,255,255,.8) 50%, transparent 51%),
 radial-gradient(1px 1px at 30% 8%, rgba(255,255,255,.6) 50%, transparent 51%),
 radial-gradient(1.5px 1.5px at 52% 22%, rgba(255,255,255,.7) 50%, transparent 51%),
 radial-gradient(1px 1px at 68% 12%, rgba(255,255,255,.55) 50%, transparent 51%),
 radial-gradient(1.5px 1.5px at 84% 26%, rgba(255,255,255,.7) 50%, transparent 51%),
 radial-gradient(1px 1px at 92% 9%, rgba(255,255,255,.5) 50%, transparent 51%),
 radial-gradient(1px 1px at 6% 34%, rgba(255,255,255,.45) 50%, transparent 51%),
 radial-gradient(1.2px 1.2px at 44% 6%, rgba(255,255,255,.6) 50%, transparent 51%);
}
/* 远景剪影 L3（单色、柔边） */
.cf-l1 { position:absolute; left:0; right:0; bottom:56px; height:70px;
 background: linear-gradient(180deg, rgba(27,34,51,.9), rgba(27,34,51,0));
 clip-path: polygon(0 60%, 8% 40%, 16% 62%, 26% 34%, 36% 58%, 47% 28%, 58% 56%, 69% 36%, 79% 60%, 88% 42%, 100% 58%, 100% 100%, 0 100%);
 opacity:.9; transform: translate3d(0,0,0); }
.cf-l2 { position:absolute; left:-4%; right:-4%; bottom:52px; height:26px;
 background: rgba(18,24,38,.85); border-radius: 40% 40% 0 0 / 100% 100% 0 0;
 filter: blur(1px); }
/* 营火长桌 L6 */
.cf-table { position:absolute; left:50%; bottom:34px; width:220px; height:14px;
 transform: translateX(-50%) rotateX(4deg); transform-style: preserve-3d;
 background: #3A2E1C; border-radius: 6px; box-shadow: 0 2px 0 #241C10; }
.cf-fire { position:absolute; left:50%; bottom:14px; width:16px; height:22px;
 transform: translateX(-50%); border-radius: 50% 50% 45% 45%;
 background: radial-gradient(ellipse at 50% 70%, var(--night-lamp-2) 0%, var(--night-lamp) 45%, rgba(245,201,122,0) 78%);
 animation: cf-burn 4s ease-in-out infinite; }
.cf-fire-glow { position:absolute; left:50%; bottom:2px; width:180px; height:60px;
 transform: translateX(-50%); border-radius: 50%;
 background: radial-gradient(ellipse, rgba(245,201,122,.35), rgba(245,201,122,0) 70%);
 filter: blur(18px); animation: cf-glow 4s ease-in-out infinite; }
@keyframes cf-burn { 0%,100% { transform: translateX(-50%) scale(1); opacity:.85; } 50% { transform: translateX(-50%) scale(1.06,1.1); opacity:1; } }
@keyframes cf-glow { 0%,100% { opacity:.7; } 50% { opacity:1; } }
/* 七盏灯：亮=暖光，未亮只留轮廓；不做进度、不显示“缺” */
.cf-lamps { position:absolute; left:0; right:0; bottom:60px; display:flex;
 justify-content:center; gap:26px; }
.cf-lamp { width:12px; height:18px; border-radius: 6px 6px 4px 4px;
 border: 1.5px solid rgba(245,201,122,.45); background: transparent; position:relative; }
.cf-lamp.lit { border-color: rgba(245,201,122,.9);
 background: radial-gradient(ellipse at 50% 35%, var(--night-lamp-2) 0%, var(--night-lamp) 60%, rgba(245,201,122,.35) 100%);
 box-shadow: 0 0 14px rgba(245,201,122,.5); animation: cf-lamp 4s ease-in-out infinite; }
@keyframes cf-lamp { 0%,100% { transform: scale(1); } 50% { transform: scale(1.03); } }
.cf-note { position:absolute; left:0; right:0; bottom:10px; margin:0;
 font-size:12px; color: rgba(240,217,168,.85); text-align:center; }
/* 营火态（21:00 场次窗口）：中央点光更暖 */
.camp-fire-scene.cf-lit { box-shadow: inset 0 0 90px rgba(245,201,122,.14); }
.camp-fire-scene.cf-lit .cf-fire-glow { opacity:1; }
/* 结营灯箱：报告卡展开 520ms（只动 transform/opacity） */
.report-box { animation: report-open .52s cubic-bezier(0.22,0.61,0.36,1) both; }
@keyframes report-open { from { transform: scale(.96); opacity:0; } to { transform: scale(1); opacity:1; } }
/* 值守回应位 */
.camp-echo { border-left: 3px solid var(--accent); font-size:14px; line-height:1.7; }
/* 浅色主题：场景压成浅底深字，禁止暖橙底放白字 */
html[data-theme="light"] .camp-fire-scene {
 background: linear-gradient(180deg, #F4E7CF 0%, #F0D9A8 70%, #EBD096 100%);
}
html[data-theme="light"] .camp-fire-scene::before { opacity:.25; }
html[data-theme="light"] .cf-note { color: #5A4622; }
html[data-theme="light"] .cf-l1 { background: linear-gradient(180deg, rgba(192,138,46,.35), rgba(192,138,46,0)); }
html[data-theme="light"] .cf-table { background:#C7A263; box-shadow: 0 2px 0 #96702B; }
/* 压平：3D 总开关 / data-motion=off / prefers-reduced-motion 下静态呈现 */
[data-motion="off"] .camp-fire-scene *, [data-flat3d] .camp-fire-scene *,
[data-motion="off"] .report-box, [data-flat3d] .report-box { animation: none !important; transform: none !important; }
@media (prefers-reduced-motion: reduce) {
 .camp-fire-scene *, .report-box { animation: none !important; transform: none !important; }
}
@media print { .camp-fire-scene { background:#fff; } .report-box { animation:none; transform:none; } }

/* ---------- 12. V3.2 陪伴营 · 营火夜屋（.camp-night 整页沉浸） ---------- */
.camp-night {
 position: relative; overflow: hidden;
 min-height: 100vh;
 max-width: 560px; margin: 0 auto;
 padding: 14px 16px 56px;
 background:
 radial-gradient(1000px 520px at 12% -8%, rgba(245, 201, 122, .08), transparent 62%),
 var(--night-bg);
 color: var(--night-body);
}
.camp-night > *:not(.cn-sky) { position: relative; z-index: 1; }
.camp-night .cn-sky { height: 360px; }
/* 皮肤：雨夜——冷靛底 + 整页雨丝，无流星 */
.camp-night.sk-rain {
 background:
 radial-gradient(1000px 520px at 12% -8%, rgba(138, 147, 168, .12), transparent 62%),
 #12161F;
}
.camp-night.sk-rain .rn-rain { display: block; height: 100%; }
.camp-night.sk-rain .rn-meteor { display: none; }
/* 皮肤：雪夜——灰蓝底 + 飘雪，无流星 */
.camp-night.sk-snow {
 background:
 radial-gradient(1000px 520px at 12% -8%, rgba(232, 234, 242, .10), transparent 62%),
 #171C28;
}
.camp-night.sk-snow .rn-snow { display: block; height: 100%; }
.camp-night.sk-snow .rn-meteor { display: none; }
.camp-night.sk-snow .rn-moon { box-shadow: inset 9px -5px 0 0 rgba(239, 227, 200, .55); }
/* 返回：夜色胶囊 */
.camp-night .cn-back {
 display: inline-block;
 color: var(--night-muted); font-size: 14px; text-decoration: none;
 padding: 6px 12px; border: 1px solid var(--night-line); border-radius: 999px;
 margin: 6px 0 4px;
}
.camp-night .cn-back:hover { color: var(--night-body); border-color: var(--night-line-2); }
/* 夜号头：第 N 晚 · 已来几晚 */
.camp-night .cn-head {
 display: flex; justify-content: space-between; flex-wrap: wrap; gap: 4px 12px;
 margin: 10px 2px 6px;
 color: var(--night-muted); font-size: 13px; letter-spacing: 1px;
}
.camp-night .cn-head span:first-child { color: var(--night-text); }
/* 进度灯窗：亮一盏=来了一个晚上，今晚这盏呼吸 */
.camp-night .cn-progress {
 display: flex; flex-wrap: wrap; justify-content: center;
 gap: 10px; margin: 18px 4px 0; padding: 0;
}
.camp-night .cn-lamp {
 width: 11px; height: 16px;
 border-radius: 5px 5px 3px 3px;
 border: 1.5px solid rgba(245, 201, 122, .35);
 background: transparent;
}
.camp-night .cn-lamp.lit {
 border-color: rgba(245, 201, 122, .9);
 background: radial-gradient(ellipse at 50% 35%, var(--night-lamp-2) 0%, var(--night-lamp) 60%, rgba(245, 201, 122, .35) 100%);
 box-shadow: 0 0 10px rgba(245, 201, 122, .45);
}
.camp-night .cn-lamp.now { animation: cf-lamp 4s ease-in-out infinite; }
.camp-night .cn-progress-sub {
 margin: 10px 0 0; text-align: center;
 font-size: 12px; color: var(--night-muted);
}
/* 营友的灯：一排小灯，只亮灯不点名 */
.camp-night .cn-buddies {
 display: flex; align-items: center; justify-content: center; flex-wrap: wrap;
 gap: 8px 10px; margin: 14px 0 0;
 padding: 10px 14px;
 background: var(--night-panel); border: 1px solid var(--night-line); border-radius: 12px;
}
.camp-night .cn-buddies-title { font-size: 12px; letter-spacing: 1px; color: var(--night-muted); }
.camp-night .cn-buddies-lamps { display: inline-flex; gap: 6px; }
.camp-night .cn-buddy-lamp {
 width: 8px; height: 8px; border-radius: 50%;
 border: 1px solid rgba(245, 201, 122, .30); background: transparent;
}
.camp-night .cn-buddy-lamp.lit {
 border-color: rgba(245, 201, 122, .9);
 background: var(--night-lamp);
 box-shadow: 0 0 8px rgba(245, 201, 122, .55);
}
.camp-night .cn-buddies-note { font-size: 12px; color: var(--night-muted); }
/* 夜色面板内容适配（任务卡翻转 / 回应） */
.camp-night .tc-face { background: transparent; border: 0; }
.camp-night .tc-face .t-kicker { color: var(--night-muted); }
.camp-night .tc-face .t-main { color: var(--night-text); }
.camp-night .tc-toggle { color: var(--night-lamp); }
.camp-night .t-meta { color: var(--night-muted); }
.camp-night .band.alert-err { background: rgba(224, 147, 138, .12); border-color: rgba(224, 147, 138, .5); color: var(--night-danger); }
/* 夜色按钮 */
.camp-night .btn { background: var(--night-panel-2); border-color: var(--night-line); color: var(--night-body); }
.camp-night .btn.primary {
 background: var(--night-lamp); border-color: var(--night-lamp); color: var(--night-ink); font-weight: 700;
 box-shadow: 0 0 14px rgba(245, 201, 122, .28);
}
.camp-night .btn.primary:hover { background: var(--night-lamp-2); }
/* 底部链接行 */
.camp-night .cn-links { text-align: center; margin: 16px 0 0; font-size: 13px; }
.camp-night .cn-links a { color: var(--night-muted); text-decoration: underline; text-underline-offset: 3px; }
.camp-night .cn-links a:hover { color: var(--night-body); }
.camp-night .cn-links .sep { margin: 0 8px; opacity: .5; }
/* 小灵：营房里同一只小灯灵 */
.camp-night .cn-spirit { text-align: center; margin: 22px 0 0; }
/* 营火态：整页中央点光更暖 */
.camp-night.cn-lit .cn-back { border-color: rgba(245, 201, 122, .35); color: var(--night-body); }
/* 营火长桌：融进夜空——去卡片化，远景树影 + 火星上升 */
.camp-night .camp-fire-scene {
 border-radius: 16px;
 background: linear-gradient(180deg, rgba(18, 24, 38, .55) 0%, rgba(27, 34, 51, .35) 62%, rgba(27, 34, 51, .18) 100%);
 border: 1px solid rgba(245, 201, 122, .14);
 min-height: 210px;
}
.camp-night .camp-fire-scene.cf-lit { box-shadow: inset 0 0 110px rgba(245, 201, 122, .16); }
/* 远景树影：一排三角剪影，比山影更近一层 */
.camp-night .cf-trees {
 position: absolute; left: 0; right: 0; bottom: 74px; height: 46px;
 background:
 linear-gradient(180deg, rgba(11, 15, 24, .65), rgba(11, 15, 24, .35)) ;
 clip-path: polygon(0 100%, 0 55%, 5% 55%, 8% 18%, 11% 55%, 18% 55%, 22% 30%, 26% 55%, 34% 55%, 38% 12%, 42% 55%, 50% 55%, 54% 26%, 58% 55%, 66% 55%, 70% 20%, 74% 55%, 82% 55%, 86% 34%, 90% 55%, 96% 55%, 100% 40%, 100% 100%);
 opacity: .8;
}
/* 火星：三粒火星从篝火上升、渐隐、循环 */
.camp-night .cf-sparks { position: absolute; left: 50%; bottom: 46px; width: 2px; height: 2px; background: transparent; }
.camp-night .cf-sparks::before, .camp-night .cf-sparks::after {
 content: ''; position: absolute; width: 2px; height: 2px; border-radius: 50%;
 background: var(--night-lamp-2);
}
.camp-night .cf-sparks::before {
 left: 0; box-shadow: 0 0 4px rgba(255, 232, 184, .9);
 animation: cf-spark-a 3.2s ease-in infinite;
}
.camp-night .cf-sparks::after {
 left: 8px; box-shadow: 0 0 4px rgba(255, 232, 184, .8);
 animation: cf-spark-b 4.1s ease-in infinite;
 animation-delay: 1.2s;
}
@keyframes cf-spark-a {
 0% { transform: translate(0, 0) scale(1); opacity: .9; }
 70% { opacity: .8; }
 100% { transform: translate(10px, -58px) scale(.5); opacity: 0; }
}
@keyframes cf-spark-b {
 0% { transform: translate(0, 0) scale(.9); opacity: .8; }
 70% { opacity: .6; }
 100% { transform: translate(-12px, -70px) scale(.4); opacity: 0; }
}
/* 营火态光斑：桌面暖光反射 */
.camp-night .cf-fire-glow { width: 220px; height: 74px; }
/* 浅色主题：营火夜屋整页转暖纸夜色（深底组件必须配浅色深字覆盖——项目惯例） */
html[data-theme="light"] .camp-night {
 background:
 radial-gradient(1000px 520px at 12% -8%, rgba(192, 138, 46, .10), transparent 62%),
 #F7EEDD;
 color: #4A3A1C;
}
html[data-theme="light"] .camp-night .cn-back { color: #8A6B2E; border-color: #E2D3B0; }
html[data-theme="light"] .camp-night .cn-head, html[data-theme="light"] .camp-night .cn-progress-sub,
html[data-theme="light"] .camp-night .t-meta, html[data-theme="light"] .camp-night .cn-buddies-title,
html[data-theme="light"] .camp-night .cn-buddies-note { color: #8A6B2E; }
html[data-theme="light"] .camp-night .cn-head span:first-child { color: #3A2E12; }
html[data-theme="light"] .camp-night .cn-lamp { border-color: rgba(192, 138, 46, .45); }
html[data-theme="light"] .camp-night .cn-lamp.lit {
 border-color: #B98A3C;
 background: radial-gradient(ellipse at 50% 35%, var(--night-lamp-2) 0%, #E5B45C 60%, rgba(192, 138, 46, .35) 100%);
 box-shadow: none;
}
html[data-theme="light"] .camp-night .cn-buddies { background: #FBF3E2; border-color: #E2D3B0; }
html[data-theme="light"] .camp-night .cn-buddy-lamp.lit { border-color: #B98A3C; background: #C08A2E; box-shadow: none; }
html[data-theme="light"] .camp-night .tc-face .t-main { color: #3A2E12; }
html[data-theme="light"] .camp-night .tc-toggle { color: #B98A3C; }
html[data-theme="light"] .camp-night .btn { background: #F4E7CF; border-color: #D8C48E; color: #4A3A1C; }
html[data-theme="light"] .camp-night .btn.primary { background: #C08A2E; border-color: #C08A2E; color: #FFF7E6; box-shadow: none; }
html[data-theme="light"] .camp-night .btn.primary:hover { background: #B98A3C; }
html[data-theme="light"] .camp-night .cn-links a { color: #8A6B2E; }
html[data-theme="light"] .camp-night .cn-links a:hover { color: #4A3A1C; }
/* 首页「你在营里了」卡与报告页的灯条同语言 */
.cn-progress-inline { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 4px; }
.cn-progress-inline .cn-lamp-sm {
 width: 9px; height: 13px; border-radius: 4px 4px 3px 3px;
 border: 1.5px solid rgba(192, 138, 46, .35); background: transparent;
}
html[data-theme="light"] .cn-progress-inline .cn-lamp-sm.lit { border-color: #B98A3C; background: radial-gradient(ellipse at 50% 35%, var(--night-lamp-2) 0%, #E5B45C 70%); box-shadow: none; }
:root:not([data-theme="light"]) .cn-progress-inline .cn-lamp-sm { border-color: rgba(245, 201, 122, .35); }
:root:not([data-theme="light"]) .cn-progress-inline .cn-lamp-sm.lit {
 border-color: rgba(245, 201, 122, .9);
 background: radial-gradient(ellipse at 50% 35%, var(--night-lamp-2) 0%, var(--night-lamp) 70%);
 box-shadow: 0 0 8px rgba(245, 201, 122, .4);
}
/* 压平：3D 总开关 / data-motion=off / prefers-reduced-motion 下静态呈现 */
[data-motion="off"] .camp-night .cf-sparks, [data-flat3d] .camp-night .cf-sparks,
[data-motion="off"] .camp-night .cf-sparks::before, [data-flat3d] .camp-night .cf-sparks::after,
[data-motion="off"] .camp-night .cn-lamp.now, [data-flat3d] .camp-night .cn-lamp.now,
[data-motion="off"] .camp-fire-scene .cf-trees, [data-flat3d] .camp-fire-scene .cf-trees { animation: none !important; }
@media (prefers-reduced-motion: reduce) {
 .camp-night .cf-sparks, .camp-night .cf-sparks::before, .camp-night .cf-sparks::after,
 .camp-night .cn-lamp.now { animation: none !important; }
}
/* 桌面端适配：放开宽度 */
@media (min-width: 768px) {
 .camp-night { max-width: 760px; padding: 20px 24px 60px; }
 .camp-night .cn-sky { height: 420px; }
 .camp-night .camp-fire-scene { min-height: 250px; }
}
@media (min-width: 1100px) {
 .camp-night { max-width: 880px; }
}
html[data-theme="light"] .camp-night .night-panel { background: #FBF3E2; border-color: #E2D3B0; }
html[data-theme="light"] .camp-night .spirit-box .t-meta { color: #8A6B2E; }

/* ---------- 13. 营首页 / 结营报告 夜屋化（V3.2 三页统一） ---------- */
/* 夜色面板内的标题与正文：营首页把 .card 换成 .night-panel 后，标题/列表/表单文字要跟着夜色走 */
.camp-night .night-panel .card-title { color: var(--night-text); }
.camp-night .night-panel .muted, .camp-night .night-panel .small { color: var(--night-muted); }
.camp-night .night-panel .plain-list li { color: var(--night-body); border-color: var(--night-line); }
.camp-night .night-panel .plain-list li b { color: var(--night-text); }
.camp-night .night-panel .check { color: var(--night-body); }
.camp-night .night-panel .q-block legend { color: var(--night-text); }
.camp-night .night-panel .pass-code { color: var(--night-lamp-2); }
.camp-night .night-panel .camp-price { color: var(--night-lamp); }
.camp-night .night-panel .camp-benefits .card-title { color: var(--night-text); }
.camp-night .camp-preview { color: var(--night-body); }
.camp-night .ask-foot a { color: var(--night-muted); }
.camp-night .ask-foot a:hover { color: var(--night-body); }
/* 结营卡在夜色容器里：去卡片化，融进夜空 */
.camp-night .report-card { background: transparent; border: 1px solid rgba(245, 201, 122, .18); }
.camp-night .report-btns { max-width: 560px; }
/* 浅色主题：营首页/报告页夜色面板转暖纸，深字覆盖 */
html[data-theme="light"] .camp-night .night-panel .card-title { color: #3A2E12; }
html[data-theme="light"] .camp-night .night-panel .muted,
html[data-theme="light"] .camp-night .night-panel .small { color: #8A6B2E; }
html[data-theme="light"] .camp-night .night-panel .plain-list li { color: #4A3A1C; border-color: #E2D3B0; }
html[data-theme="light"] .camp-night .night-panel .plain-list li b { color: #3A2E12; }
html[data-theme="light"] .camp-night .night-panel .check { color: #4A3A1C; }
html[data-theme="light"] .camp-night .night-panel .q-block legend { color: #3A2E12; }
html[data-theme="light"] .camp-night .night-panel .pass-code { color: #B98A3C; }
html[data-theme="light"] .camp-night .night-panel .camp-price { color: #B98A3C; }
html[data-theme="light"] .camp-night .camp-preview { color: #4A3A1C; }
html[data-theme="light"] .camp-night .ask-foot a { color: #8A6B2E; }
html[data-theme="light"] .camp-night .ask-foot a:hover { color: #4A3A1C; }
html[data-theme="light"] .camp-night .report-card { border-color: #E2D3B0; }

/* ---------- 14. 陪伴营昼夜（V3.3 白天暖色日光版） ---------- */
/* 白天：营页不再强制夜色，容器转暖纸日光，星星/月亮/流星收起，太阳与云浮现 */
.camp-night.rn-day {
  background:
    radial-gradient(1000px 520px at 12% -8%, rgba(240, 180, 78, .16), transparent 62%),
    linear-gradient(180deg, #FDF7E7 0%, #F6EFDC 58%, #EFE6CF 100%);
  color: #5C5243;
}
.camp-night.rn-day .rn-stars,
.camp-night.rn-day .rn-meteor,
.camp-night.rn-day .rn-moon { display: none; }
.camp-night.rn-day .rn-sun { display: block; }
.camp-night.rn-day .rn-cloud { display: block; }
.camp-night.rn-day .rn-rain { background: linear-gradient(105deg, transparent 46%, rgba(150, 165, 190, .28) 50%, transparent 54%) 0 0 / 16px 30px repeat; }
.camp-night.rn-day .rn-snow1, .camp-night.rn-day .rn-snow2 { box-shadow: none; background: transparent; }
/* 白天文字/面板/按钮转暖纸色系 */
.camp-night.rn-day .cn-head,
.camp-night.rn-day .cn-back,
.camp-night.rn-day .night-panel .card-title,
.camp-night.rn-day .night-panel .q-block legend { color: #3A2E12; }
.camp-night.rn-day .cn-back { color: #8A7E68; border-color: #E2D7BC; }
.camp-night.rn-day .cn-back:hover { color: #5C5243; border-color: #C9B98F; }
.camp-night.rn-day .night-panel .muted,
.camp-night.rn-day .night-panel .small,
.camp-night.rn-day .camp-preview { color: #8A6B2E; }
.camp-night.rn-day .night-panel .plain-list li { color: #4A3A1C; border-color: #E2D3B0; }
.camp-night.rn-day .night-panel .plain-list li b { color: #3A2E12; }
.camp-night.rn-day .night-panel .check { color: #4A3A1C; }
.camp-night.rn-day .night-panel .pass-code { color: #B98A3C; }
.camp-night.rn-day .night-panel .camp-price { color: #B98A3C; }
.camp-night.rn-day .night-panel { background: #FFFDF4; border-color: #E6DBC0; }
.camp-night.rn-day .report-card { background: #FFFDF4; border-color: #E2D3B0; }
.camp-night.rn-day .btn { background: #FFFDF4; border-color: #E6DBC0; color: #5C5243; }
.camp-night.rn-day .btn:hover { border-color: #C9B98F; }
.camp-night.rn-day .btn.primary { background: #E9B45A; border-color: #E9B45A; color: #3D3218; box-shadow: 0 0 10px rgba(233, 180, 90, .3); }
.camp-night.rn-day .btn.primary:hover { background: #F2C879; }
.camp-night.rn-day .ask-foot a { color: #8A6B2E; }
.camp-night.rn-day .ask-foot a:hover { color: #4A3A1C; }
/* 暮色：18 点过渡，轻微压暗，不搞深夜黑 */
.camp-night.rn-dusk {
  background:
    radial-gradient(1000px 520px at 12% -8%, rgba(245, 201, 122, .08), transparent 62%),
    linear-gradient(180deg, #2A2A3E 0%, #1B2233 100%);
}
.camp-night.rn-dusk .rn-moon { opacity: .5; }
.camp-night.rn-dusk .rn-stars { animation-duration: 7s; }

/* ---------- 15. V3.5 陪伴营质感跃迁（玻璃拟态 + 光影 + 动效，去「平铺实色块」） ---------- */
/* 夜色面板玻璃化：毛玻璃 + 内发光 + 悬浮阴影 + 呼吸留白，替代原来的实色平铺 */
.camp-night .night-panel {
  background: linear-gradient(165deg, rgba(255, 255, 255, .07) 0%, rgba(255, 255, 255, .02) 42%, rgba(255, 255, 255, 0) 100%),
              rgba(27, 36, 54, .55);
  border: 1px solid rgba(255, 255, 255, .10);
  border-radius: 18px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, .35), inset 0 1px 0 rgba(255, 255, 255, .10);
  -webkit-backdrop-filter: blur(40px) saturate(180%);
  backdrop-filter: blur(40px) saturate(180%);
  margin-bottom: 16px;
  position: relative;
  transition: box-shadow .24s var(--ease, ease), border-color .24s var(--ease, ease), transform .24s var(--ease, ease);
}
/* 面板顶部高光细线（玻璃反光） */
.camp-night .night-panel::before {
  content: '';
  position: absolute; left: 16px; right: 16px; top: 0; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .22), transparent);
  pointer-events: none;
}
.camp-night .night-panel:hover {
  border-color: rgba(245, 201, 122, .28);
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, .7), inset 0 1px 0 rgba(255, 255, 255, .12);
}
/* 关键动作按钮：按压回弹 + 光扫 */
.camp-night .btn.primary {
  position: relative; overflow: hidden; isolation: isolate;
  background: linear-gradient(135deg, var(--night-lamp-2) 0%, #E5B45C 52%, #C08A2E 100%);
  border-color: #C08A2E;
  box-shadow: 0 8px 26px -10px rgba(245, 201, 122, .48), inset 0 1px 0 rgba(255, 255, 255, .2);
  transition: transform .14s var(--ease, ease), box-shadow .24s var(--ease, ease);
}
.camp-night .btn.primary::after {
  content: ''; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(105deg, transparent 30%, rgba(255, 255, 255, .5) 48%, transparent 66%);
  transform: translateX(-130%);
  transition: transform .44s var(--ease-soft, ease);
}
.camp-night .btn.primary:hover::after { transform: translateX(130%); }
.camp-night .btn.primary:hover { box-shadow: 0 12px 32px -10px rgba(245, 201, 122, .6), inset 0 1px 0 rgba(255, 255, 255, .24); }
.camp-night .btn.primary:active { transform: translateY(1px) scale(.985); box-shadow: none; transition-duration: .07s; }
/* 任务卡（今晚这件事）作为视觉焦点：更亮的内发光 + 轻微上浮 */
.camp-night .task-card {
  background: linear-gradient(165deg, rgba(255, 255, 255, .09) 0%, rgba(255, 255, 255, .02) 42%, rgba(255, 255, 255, 0) 100%),
              rgba(27, 36, 54, .62);
  border: 1px solid rgba(245, 201, 122, .22);
  border-radius: 18px;
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, .7), inset 0 1px 0 rgba(255, 255, 255, .12);
  -webkit-backdrop-filter: blur(40px) saturate(180%);
  backdrop-filter: blur(40px) saturate(180%);
}
/* 结营卡：玻璃化 + 进场轻抬 */
.camp-night .report-card {
  background: linear-gradient(165deg, rgba(255, 255, 255, .08) 0%, rgba(255, 255, 255, .02) 42%, rgba(255, 255, 255, 0) 100%),
              rgba(27, 36, 54, .55);
  border: 1px solid rgba(245, 201, 122, .22);
  border-radius: 18px;
  box-shadow: 0 16px 40px -16px rgba(0, 0, 0, .7), inset 0 1px 0 rgba(255, 255, 255, .12);
  -webkit-backdrop-filter: blur(40px) saturate(180%);
  backdrop-filter: blur(40px) saturate(180%);
}
/* 面板进场轻抬（克制，只做一次，不逐元素） */
.camp-night .night-panel,
.camp-night .task-card,
.camp-night .report-card { animation: camp-rise .5s var(--ease-soft, ease) both; }
@keyframes camp-rise {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}
/* 进度灯窗：亮灯加呼吸光晕，更「活」 */
.camp-night .cn-lamp.lit { box-shadow: 0 0 12px rgba(245, 201, 122, .55), 0 0 24px rgba(245, 201, 122, .22); }
.camp-night .cn-lamp.now { box-shadow: 0 0 16px rgba(245, 201, 122, .7), 0 0 32px rgba(245, 201, 122, .3); }
/* 营友灯：亮灯加柔光 */
.camp-night .cn-buddy-lamp.lit { box-shadow: 0 0 10px rgba(245, 201, 122, .6); }
/* 浅色主题：玻璃面板转暖纸玻璃（保留毛玻璃，只换底色与描边） */
html[data-theme="light"] .camp-night .night-panel {
  background: linear-gradient(165deg, rgba(255, 255, 255, .6) 0%, rgba(255, 255, 255, .25) 42%, rgba(255, 255, 255, 0) 100%),
              rgba(251, 243, 226, .72);
  border-color: rgba(185, 138, 60, .18);
  box-shadow: 0 2px 8px rgba(120, 90, 30, .12), inset 0 1px 0 rgba(255, 255, 255, .6);
}
html[data-theme="light"] .camp-night .night-panel::before { background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .7), transparent); }
html[data-theme="light"] .camp-night .task-card,
html[data-theme="light"] .camp-night .report-card {
  background: linear-gradient(165deg, rgba(255, 255, 255, .6) 0%, rgba(255, 255, 255, .25) 42%, rgba(255, 255, 255, 0) 100%),
              rgba(251, 243, 226, .72);
  border-color: rgba(185, 138, 60, .22);
  box-shadow: 0 8px 24px -12px rgba(120, 90, 30, .2), inset 0 1px 0 rgba(255, 255, 255, .6);
}
/* 白天态：玻璃面板转暖纸玻璃 */
.camp-night.rn-day .night-panel {
  background: linear-gradient(165deg, rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .3) 42%, rgba(255, 255, 255, 0) 100%),
              rgba(255, 253, 244, .78);
  border-color: rgba(185, 138, 60, .16);
  box-shadow: 0 2px 8px rgba(120, 90, 30, .1), inset 0 1px 0 rgba(255, 255, 255, .6);
}
.camp-night.rn-day .task-card,
.camp-night.rn-day .report-card {
  background: linear-gradient(165deg, rgba(255, 255, 255, .65) 0%, rgba(255, 255, 255, .3) 42%, rgba(255, 255, 255, 0) 100%),
              rgba(255, 253, 244, .78);
  border-color: rgba(185, 138, 60, .2);
}
/* 动效关停：data-motion=off / prefers-reduced-motion 下静态呈现 */
[data-motion="off"] .camp-night .night-panel,
[data-motion="off"] .camp-night .task-card,
[data-motion="off"] .camp-night .report-card,
[data-flat3d] .camp-night .night-panel,
[data-flat3d] .camp-night .task-card,
[data-flat3d] .camp-night .report-card { animation: none !important; }
@media (prefers-reduced-motion: reduce) {
  .camp-night .night-panel,
  .camp-night .task-card,
  .camp-night .report-card { animation: none !important; }
  .camp-night .btn.primary::after { display: none; }
}

/* ---------- 11. 付费/免费权益对比 & 营内页专属权益（V3.7） ---------- */
/* 让「付费在免费基础上加码了什么」一眼可见，不再只靠站长手填 benefits 才出现 */
.camp-night .tier-grid { margin-top: 12px; display: flex; flex-direction: column; gap: 12px; }
.camp-night .tier-col {
  border: 1px solid var(--night-line);
  border-radius: 14px;
  padding: 14px 14px 12px;
  background: rgba(255, 255, 255, .04);
}
.camp-night .tier-col.tier-paid {
  border-color: rgba(245, 201, 122, .48);
  background: linear-gradient(180deg, rgba(245, 201, 122, .11), rgba(255, 255, 255, .02) 58%);
  box-shadow: 0 14px 34px -18px rgba(0, 0, 0, .6), inset 0 1px 0 rgba(255, 255, 255, .06);
}
.camp-night .tier-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.camp-night .tier-name { font-size: 16px; font-weight: 700; color: var(--night-text); }
.camp-night .tier-col.tier-paid .tier-name { color: var(--night-lamp); }
.camp-night .tier-sub { font-size: 12px; color: var(--night-muted); }
.camp-night .tier-plus { font-size: 12px; color: var(--night-lamp-2); margin: 0 0 6px; }
.camp-night .tier-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.camp-night .tier-list li {
  position: relative; padding-left: 18px; font-size: 14px; line-height: 1.5;
  color: var(--night-body);
}
.camp-night .tier-list li::before {
  content: ''; position: absolute; left: 2px; top: 7px; width: 6px; height: 6px;
  border-radius: 50%; background: var(--night-muted); opacity: .85;
}
.camp-night .tier-list.tier-list-paid li::before { background: var(--night-lamp); box-shadow: 0 0 8px rgba(245, 201, 122, .55); }
.camp-night .tier-list.tier-list-paid li { color: var(--night-muted-2); }
.camp-night .tier-unlock { border-left: 3px solid rgba(245, 201, 122, .55); }

/* 白天态 / 浅色主题：对比卡回暖纸玻璃，付费列用金棕描边（与 .night-panel 同族） */
html[data-theme="light"] .camp-night .tier-col,
.camp-night.rn-day .tier-col { border-color: rgba(185, 138, 60, .16); background: rgba(255, 253, 244, .55); }
html[data-theme="light"] .camp-night .tier-col.tier-paid,
.camp-night.rn-day .tier-col.tier-paid {
  border-color: rgba(185, 138, 60, .42);
  background: linear-gradient(180deg, rgba(185, 138, 60, .08), rgba(255, 253, 244, .4) 58%);
  box-shadow: 0 8px 20px -14px rgba(120, 90, 30, .35);
}
html[data-theme="light"] .camp-night .tier-name,
.camp-night.rn-day .tier-name { color: #3a2f1d; }
html[data-theme="light"] .camp-night .tier-col.tier-paid .tier-name,
.camp-night.rn-day .tier-col.tier-paid .tier-name { color: #B98A3C; }
html[data-theme="light"] .camp-night .tier-sub,
.camp-night.rn-day .tier-sub { color: #8a7a5c; }
html[data-theme="light"] .camp-night .tier-plus,
.camp-night.rn-day .tier-plus { color: #B98A3C; }
html[data-theme="light"] .camp-night .tier-list li,
.camp-night.rn-day .tier-list li { color: #4a4030; }
html[data-theme="light"] .camp-night .tier-list.tier-list-paid li,
.camp-night.rn-day .tier-list.tier-list-paid li { color: #5a4c33; }
html[data-theme="light"] .camp-night .tier-list li::before,
.camp-night.rn-day .tier-list li::before { background: #c0a46a; box-shadow: none; }
html[data-theme="light"] .camp-night .tier-list.tier-list-paid li::before,
.camp-night.rn-day .tier-list.tier-list-paid li::before { background: #B98A3C; box-shadow: none; }
html[data-theme="light"] .camp-night .tier-unlock,
.camp-night.rn-day .tier-unlock { border-left-color: rgba(185, 138, 60, .5); }

/* 结营卡付费标 */
.camp-night .report-paid-badge {
  display: inline-block; font-size: 12px; line-height: 1; padding: 4px 10px; border-radius: 999px;
  color: var(--night-lamp); border: 1px solid rgba(245, 201, 122, .4);
  background: rgba(245, 201, 122, .08); margin: 4px 0 10px;
}
html[data-theme="light"] .camp-night .report-paid-badge,
.camp-night.rn-day .report-paid-badge { color: #B98A3C; border-color: rgba(185, 138, 60, .4); background: rgba(185, 138, 60, .08); }

/* 桌面端并排 */
@media (min-width: 768px) {
  .camp-night .tier-grid { flex-direction: row; align-items: stretch; }
  .camp-night .tier-col { flex: 1 1 0; }
}

/* ═══════ 12. 房间页一体化重构（V3.7）：一个夜屋，不再一堆割裂卡片 ═══════ */
/* 主视觉：倒计时护进一盏灯的光晕里 */
.rn-lamp {
  position: relative; text-align: center;
  padding: 22px 0 14px;
}
.rn-lamp::before {
  content: ''; position: absolute; left: 50%; top: 48%;
  width: 92vw; max-width: 560px; height: 92vw; max-height: 560px;
  transform: translate(-50%, -50%);
  background: radial-gradient(circle, rgba(245, 201, 122, .14), transparent 60%);
  z-index: -1; pointer-events: none;
}
/* 夜况头：收成一条居中轻带 */
.room-night .rn-head { justify-content: center; text-align: center; }
.room-night .rn-head span:last-child { margin-left: 0; }
.room-night .rn-head > span + span { margin-left: 12px; padding-left: 12px; border-left: 1px solid var(--night-line); }
/* 屋外墙：空场也保持一整排暗窗，不再塌成一句孤行 */
.room-night .window:not(.lit):not(.warm) {
  box-shadow: inset 0 0 0 2px rgba(11, 15, 24, .5);
}
.room-night .rn-warm-line { text-align: center; margin-top: 6px; }
/* 灯下轻声：预测 + 小引 + 房东收进同一片光 */
.rn-whisper {
  background: var(--night-panel);
  border: 1px solid var(--night-line);
  border-radius: 14px;
  padding: 14px 16px 10px;
  margin: 16px 0 0;
}
.rn-whisper .predict-card {
  background: transparent; border: 0; margin: 0; padding: 0; max-width: none;
}
.rn-whisper .predict-head { display: flex; align-items: baseline; gap: 10px; }
.rn-whisper .predict-prob { margin-left: auto; }
.rn-whisper .host-line, .rn-whisper .rn-host { margin: 10px 2px 0; }
.rn-whisper .spirit-box { margin: 2px 0 0; padding-bottom: 2px; }
/* 昼夜天色的面板跟随 */
.room-night.rn-day .rn-lamp::before { background: radial-gradient(circle, rgba(240, 180, 78, .18), transparent 60%); }
.room-night.rn-day .rn-whisper { background: #FFFDF4; border-color: #E6DBC0; }
.room-night.rn-dusk .rn-whisper { background: rgba(22, 24, 44, .82); border-color: #3A3450; }
.room-night.rn-day .rn-head > span + span { border-left-color: #E2D7BC; }
/* 操作台：一整个连贯的底台，功能点不散落 */
.room-night .room-actions {
  margin: 22px 0 0;
  padding: 14px 16px 18px;
  border-radius: 16px;
  border: 1px solid var(--night-line);
  background: linear-gradient(180deg, rgba(33, 44, 66, .55), rgba(22, 29, 46, .35));
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .04);
}
.room-night.rn-day .room-actions {
  background: linear-gradient(180deg, rgba(255, 253, 244, .9), #FFFDF4);
  border-color: #E6DBC0;
}

/* ═══════ 13. 房间页昼夜双态 + 选座（V3.8）：沉浸/极简、九窗座位图、白天景纵深、文字提读性 ═══════ */

/* 文字可读性：房间页弱化色整体提亮一档（只作用于 .room-night 作用域，营页不受影响） */
.room-night { --night-muted: #A6B0C6; --night-muted-2: #C6CEE0; }

/* 顶栏：返回 + 沉浸/极简切换 */
.rn-topbar {
  display: flex; align-items: center; justify-content: space-between;
  margin: 2px 0 14px;
}
.view-toggle {
  border: 1px solid var(--night-line);
  background: rgba(33, 44, 66, .6);
  color: var(--night-muted-2);
  font-size: 13px; line-height: 1;
  padding: 8px 14px; border-radius: 999px; cursor: pointer;
  transition: color .18s, border-color .18s;
}
.view-toggle:hover { color: var(--night-lamp); border-color: var(--night-lamp); }
.room-night.rn-day .view-toggle { background: #FFFDF4; border-color: #E6DBC0; color: #6B5F4B; }
.room-night.rn-day .view-toggle:hover { color: #B9852E; border-color: #C9B98F; }

/* ─────────────────────────────────────────────────────────────
   场景：窗户是窗户（背景墙 3D 窗），桌椅是桌椅（房间中央 3D 桌椅）。
   桌子独立一行在上、九把椅子 3×3 围坐在下，桌椅真正分开不重叠。
   三套 3D 场景：教室 / 家里 / 图书馆（.rn-scene[data-scene] 切换）。
   纯 CSS 3D（perspective + preserve-3d + rotateX/rotateY），零依赖。
   ───────────────────────────────────────────────────────────── */
.rn-scene {
  position: relative;
  margin: 8px 2px 20px;
}

/* 场景切换：五枚胶囊按钮（可换行） */
.rn-scene-switch {
  display: flex; justify-content: center; flex-wrap: wrap; gap: 8px;
  margin: 0 0 10px;
}
.rn-scene-btn {
  padding: 7px 15px;
  font-size: 14px; font-weight: 600;
  color: var(--night-lamp);
  background: rgba(11, 15, 24, .55);
  border: 1px solid var(--night-line-2);
  border-radius: 999px;
  cursor: pointer;
  transition: background .18s ease, color .18s ease, border-color .18s ease;
}
.rn-scene-btn:hover { border-color: var(--night-lamp); }
.rn-scene-btn.is-on {
  background: var(--night-lamp);
  color: #1A1208;
  border-color: var(--night-lamp);
}
/* 浅色主题：场景按钮文字加深，保证可读 */
html[data-theme="light"] .rn-scene-btn {
  color: #8A6420;
  background: rgba(255, 255, 255, .7);
  border-color: #D8C89A;
}
html[data-theme="light"] .rn-scene-btn.is-on {
  background: #E9B45A;
  color: #3D3218;
  border-color: #E9B45A;
}
/* 付费专属「营火」按钮：会员金色高亮，非会员锁定态（半透明 + 锁标） */
.rn-scene-btn.rn-scene-premium {
  color: #FFE8B8;
  border-color: rgba(245, 201, 122, .55);
  background: linear-gradient(180deg, rgba(245, 201, 122, .18), rgba(192, 138, 46, .12));
}
.rn-scene-btn.rn-scene-premium.is-on {
  background: linear-gradient(180deg, #FFE8B8, #E5B45C);
  color: #1A1208;
  border-color: #FFE8B8;
  box-shadow: 0 0 12px rgba(245, 201, 122, .6);
}
.rn-scene-btn.rn-scene-premium.is-locked {
  color: var(--night-muted);
  border-color: var(--night-line-2);
  background: rgba(11, 15, 24, .35);
  opacity: .72;
}
.rn-scene-btn.rn-scene-premium.is-locked:hover { border-color: var(--night-lamp); opacity: 1; }
html[data-theme="light"] .rn-scene-btn.rn-scene-premium.is-locked {
  color: #9A8A6A;
  border-color: #D8C89A;
  background: rgba(255, 255, 255, .5);
}

/* 背景墙：真实场景背景图（AI 生成 3D 渲染），纯场景，不承载座位。
   每套场景一张真实室内环境图，下方留空给 CSS 3D 桌椅。 */
.rn-window-wall {
  position: relative;
  height: 190px;
  background-size: cover;
  background-position: center 30%;
  background-repeat: no-repeat;
  border: 1px solid var(--night-line);
  border-radius: 12px 12px 0 0;
  overflow: hidden;
}
/* 底部渐隐：让背景图自然过渡到桌椅区，避免生硬切边 */
.rn-window-wall::after {
  content: '';
  position: absolute; left: 0; right: 0; bottom: 0; height: 46px;
  background: linear-gradient(180deg, transparent, var(--night-panel));
  pointer-events: none;
}
/* 旧的三扇窗装饰已由真实背景图取代，保留占位以兼容旧 DOM（不再渲染） */
.rn-win { display: none; }

/* 房间中央：桌子独立一行在上，椅子 3×3 网格在下（桌椅真正分开） */
.rn-room {
  position: relative;
  background: var(--night-panel);
  border: 1px solid var(--night-line);
  border-radius: 0 0 14px 14px;
}
/* 单人单桌卡座：每个座位 = 一张单人桌 + 一盏台灯 + 一把椅子，3×3 网格 */
.rn-seats {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 20px 10px;
  padding: 14px 10px 24px;
}

/* ── 一起同行·同心房：一张同心圆桌，成员围坐（不切场景，专属同心房背景） ── */
.rn-room-round {
  position: relative;
  min-height: 300px;
  display: flex; align-items: center; justify-content: center;
  overflow: hidden;
}
/* 同心圆桌：桌面 + 桌腿，居中，成员椅子环绕 */
.rn-round-table {
  position: absolute; left: 50%; top: 50%;
  width: 150px; height: 150px;
  transform: translate(-50%, -50%);
  background: radial-gradient(circle at 50% 38%, #5A4630, #3A2E1C 62%, #241B10);
  border-radius: 50%;
  box-shadow: 0 0 0 3px rgba(245, 201, 122, .18), 0 14px 26px rgba(0, 0, 0, .5), inset 0 2px 6px rgba(255, 232, 184, .18);
}
.rn-round-table::after {
  content: '';
  position: absolute; left: 50%; top: 100%;
  width: 14px; height: 60px;
  transform: translateX(-50%);
  background: linear-gradient(180deg, #2A2012, #17110A);
  border-radius: 3px;
}
/* 圆桌中央的暖光（同心房的心） */
.rn-round-table i {
  position: absolute; left: 50%; top: 50%;
  width: 46px; height: 46px;
  transform: translate(-50%, -50%);
  background: radial-gradient(circle, rgba(255, 232, 184, .9), rgba(245, 201, 122, .35) 60%, transparent 75%);
  border-radius: 50%;
  filter: blur(1px);
  animation: rn-round-glow 4s ease-in-out infinite;
}
@keyframes rn-round-glow {
  0%, 100% { opacity: .7; transform: translate(-50%, -50%) scale(1); }
  50% { opacity: 1; transform: translate(-50%, -50%) scale(1.15); }
}
/* 同心座位：椅子环绕圆桌一圈（9 把，用绝对定位按角度分布） */
.rn-seats-round {
  position: absolute; inset: 0;
  display: block;
  padding: 0;
}
.rn-seats-round .seat {
  position: absolute; left: 50%; top: 50%;
  width: 64px; height: 64px;
  margin: 0;
  transform-origin: center;
}
.rn-seats-round .seat:nth-child(1) { transform: translate(-50%, -50%) rotate(0deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(2) { transform: translate(-50%, -50%) rotate(40deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(3) { transform: translate(-50%, -50%) rotate(80deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(4) { transform: translate(-50%, -50%) rotate(120deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(5) { transform: translate(-50%, -50%) rotate(160deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(6) { transform: translate(-50%, -50%) rotate(200deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(7) { transform: translate(-50%, -50%) rotate(240deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(8) { transform: translate(-50%, -50%) rotate(280deg) translateY(-118px); }
.rn-seats-round .seat:nth-child(9) { transform: translate(-50%, -50%) rotate(320deg) translateY(-118px); }
/* 同心房椅子：朝圆桌方向，靠背/坐垫/椅腿简化（无单人桌、无台灯） */
.rn-seats-round .seat-back {
  position: absolute; left: 50%; top: 0;
  width: 34px; height: 26px;
  transform: translateX(-50%);
  background: linear-gradient(180deg, #3A2E1C, #241B10);
  border-radius: 5px 5px 3px 3px;
  box-shadow: inset 0 2px 4px rgba(255, 255, 255, .06), 0 4px 8px rgba(0, 0, 0, .4);
}
.rn-seats-round .seat-cushion {
  position: absolute; left: 50%; top: 26px;
  width: 40px; height: 16px;
  transform: translateX(-50%);
  background: linear-gradient(180deg, #4A3A22, #2E2416);
  border-radius: 5px;
  box-shadow: 0 5px 8px rgba(0, 0, 0, .4);
}
.rn-seats-round .seat-leg {
  position: absolute; left: 50%; top: 42px;
  width: 5px; height: 14px;
  transform: translateX(-50%);
  background: linear-gradient(180deg, #2A2012, #17110A);
  border-radius: 2px;
}
/* 同心房有人坐：椅子亮起暖光 */
.rn-seats-round .seat.is-lit .seat-back,
.rn-seats-round .seat.is-lit .seat-cushion { background: linear-gradient(180deg, #E5B45C, #8A6420); box-shadow: 0 0 12px rgba(245, 201, 122, .5); }
.rn-seats-round .seat.is-mine .seat-back,
.rn-seats-round .seat.is-mine .seat-cushion { background: linear-gradient(180deg, #FFE8B8, #C08A2E); box-shadow: 0 0 18px rgba(245, 201, 122, .8); }
.rn-seats-round .seat.is-taken .seat-back,
.rn-seats-round .seat.is-taken .seat-cushion { background: linear-gradient(180deg, rgba(245, 201, 122, .5), rgba(138, 100, 32, .5)); }
.rn-seats-round .seat.is-warm .seat-back,
.rn-seats-round .seat.is-warm .seat-cushion { background: linear-gradient(180deg, rgba(245, 201, 122, .28), rgba(138, 100, 32, .28)); }
.rn-seats-round .seat-you { font-size: 11px; }
/* 同心房白天景：圆桌回暖木色 */
.room-night.rn-day .rn-round-table { background: radial-gradient(circle at 50% 38%, #E9D9B8, #D8C89A 62%, #C9B98F); box-shadow: 0 0 0 3px rgba(216, 154, 62, .25), 0 14px 26px rgba(92, 82, 67, .35); }
.room-night.rn-day .rn-round-table::after { background: linear-gradient(180deg, #A8946A, #8A7A58); }
.room-night.rn-day .rn-seats-round .seat-back { background: linear-gradient(180deg, #C9B98F, #A8946A); }
.room-night.rn-day .rn-seats-round .seat-cushion { background: linear-gradient(180deg, #E9D9B8, #D8C89A); }
.room-night.rn-day .rn-seats-round .seat-leg { background: linear-gradient(180deg, #A8946A, #8A7A58); }

/* 座位：单人单桌卡座（桌在上、椅在下，比例协调） */
.seat {
  position: relative;
  height: 150px;
  border: 0; padding: 0; margin: 0;
  background: transparent;
  cursor: pointer;
  transition: transform .18s ease;
}
.seat:hover:not(:disabled) { transform: translateY(-3px); }
.seat:disabled { cursor: default; }

/* 单人桌：桌面（略窄于卡座，居中），桌腿两条。纯 2D 渐变模拟立体，不做 rotateX 避免多层透视下穿透重叠 */
.seat-desk {
  position: absolute; left: 50%; top: 34px;
  width: 78%; height: 34px;
  transform: translateX(-50%);
  background: linear-gradient(180deg, #4A3A22, #2E2416);
  border-radius: 6px;
  box-shadow: 0 0 0 2px rgba(245, 201, 122, .10), 0 10px 16px rgba(0, 0, 0, .45);
}
.seat-desk::before,
.seat-desk::after {
  content: '';
  position: absolute; top: 100%; width: 6px; height: 26px;
  background: linear-gradient(180deg, #2A2012, #17110A);
  border-radius: 2px;
}
.seat-desk::before { left: 14%; }
.seat-desk::after { right: 14%; }

/* 台灯：立在每张单人桌上（灯座 + 灯杆 + 灯罩 + 光晕），不是头顶吊灯。
   默认隐藏——台灯是付费「独立小包间」专属，免费场只有普通桌椅。 */
.seat-lamp {
  position: absolute; left: 50%; top: 34px;
  width: 0; height: 0;
  transform: translateX(-50%);
  pointer-events: none;
  display: none;
}
.seat-lamp::before {
  content: '';
  position: absolute; left: -9px; top: -2px;
  width: 18px; height: 6px;
  background: linear-gradient(180deg, #E5B45C, #8A6420);
  border-radius: 50%;
  box-shadow: 0 2px 3px rgba(0, 0, 0, .4);
}
.seat-lamp::after {
  content: '';
  position: absolute; left: -2px; top: -22px;
  width: 4px; height: 20px;
  background: linear-gradient(180deg, #C08A2E, #8A6420);
  border-radius: 2px;
}
.seat-lamp i {
  position: absolute; left: -11px; top: -34px;
  width: 22px; height: 14px;
  background: linear-gradient(180deg, #F5C97A, #C08A2E);
  border-radius: 50% 50% 46% 46% / 60% 60% 36% 36%;
  box-shadow: 0 2px 5px rgba(0, 0, 0, .45), inset 0 -2px 4px rgba(138, 100, 32, .5);
}
/* 台灯光晕：从灯罩洒向桌面与椅子 */
.seat-lamp i::after {
  content: '';
  position: absolute; left: 50%; top: 100%;
  width: 60px; height: 46px;
  transform: translateX(-50%);
  background: radial-gradient(ellipse at 50% 0%, rgba(245, 201, 122, .30), transparent 70%);
  filter: blur(1px);
  pointer-events: none;
}

/* 靠背：竖起的板（略窄于坐垫，比例自然），纯 2D 渐变 */
.seat-back {
  position: absolute; left: 50%; top: 78px;
  width: 56%; height: 34px;
  transform: translateX(-50%);
  background: linear-gradient(180deg, #2E2416, #1B150C);
  border-radius: 6px 6px 3px 3px;
  box-shadow: inset 0 2px 4px rgba(255, 255, 255, .06), 0 4px 8px rgba(0, 0, 0, .4);
}
/* 坐垫：水平的板（比靠背宽，坐感真实），纯 2D 渐变 */
.seat-cushion {
  position: absolute; left: 50%; top: 110px;
  width: 74%; height: 22px;
  transform: translateX(-50%);
  background: linear-gradient(180deg, #3A2E1C, #241B10);
  border-radius: 6px;
  box-shadow: 0 6px 10px rgba(0, 0, 0, .45);
}
/* 椅腿：两条前腿，稳定落地 */
.seat-leg {
  position: absolute; left: 50%; top: 130px;
  width: 6px; height: 18px;
  background: linear-gradient(180deg, #2A2012, #17110A);
  border-radius: 2px;
  transform: translateX(-50%);
}
/* 有人坐：桌子、台灯、椅子一起亮起暖光（灯从桌面照到椅子） */
.seat.is-lit .seat-desk,
.seat.is-lit .seat-back,
.seat.is-lit .seat-cushion {
  background: linear-gradient(180deg, #E5B45C, #8A6420);
  box-shadow: 0 0 14px rgba(245, 201, 122, .55), inset 0 0 6px rgba(255, 232, 184, .4);
}
.seat.is-lit .seat-lamp i { background: linear-gradient(180deg, #FFE8B8, #E5B45C); box-shadow: 0 0 12px rgba(245, 201, 122, .8); }
.seat.is-lit { animation: rn-seat-breathe 4.4s ease-in-out infinite; }
@keyframes rn-seat-breathe {
  0%, 100% { filter: brightness(1); }
  50% { filter: brightness(1.18); }
}
/* 有人但离开片刻：半亮 */
.seat.is-taken .seat-desk,
.seat.is-taken .seat-back,
.seat.is-taken .seat-cushion {
  background: linear-gradient(180deg, rgba(245, 201, 122, .5), rgba(138, 100, 32, .5));
  box-shadow: 0 0 8px rgba(245, 201, 122, .25);
}
.seat.is-taken .seat-lamp i { background: linear-gradient(180deg, rgba(245, 201, 122, .6), rgba(138, 100, 32, .6)); }
/* 我坐的座位：最亮 + 「你」铭牌 */
.seat.is-mine .seat-desk,
.seat.is-mine .seat-back,
.seat.is-mine .seat-cushion {
  background: linear-gradient(180deg, #FFE8B8, #C08A2E);
  box-shadow: 0 0 22px rgba(245, 201, 122, .8), inset 0 0 8px rgba(255, 255, 255, .4);
}
.seat.is-mine .seat-lamp i { background: linear-gradient(180deg, #FFF3D0, #FFD98E); box-shadow: 0 0 16px rgba(245, 201, 122, .95); }
.seat.is-mine { outline: 1px solid rgba(245, 201, 122, .6); outline-offset: 3px; border-radius: 8px; }
/* 余温：最近离开，淡光 */
.seat.is-warm .seat-desk,
.seat.is-warm .seat-back,
.seat.is-warm .seat-cushion {
  background: linear-gradient(180deg, rgba(245, 201, 122, .28), rgba(138, 100, 32, .28));
}
.seat-you {
  position: absolute; left: 50%; top: 50%; z-index: 4;
  transform: translate(-50%, -50%);
  font-style: normal; font-size: 12px; font-weight: 700;
  color: #1A1208; pointer-events: none; white-space: nowrap;
  text-shadow: 0 1px 2px rgba(255, 232, 184, .6);
}

/* 我在钉：显式展示「我坐在第几把椅子 · 我在不在场」 */
.rn-my-status {
  margin: 12px 2px 0;
  text-align: center;
  font-size: 14px;
  font-weight: 600;
  color: var(--night-body);
}
.rn-my-presence {
  color: var(--night-lamp);
  font-weight: 700;
}
.rn-my-presence.is-gone { color: var(--night-muted); }

/* 公屏：房间成员发重要信息，大家都能看到 */
.rn-board {
  margin: 0 2px 20px;
  padding: 16px 14px;
}
.rn-board h2 {
  margin: 0 0 10px;
  font-size: 15px;
  font-weight: 700;
  color: var(--night-lamp);
}
.rn-board-list {
  list-style: none;
  margin: 0 0 12px;
  padding: 0;
  max-height: 220px;
  overflow-y: auto;
}
.rn-board-list:empty::after {
  content: '还没有人说话，发一条重要的吧';
  display: block;
  text-align: center;
  font-size: 12px;
  color: var(--muted);
  padding: 12px 0;
}
.rn-board-item {
  display: flex; align-items: baseline; gap: 8px;
  padding: 6px 0;
  border-bottom: 1px solid var(--night-line);
  font-size: 13px;
}
.rn-board-item:last-child { border-bottom: 0; }
.rn-board-name {
  flex: none;
  font-weight: 600;
  color: var(--night-lamp);
}
.rn-board-text {
  flex: 1;
  color: var(--night-body);
  word-break: break-word;
}
.rn-board-time {
  flex: none;
  font-size: 11px;
  color: var(--night-muted);
}
.rn-board-form {
  display: flex; gap: 8px;
}
.rn-board-input {
  flex: 1;
  padding: 9px 12px;
  font-size: 14px;
  color: var(--night-body);
  background: var(--night-line);
  border: 1px solid var(--night-line-2);
  border-radius: 8px;
  outline: none;
}
.rn-board-input::placeholder { color: var(--night-muted); }
.rn-board-input:focus { border-color: var(--night-lamp); }
.rn-board-send { flex: none; padding: 9px 16px; }

/* ── 五套真实 3D 场景差异化（本地背景图：单人专注空间环境，不含桌椅，桌椅由 CSS 3D 承载） ── */
/* 教室（默认）：黑板 + 窗 + 单人专注角落 */
.rn-scene[data-scene="classroom"] .rn-window-wall {
  background-image: url('../img/scenes/classroom-night.jpg');
}
/* 家里：卧室书桌角落 + 落地窗 */
.rn-scene[data-scene="home"] .rn-window-wall {
  background-image: url('../img/scenes/home-night.jpg');
}
/* 图书馆：书架墙 + 拱形窗 + 单人阅读角 */
.rn-scene[data-scene="library"] .rn-window-wall {
  background-image: url('../img/scenes/library-night.jpg');
}
/* 咖啡馆：木墙 + 夜窗 + 单人角落 */
.rn-scene[data-scene="cafe"] .rn-window-wall {
  background-image: url('../img/scenes/cafe-night.jpg');
}
/* 书房：书架 + 窗 + 单人书桌角落 */
.rn-scene[data-scene="study"] .rn-window-wall {
  background-image: url('../img/scenes/study-night.jpg');
}
/* 独立小包间（付费专属）：一人一桌一灯的私密卡座，三面围合，纯环境无桌椅 */
.rn-scene[data-scene="booth"] .rn-window-wall {
  background-image: url('../img/scenes/booth-night.jpg');
}
/* 包间专属：桌椅区整体更暗更私密，与普通开放座位拉开观感 */
.rn-scene[data-scene="booth"] .rn-room {
  background: linear-gradient(180deg, rgba(36, 30, 22, .96), rgba(18, 14, 8, .98));
  border-color: rgba(245, 201, 122, .32);
  box-shadow: inset 0 0 46px rgba(245, 201, 122, .10);
}
/* 包间专属：每个座位三面围合成独立小包间——左右侧墙 + 顶部横梁 + 台灯。
   侧墙贴座位内边（不伸出边界），避免相邻座位侧墙重叠；背板不额外加高，桌椅不叠墙。 */
.rn-scene[data-scene="booth"] .seat {
  border-radius: 10px;
}
/* 台灯只在付费包间显示（免费场普通桌椅无台灯） */
.rn-scene[data-scene="booth"] .seat .seat-lamp {
  display: block;
}
/* 左右侧墙：贴座位内边（left/right 0），不伸出边界，隔出包间两侧 */
.rn-scene[data-scene="booth"] .seat::before,
.rn-scene[data-scene="booth"] .seat::after {
  content: '';
  position: absolute; top: 0; bottom: 0;
  width: 5px;
  z-index: 0;
  background: linear-gradient(180deg, #4A3A22 0%, #2E2416 55%, #1B150C 100%);
  border-radius: 3px;
  box-shadow: 0 0 0 1px rgba(245, 201, 122, .22);
}
.rn-scene[data-scene="booth"] .seat::before { left: 0; }
.rn-scene[data-scene="booth"] .seat::after { right: 0; }
/* 顶部横梁：座位顶部一条暖木横板，连接左右侧墙，封住包间上方（不侵入桌椅区） */
.rn-scene[data-scene="booth"] .seat {
  box-shadow: inset 0 5px 0 #3A2E1C, inset 0 6px 0 rgba(245, 201, 122, .18);
}
/* 桌椅抬到侧墙前方，避免与侧墙重叠 */
.rn-scene[data-scene="booth"] .seat .seat-desk,
.rn-scene[data-scene="booth"] .seat .seat-cushion,
.rn-scene[data-scene="booth"] .seat .seat-leg,
.rn-scene[data-scene="booth"] .seat .seat-back {
  z-index: 1;
}
.rn-scene[data-scene="booth"] .seat .seat-lamp {
  z-index: 2;
}
.rn-scene[data-scene="booth"] .seat .seat-desk {
  box-shadow: 0 0 0 2px rgba(245, 201, 122, .18), 0 10px 16px rgba(0, 0, 0, .45);
}
.rn-scene[data-scene="booth"] .seat .seat-lamp::before {
  box-shadow: 0 0 0 1px rgba(245, 201, 122, .25), 0 2px 3px rgba(0, 0, 0, .4);
}
/* 一起同行·同心房：暖木同心圆桌氛围，纯环境无桌椅 */
.rn-scene[data-scene="together"] .rn-window-wall {
  background-image: url('../img/scenes/together-night.jpg');
}

/* 白天景：换用阳光版真实背景图（白天人更多，需要阳光，不是只加滤镜） */
.room-night.rn-day .rn-window-wall {
  border-color: #E6DBC0;
}
.room-night.rn-day .rn-scene[data-scene="classroom"] .rn-window-wall {
  background-image: url('../img/scenes/classroom-day.jpg');
}
.room-night.rn-day .rn-scene[data-scene="home"] .rn-window-wall {
  background-image: url('../img/scenes/home-day.jpg');
}
.room-night.rn-day .rn-scene[data-scene="library"] .rn-window-wall {
  background-image: url('../img/scenes/library-day.jpg');
}
.room-night.rn-day .rn-scene[data-scene="cafe"] .rn-window-wall {
  background-image: url('../img/scenes/cafe-day.jpg');
}
.room-night.rn-day .rn-scene[data-scene="study"] .rn-window-wall {
  background-image: url('../img/scenes/study-day.jpg');
}
.room-night.rn-day .rn-scene[data-scene="booth"] .rn-window-wall {
  background-image: url('../img/scenes/booth-day.jpg');
}
/* 白天景：包间墙换浅木色，柔和融入日光 */
.room-night.rn-day .rn-scene[data-scene="booth"] .seat::before,
.room-night.rn-day .rn-scene[data-scene="booth"] .seat::after {
  background: linear-gradient(180deg, #D8C89A 0%, #C9B98F 55%, #A8946A 100%);
  box-shadow: 0 0 0 1px rgba(216, 154, 62, .28), 0 0 10px rgba(216, 154, 62, .12);
}
.room-night.rn-day .rn-scene[data-scene="booth"] .seat .seat-back {
  background: linear-gradient(180deg, #D8C89A 0%, #C9B98F 70%, #A8946A 100%);
  box-shadow: inset 0 2px 6px rgba(255, 255, 255, .35), 0 0 0 1px rgba(216, 154, 62, .22), 0 6px 14px rgba(92, 82, 67, .35);
}
.room-night.rn-day .rn-scene[data-scene="together"] .rn-window-wall {
  background-image: url('../img/scenes/together-day.jpg');
}
.room-night.rn-day .rn-room { background: #F4E9CF; border-color: #E6DBC0; }
.room-night.rn-day .seat-desk { background: linear-gradient(180deg, #E9D9B8, #D8C89A); box-shadow: 0 0 0 2px rgba(216, 154, 62, .2), 0 10px 16px rgba(92, 82, 67, .3); }
.room-night.rn-day .seat-back { background: linear-gradient(180deg, #C9B98F, #A8946A); }
.room-night.rn-day .seat-cushion { background: linear-gradient(180deg, #E9D9B8, #D8C89A); }
.room-night.rn-day .seat-leg { background: linear-gradient(180deg, #A8946A, #8A7A58); }
.room-night.rn-day .seat.is-lit .seat-desk,
.room-night.rn-day .seat.is-lit .seat-back,
.room-night.rn-day .seat.is-lit .seat-cushion { background: linear-gradient(180deg, #F2C879, #C08A2E); }
.room-night.rn-day .seat.is-mine .seat-desk,
.room-night.rn-day .seat.is-mine .seat-back,
.room-night.rn-day .seat.is-mine .seat-cushion { background: linear-gradient(180deg, #FFD98E, #E9B45A); }
.room-night.rn-day .seat-you { color: #3D3218; text-shadow: 0 1px 2px rgba(255, 255, 255, .7); }
.room-night.rn-day .rn-scene-btn { color: #B9852E; border-color: #D8C89A; }
.room-night.rn-day .rn-scene-btn.is-on { background: #E9B45A; color: #3D3218; border-color: #E9B45A; }
.room-night.rn-day .rn-my-presence { color: #B9852E; }
/* 白天景：台灯回暖色，柔和融入日光 */
.room-night.rn-day .seat-lamp::before { background: linear-gradient(180deg, #E9B45A, #B9852E); }
.room-night.rn-day .seat-lamp::after { background: linear-gradient(180deg, #C08A2E, #8A6420); }
.room-night.rn-day .seat-lamp i { background: linear-gradient(180deg, #FFD98E, #C08A2E); }

/* 白天景纵深：日光从右上泼下，暖奶油天光更有「书房」的敞亮 */
.room-night.rn-day { background:
  radial-gradient(560px 300px at 88% 0%, rgba(240, 180, 78, .30), transparent 62%),
  linear-gradient(180deg, #FDF7E7 0%, #F6EFDC 58%, #EFE6CF 100%); }

/* 沉浸/极简切换：极简关掉天幕与场景，只留倒计时 + 名单 + 操作，坐得更专注 */
.room-night.view-minimal { padding-top: 26px; }
.room-night.view-minimal .rn-sky,
.room-night.view-minimal .rn-scene,
.room-night.view-minimal .rn-whisper { display: none; }

/* 桌面端：场景拉开，昼景不挤 */
@media (min-width: 768px) {
  .rn-window-wall { height: 240px; }
  .rn-seats { gap: 26px 24px; padding: 16px 40px 34px; }
  .seat { height: 170px; }
  .seat-desk { top: 40px; height: 40px; }
  .seat-lamp { top: 40px; }
  .seat-back { top: 92px; height: 40px; }
  .seat-cushion { top: 128px; height: 26px; }
  .seat-leg { top: 150px; height: 20px; }
  /* 包间桌面端：侧墙随座位一起加宽，仍贴内边不伸出 */
  .rn-scene[data-scene="booth"] .seat::before,
  .rn-scene[data-scene="booth"] .seat::after { width: 7px; }
  /* 同心房桌面端：圆桌更大、椅子环绕半径更大 */
  .rn-room-round { min-height: 360px; }
  .rn-round-table { width: 190px; height: 190px; }
  .rn-seats-round .seat { width: 72px; height: 72px; }
  .rn-seats-round .seat:nth-child(1) { transform: translate(-50%, -50%) rotate(0deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(2) { transform: translate(-50%, -50%) rotate(40deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(3) { transform: translate(-50%, -50%) rotate(80deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(4) { transform: translate(-50%, -50%) rotate(120deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(5) { transform: translate(-50%, -50%) rotate(160deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(6) { transform: translate(-50%, -50%) rotate(200deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(7) { transform: translate(-50%, -50%) rotate(240deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(8) { transform: translate(-50%, -50%) rotate(280deg) translateY(-150px); }
  .rn-seats-round .seat:nth-child(9) { transform: translate(-50%, -50%) rotate(320deg) translateY(-150px); }
}
