/* 隐藏页独立皮肤：只在author路由覆盖，离开后原页面恢复。 */
body[data-gallery-mode=author]{background:#050506!important;color:#e0dfdf!important;overflow:hidden;padding:0!important}body[data-gallery-mode=author] :is(.site-header,.site-footer,#guide,.ginkgo-canopy,.ambient,#cursor-glow,#feedback-dock,#guide-chat){display:none!important}body[data-gallery-mode=author] #main{margin:0;padding:0;max-width:none;min-height:0}body[data-gallery-mode=author] .skip-link:not(:focus){transform:translateY(-200vh)}
.dark-cinema{position:fixed;inset:0;z-index:40;background:#050506;overflow:auto;color:#ddd;font-family:"Noto Serif SC","Songti SC","SimSun",serif;isolation:isolate;animation:cinema-arrival .6s ease both}.cinema-canvas{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:-2}.cinema-vignette{position:fixed;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 44%,transparent 35%,#0008 100%);z-index:-1}.dark-cinema button,.dark-cinema a,.dark-cinema textarea{font:inherit;color:inherit}.dark-cinema button,.dark-cinema a{background:none;border:0;cursor:pointer;transition:color .2s}.dark-cinema button:hover,.dark-cinema a:hover{color:#fff}.dark-cinema :focus-visible{outline:1px solid #b4b4bb;outline-offset:7px}.dark-cinema button:disabled{opacity:.4;cursor:default}
.cinema-nav{position:absolute;inset:28px 36px auto;display:flex;align-items:center;justify-content:space-between;font-size:11px;letter-spacing:.1em;color:#88888e;z-index:3}.cinema-nav span{font:9px monospace;letter-spacing:.22em;color:#5f5f65}.cinema-nav button{padding:8px}.cinema-chapter{position:absolute;top:18%;left:7%;display:flex;gap:18px;font-size:11px;letter-spacing:.2em;color:#73737b}.cinema-number{font-family:monospace}.cinema-caption{position:absolute;top:58%;left:12%;right:12%;text-align:center;pointer-events:none;transition:opacity .4s}.cinema-note{font-size:13px;color:#8b8b92;letter-spacing:.16em;line-height:2}.dark-cinema[data-phase=breaking] .cinema-caption{opacity:0}.cinema-interaction{position:absolute;top:73%;left:0;width:100%;text-align:center}.cinema-hold{position:relative;padding:15px 30px!important;font-size:13px!important;letter-spacing:.2em;touch-action:none;user-select:none}.cinema-hold:after{content:'';position:absolute;left:30px;right:30px;bottom:0;height:1px;background:#44444b}.cinema-hold i{position:absolute;left:30px;right:30px;bottom:0;height:1px;background:#d2d2d6;transform:scaleX(var(--charge,0));transform-origin:left;z-index:1}.cinema-interaction p{font-size:10px;color:#65656d;letter-spacing:.12em;margin:17px 0}.cinema-next{font-size:11px!important;color:#909097!important;padding:8px}.cinema-footer{position:absolute;bottom:28px;left:36px;right:36px;display:flex;align-items:center;justify-content:space-between;font-size:10px;color:#777780;z-index:3}.cinema-footer button{padding:8px}.cinema-dots{display:flex;gap:13px}.cinema-dots i{width:4px;height:4px;background:#38383f;border-radius:50%}.cinema-dots i.active{background:#c6c6cd}.cinema-letter{position:absolute;top:68%;left:50%;transform:translateX(-50%);width:min(500px,80%);font-size:12px}.cinema-letter label{display:block;color:#a0a0a8;font-size:11px;letter-spacing:.13em}.cinema-letter textarea{display:block;width:100%;resize:vertical;min-height:65px;max-height:110px;background:#0b0b0e99;border:0;border-bottom:1px solid #33333b;padding:12px 0;outline:none;font-size:13px;line-height:1.7}.cinema-letter textarea::placeholder{color:#55555f}.cinema-letter>div{display:flex;gap:12px;justify-content:space-between;align-items:center;margin-top:12px}.cinema-message-status{color:#686872;font-size:10px}.cinema-letter button{white-space:nowrap;padding:8px}.cinema-sr{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip-path:inset(50%)!important;white-space:nowrap!important}
@keyframes cinema-arrival{from{opacity:0}to{opacity:1}}
/* 留言标签与输入区留出间隔；聚焦线画在框内，避免继承按钮外扩7px的焦点线压到标签。 */
.cinema-letter label{margin-bottom:12px}
.cinema-letter textarea{box-sizing:border-box;padding-inline:10px}
.dark-cinema .cinema-letter textarea:focus-visible{outline:1px solid #9f99a4;outline-offset:-1px}
/* 确认层只照亮一小片阅读区，原生dialog负责键盘焦点约束和Esc取消。 */
.cinema-exit-dialog{box-sizing:border-box;width:min(500px,88vw);margin:auto;padding:44px 38px 32px;background:radial-gradient(ellipse at 45% 25%,#29252bdd,#0b0b0ef5 80%);border:1px solid #9e89952b;color:#d7cebc;box-shadow:0 0 100px #77708012;font-family:inherit;animation:cinema-question-in .45s ease both}
.cinema-exit-dialog::backdrop{background:#030305b8;backdrop-filter:blur(3px)}
.cinema-exit-dialog .cinema-exit-kicker{font:9px monospace;letter-spacing:.22em;color:#887d84;margin:0 0 24px}
.cinema-exit-dialog h2{font:400 clamp(23px,3vw,32px)/1.8 "Noto Serif SC","SimSun",serif;letter-spacing:.07em;margin:0 0 20px}
.cinema-exit-dialog #cinema-exit-note{font-size:12px;line-height:1.9;color:#928791;margin:0 0 30px}
.cinema-exit-dialog>div{display:flex;justify-content:space-between;gap:22px;align-items:center}
.cinema-exit-dialog button{font-size:12px;padding:10px 0!important;letter-spacing:.08em}
.cinema-exit-dialog .cinema-exit-stay{color:#e2d8c6;border-bottom:1px solid #948575}
.cinema-exit-dialog .cinema-exit-confirm{color:#938892}
.dark-cinema[data-leaving=true] :is(.cinema-nav,.cinema-progress,.cinema-chapter,.cinema-caption,.cinema-interaction,.cinema-letter,.cinema-footer,.cinema-opening-skip){opacity:var(--exit-ui,1)}
/* 遮罩独立于两页DOM，地图挂载时仍然完全黑；金色星点位于入口真实坐标。 */
.cinema-exit-transition{position:fixed;inset:0;z-index:2100;isolation:isolate}
.cinema-exit-transition[hidden]{display:none}
.cinema-exit-veil{position:absolute;inset:0;background:#050506}
.cinema-exit-star{position:absolute;left:var(--exit-x,60%);top:var(--exit-y,50%);width:5px;height:5px;border-radius:50%;background:#f5dfa4;box-shadow:0 0 10px 2px #e4c3749c,0 0 44px 12px #e0b55c30;pointer-events:none}
.cinema-exit-star:before,.cinema-exit-star:after{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:42px;height:1px;background:linear-gradient(90deg,transparent,#e5c57e,transparent)}
.cinema-exit-star:after{width:1px;height:42px;background:linear-gradient(transparent,#e5c57e,transparent)}
.cinema-exit-transition>button{position:absolute;right:30px;bottom:25px;background:#08080bd9;border:1px solid #77717c40;color:#a39aab;padding:10px 16px;font:11px "Noto Serif SC",serif;cursor:pointer}
.cinema-exit-transition>button:focus-visible{outline:1px solid #d0bb92;outline-offset:4px}
body[data-cinema-return=true] .gallery-map{opacity:var(--cinema-map-reveal,0)}
@keyframes cinema-question-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
.dark-cinema[data-film-motion=false] .cinema-exit-dialog{animation:none}
@media(prefers-reduced-motion:reduce){.cinema-exit-dialog{animation:none}}
@media(max-width:700px){.cinema-exit-dialog{padding:32px 25px 25px}.cinema-exit-dialog>div{gap:16px}.cinema-exit-dialog button{font-size:11px}.cinema-exit-transition>button{right:18px;bottom:18px}}
/* 开场先保留主句和细颗粒，其它元素依独立时间线出现，透明阶段不可交互。 */
.dark-cinema{color:#d7cebc;animation:none}.cinema-opening-element{opacity:var(--opening-opacity,1)}.dark-cinema:not([data-opening-phase=ready]) .cinema-opening-element{pointer-events:none}.dark-cinema .cinema-opening-skip[hidden]{display:none}.cinema-film-patina{opacity:var(--film-opacity,1)}.cinema-progress,.cinema-interaction,.cinema-caption,.cinema-letter,.cinema-chapter{z-index:2}.cinema-interaction{top:70%}
/* 白条直接跟随状态机：提前推进的快速追赶与20秒慢速播放都由同一时间线控制。 */
.cinema-progress{position:absolute;top:16%;left:50%;transform:translateX(-50%);width:min(44vw,576px);height:18px;background:#ffffff0b;overflow:hidden;pointer-events:none;z-index:2}.cinema-progress-fill{width:100%;height:100%;background:#fff;transform:scaleX(var(--story-progress,0));transform-origin:left center}
@media(max-width:700px){.cinema-progress{top:24%;width:68vw;height:14px}}
@media(max-height:620px){.cinema-progress{top:22%;height:14px}}
@media(max-width:700px){.cinema-nav{inset:18px 17px auto;font-size:10px}.cinema-nav span{display:none}.cinema-chapter{top:17%;left:8%;font-size:10px}.cinema-caption{top:58%;left:8%;right:8%}.cinema-note{font-size:11px;letter-spacing:.05em}.cinema-interaction{top:72%}.cinema-footer{bottom:16px;left:17px;right:17px}.cinema-letter{top:68%;width:82%}.cinema-letter textarea{min-height:55px;max-height:85px}.cinema-message-status{font-size:9px}.cinema-letter>div{gap:6px}}
@media(max-height:620px){.cinema-chapter{top:14%}.cinema-interaction{top:66%}.cinema-caption{top:53%}.cinema-footer{bottom:10px}.cinema-letter{top:62%}.cinema-letter textarea{min-height:40px;height:48px}.cinema-note{margin:0}}
@media(prefers-reduced-motion:reduce){.dark-cinema{animation:none}.dark-cinema *{transition:none!important}}.reduce-motion .dark-cinema{animation:none}
@media(max-width:700px){.cinema-interaction{top:69%}}
@media(max-height:620px){.cinema-interaction{top:61%}}
/* 整段文案由Canvas居中显示，正文底边由渲染器测量；控件顺序向下排开。
   Canvas与控件一起滚动，防止窄屏浏览留言时固定的大字遮住输入区。 */
.dark-cinema .cinema-canvas { position: absolute; height: max(720px,100%); }
.dark-cinema .cinema-reading { position: absolute; top: var(--cinema-copy-bottom,58%); left: 12%; right: 12%; z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 24px; padding-bottom: 28px; }
.dark-cinema .cinema-reading .cinema-caption { position: relative; inset: auto; width: 100%; }
.dark-cinema .cinema-reading .cinema-note { margin: 0; }
.dark-cinema .cinema-reading .cinema-interaction { position: relative; inset: auto; width: 100%; }
.dark-cinema .cinema-reading .cinema-letter { position: relative; inset: auto; width: min(500px,100%); transform: none; }
/* 给窄屏的完整邀请提示留出三行空间，避免还没输入就出现滚动条。 */
.dark-cinema .cinema-reading .cinema-letter textarea { height: 110px; min-height: 110px; }
.dark-cinema .cinema-reading .cinema-footer { position: relative; inset: auto; width: calc(100vw - 72px); margin-top: 8px; }
@media(max-width:700px) {
  .dark-cinema .cinema-reading { left: 8%; right: 8%; }
  .dark-cinema .cinema-reading .cinema-footer { width: calc(100vw - 24px); }
}
/* 读屏副本不参与视觉布局；同一段正文只显示一次。 */
.dark-cinema .cinema-reading .cinema-caption { position: absolute; }

/* 05 · 结尾原位收信：留在原留言区域，暖灰纸线回应，角色继续隐藏。 */
.dark-cinema .cinema-letter { min-height: 188px; }
.dark-cinema .cinema-letter [hidden] { display: none !important; }
.dark-cinema .cinema-letter-editor { margin: 0; }
.dark-cinema .cinema-letter-actions { display: flex; gap: 12px; align-items: center; justify-content: space-between; margin-top: 12px; }
.dark-cinema .cinema-letter-actions .cinema-message-status { flex: 1; min-width: 0; }
.dark-cinema .cinema-letter[data-letter-state=error] .cinema-message-status { color: #e2bca4; }
.dark-cinema .cinema-letter[data-letter-state=sending] textarea { opacity: .72; }
.dark-cinema .cinema-letter-actions button { flex-shrink: 0; }
.dark-cinema .cinema-letter-receipt { box-sizing: border-box; padding: 20px 16px 18px; text-align: center; border-top: 1px solid #c6b28c55; border-bottom: 1px solid #c6b28c30; background: linear-gradient(110deg,#14120fe8,#191610f2,#12110ee8); }
.dark-cinema .cinema-letter-seal { display: block; width: 38px; height: 28px; margin: 0 auto 12px; stroke: #c6b28c; stroke-width: 1.1; fill: none; stroke-linecap: round; stroke-linejoin: round; }
.dark-cinema .cinema-letter-check { stroke: #eddfc2; stroke-width: 1.7; }
.dark-cinema .cinema-letter-receipt h2 { margin: 0; font: 400 clamp(19px,2vw,23px)/1.7 "Noto Serif SC","Songti SC","SimSun",serif; letter-spacing: .04em; color: #eee0c6; }
.dark-cinema .cinema-letter-receipt h2:focus { outline: none; }
.dark-cinema .cinema-letter-receipt p { margin: 7px 0 16px; color: #c3b6a0; font-size: 14px; line-height: 1.9; }
.dark-cinema .cinema-letter-again { display: inline-flex; align-items: center; justify-content: center; gap: 18px; min-height: 44px; margin: 0; padding: 8px 17px; border: 1px solid #a594745e; color: #d9c7a4; font-size: 14px; }
.dark-cinema .cinema-letter-again:hover { border-color: #cfb985; background: #b29a6710; }
/* 中等高度保留字号，收紧留白；800px以下沿用全局可滚动阅读舞台。 */
@media(max-height:850px) {
  .dark-cinema .cinema-letter-receipt { padding-block: 12px; }
  .dark-cinema .cinema-letter-seal { height: 24px; margin-bottom: 8px; }
  .dark-cinema .cinema-letter-receipt p { margin-block: 6px 12px; }
  .dark-cinema .cinema-letter textarea { height: 74px; min-height: 55px; }
}
@media(max-width:700px) {
  .dark-cinema .cinema-letter-actions { flex-wrap: wrap; gap: 8px; }
  .dark-cinema .cinema-letter-actions .cinema-message-status { flex-basis: 100%; }
  .dark-cinema .cinema-letter-actions button { margin-left: auto; }
  .dark-cinema .cinema-letter-receipt { padding-inline: 12px; }
  .dark-cinema .cinema-letter-again { margin-inline: 0; }
}
