@oh-story/dsh 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/README.md +17 -11
  2. package/lib/client.js +85 -35
  3. package/lib/client.js.map +3 -3
  4. package/lib/drama/manifest.json +41 -36
  5. package/lib/drama/skills/short-drama/scripts/creator_markdown_check.py +340 -13
  6. package/lib/drama/skills/short-drama-assets/references/voice-direction.md +4 -2
  7. package/lib/drama/skills/short-drama-edit/SKILL.md +32 -12
  8. package/lib/drama/skills/short-drama-edit/references/still-cuts.md +90 -0
  9. package/lib/drama/skills/short-drama-edit/scripts/edit_tool.py +1035 -145
  10. package/lib/drama/skills/short-drama-edit/scripts/selftest.py +48 -0
  11. package/lib/drama/skills/short-drama-produce/SKILL.md +6 -1
  12. package/lib/drama/skills/short-drama-produce/references/adapter-contract.md +12 -0
  13. package/lib/drama/skills/short-drama-produce/scripts/production_tool.py +138 -9
  14. package/lib/drama/skills/short-drama-produce/scripts/provider_adapters.py +6 -0
  15. package/lib/drama/skills/short-drama-storyboard/SKILL.md +2 -0
  16. package/lib/drama/skills/short-drama-storyboard/references/production-shot-grammar.md +3 -1
  17. package/lib/drama/skills/short-drama-video-prompts/SKILL.md +7 -0
  18. package/lib/drama/skills/short-drama-video-prompts/references/performance-action-timing.md +14 -0
  19. package/lib/drama/skills/short-drama-video-prompts/references/seedance-2.5.md +19 -6
  20. package/lib/drama/skills/short-drama-video-prompts/references/stage-contract.md +1 -0
  21. package/lib/drama/skills/short-drama-video-prompts/references/target-model-profile.md +5 -0
  22. package/lib/drama/skills/short-drama-video-prompts/references/wan-3.0.md +4 -1
  23. package/lib/index.js +16 -7
  24. package/lib/index.js.map +2 -2
  25. package/lib/novel-to-game/README.md +98 -44
  26. package/lib/novel-to-game/README_ZH.md +100 -46
  27. package/lib/novel-to-game/VERSION +1 -1
  28. package/lib/novel-to-game/examples/jin-ping-mei/build/BUILD_BRIEF.md +27 -202
  29. package/lib/novel-to-game/examples/jin-ping-mei/build/app/RUN.md +23 -115
  30. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/chamber.webp +0 -0
  31. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/court_night.webp +0 -0
  32. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/court_rain.webp +0 -0
  33. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/garden.webp +0 -0
  34. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/hall.webp +0 -0
  35. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/kitchen.webp +0 -0
  36. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/street.webp +0 -0
  37. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/street_dawn.webp +0 -0
  38. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/bg/temple.webp +0 -0
  39. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/yue/moon.webp +0 -0
  40. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/angry.webp +0 -0
  41. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/blush.webp +0 -0
  42. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/neutral.webp +0 -0
  43. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/sad.webp +0 -0
  44. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/smile.webp +0 -0
  45. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/meng/surprised.webp +0 -0
  46. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/angry.webp +0 -0
  47. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/blush.webp +0 -0
  48. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/neutral.webp +0 -0
  49. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/sad.webp +0 -0
  50. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/smile.webp +0 -0
  51. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pan/surprised.webp +0 -0
  52. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/angry.webp +0 -0
  53. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/blush.webp +0 -0
  54. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/neutral.webp +0 -0
  55. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/sad.webp +0 -0
  56. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/smile.webp +0 -0
  57. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/pinger/surprised.webp +0 -0
  58. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/angry.webp +0 -0
  59. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/blush.webp +0 -0
  60. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/neutral.webp +0 -0
  61. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/sad.webp +0 -0
  62. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/smile.webp +0 -0
  63. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/xuee/surprised.webp +0 -0
  64. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/angry.webp +0 -0
  65. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/blush.webp +0 -0
  66. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/neutral.webp +0 -0
  67. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/sad.webp +0 -0
  68. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/smile.webp +0 -0
  69. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/sprite/yue/surprised.webp +0 -0
  70. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/style.css +326 -2503
  71. package/lib/novel-to-game/examples/jin-ping-mei/build/app/index.html +71 -4
  72. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/adv.js +221 -0
  73. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/audio.js +113 -257
  74. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/main.js +511 -3026
  75. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/menus.js +277 -0
  76. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/petals.js +67 -0
  77. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/stage.js +180 -0
  78. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/store.js +70 -0
  79. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common.js +198 -0
  80. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common2.js +204 -0
  81. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/common3.js +198 -0
  82. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/dates.js +186 -0
  83. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/index.js +122 -0
  84. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/meng.js +190 -0
  85. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/pan.js +212 -0
  86. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/pinger.js +198 -0
  87. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/xuee.js +199 -0
  88. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/story/yue.js +214 -0
  89. package/lib/novel-to-game/examples/jin-ping-mei/build/app/package.json +2 -2
  90. package/lib/novel-to-game/examples/jin-ping-mei/build/art/generated-art.json +182 -45
  91. package/lib/novel-to-game/examples/jin-ping-mei/qa/README.md +7 -17
  92. package/lib/novel-to-game/examples/jin-ping-mei/qa/verification.json +9 -9
  93. package/lib/novel-to-game/manifest.json +303 -78
  94. package/lib/novel-to-game/skills/game-art-direction/references/art-direction-method.md +7 -2
  95. package/lib/novel-to-game/skills/game-concept/references/concept-method.md +2 -0
  96. package/lib/novel-to-game/skills/game-world-design/references/narrative-design-method.md +2 -0
  97. package/lib/novel-to-game/skills/game-world-design/references/world-design-method.md +9 -0
  98. package/lib/types/client/drama-production-view.d.ts +11 -0
  99. package/lib/types/client/drama-production-view.d.ts.map +1 -1
  100. package/lib/types/client/file-activity.d.ts +1 -1
  101. package/lib/types/client/file-activity.d.ts.map +1 -1
  102. package/lib/types/client/production-prompts.d.ts +7 -1
  103. package/lib/types/client/production-prompts.d.ts.map +1 -1
  104. package/lib/types/client/production-runtime.d.ts +7 -2
  105. package/lib/types/client/production-runtime.d.ts.map +1 -1
  106. package/lib/types/drama-adapters.d.ts.map +1 -1
  107. package/lib/types/skill-provider.d.ts.map +1 -1
  108. package/lib/types/video-project.d.ts.map +1 -1
  109. package/lib/video-recap/CHANGELOG.md +108 -1
  110. package/lib/video-recap/README.en.md +18 -14
  111. package/lib/video-recap/README.md +18 -14
  112. package/lib/video-recap/manifest.json +297 -321
  113. package/lib/video-recap/skills/video-assemble/SKILL.md +18 -16
  114. package/lib/video-recap/skills/video-assemble/references/explicit-audio-mix.md +3 -1
  115. package/lib/video-recap/skills/video-assemble/references/jianying/SOURCE.md +5 -5
  116. package/lib/video-recap/skills/video-assemble/references/packaging.md +4 -4
  117. package/lib/video-recap/skills/video-assemble/references/subtitle-track.md +10 -10
  118. package/lib/video-recap/skills/video-assemble/scripts/adoption/audio_mix_binding.py +13 -2
  119. package/lib/video-recap/skills/video-assemble/scripts/adoption/av_clock.py +109 -0
  120. package/lib/video-recap/skills/video-assemble/scripts/adoption/strict_publish.py +4 -1
  121. package/lib/video-recap/skills/video-assemble/scripts/artifacts.py +2 -9
  122. package/lib/video-recap/skills/video-assemble/scripts/assemble.py +188 -51
  123. package/lib/video-recap/skills/video-assemble/scripts/assemble_constants.py +0 -1
  124. package/lib/video-recap/skills/video-assemble/scripts/assembly_contract.py +32 -75
  125. package/lib/video-recap/skills/video-assemble/scripts/assembly_settings.py +8 -15
  126. package/lib/video-recap/skills/video-assemble/scripts/audio_mix.py +202 -161
  127. package/lib/video-recap/skills/video-assemble/scripts/codec_peak.py +112 -0
  128. package/lib/video-recap/skills/video-assemble/scripts/export_jianying.py +10 -101
  129. package/lib/video-recap/skills/video-assemble/scripts/jianying/builders.py +44 -475
  130. package/lib/video-recap/skills/video-assemble/scripts/jianying/model.py +1 -22
  131. package/lib/video-recap/skills/video-assemble/scripts/jianying/templates.py +0 -3
  132. package/lib/video-recap/skills/video-assemble/scripts/jianying/timeline_contract.py +36 -103
  133. package/lib/video-recap/skills/video-assemble/scripts/jianying/tracks.py +0 -8
  134. package/lib/video-recap/skills/video-assemble/scripts/jianying/writer.py +28 -203
  135. package/lib/video-recap/skills/video-assemble/scripts/lib.py +20 -34
  136. package/lib/video-recap/skills/video-assemble/scripts/loudness.py +332 -0
  137. package/lib/video-recap/skills/video-assemble/scripts/media.py +158 -38
  138. package/lib/video-recap/skills/video-assemble/scripts/narration_audio.py +30 -16
  139. package/lib/video-recap/skills/video-assemble/scripts/render_preflight.py +49 -8
  140. package/lib/video-recap/skills/video-assemble/scripts/source_subtitles.py +17 -6
  141. package/lib/video-recap/skills/video-assemble/scripts/subtitles/core.py +24 -2
  142. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track.py +2 -5
  143. package/lib/video-recap/skills/video-assemble/scripts/subtitles/track_binding.py +2 -9
  144. package/lib/video-recap/skills/video-assemble/scripts/timeline.py +12 -34
  145. package/lib/video-recap/skills/video-assemble/scripts/timeline_emit.py +3 -4
  146. package/lib/video-recap/skills/video-assemble/scripts/visual_render.py +28 -2
  147. package/lib/video-recap/skills/video-cut/SKILL.md +37 -11
  148. package/lib/video-recap/skills/video-cut/references/shot-review.md +1 -1
  149. package/lib/video-recap/skills/video-cut/scripts/cut.py +2 -34
  150. package/lib/video-recap/skills/video-cut/scripts/cut_cli.py +96 -124
  151. package/lib/video-recap/skills/video-cut/scripts/cut_contract.py +97 -182
  152. package/lib/video-recap/skills/video-cut/scripts/cut_render.py +177 -166
  153. package/lib/video-recap/skills/video-cut/scripts/frame_grid.py +249 -0
  154. package/lib/video-recap/skills/video-cut/scripts/lib.py +0 -3
  155. package/lib/video-recap/skills/video-cut/scripts/media_geometry.py +173 -7
  156. package/lib/video-recap/skills/video-cut/scripts/sentence_boundaries.py +234 -151
  157. package/lib/video-recap/skills/video-cut/scripts/sentence_gate.py +189 -0
  158. package/lib/video-recap/skills/video-cut/scripts/shot_review.py +2 -6
  159. package/lib/video-recap/skills/video-recap/SKILL.md +24 -27
  160. package/lib/video-recap/skills/video-recap/references/audio-routing.md +8 -6
  161. package/lib/video-recap/skills/video-recap/references/config-playbook.md +8 -11
  162. package/lib/video-recap/skills/video-recap/references/data-schema.md +131 -74
  163. package/lib/video-recap/skills/video-recap/references/resource-library.md +17 -1
  164. package/lib/video-recap/skills/video-recap/scripts/doctor.py +51 -268
  165. package/lib/video-recap/skills/video-recap/scripts/final_qc.py +89 -254
  166. package/lib/video-recap/skills/video-recap/scripts/lib.py +81 -70
  167. package/lib/video-recap/skills/video-recap/scripts/library.py +40 -4
  168. package/lib/video-recap/skills/video-recap/scripts/materials.py +13 -80
  169. package/lib/video-recap/skills/video-recap/scripts/recap_cli.py +49 -17
  170. package/lib/video-recap/skills/video-recap/scripts/recap_inspect.py +1 -3
  171. package/lib/video-recap/skills/video-recap/scripts/recap_runner.py +86 -116
  172. package/lib/video-recap/skills/video-recap/scripts/recap_runtime.py +87 -23
  173. package/lib/video-recap/skills/video-recap/scripts/recap_source.py +0 -39
  174. package/lib/video-recap/skills/video-recap/scripts/recap_stage_qc.py +37 -135
  175. package/lib/video-recap/skills/video-recap/scripts/recap_timeline.py +118 -127
  176. package/lib/video-recap/skills/video-recap/scripts/resources/__init__.py +4 -0
  177. package/lib/video-recap/skills/video-recap/scripts/{resource_lock.py → resources/lock.py} +1 -1
  178. package/lib/video-recap/skills/video-recap/scripts/{project_binding.py → resources/project_binding.py} +78 -17
  179. package/lib/video-recap/skills/video-reference/SKILL.md +108 -0
  180. package/lib/video-recap/skills/video-reference/references/reference-schema.md +139 -0
  181. package/lib/video-recap/skills/video-reference/scripts/lib.py +85 -0
  182. package/lib/video-recap/skills/video-reference/scripts/reference.py +96 -0
  183. package/lib/video-recap/skills/video-reference/scripts/reference_check.py +553 -0
  184. package/lib/video-recap/skills/video-reference/scripts/reference_frames.py +122 -0
  185. package/lib/video-recap/skills/video-reference/scripts/reference_measure.py +253 -0
  186. package/lib/video-recap/skills/video-reference/scripts/reference_profile.py +271 -0
  187. package/lib/video-recap/skills/video-script/SKILL.md +9 -7
  188. package/lib/video-recap/skills/video-script/scripts/agent_text.py +18 -267
  189. package/lib/video-recap/skills/video-script/scripts/deslop_qc.py +12 -30
  190. package/lib/video-recap/skills/video-script/scripts/entry_suggestion.py +125 -0
  191. package/lib/video-recap/skills/video-script/scripts/evidence_bundle.py +2 -26
  192. package/lib/video-recap/skills/video-script/scripts/lib.py +5 -15
  193. package/lib/video-recap/skills/video-script/scripts/lint_summary.py +184 -0
  194. package/lib/video-recap/skills/video-script/scripts/narration_lint.py +120 -100
  195. package/lib/video-recap/skills/video-script/scripts/review.py +3 -34
  196. package/lib/video-recap/skills/video-script/scripts/review_grounding.py +20 -46
  197. package/lib/video-recap/skills/video-script/scripts/review_response.py +120 -258
  198. package/lib/video-recap/skills/video-script/scripts/review_runner.py +2 -10
  199. package/lib/video-recap/skills/video-script/scripts/speech_ownership.py +89 -5
  200. package/lib/video-recap/skills/video-script/scripts/validate.py +26 -34
  201. package/lib/video-recap/skills/video-understanding/SKILL.md +29 -4
  202. package/lib/video-recap/skills/video-understanding/references/data-schema.md +5 -22
  203. package/lib/video-recap/skills/video-understanding/scripts/agent_text.py +24 -121
  204. package/lib/video-recap/skills/video-understanding/scripts/asr.py +11 -5
  205. package/lib/video-recap/skills/video-understanding/scripts/asr_timing_evidence.py +15 -24
  206. package/lib/video-recap/skills/video-understanding/scripts/briefing/builder.py +59 -25
  207. package/lib/video-recap/skills/video-understanding/scripts/briefing/context.py +39 -3
  208. package/lib/video-recap/skills/video-understanding/scripts/briefing/inputs.py +15 -27
  209. package/lib/video-recap/skills/video-understanding/scripts/briefing/timeline.py +136 -37
  210. package/lib/video-recap/skills/video-understanding/scripts/consolidate.py +121 -37
  211. package/lib/video-recap/skills/video-understanding/scripts/detect.py +118 -16
  212. package/lib/video-recap/skills/video-understanding/scripts/index_normalize.py +359 -0
  213. package/lib/video-recap/skills/video-understanding/scripts/lib.py +62 -21
  214. package/lib/video-recap/skills/video-understanding/scripts/storyboard.py +181 -51
  215. package/lib/video-recap/skills/video-understanding/scripts/timeline_fusion.py +0 -26
  216. package/lib/video-recap/skills/video-understanding/scripts/understanding_brief.py +37 -14
  217. package/lib/video-recap/skills/video-understanding/scripts/understanding_cache.py +40 -32
  218. package/lib/video-recap/skills/video-understanding/scripts/understanding_runner.py +100 -127
  219. package/lib/video-recap/skills/video-understanding/scripts/understanding_storyboard.py +182 -30
  220. package/lib/video-recap/skills/video-understanding/scripts/vlm.py +30 -27
  221. package/lib/video-recap/skills/video-voiceover/SKILL.md +19 -12
  222. package/lib/video-recap/skills/video-voiceover/references/index-tts.md +3 -3
  223. package/lib/video-recap/skills/video-voiceover/scripts/approved_text_policy.py +3 -1
  224. package/lib/video-recap/skills/video-voiceover/scripts/dub.py +60 -135
  225. package/lib/video-recap/skills/video-voiceover/scripts/lib.py +9 -34
  226. package/lib/video-recap/skills/video-voiceover/scripts/providers/fish_audio.py +6 -1
  227. package/lib/video-recap/skills/video-voiceover/scripts/tts_audio.py +64 -1
  228. package/lib/video-recap/skills/video-voiceover/scripts/tts_cache.py +99 -0
  229. package/lib/video-recap/skills/video-voiceover/scripts/voiceover.py +177 -200
  230. package/package.json +45 -45
  231. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  232. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  233. package/lib/novel-to-game/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  234. package/lib/novel-to-game/examples/jin-ping-mei/build/app/css/new-guofeng.css +0 -1494
  235. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/assets.js +0 -147
  236. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/data.js +0 -7470
  237. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/engine.js +0 -13066
  238. package/lib/novel-to-game/examples/jin-ping-mei/build/app/js/text.js +0 -32
  239. package/lib/novel-to-game/examples/jin-ping-mei/qa/playable-model.json +0 -99
  240. package/lib/novel-to-game/examples/jin-ping-mei/qa/verify_playable_model.mjs +0 -152
  241. package/lib/video-recap/skills/video-assemble/references/foreground-compose.md +0 -118
  242. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +0 -84
  243. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +0 -98
  244. package/lib/video-recap/skills/video-assemble/references/jianying/empty_jy_draft.json +0 -204
  245. package/lib/video-recap/skills/video-assemble/references/pair-media.md +0 -74
  246. package/lib/video-recap/skills/video-assemble/scripts/compose_foreground.py +0 -293
  247. package/lib/video-recap/skills/video-assemble/scripts/pair_media.py +0 -216
  248. package/lib/video-recap/skills/video-recap/references/shift-left-qc-schema.md +0 -23
  249. package/lib/video-recap/skills/video-recap/scripts/mimo_qc.py +0 -33
  250. package/lib/video-recap/skills/video-recap/scripts/qc/__init__.py +0 -1
  251. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_client.py +0 -13
  252. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_contract.py +0 -9
  253. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_evidence.py +0 -287
  254. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_observations.py +0 -175
  255. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_payload.py +0 -206
  256. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_report.py +0 -318
  257. package/lib/video-recap/skills/video-recap/scripts/qc/mimo_runner.py +0 -130
  258. package/lib/video-recap/skills/video-recap/scripts/qc_contract.py +0 -320
  259. package/lib/video-recap/skills/video-script/scripts/timeline_fusion.py +0 -108
  260. package/lib/video-recap/skills/video-understanding/scripts/brief.py +0 -9
  261. package/lib/video-recap/skills/video-understanding/scripts/deslop_qc.py +0 -211
  262. package/lib/video-recap/skills/video-understanding/scripts/narration_lint.py +0 -707
  263. package/lib/video-recap/skills/video-understanding/scripts/speech_ownership.py +0 -143
  264. /package/lib/video-recap/skills/video-cut/scripts/{narration_mapping.py → cut_qc.py} +0 -0
@@ -1,2508 +1,331 @@
1
+ /* 金瓶梅·风月总账 — ADV 外壳。新国风:暖纸、墨、金线,人物色只用于名牌与强调。 */
1
2
  :root {
2
- --paper: #e7dcc2;
3
- --paper-light: #f3ead8;
4
- --paper-dark: #cbb991;
5
- --ink: #201914;
6
- --ink-soft: #53463a;
7
- --night: #17110e;
8
- --night-soft: #2a1d18;
9
- --gold: #c39a55;
10
- --gold-bright: #e4bc74;
11
- --cinnabar: #9d2d25;
12
- --jade: #274641;
13
- --honey: #9a7338;
14
- --line: rgba(46, 35, 26, 0.34);
15
- --serif: "Songti SC", "STSong", "Noto Serif CJK SC", "SimSun", serif;
16
- --sans: "PingFang SC", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif;
3
+ --ink: #2a2230;
4
+ --ink-soft: #5b4f60;
5
+ --paper: #fbf6ee;
6
+ --paper-2: #f3e9da;
7
+ --gold: #c39a52;
8
+ --gold-soft: rgba(195, 154, 82, 0.45);
9
+ --rose: #c25a6c;
10
+ --shadow: 0 18px 50px rgba(30, 18, 36, 0.35);
11
+ --serif: "Songti SC", "Noto Serif SC", "Source Han Serif SC", "STSong", "SimSun", serif;
12
+ --sans: "PingFang SC", "Noto Sans SC", "Microsoft YaHei", system-ui, sans-serif;
17
13
  }
18
-
19
- /* 第一桩联院差事走出院门后,外部经手人可拿具体副契反向援例。 */
20
- .portable-precedent-stage { align-items: stretch; }
21
- .portable-precedent-panel { max-width: 760px; }
22
- .precedent-cast { display: flex; gap: .75rem; align-items: end; position: absolute; left: 2rem; bottom: 2rem; z-index: 2; }
23
- .precedent-cast figure { width: 116px; margin: 0; opacity: .58; filter: saturate(.6); transition: opacity .2s ease, transform .2s ease; }
24
- .precedent-cast figure.speaking { opacity: 1; filter: none; transform: translateY(-8px); }
25
- .precedent-cast img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border: 1px solid rgba(191, 151, 86, .5); }
26
- .precedent-cast figcaption { display: grid; gap: .15rem; padding: .45rem; background: rgba(22, 15, 12, .9); color: var(--paper); }
27
- .precedent-cast figcaption i { color: var(--gold); font-style: normal; }
28
- .precedent-cast figcaption span { font-size: .72rem; color: var(--paper-dark); }
29
- .precedent-object, .precedent-scope, .precedent-boundary article { padding: .85rem 1rem; border: 1px solid rgba(151, 99, 57, .35); color: var(--ink); background: rgba(246, 237, 215, .92); }
30
- .precedent-object p { margin: 0 0 .35rem; }
31
- .precedent-reply { margin: 1rem 0; padding: 1rem; border-left: 3px solid var(--gold); color: var(--ink); background: rgba(246, 237, 215, .9); }
32
- .precedent-reply span { display: block; margin-bottom: .45rem; color: var(--cinnabar); font-weight: 700; }
33
- .precedent-reasons, .precedent-steps { display: grid; gap: .55rem; padding-left: 1.25rem; }
34
- .precedent-boundary { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .75rem; margin: 1rem 0; }
35
- .precedent-boundary article { display: grid; gap: .35rem; }
36
- .precedent-boundary span, .precedent-scope > span { color: var(--cinnabar); font-size: .78rem; letter-spacing: .08em; }
37
- .precedent-scope { display: grid; gap: .35rem; margin: 1rem 0; }
38
-
39
- @media (max-width: 900px) {
40
- .precedent-cast { position: static; order: -1; padding: .75rem 1rem 0; }
41
- .portable-precedent-stage { display: flex; flex-direction: column; }
42
- }
43
-
44
- @media (max-width: 560px) {
45
- .precedent-boundary { grid-template-columns: 1fr; }
46
- .precedent-cast figure { width: 92px; }
47
- }
48
-
49
- /* 第十九日《五封私价》:重点是五份分开的所有权,不做成又一张同声群像卡。 */
50
- .five-private-prices-panel{max-width:1080px}
51
- .private-price-offers{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:18px 0}
52
- .private-price-offers article{display:grid;grid-template-rows:84px 1fr;overflow:hidden;border:1px solid color-mix(in srgb,var(--ink) 28%,transparent);color:var(--ink);background:color-mix(in srgb,var(--paper) 90%,transparent)}
53
- .private-price-offers img{width:100%;height:84px;object-fit:cover;object-position:50% 28%;filter:saturate(.78)}
54
- .private-price-offers div{padding:10px}.private-price-offers span,.private-price-reply span,.private-price-counter span{font-size:.72rem;letter-spacing:.08em;color:var(--ink-soft)}
55
- .private-price-offers b{display:block;margin:.25rem 0}.private-price-offers p{font-size:.82rem;line-height:1.55;margin:0}
56
- .private-price-rule{padding:.75rem 1rem;border-left:3px solid var(--gold);color:var(--ink);background:color-mix(in srgb,var(--paper) 82%,transparent)}
57
- .private-price-reply{display:grid;grid-template-columns:minmax(180px,30%) 1fr;gap:18px;align-items:stretch;margin:18px 0}
58
- .private-price-reply figure{margin:0;min-height:330px}.private-price-reply figure img{width:100%;height:100%;object-fit:cover}.private-price-reply figcaption{margin-top:-2rem;padding:.45rem .7rem;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.75));position:relative}
59
- .private-price-reply article{padding:18px;border:1px solid color-mix(in srgb,var(--ink) 26%,transparent);color:var(--ink);background:color-mix(in srgb,var(--paper) 92%,transparent)}
60
- .private-price-reply blockquote{margin:1rem 0;padding:.8rem 1rem;border-left:3px solid var(--cinnabar);font-size:1.12rem;line-height:1.65}
61
- .private-price-reply dl{margin:1rem 0}.private-price-reply dt{font-weight:700}.private-price-reply dd{margin:.35rem 0;padding-left:1rem}.private-price-reply dd::before{content:'·';margin-right:.45rem;color:var(--cinnabar)}
62
- .private-price-counter{margin:18px 0;padding:18px;border:1px solid color-mix(in srgb,var(--cinnabar) 42%,transparent);color:var(--ink);background:color-mix(in srgb,var(--paper) 88%,transparent)}
63
- .private-price-coalition>div,.private-price-ledger{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:9px;margin:18px 0}
64
- .private-price-coalition figure,.private-price-ledger article{margin:0;padding:8px;border:1px solid color-mix(in srgb,var(--ink) 24%,transparent);color:var(--ink);background:color-mix(in srgb,var(--paper) 88%,transparent)}
65
- .private-price-coalition figure.self-held{opacity:.68}.private-price-coalition img,.private-price-ledger img{width:100%;height:78px;object-fit:cover;object-position:50% 25%}
66
- .private-price-coalition figcaption,.private-price-ledger span,.private-price-ledger b,.private-price-ledger small{display:block;margin-top:.25rem}.private-price-ledger small{font-size:.7rem;color:var(--ink-soft)}
67
- @media(max-width:900px){.private-price-offers,.private-price-coalition>div,.private-price-ledger{grid-template-columns:repeat(2,minmax(0,1fr))}.private-price-reply{grid-template-columns:1fr}.private-price-reply figure{min-height:220px;max-height:320px}}
68
-
69
14
  * { box-sizing: border-box; }
70
- .sr-only { position: fixed !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0,0,0,0) !important; white-space: nowrap !important; border: 0 !important; }
71
- html, body { margin: 0; width: 100%; height: 100%; background: #100d0b; }
72
- body {
73
- min-width: 0;
74
- overflow: hidden;
75
- color: var(--ink);
76
- font-family: var(--serif);
77
- user-select: none;
78
- }
79
- button, input { font: inherit; }
80
- button { color: inherit; }
81
- button:focus-visible { outline: 2px solid var(--gold-bright); outline-offset: 2px; }
82
- #app { width: 100vw; height: 100vh; position: relative; overflow: hidden; }
83
-
84
- #app::after {
85
- content: "";
86
- position: fixed;
87
- inset: 0;
88
- pointer-events: none;
89
- z-index: 1000;
90
- opacity: .06;
91
- background-image:
92
- repeating-linear-gradient(0deg, rgba(56, 41, 28, .06) 0, rgba(56, 41, 28, .06) 1px, transparent 1px, transparent 4px),
93
- radial-gradient(circle at 12% 20%, rgba(255,255,255,.16), transparent 22%),
94
- radial-gradient(circle at 80% 76%, rgba(30,15,8,.15), transparent 30%);
95
- mix-blend-mode: multiply;
96
- }
97
-
98
- .loading, .fatal-card {
99
- position: absolute;
100
- inset: 0;
101
- display: grid;
102
- place-content: center;
103
- text-align: center;
104
- background: var(--paper);
105
- padding: 3rem;
106
- }
107
- .fatal-card h1 { font-size: 2.2rem; }
108
- .fatal-card p { max-width: 46rem; line-height: 1.8; }
109
-
110
- .eyebrow {
111
- margin: 0 0 .55rem;
112
- color: var(--gold-bright);
113
- font-family: var(--sans);
114
- font-size: .72rem;
115
- font-weight: 700;
116
- letter-spacing: .18em;
117
- text-transform: uppercase;
118
- }
119
-
120
- /* 年龄门 */
121
- .age-gate {
122
- --age-safe-inline: min(36rem, 64vw);
123
- width: 100%;
124
- height: 100%;
125
- display: flex;
126
- flex-direction: column;
127
- align-items: center;
128
- justify-content: center;
129
- padding: 4rem;
130
- color: #eee3ce;
131
- text-align: center;
132
- background:
133
- linear-gradient(rgba(22,16,13,.82), rgba(22,16,13,.92)),
134
- url('../assets/bg/compound_new_guofeng.webp') center/cover;
135
- }
136
- .age-gate::before {
137
- content: "";
138
- position: absolute;
139
- top: 50%;
140
- left: 50%;
141
- width: min(82vw, 72rem);
142
- height: min(84vh, 44rem);
143
- transform: translate(-50%, -50%);
144
- pointer-events: none;
145
- border: 1px solid rgba(215,181,113,.28);
146
- box-shadow: inset 0 0 0 10px rgba(16,12,10,.55), inset 0 0 0 11px rgba(215,181,113,.16);
147
- }
148
- .age-gate > * {
149
- position: relative;
150
- z-index: 1;
151
- max-inline-size: var(--age-safe-inline);
152
- }
153
- .age-gate h1 { margin: .4rem 0 .8rem; font-size: clamp(2rem, 4vw, 4rem); letter-spacing: .15em; }
154
- .age-gate p:not(.eyebrow) {
155
- inline-size: var(--age-safe-inline);
156
- min-inline-size: 0;
157
- margin: 0 0 1.6rem;
158
- font-family: var(--sans);
159
- line-height: 1.9;
160
- color: #cdbfa8;
161
- overflow-wrap: anywhere;
162
- text-wrap: pretty;
163
- }
164
- .age-seal {
165
- width: 78px;
166
- height: 78px;
167
- /* 唯一可压缩的 flex 子项:不锁死会在 200% 文字缩放下被压扁成矩形来换取"不溢出"。 */
168
- flex: none;
169
- display: grid;
170
- place-content: center;
171
- margin-bottom: 1.4rem;
172
- border: 3px double #bd493c;
173
- color: #d45b4c;
174
- font: 800 1.35rem/1 var(--sans);
175
- transform: rotate(-4deg);
176
- }
177
-
178
- /* 通用按钮 */
179
- .button-row, .title-actions { display: flex; flex-wrap: wrap; gap: .75rem; }
180
- .ink-button {
181
- min-width: 9rem;
182
- border: 1px solid rgba(210,181,124,.55);
183
- background: rgba(30,23,19,.64);
184
- color: #e9dcc3;
185
- padding: .78rem 1.35rem;
186
- letter-spacing: .12em;
187
- cursor: pointer;
188
- transition: background .18s, transform .18s, border-color .18s;
189
- }
190
- .ink-button:hover:not(:disabled) { background: rgba(157,45,37,.65); border-color: #d28c74; transform: translateY(-2px); }
191
- .ink-button.primary { background: var(--cinnabar); border-color: #ce7a67; box-shadow: 0 10px 28px rgba(80,16,12,.28); }
192
- .ink-button.story-continue { min-width: 0; padding: .6rem .1rem .28rem; border: 0; color: #d9bc87; background: transparent; box-shadow: none; }
193
- .ink-button.story-continue::after { content: " →"; color: #9e7650; }
194
- .ink-button.story-continue:hover:not(:disabled) { color: #f0d7a4; background: transparent; transform: translateX(3px); }
195
- .ink-button:disabled, .choice-button:disabled, .choice-button[aria-disabled="true"] { cursor: not-allowed; filter: grayscale(.85); opacity: .48; }
196
- .plain-button {
197
- border: 1px solid rgba(225,206,167,.3);
198
- background: rgba(22,17,14,.62);
199
- color: #decfb4;
200
- padding: .46rem .7rem;
201
- cursor: pointer;
202
- }
203
- .plain-button:hover { border-color: var(--gold); color: #fff0ce; }
204
-
205
- /* 标题 */
206
- /* 标题屏与 visit/night/morning 用同一条规矩:整版单图 + 斜向 scrim,
207
- 不做 59%/41% 的对接分栏——那正是 P0-1 那条贯穿全屏的硬边。
208
- 标题图右三分之一本身就是漆黑的,题字栏落在它上面。 */
209
- .title-screen { position: relative; width: 100%; height: 100%; display: grid; grid-template-columns: 56% 44%; background: var(--night); color: #eee3d0; }
210
- .title-art {
211
- position: absolute;
212
- inset: 0;
213
- background-size: cover;
214
- background-position: 50% center;
215
- filter: saturate(.82) contrast(1.06);
216
- }
217
- .title-art::after {
218
- content: "";
219
- position: absolute;
220
- inset: 0;
221
- background: linear-gradient(100deg, transparent 38%, rgba(12,8,7,.72) 62%, var(--night) 84%), linear-gradient(0deg, rgba(12,8,7,.45), transparent 50%);
222
- }
223
- .title-copy {
224
- position: relative;
225
- grid-column: 2;
226
- display: flex;
227
- flex-direction: column;
228
- justify-content: center;
229
- padding: 7vh 5vw 6vh 3.6vw;
230
- background: radial-gradient(circle at 15% 45%, rgba(113,56,37,.2), transparent 38%);
231
- }
232
- .title-copy::before {
233
- content: "风\A月\A总\A账";
234
- white-space: pre;
235
- position: absolute;
236
- right: 3.2vw;
237
- top: 5vh;
238
- color: rgba(208,178,116,.08);
239
- font-size: 8vh;
240
- line-height: 1.04;
241
- letter-spacing: .03em;
242
- }
243
- .title-copy h1 { margin: 0 0 .7rem; font-size: clamp(2.6rem, 4.1vw, 5.3rem); font-weight: 700; letter-spacing: .08em; line-height: 1.08; }
244
- .title-subtitle { margin: 0 0 1.5rem; color: var(--gold-bright); font-size: clamp(1.05rem, 1.35vw, 1.55rem); line-height: 1.6; }
245
- .identity-line { max-width: 34rem; margin: 0 0 2rem; padding-left: 1rem; border-left: 3px solid var(--cinnabar); color: #d7c8ad; font: 1rem/1.9 var(--sans); }
246
- .title-actions { margin-bottom: 1.5rem; }
247
- .title-actions .ink-button { min-width: 7.5rem; }
248
- .rating-line { color: #ba8b7a; font: .78rem/1.6 var(--sans); letter-spacing: .06em; }
249
- .save-note { color: #796f62; font: .72rem/1.6 var(--sans); }
250
-
251
- /* 游戏框架 */
252
- .game-shell { width: 100%; height: 100%; display: grid; grid-template-rows: 60px 1fr; background: var(--night); }
253
- .topbar {
254
- position: relative;
255
- z-index: 50;
256
- display: grid;
257
- grid-template-columns: minmax(180px,auto) 1fr auto;
258
- align-items: stretch;
259
- border-bottom: 1px solid rgba(209,177,113,.35);
260
- color: #e9dcc6;
261
- background: linear-gradient(90deg, #17110e, #2a1c17 55%, #17110e);
262
- box-shadow: 0 7px 28px rgba(0,0,0,.32);
263
- }
264
- .day-mark { display: flex; flex-direction: column; justify-content: center; padding: 0 1.15rem; border-right: 1px solid rgba(209,177,113,.2); }
265
- .day-mark b { color: var(--gold-bright); letter-spacing: .13em; }
266
- .day-mark span { margin-top: .22rem; color: #9f907d; font: .72rem var(--sans); }
267
- .resource-chip { display: flex; align-items: center; gap: .36rem; min-width: 62px; font-family: var(--sans); }
268
- .resource-chip span { width: 25px; height: 25px; display: grid; place-content: center; border: 1px solid currentColor; transform: rotate(-2deg); font-size: .7rem; }
269
- .resource-chip b { font-size: .8rem; white-space: nowrap; }
270
- .resource-chip.silver, .resource-chip.repute { color: #d4b06c; }
271
- .resource-chip.power, .resource-chip.house { color: #8db2a5; }
272
- .resource-chip.exposure, .resource-chip.strain { color: #c46e60; }
273
- .hud-notice { align-self: center; justify-self: center; margin: 0; padding: .34rem .7rem; border-left: 2px solid rgba(202,169,107,.42); color: #9d8f7c; font: .7rem var(--sans); letter-spacing: .08em; }
274
- .hud-notice:empty { visibility: hidden; }
275
- .hud-notice.watch { border-color: #9c7655; color: #c3a27e; }
276
- .hud-notice.urgent { border-color: #ad4e42; color: #d79280; background: rgba(115,43,34,.14); }
277
- .top-actions { display: flex; align-items: center; gap: .4rem; padding: 0 .85rem; }
278
- .roster-button { display: inline-block; }
279
- .top-actions #btn-mute { padding-inline: .38rem; border-color: transparent; color: #837665; background: transparent; }
280
- .play-area { min-height: 0; display: grid; grid-template-columns: minmax(0,1fr); }
281
-
282
- /* 人物账 */
283
- .relation-rail {
284
- position: relative;
285
- z-index: 20;
286
- display: flex;
287
- flex-direction: column;
288
- gap: .38rem;
289
- min-height: 0;
290
- padding: .62rem .68rem;
291
- border-right: 1px solid rgba(216,181,111,.24);
292
- color: #e7dbc7;
293
- background: linear-gradient(180deg, #211713, #160f0d);
294
- }
295
- .relation-card { position: relative; padding: .46rem .58rem .44rem; border: 1px solid rgba(224,202,162,.22); background: rgba(236,222,194,.055); overflow: hidden; }
296
- .relation-card::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--gold); }
297
- .relation-pan_jinlian::before { background: #aa3d30; }
298
- .relation-li_pinger::before { background: #c59e57; }
299
- .relation-meng_yulou::before { background: #6f9b8c; }
300
- .relation-sun_xuee::before { background: #a56c42; }
301
- .relation-name { display: flex; align-items: center; gap: .62rem; }
302
- .shape-mark { width: 28px; height: 28px; display: grid; place-content: center; border: 1px solid rgba(231,208,163,.55); color: var(--gold-bright); font-size: .72rem; font-weight: 700; }
303
- .relation-pan_jinlian .shape-mark { clip-path: polygon(14% 0,100% 0,86% 100%,0 100%); }
304
- .relation-li_pinger .shape-mark { border-radius: 45%; }
305
- .relation-meng_yulou .shape-mark { transform: rotate(45deg); }
306
- .relation-meng_yulou .shape-mark::first-letter { transform: rotate(-45deg); }
307
- .relation-sun_xuee .shape-mark { border-radius: 3px 3px 50% 50%; }
308
- .relation-name b { display: block; letter-spacing: .08em; }
309
- .relation-name small { display: block; margin-top: .15rem; color: #8e806f; font: .66rem var(--sans); }
310
- .relation-tiers { display: grid; grid-template-columns: repeat(3,1fr); gap: .2rem; margin: .34rem 0 .28rem; }
311
- .relation-tiers span { position: relative; display: flex; flex-direction: column; color: #807463; font: .62rem var(--sans); }
312
- .relation-tiers b { margin-top: .12rem; color: #d8c6a8; font-size: .75rem; }
313
- /* 刚跨档的那一格:700ms 微亮 + 一枚朱印,一次性提示。
314
- 任意一帧都必须能读清字——不用 blur,起始不透明度不低于 .75。
315
- prefers-reduced-motion 下全局规则关掉动画,只留朱印。 */
316
- .relation-tiers span[data-changed] b { animation: tier-ink .7s ease-out; }
317
- /* 朱印贴在被改那格的档位字右侧,不再绝对定位到格缘——
318
- 贴右缘会看上去像标在右边那一格上。 */
319
- .relation-tiers span[data-changed] b::after {
320
- content: "";
321
- display: inline-block;
322
- width: .52em;
323
- height: .52em;
324
- margin-left: .38em;
325
- background: var(--cinnabar);
326
- box-shadow: 0 0 0 1px rgba(216,90,72,.45), 0 1px 3px rgba(0,0,0,.4);
327
- transform: rotate(-4deg);
328
- }
329
- @keyframes tier-ink {
330
- from { opacity: .78; color: #f0dfba; text-shadow: 0 0 10px rgba(228,188,116,.9); }
331
- to { opacity: 1; color: #d8c6a8; text-shadow: none; }
332
- }
333
- .relation-card p { display: -webkit-box; margin: 0; min-height: 0; overflow: hidden; color: #948776; font: .63rem/1.4 var(--sans); -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
334
- .relation-habit { display: block; margin: .26rem 0 .22rem; overflow: hidden; color: #887d6e; font: .56rem/1.25 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
335
- .relation-habit.settled { color: #c2a56f; }
336
- .bond-board { padding: .48rem .58rem; border: 1px solid rgba(111,155,140,.22); background: rgba(39,70,65,.12); font-family: var(--sans); }
337
- .bond-board header { display: flex; justify-content: space-between; gap: .4rem; margin-bottom: .28rem; color: #9fbcb2; font-size: .62rem; }
338
- .bond-board header span { color: #756f63; font-size: .56rem; }
339
- .bond-board > div { display: grid; grid-template-columns: 1fr auto; gap: .35rem; align-items: center; min-height: 18px; color: #9a8d7a; font-size: .57rem; }
340
- .bond-board > div b { color: #d1c2a8; font-weight: 500; }
341
- .harem-outlook { padding: .65rem .72rem; border: 1px solid rgba(206,161,91,.34); background: linear-gradient(135deg,rgba(113,54,43,.18),rgba(46,78,68,.15)); font-family: var(--sans); }
342
- .harem-outlook header { display: flex; justify-content: space-between; gap: .6rem; color: #d2ad70; font-size: .7rem; }
343
- .harem-outlook header span { color: #9f927f; font-size: .62rem; }
344
- .harem-outlook p { margin: .45rem 0 0; color: #d8cbb7; font: .75rem/1.5 var(--sans); }
345
- .obligation-board { display:grid; gap:.38rem; padding:.65rem .72rem; border:1px solid rgba(190,123,82,.36); background:linear-gradient(135deg,rgba(91,35,25,.2),rgba(41,29,22,.2)); font-family:var(--sans); }
346
- .obligation-board > header { display:flex; justify-content:space-between; gap:.6rem; color:#dbac87; font-size:.7rem; }
347
- .obligation-board > header span { color:#a68b77; font-size:.62rem; }
348
- .obligation-board article { display:grid; gap:.22rem; padding:.5rem .58rem; border-left:2px solid #a88559; background:rgba(0,0,0,.18); }
349
- .obligation-board article[data-obligation-type="favor"] { border-left-color:#c66f53; }
350
- .obligation-board article[data-obligation-type="cooldown"] { border-left-color:#a74239; }
351
- .obligation-board article[data-obligation-status="due"],.obligation-board article[data-obligation-status="overdue"] { box-shadow:inset 0 0 0 1px rgba(194,75,57,.22); }
352
- .obligation-board article > div { display:flex; justify-content:space-between; gap:.5rem; color:#a8957d; font-size:.59rem; }
353
- .obligation-board article > div em { color:#c88f72; font-style:normal; }
354
- .obligation-board article > b { color:#e0ccb0; font-size:.76rem; font-weight:600; }
355
- .obligation-board article > p,.obligation-board.empty > p { margin:0; color:#a99a84; font:.66rem/1.5 var(--sans); }
356
- .obligation-board > small { color:#897b68; font:.56rem var(--sans); text-align:right; }
357
- .obligation-board.compact { gap:.24rem; padding:.42rem .5rem; }
358
- .obligation-board.compact > header { font-size:.62rem; }
359
- .obligation-board.compact > header span { font-size:.55rem; }
360
- .obligation-board.compact article { gap:.1rem; padding:.3rem .4rem; }
361
- .obligation-board.compact article > div { font-size:.53rem; }
362
- .obligation-board.compact article > b { overflow:hidden; font-size:.62rem; text-overflow:ellipsis; white-space:nowrap; }
363
- .bond-board.all-pairs { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .18rem .8rem; }
364
- .bond-board.all-pairs header { grid-column: 1/-1; }
365
- .household-roster { padding: .65rem .7rem .55rem; border-top: 1px solid rgba(216,181,111,.2); background: rgba(0,0,0,.12); }
366
- .household-roster > p { margin: 0 0 .42rem; color: #897d6b; font: .64rem var(--sans); letter-spacing: .18em; }
367
- .household-row { display: grid; grid-template-columns: 24px 54px 1fr; align-items: center; min-height: 28px; color: #b8aa93; font: .66rem var(--sans); }
368
- .household-row > span { width: 20px; height: 20px; display: grid; place-content: center; border: 1px solid rgba(209,177,113,.32); color: #cdb37f; font-size: .58rem; }
369
- .household-row b { color: #d4c5ad; font-weight: 500; }
370
- .household-row small { color: #7f7464; font-size: .62rem; text-align: right; }
371
-
372
- /* 账簿页:人物账与宅中人之间的中段,state.history 最近 4 条竖排墨字,新条目渗入。 */
373
- .ledger-book {
374
- flex: 1;
375
- min-height: 3.2rem;
376
- display: flex;
377
- justify-content: flex-end;
378
- gap: 1rem;
379
- padding: .7rem .4rem;
380
- border-top: 1px solid rgba(216,181,111,.16);
381
- border-bottom: 1px solid rgba(216,181,111,.12);
382
- overflow: hidden;
383
- }
384
- .ledger-line {
385
- writing-mode: vertical-rl;
386
- margin: 0;
387
- max-height: 100%;
388
- overflow: hidden;
389
- color: #9d8f78;
390
- font: .7rem/1.6 var(--serif);
391
- letter-spacing: .08em;
392
- }
393
- .ledger-line b { color: #c8a75f; font-weight: 700; }
394
- .ledger-line[data-fresh] { color: #e6d6b6; animation: ledger-ink .9s ease-out; }
395
- .ledger-empty { margin: auto; writing-mode: vertical-rl; color: #5f564a; font: .68rem var(--sans); letter-spacing: .2em; }
396
- @keyframes ledger-ink {
397
- from { opacity: .78; transform: translateY(-5px); }
398
- to { opacity: 1; transform: none; }
399
- }
400
-
401
- .phase-stage { position: relative; min-width: 0; min-height: 0; overflow: hidden; background: #2c251d; }
402
- .visual-stage { position: absolute; inset: 0; overflow: hidden; }
403
- .visual-stage::before { content: ""; position: absolute; inset: 0; background-image: var(--scene-bg); background-position: center; background-size: cover; filter: saturate(.88) contrast(1.03); }
404
- .visual-stage::after { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(180deg, rgba(18,12,9,.14), rgba(18,12,9,.32)); }
405
- .phase-header { position: relative; }
406
- .phase-header h2 { margin: 0 0 .65rem; color: #f0e4cf; font-size: clamp(1.45rem, 2.3vw, 2.5rem); letter-spacing: .08em; }
407
- .phase-header > p:last-child { max-width: 32rem; margin: 0; color: #c9baa3; font: .9rem/1.75 var(--sans); text-wrap: pretty; }
408
- .phase-lead { margin: .8rem 0; color: #d9c49c; font: .78rem/1.6 var(--sans); }
409
- /* 晨间结转报条:用度、催账都落在这行现场画面上,墨边一杠与正文分开。 */
410
- .morning-note { margin: .55rem 0 0; padding-left: .6rem; border-left: 2px solid rgba(224,198,146,.42); color: #d9c49c; font: .8rem/1.6 var(--sans); }
411
- /* 催账的早晨:门前画面压在报条上方,取院门那一带的横条,人在门外站着。 */
412
- .morning-scene { margin: .7rem 0 .1rem; height: 6.2rem; border: 1px solid rgba(224,198,146,.3); background-position: center 38%; background-size: 118%; background-repeat: no-repeat; filter: saturate(.92); }
413
- .decision-panel { position: absolute; z-index: 5; border: 1px solid rgba(224,198,146,.32); color: #eee1cc; background: linear-gradient(150deg, rgba(25,18,15,.94), rgba(42,27,22,.91)); box-shadow: 0 18px 45px rgba(0,0,0,.3); }
414
-
415
- /* 开场 */
416
- .opening-scene::before { background-position: center; filter: saturate(.78) brightness(.76); }
417
- .opening-scene::after { background: linear-gradient(90deg, rgba(18,10,8,.1), transparent 48%, rgba(18,10,8,.35)), linear-gradient(0deg, rgba(16,10,8,.76), transparent 64%); }
418
- .opening-panel { left: 50%; bottom: 3.5%; width: min(780px, 70%); transform: translateX(-50%); padding: 1.35rem 1.55rem; }
419
- .speaker-line { margin: .7rem 0 1rem; color: #bda98c; font: .8rem var(--sans); }
420
- .opening-aftermath-stage { overflow:hidden; background:radial-gradient(circle at 76% 24%,#49352c,#140d0b 72%); }
421
- .opening-aftermath-stage::after { background:linear-gradient(90deg,rgba(14,9,8,.99) 0%,rgba(14,9,8,.9) 50%,rgba(14,9,8,.12) 79%),linear-gradient(0deg,rgba(59,34,22,.28),transparent 64%); }
422
- .opening-aftermath-panel { z-index:5; left:3.5%; top:50%; bottom:auto; width:50%; max-height:92%; padding:1.2rem 1.3rem; overflow:clip; border-color:rgba(203,164,103,.55); transform:translateY(-50%); }
423
- .opening-aftermath-cast { position:absolute; z-index:3; inset:3% 2% 3% 55%; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); grid-template-rows:repeat(3,minmax(0,1fr)); gap:.36rem; }
424
- .opening-aftermath-cast figure { position:relative; min-width:0; min-height:0; margin:0; overflow:hidden; border:1px solid rgba(195,160,102,.24); background:#17100d; transition:filter .3s ease,transform .3s ease,opacity .3s ease; }
425
- .opening-aftermath-cast figure:last-child { grid-column:1/-1; }
426
- .opening-aftermath-cast figure.listening { opacity:.58; filter:saturate(.5); transform:translateY(1.5%); }
427
- .opening-aftermath-cast figure.speaking { z-index:2; border-color:rgba(214,176,111,.68); box-shadow:0 12px 35px rgba(0,0,0,.35); }
428
- .opening-aftermath-cast img { width:100%; height:100%; object-fit:cover; object-position:50% 15%; filter:saturate(.7) brightness(.66); }
429
- .opening-aftermath-cast figure.speaking img { filter:saturate(.95) brightness(.82); }
430
- .opening-aftermath-cast figcaption { position:absolute; inset:auto 0 0; padding:1.7rem .48rem .4rem; color:#d9c39d; background:linear-gradient(transparent,rgba(12,8,7,.96) 48%); }
431
- .opening-aftermath-cast i,.opening-aftermath-cast b,.opening-aftermath-cast small { display:block; }
432
- .opening-aftermath-cast i { color:#a38458; font:.55rem var(--sans); }
433
- .opening-aftermath-cast b { margin-top:.08rem; font-size:.72rem; }
434
- .opening-aftermath-cast small { margin-top:.12rem; color:#958671; font:.5rem/1.35 var(--sans); }
435
- .opening-origin { display:grid; gap:.16rem; margin:.58rem 0; padding:.52rem .62rem; border-left:2px solid var(--gold); background:rgba(0,0,0,.2); }
436
- .opening-origin span { color:#8f7c61; font:.55rem var(--sans); letter-spacing:.1em; }
437
- .opening-origin b { color:#dbc08f; font-size:.7rem; }
438
- .opening-origin small { color:#a99a84; font:.59rem/1.42 var(--sans); }
439
- .opening-aftermath-voices { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.35rem; margin:.55rem 0; }
440
- .opening-aftermath-voices blockquote { min-width:0; margin:0; padding:.52rem .58rem; border-left:2px solid rgba(197,151,87,.72); color:#cbb99b; background:rgba(45,29,20,.34); }
441
- .opening-aftermath-voices span,.opening-aftermath-voices b { display:block; }
442
- .opening-aftermath-voices span { color:#8c7659; font:.51rem var(--sans); letter-spacing:.08em; }
443
- .opening-aftermath-voices b { margin-top:.12rem; color:#dfc69d; font-size:.62rem; }
444
- .opening-aftermath-voices p { margin:.22rem 0 0; font:.58rem/1.45 var(--sans); }
445
- .opening-aftermath-transcript { display:grid; gap:.26rem; margin:.45rem 0; padding:0; list-style:none; }
446
- .opening-aftermath-transcript li { display:grid; grid-template-columns:1.15rem 1fr; gap:.38rem; padding:.35rem .42rem; color:#978b78; background:rgba(0,0,0,.17); }
447
- .opening-aftermath-transcript li > span { display:grid; place-items:center; width:1.05rem; height:1.05rem; border:1px solid rgba(180,145,91,.38); color:#aa8759; font:.5rem var(--sans); }
448
- .opening-aftermath-transcript b { display:block; color:#c3aa80; font-size:.58rem; }
449
- .opening-aftermath-transcript p { display:-webkit-box; margin:.12rem 0 0; overflow:hidden; color:#8f8371; font:.52rem/1.38 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
450
- .opening-aftermath-continue { width:100%; margin-top:.35rem; }
451
- .opening-memory-slip,.opening-public-echo { margin:.55rem 0; padding:.56rem .66rem; border:1px solid rgba(190,149,87,.32); border-left:2px solid #b68a52; background:linear-gradient(110deg,rgba(72,47,25,.24),rgba(0,0,0,.16)); }
452
- .opening-memory-slip span,.opening-memory-slip b,.opening-public-echo span,.opening-public-echo b { display:block; }
453
- .opening-memory-slip span,.opening-public-echo span { color:#967850; font:.54rem var(--sans); letter-spacing:.09em; }
454
- .opening-memory-slip b,.opening-public-echo b { margin-top:.14rem; color:#d8bd8e; font:.67rem/1.35 var(--serif); }
455
- .opening-memory-slip p,.opening-public-echo p { display:-webkit-box; margin:.2rem 0 0; overflow:hidden; color:#a9967b; font:.57rem/1.42 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
456
- .choice-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .75rem; }
457
-
458
- /* 白日 hub */
459
- .hub-stage::before { transform: scale(1.02); }
460
- .hub-stage::after { background: linear-gradient(90deg, rgba(16,12,8,.08), rgba(16,12,8,.02) 55%, rgba(16,12,8,.16)), linear-gradient(0deg, rgba(16,12,8,.42), transparent 56%); }
461
- .hub-stage.evening::after { background: linear-gradient(180deg, rgba(25,12,13,.18), rgba(25,12,13,.34) 48%, rgba(10,7,6,.62)); }
462
- .day-panel { left: 4%; right: auto; bottom: 4%; width: min(960px,66vw); max-height: 88%; padding: 1.2rem 1.35rem; overflow: clip; }
463
- .day-context-details, .evidence-board, .joint-offers { border: 0; border-left: 2px solid rgba(194,151,86,.42); background: rgba(8,6,5,.18); font-family: var(--sans); }
464
- .day-context-details { margin: .65rem 0; }
465
- .day-context-details > summary, .evidence-board > summary, .joint-offers > summary { display: flex; align-items: center; gap: .75rem; padding: .44rem .58rem; color: #cbb790; cursor: pointer; list-style: none; font-size: .68rem; }
466
- .day-context-details > summary::-webkit-details-marker, .evidence-board > summary::-webkit-details-marker, .joint-offers > summary::-webkit-details-marker { display: none; }
467
- .day-context-details > summary::after, .evidence-board > summary::after, .joint-offers > summary::after { content: "展开"; flex: none; margin-left: auto; color: #94836d; font-size: .62rem; letter-spacing: .08em; }
468
- .day-context-details[open] > summary::after, .evidence-board[open] > summary::after, .joint-offers[open] > summary::after { content: "收起"; }
469
- .day-context-details > summary span, .evidence-board > summary span, .joint-offers > summary span { min-width: 0; color: #938777; font-size: .64rem; }
470
- .day-context-details > div { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .4rem; max-height: min(34vh,300px); padding: 0 .58rem .58rem; overflow-y: auto; }
471
- .day-context-details > div > aside { min-width: 0; margin: 0; }
472
- .supporting-context { margin: .55rem 0; border: 0; border-left: 2px solid rgba(194,151,86,.38); color: #d6c19b; background: rgba(8,6,5,.2); font-family: var(--sans); }
473
- .supporting-context > summary { display: flex; align-items: center; gap: .65rem; padding: .44rem .58rem; cursor: pointer; list-style: none; font-size: .68rem; }
474
- .supporting-context > summary::-webkit-details-marker { display: none; }
475
- .supporting-context > summary::after { content: "展开"; flex: none; margin-left: auto; color: #94836d; font-size: .62rem; letter-spacing: .08em; }
476
- .supporting-context[open] > summary::after { content: "收起"; }
477
- .supporting-context > summary span { min-width: 0; color: #938574; font-size: .64rem; }
478
- .supporting-context-pages { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .4rem; max-height: min(56vh,520px); padding: 0 .55rem .55rem; overflow-y: auto; }
479
- .supporting-context-pages > * { min-width: 0; margin: 0; }
480
- .decision-panel:has(> .supporting-context) { overflow: clip; }
481
- .decision-panel:has(> .supporting-context[open]) > :not(.phase-header):not(.supporting-context):not(.favor-progress):not(.memory-progress) { display: none; }
482
- .evidence-board { margin: -.15rem 0 .6rem; border-color: rgba(101,145,132,.26); background: rgba(28,58,52,.18); }
483
- .evidence-board > summary { color: #aac2b8; }
484
- .evidence-board > div { display: flex; gap: .4rem; max-height: min(38vh,320px); padding: 0 .55rem .5rem; overflow: auto; }
485
- .evidence-slip { flex: 0 0 min(188px,42vw); display: grid; gap: .12rem; padding: .42rem .5rem; border: 1px solid rgba(121,166,151,.3); color: #d8ccba; text-align: left; background: rgba(8,18,16,.38); cursor: pointer; }
486
- .evidence-slip b { font-size: .68rem; }
487
- .evidence-slip span, .evidence-slip em { color: #8f9b91; font-size: .56rem; font-style: normal; }
488
- .evidence-slip.selected { border-color: #d5ae65; background: rgba(113,77,31,.28); box-shadow: inset 3px 0 #b43b31; }
489
- .evidence-slip:disabled { opacity: .42; cursor: not-allowed; }
490
- .evidence-pay { margin-top: .35rem; padding: .28rem .45rem; border: 0; color: #bda886; background: transparent; font: .58rem var(--sans); text-decoration: underline; cursor: pointer; }
491
- .evidence-board.empty { padding-block: .3rem; }
492
- .day-aftermath-stage { overflow: hidden; background: #160e0c; }
493
- .day-aftermath-stage::after { background: linear-gradient(90deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.9) 48%,rgba(13,9,8,.08) 78%),linear-gradient(0deg,rgba(82,36,24,.24),transparent 62%); }
494
- .day-aftermath-lead { position: absolute; z-index: 1; inset: 0 0 0 37%; background-position: center 14%; background-size: cover; filter: saturate(.78) brightness(.72) contrast(1.06); mask-image: linear-gradient(90deg,transparent 0%,#000 20%,#000 100%); }
495
- .day-aftermath-panel { z-index: 6; left: 3.5%; top: 50%; bottom: auto; width: 49%; max-height: 88%; padding: 1.35rem; overflow: clip; border-color: rgba(204,152,91,.58); transform: translateY(-50%); }
496
- .story-progress { display: grid; grid-template-columns: auto minmax(3rem,1fr) auto; align-items: center; gap: .55rem; margin: .8rem 0; color: #b99b6e; font: .62rem var(--sans); }
497
- .story-progress i { height: 1px; background: linear-gradient(90deg,#a45039,rgba(207,169,102,.18)); }
498
- .story-progress b { color: #d8c29b; font-weight: 500; letter-spacing: .1em; }
499
- .day-speaker { margin: .65rem 0; padding: .72rem .82rem; border-left: 2px solid #b85f47; color: #d7c4a5; background: rgba(76,33,25,.22); font: .73rem/1.65 var(--sans); }
500
- .day-speaker span { display: block; margin-bottom: .25rem; color: #d49b74; font-size: .61rem; letter-spacing: .12em; }
501
- .day-aftermath-continue { margin-top: .85rem; }
502
- .day-aftermath-reactions { position: absolute; z-index: 4; inset: 4% 3% 4% 54%; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .65rem; align-items: stretch; }
503
- .day-aftermath-reactions figure { position: relative; min-width: 0; margin: 0; overflow: hidden; border: 1px solid rgba(220,188,127,.28); background: #1c1411; }
504
- .day-aftermath-reactions figure:only-child { grid-column: 1 / -1; width: 58%; justify-self: end; }
505
- .day-aftermath-reactions figure.accepts { border-color: rgba(107,161,139,.58); }
506
- .day-aftermath-reactions figure.resists { border-color: rgba(184,87,67,.58); }
507
- .day-aftermath-reactions img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 13%; filter: saturate(.68) brightness(.64); }
508
- .day-aftermath-reactions figure.accepts img { filter: saturate(.82) brightness(.75); }
509
- .day-aftermath-reactions figcaption { position: absolute; inset: auto 0 0; padding: 4.5rem .75rem .85rem; background: linear-gradient(transparent,rgba(13,9,8,.97) 43%); }
510
- .day-aftermath-reactions span, .day-aftermath-reactions b { display: block; }
511
- .day-aftermath-reactions span { color: #98b8aa; font: .58rem var(--sans); letter-spacing: .1em; }
512
- .day-aftermath-reactions .resists span { color: #cf8976; }
513
- .day-aftermath-reactions b { margin-top: .18rem; color: #ead8b9; font-size: .92rem; }
514
- .day-aftermath-reactions p { margin: .42rem 0 0; color: #c3b294; font: .68rem/1.55 var(--sans); }
515
- .day-aftermath-stage.beat-network .day-aftermath-lead { opacity: .2; filter: saturate(.45) brightness(.42); }
516
- .day-aftermath-stage.beat-consequence .day-aftermath-lead { filter: saturate(.55) brightness(.5) contrast(1.12); }
517
- .day-consequence { margin: .65rem 0; padding: .72rem .82rem; border: 1px solid rgba(220,188,127,.22); background: rgba(0,0,0,.24); }
518
- .day-consequence span, .day-consequence b { display: block; }
519
- .day-consequence span { color: #b98655; font: .6rem var(--sans); letter-spacing: .12em; }
520
- .day-consequence b { margin-top: .28rem; color: #d7c6aa; font: 500 .72rem/1.55 var(--sans); }
521
- .day-consequence.resolved { border-color: rgba(100,157,135,.42); background: rgba(36,77,65,.2); }
522
- .day-consequence.resolved span { color: #8fbaa8; }
523
- .day-consequence.missed { border-color: rgba(183,75,58,.44); background: rgba(91,30,23,.2); }
524
- .day-consequence.missed span { color: #d18470; }
525
- .day-actions { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .48rem; }
526
- .joint-offers { margin-top: .75rem; }
527
- .joint-offers > summary { color: #d6bd8e; letter-spacing: .08em; }
528
- .joint-offers > summary span { color: #8f8271; letter-spacing: .04em; }
529
- .joint-offers > p { margin: .25rem 0 0; color: #9b8e7b; font: .7rem/1.45 var(--sans); }
530
- .joint-offers.locked, .joint-offers.complete { padding: .65rem .72rem; border: 1px solid rgba(220,188,127,.16); background: rgba(22,17,14,.35); }
531
- .joint-offers.complete { border-color: rgba(103,151,131,.28); background: rgba(38,75,66,.13); }
532
- .joint-actions { display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .5rem; }
533
- .joint-offers > .joint-actions { max-height: min(48vh,380px); padding: 0 .55rem .55rem; overflow-y: auto; }
534
- .joint-actions .choice-button { min-height: 62px; }
535
-
536
- /* 前情是参考页,不把正在作的决定从玩家眼前拿走;证据与联院差事仍是独立操作层。 */
537
- .day-panel:has(.day-context-details[open]) .evidence-board,
538
- .day-panel:has(.day-context-details[open]) .joint-offers,
539
- .day-panel:has(.evidence-board[open]) .day-context-details,
540
- .day-panel:has(.evidence-board[open]) .day-actions,
541
- .day-panel:has(.evidence-board[open]) .joint-offers,
542
- .day-panel:has(.joint-offers[open]) .day-context-details,
543
- .day-panel:has(.joint-offers[open]) .evidence-board,
544
- .day-panel:has(.joint-offers[open]) .day-actions { display: none; }
545
-
546
- /* 双人合办结果:先让人物在同一画面完成一件事,再回到原有白日流转。 */
547
- .joint-result-stage::before { background-position: center; filter: saturate(.82) brightness(.86) contrast(1.03); }
548
- .joint-result-stage::after { background: linear-gradient(0deg, rgba(12,8,7,.94), rgba(12,8,7,.12) 76%); }
549
- .joint-result-panel { left: 4%; right: 4%; bottom: 4%; padding: 1.1rem 1.35rem; }
550
- .joint-result-panel .phase-header > p:last-child { max-width: 64rem; }
551
- .joint-story-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; margin: .7rem 0; }
552
- .joint-pair-voices { display: flex; gap: .35rem; }
553
- .joint-pair-voices span { display: inline-flex; align-items: center; gap: .32rem; padding: .3rem .48rem; border: 1px solid rgba(220,188,127,.2); color: #8f8373; font: .63rem var(--sans); background: rgba(0,0,0,.22); }
554
- .joint-pair-voices span.speaking { border-color: rgba(210,151,86,.68); color: #ead2ab; background: rgba(116,53,35,.26); box-shadow: inset 3px 0 #a94838; }
555
- .joint-pair-voices i { display: grid; width: 1.25rem; height: 1.25rem; place-items: center; border: 1px solid currentColor; font-style: normal; }
556
- .joint-story-row .joint-payoff { margin: 0; color: #b49f80; text-align: right; font: .65rem/1.5 var(--sans); }
557
- .joint-result-stage.joint-beat-1::after { background: linear-gradient(90deg,rgba(12,8,7,.18),rgba(12,8,7,.04)),linear-gradient(0deg,rgba(12,8,7,.95),rgba(12,8,7,.08) 78%); }
558
- .joint-result-stage.joint-beat-2::after { background: linear-gradient(270deg,rgba(80,28,22,.18),transparent 58%),linear-gradient(0deg,rgba(12,8,7,.95),rgba(12,8,7,.08) 78%); }
559
- .joint-result-stage.joint-beat-3::after { background: linear-gradient(0deg,rgba(18,34,29,.94),rgba(12,8,7,.08) 78%); }
560
- .joint-payoff { display: inline-block; margin: .75rem 1rem .75rem 0; padding: .45rem .65rem; border-left: 2px solid var(--gold); color: #c8b38f; font: .72rem var(--sans); }
561
-
562
- /* 宅中短线 */
563
- .household-stage::before { background-position: center; filter: saturate(.72) brightness(.78); }
564
- .household-stage::after { background: linear-gradient(90deg, rgba(16,11,9,.92) 0%, rgba(16,11,9,.34) 48%, rgba(16,11,9,.03) 76%); }
565
- .household-panel { left: 4%; top: 8%; width: min(620px, 51%); padding: 1.45rem; }
566
- .household-panel .choice-grid { margin-top: .9rem; }
567
- .household-voice { margin: .7rem 0 .6rem; color: #a99a85; font: .76rem/1.7 var(--sans); }
568
- .household-standing { display: inline-block; padding: .3rem .55rem; border: 1px solid rgba(211,178,111,.28); color: #d1b677; font: .68rem var(--sans); }
569
- .household-memory { margin: .7rem 0; padding: .75rem .85rem; border-left: 2px solid #b98748; color: #d4bea0; font: .74rem/1.65 var(--sans); background: rgba(83,48,24,.2); }
570
- .household-memory span { display: block; margin-bottom: .28rem; color: #bd8f55; font-size: .61rem; letter-spacing: .12em; }
571
- .household-sun_xuee .household-panel { border-color: rgba(150,131,96,.58); }
572
- .household-li_jiaoer .household-panel { border-color: rgba(149,91,91,.6); }
573
-
574
- /* 娇儿跨幕交易:一次报价之后仍有见证、追问和第二次真实落字。 */
575
- .jiaoer-aftermath-stage::before { background-position: 68% center; filter: saturate(.72) brightness(.5) contrast(1.08); }
576
- .jiaoer-aftermath-stage::after { background: linear-gradient(90deg,rgba(15,9,8,.98) 0%,rgba(15,9,8,.92) 46%,rgba(15,9,8,.18) 72%,rgba(15,9,8,.55) 100%); }
577
- .jiaoer-aftermath-panel { left: 3.5%; top: 5%; bottom: 5%; width: min(650px,53%); padding: 1.25rem 1.35rem; overflow: clip; }
578
- .jiaoer-aftermath-panel .phase-header > p:last-child { max-width: 43rem; }
579
- .jiaoer-aftermath-cast { position: absolute; z-index: 2; inset: 6% 2.5% 6% 57%; display: flex; align-items: stretch; gap: .45rem; pointer-events: none; }
580
- .jiaoer-aftermath-cast figure { position: relative; flex: 1 1 0; min-width: 0; margin: 0; overflow: hidden; border: 1px solid rgba(200,163,111,.2); background: #17100e; opacity: .52; filter: grayscale(.34) saturate(.7); transform: translateY(.65rem); transition: flex .25s,opacity .25s,transform .25s,filter .25s; }
581
- .jiaoer-aftermath-cast figure.speaking { flex: 1.22 1 0; opacity: 1; filter: none; transform: translateY(0); border-color: rgba(207,157,91,.72); box-shadow: 0 0 0 1px rgba(122,55,41,.5),0 16px 34px rgba(0,0,0,.42); }
582
- .jiaoer-aftermath-cast img { width: 100%; height: 100%; object-fit: cover; object-position: center top; }
583
- .jiaoer-aftermath-cast figure::after { content:""; position:absolute; inset:0; background:linear-gradient(0deg,rgba(12,8,7,.94),transparent 58%); }
584
- .jiaoer-aftermath-cast figcaption { position:absolute; z-index:1; left:0; right:0; bottom:0; display:flex; align-items:center; gap:.32rem; padding:2.4rem .48rem .55rem; color:#d7c4a5; font:.67rem var(--sans); }
585
- .jiaoer-aftermath-cast figcaption i { display:grid; place-items:center; width:1.25rem; height:1.25rem; border:1px solid currentColor; font-style:normal; color:#d6aa68; }
586
- .jiaoer-aftermath-ledger { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:.4rem; margin:.75rem 0 .55rem; }
587
- .jiaoer-aftermath-ledger span { min-width:0; padding:.5rem .58rem; border:1px solid rgba(205,160,102,.22); border-top-color:rgba(205,160,102,.55); background:rgba(83,48,24,.18); }
588
- .jiaoer-aftermath-ledger small,.jiaoer-aftermath-ledger b { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
589
- .jiaoer-aftermath-ledger small { color:#927c63; font:.58rem var(--sans); letter-spacing:.1em; }
590
- .jiaoer-aftermath-ledger b { margin-top:.22rem; color:#d8bb87; font:.68rem var(--sans); }
591
- .jiaoer-aftermath-speaker { margin:.55rem 0; padding:.45rem .6rem; border-left:2px solid #a95b48; color:#cdb89a; background:rgba(86,36,28,.2); font:.68rem/1.5 var(--sans); }
592
- .jiaoer-aftermath-choices { grid-template-columns:repeat(2,minmax(0,1fr)); }
593
- .jiaoer-aftermath-beat-4 .jiaoer-aftermath-panel { border-color:rgba(197,153,84,.66); }
594
- .jiaoer-aftermath-beat-4 .jiaoer-aftermath-speaker { border-color:#78a08c; background:rgba(38,71,58,.22); }
595
-
596
- .choice-button {
597
- position: relative;
598
- display: flex;
599
- flex-direction: column;
600
- align-items: flex-start;
601
- min-height: 72px;
602
- padding: .76rem .88rem;
603
- border: 0;
604
- border-left: 3px solid rgba(190,150,91,.58);
605
- color: #e9dcc5;
606
- text-align: left;
607
- background: rgba(236,218,182,.05);
608
- cursor: pointer;
609
- transition: transform .16s, background .16s, border-color .16s;
610
- }
611
- .choice-button b { font-size: .95rem; letter-spacing: .06em; }
612
- .choice-button span { margin-top: .32rem; color: #b4a48e; font: .74rem/1.5 var(--sans); }
613
- .choice-button:hover:not(:disabled):not([aria-disabled="true"]) { transform: translateX(3px); border-color: rgba(226,171,104,.9); background: rgba(157,45,37,.17); }
614
- .choice-button:focus-visible { outline: 0; background: rgba(157,45,37,.13); box-shadow: inset 3px 0 var(--gold-bright); }
615
- .choice-button[aria-disabled="true"]:focus-visible { opacity: .72; outline: 2px solid #cfaa67; outline-offset: 3px; }
616
-
617
- /* 拜访 hub:五条院约常驻可见;第二十夜的共同入口不藏在数字阈值后面。 */
618
- .visit-prompt { position: absolute; z-index: 4; top: 3%; left: 4%; right: 4%; display: grid; grid-template-columns: minmax(0,1.1fr) minmax(350px,.9fr); gap: 1rem; padding: .85rem 1rem; color: #efe2cb; background: rgba(24,16,13,.88); border-left: 3px solid var(--cinnabar); }
619
- .accord-panel { min-width: 0; padding-left: 1rem; border-left: 1px solid rgba(220,188,127,.24); }
620
- .accord-heading { display: flex; align-items: center; justify-content: space-between; color: #ddc79f; font: .72rem var(--sans); letter-spacing: .12em; }
621
- .accord-heading span { color: var(--gold-bright); }
622
- .accord-seals { display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .32rem; margin-top: .45rem; }
623
- .accord-seal { display: flex; align-items: center; gap: .35rem; min-width: 0; padding: .38rem .45rem; border: 1px solid rgba(220,188,127,.2); color: #817668; font: .64rem var(--sans); background: rgba(9,7,6,.34); }
624
- .accord-seal i { flex: none; display: grid; place-content: center; width: 1.25rem; height: 1.25rem; border: 1px solid currentColor; color: #766a5b; font-style: normal; }
625
- .accord-seal.complete { border-color: rgba(207,72,57,.55); color: #dec39a; background: rgba(117,31,24,.18); }
626
- .accord-seal.complete i { color: #d75c4d; transform: rotate(-3deg); }
627
- .accord-panel > small { display: block; margin-top: .45rem; color: #908373; font: .65rem/1.4 var(--sans); }
628
- .shared-invite { display: flex; width: 100%; flex-direction: column; align-items: flex-start; margin-top: .5rem; padding: .5rem .65rem; border: 1px solid rgba(216,172,95,.5); color: #ead7b7; text-align: left; background: rgba(128,43,31,.3); cursor: pointer; }
629
- .shared-invite b { font-size: .78rem; letter-spacing: .1em; }
630
- .shared-invite span { margin-top: .18rem; color: #b8a58a; font: .62rem/1.35 var(--sans); }
631
- .shared-invite:disabled { cursor: not-allowed; border-color: rgba(216,172,95,.2); color: #8e8273; background: rgba(34,25,21,.45); }
632
- .alliance-invite { border-color: rgba(91,151,137,.52); background: rgba(29,83,72,.28); }
633
- .alliance-invite:not(:disabled):hover { border-color: rgba(132,193,177,.8); background: rgba(35,105,88,.36); }
634
- .heroine-doors { position: absolute; z-index: 4; inset: 25% 3% 4%; display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .55rem; }
635
- .evening.has-shared .heroine-doors { top: 31%; }
636
- .door-card { position: relative; overflow: hidden; border: 1px solid rgba(229,205,163,.44); color: #f0e2ca; text-align: left; background: linear-gradient(180deg, rgba(27,18,14,.08), rgba(21,14,12,.93)); cursor: pointer; }
637
- .door-card::before { content: ""; position: absolute; inset: 7px; border: 1px solid rgba(240,214,169,.14); z-index: 2; pointer-events: none; }
638
- .door-card > span { position: absolute; z-index: 3; top: .75rem; left: .8rem; padding: .3rem .5rem; background: rgba(24,16,13,.82); color: #dbc397; font-size: .72rem; letter-spacing: .12em; }
639
- .door-card img { position: absolute; z-index: 1; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 68% center; filter: saturate(.78) brightness(.8); transition: transform .25s, filter .25s; }
640
- .door-card > div { position: absolute; z-index: 3; inset: auto 0 0; padding: 3.2rem .68rem .68rem; background: linear-gradient(transparent, rgba(16,10,8,.96) 50%); }
641
- .door-card b, .door-card small, .door-card em { display: block; }
642
- .door-card b { font-size: .92rem; letter-spacing: .05em; }
643
- .door-card small { margin-top: .3rem; color: #b6a68d; font: .68rem/1.5 var(--sans); }
644
- .door-card em { margin-top: .55rem; color: #d7b36b; font: normal .68rem var(--sans); }
645
- /* 门卡上的拜访次数:让「按她的第几次走」在界面上看得见。 */
646
- .door-knock { display: block; margin-top: .28rem; color: #9c8b70; font: normal .64rem var(--sans); font-style: normal; letter-spacing: .08em; }
647
- .door-forecast { display:grid; gap:.16rem; margin:.34rem 0 0; padding-top:.3rem; border-top:1px solid rgba(216,181,111,.18); font-family:var(--sans); }
648
- .door-forecast > div { display:grid; grid-template-columns:2.2rem minmax(0,1fr); gap:.25rem; align-items:baseline; }
649
- .door-forecast dt { color:#8d7a63; font-size:.55rem; letter-spacing:.08em; }
650
- .door-forecast dd { min-width:0; margin:0; overflow:hidden; color:#c8b89d; font-size:.58rem; text-overflow:ellipsis; white-space:nowrap; }
651
- .door-due { display:block; margin-top:.3rem; padding:.2rem .28rem; overflow:hidden; color:#d29579; background:rgba(117,44,32,.24); font:normal .56rem var(--sans); text-overflow:ellipsis; white-space:nowrap; }
652
- .door-card:hover img { transform: scale(1.035); filter: saturate(.92) brightness(.92); }
653
- .door-pan_jinlian { background-color: rgba(100,26,22,.2); }
654
- .door-li_pinger { background-color: rgba(132,98,44,.16); }
655
- .door-meng_yulou { background-color: rgba(67,106,92,.18); }
656
- .door-sun_xuee { background-color: rgba(120,69,38,.2); }
657
- .door-card.complete { opacity: .58; filter: grayscale(.45); cursor: default; }
658
- .door-card.cooling { opacity: .66; filter: grayscale(.35) sepia(.18); cursor: not-allowed; }
659
- .door-card.cooling > span { color: #b66d60; }
660
-
661
- /* 对话近景 */
662
- .dialogue-stage { background: #211712; }
663
- /* 单张整版之后,舞台级 scrim 与 CG 上的 100° 斜向 scrim 必然打架,统一撤掉。 */
664
- .dialogue-stage::after, .morning-stage::after { background: none; }
665
- .dialogue-panel { left: 3.5%; top: 6%; bottom: 5%; width: 40%; padding: 1.5rem; overflow: clip; }
666
- .want-line { margin: .75rem 0 1rem; padding: .7rem; border-left: 2px solid var(--gold); color: #a99982; font: .74rem/1.65 var(--sans); }
667
- .want-line b { color: #d8c29b; }
668
- .route-branch-memory { margin: -.25rem 0 .85rem; padding: .72rem .78rem; border: 1px solid rgba(106,154,137,.34); border-left: 3px solid #6f9d8c; background: linear-gradient(100deg,rgba(38,78,66,.3),rgba(21,17,14,.2)); }
669
- .route-branch-memory span,.route-branch-memory b { display: block; }
670
- .route-branch-memory span { color: #91b8a8; font: .58rem/1.4 var(--sans); letter-spacing: .1em; }
671
- .route-branch-memory b { margin-top: .28rem; color: #dfcfb2; font: 500 .76rem/1.45 var(--serif); }
672
- .route-branch-memory p { margin: .35rem 0 0; color: #b7a992; font: .68rem/1.55 var(--sans); }
673
- .route-branch-memory.branch-private { border-color: rgba(178,100,78,.4); border-left-color: #ad654e; background: linear-gradient(100deg,rgba(91,38,30,.3),rgba(21,17,14,.2)); }
674
- .route-branch-memory.branch-private span { color: #d08a75; }
675
- .choice-stack { display: flex; flex-direction: column; gap: .6rem; }
676
- .choice-stack .choice-button { min-height: 62px; width: 100%; }
677
- .consent-note { margin: .75rem 0 0; color: #9b8c78; font: .75rem/1.55 var(--sans); }
678
- .night-talk-stage { overflow: hidden; background: #1a100e; }
679
- .night-talk-stage::after { background: linear-gradient(96deg,rgba(13,8,7,.97) 0%,rgba(13,8,7,.9) 43%,rgba(13,8,7,.14) 68%), linear-gradient(0deg,rgba(76,35,24,.25),transparent 62%); }
680
- .night-talk-cg { filter: saturate(.78) brightness(.76) contrast(1.08); transition: filter .4s ease, transform .4s ease; }
681
- .night-talk-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 50%; padding: 1.35rem; overflow: clip; border-color: rgba(204,149,92,.58); }
682
- .night-talk-prop { position: absolute; z-index: 4; right: 4%; bottom: 5%; width: min(180px,17vw); aspect-ratio: 1; display: grid; place-items: center; border: 1px solid rgba(222,184,117,.4); border-radius: 50%; color: #d5b47b; background: radial-gradient(circle,rgba(82,48,31,.92),rgba(24,15,12,.94) 68%); box-shadow: 0 20px 55px rgba(0,0,0,.55), inset 0 0 0 8px rgba(218,178,105,.04); transform: rotate(-7deg); }
683
- .night-talk-prop::before { content: ""; position: absolute; inset: 12%; border: 1px solid rgba(222,184,117,.22); border-radius: 50%; }
684
- .night-talk-prop span { position: relative; max-width: 5em; text-align: center; font: 1rem/1.45 var(--serif); letter-spacing: .16em; }
685
- .night-talk-voice { margin: .85rem 0; padding: .78rem .9rem; border-left: 3px solid rgba(196,119,78,.72); color: #d8c5a8; background: rgba(79,40,28,.24); }
686
- .night-talk-voice span, .night-talk-voice b { display: block; }
687
- .night-talk-voice span { color: #b98b6f; font: .58rem var(--sans); letter-spacing: .14em; }
688
- .night-talk-voice b { margin-top: .15rem; color: #efddc0; font-size: .95rem; }
689
- .night-talk-voice p { margin: .45rem 0 0; font: .8rem/1.75 var(--sans); }
690
- .night-talk-question { margin: .6rem 0; color: #c9ad83; font: .7rem/1.6 var(--sans); }
691
- .night-talk-memory { margin: .7rem 0; padding: .65rem .75rem; border: 1px solid rgba(148,174,162,.26); background: rgba(48,70,65,.22); }
692
- .night-talk-memory span { display: block; color: #9fbcaf; font: .58rem var(--sans); letter-spacing: .15em; }
693
- .night-talk-memory p { margin: .35rem 0 0; color: #d4d8c9; font: .69rem/1.62 var(--sans); }
694
- .night-talk-continuity { margin: .7rem 0; padding: .65rem .75rem; border-left: 3px solid #a88655; background: rgba(130,89,46,.14); }
695
- .night-talk-continuity b { display: block; color: #e0c08a; font: .76rem/1.4 var(--serif); }
696
- .night-talk-continuity p { margin: .3rem 0 0; color: #cbbca5; font: .66rem/1.55 var(--sans); }
697
- .night-talk-continuity.continuity-reframed { border-left-color: #779e91; background: rgba(55,91,80,.18); }
698
- .night-talk-continuity.continuity-reframed b { color: #add0c2; }
699
- .night-talk-continuity.continuity-kept { border-left-color: #b8654d; background: rgba(111,50,39,.18); }
700
- .night-talk-continue { width: 100%; }
701
- .night-talk-result::after { background: linear-gradient(96deg,rgba(13,8,7,.98) 0%,rgba(13,8,7,.91) 46%,rgba(98,61,31,.12) 72%), linear-gradient(0deg,rgba(64,36,20,.3),transparent 62%); }
702
- .night-talk-result-panel { border-color: rgba(218,177,103,.74); }
703
- .night-result-origin { display:flex; gap:.55rem; align-items:baseline; margin:.58rem 0; padding:.42rem .55rem; border-left:2px solid #a76447; background:rgba(83,42,28,.2); }
704
- .night-result-origin span { color:#9b755f; font:.56rem var(--sans); letter-spacing:.08em; }
705
- .night-result-origin b { color:#dcb783; font:.7rem/1.35 var(--serif); }
706
- .night-result-transcript { display:grid; gap:.36rem; margin:.58rem 0; padding:0; list-style:none; }
707
- .night-result-transcript li { display:grid; grid-template-columns:1.45rem 1fr; gap:.48rem; align-items:start; padding:.46rem .54rem; border-left:1px solid rgba(185,132,76,.44); background:rgba(55,31,22,.22); }
708
- .night-result-transcript li > span { display:grid; place-items:center; width:1.28rem; height:1.28rem; border:1px solid rgba(195,143,87,.36); border-radius:50%; color:#ae7659; font:.56rem var(--sans); }
709
- .night-result-transcript b { display:block; color:#d0b18a; font:.65rem/1.35 var(--serif); }
710
- .night-result-transcript p { display:-webkit-box; margin:.17rem 0 0; overflow:hidden; color:#9d8a75; font:.58rem/1.45 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
711
- .night-talk-consequence { margin: .85rem 0; padding: .62rem .72rem; border-top: 1px solid rgba(222,184,117,.25); border-bottom: 1px solid rgba(222,184,117,.25); color: #dfbd83; text-align: center; font: .7rem/1.5 var(--sans); letter-spacing: .08em; }
712
- .ordinary-night-coda::after { background: linear-gradient(96deg,rgba(13,8,7,.98) 0%,rgba(13,8,7,.9) 48%,rgba(88,52,35,.12) 76%),radial-gradient(48% 72% at 80% 18%,rgba(185,112,64,.16),transparent 72%); }
713
- .ordinary-night-coda-panel { border-color: rgba(205,151,92,.7); }
714
- .night-coda-context { display: grid; grid-template-columns: auto 1fr; gap: .65rem; align-items: start; margin: .8rem 0; padding: .68rem .75rem; border-left: 2px solid rgba(196,119,78,.78); color: #bfae96; background: rgba(83,43,29,.22); font: .67rem/1.58 var(--sans); }
715
- .night-coda-context b { color: #e2bd84; white-space: nowrap; font: .72rem/1.45 var(--serif); }
716
- .night-coda-context span { min-width: 0; }
717
- .night-coda-transcript { display:grid; gap:.38rem; margin:.65rem 0; padding:0; list-style:none; }
718
- .night-coda-transcript li { display:grid; grid-template-columns:1.5rem 1fr; gap:.48rem; align-items:start; padding:.48rem .55rem; border-left:1px solid rgba(188,129,82,.42); background:rgba(52,29,21,.2); }
719
- .night-coda-transcript li > span { display:grid; place-items:center; width:1.35rem; height:1.35rem; border:1px solid rgba(194,143,91,.38); border-radius:50%; color:#a87759; font:.58rem var(--sans); }
720
- .night-coda-transcript b { display:block; color:#c9aa86; font:.66rem/1.35 var(--serif); }
721
- .night-coda-transcript p { display:-webkit-box; margin:.18rem 0 0; overflow:hidden; color:#9f8e7d; font:.58rem/1.46 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
722
- .intimacy-memory { margin:.65rem 0; padding:.62rem .68rem; border:1px solid rgba(105,157,134,.34); background:linear-gradient(120deg,rgba(38,74,61,.22),rgba(0,0,0,.18)); }
723
- .intimacy-memory header { display:flex; justify-content:space-between; gap:.6rem; margin-bottom:.42rem; color:#a8cabc; font:.62rem var(--sans); }
724
- .intimacy-memory header span { color:#7f9b90; }
725
- .intimacy-memory > div { padding:.42rem .48rem; border-left:2px solid #6f9d8b; background:rgba(0,0,0,.17); }
726
- .intimacy-memory > div + div { margin-top:.32rem; }
727
- .intimacy-memory small,.intimacy-memory b { display:block; }
728
- .intimacy-memory small { color:#78978b; font:.55rem var(--sans); letter-spacing:.08em; }
729
- .intimacy-memory b { margin-top:.16rem; color:#d4e0d8; font:.7rem/1.35 var(--serif); }
730
- .intimacy-memory p { display:-webkit-box; margin:.25rem 0 0; overflow:hidden; color:#a9b9b0; font:.62rem/1.48 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
731
- .intimacy-memory em { display:-webkit-box; margin:.25rem 0 0; overflow:hidden; color:#8fa59b; font:normal .58rem/1.48 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
732
- .ordinary-night-memory { margin:.55rem 0; padding:.58rem .65rem; border:1px solid rgba(177,126,75,.3); border-left:2px solid #a96748; background:linear-gradient(110deg,rgba(91,48,31,.22),rgba(0,0,0,.14)); }
733
- .ordinary-night-memory small,.ordinary-night-memory b { display:block; }
734
- .ordinary-night-memory small { color:#a37960; font:.55rem var(--sans); letter-spacing:.08em; }
735
- .ordinary-night-memory b { margin-top:.16rem; color:#e0c5a3; font:.7rem/1.35 var(--serif); }
736
- .ordinary-night-memory p { display:-webkit-box; margin:.24rem 0 0; overflow:hidden; color:#bca992; font:.61rem/1.48 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
737
- .night-conversation-life-memory { margin:.55rem 0; padding:.62rem .68rem; border:1px solid rgba(112,155,139,.3); border-left:2px solid #6f9b8b; background:linear-gradient(110deg,rgba(45,75,66,.24),rgba(0,0,0,.14)); }
738
- .night-conversation-life-memory small,.night-conversation-life-memory b,.night-conversation-life-memory em,.night-conversation-life-memory .stake { display:block; }
739
- .night-conversation-life-memory small { color:#88aa9d; font:.55rem var(--sans); letter-spacing:.08em; }
740
- .night-conversation-life-memory b { margin-top:.17rem; color:#cae0d3; font:.7rem/1.35 var(--serif); }
741
- .night-conversation-life-memory .stake { margin-top:.22rem; color:#c5aa78; font:.56rem/1.4 var(--sans); }
742
- .night-conversation-life-memory p { display:-webkit-box; margin:.25rem 0 0; overflow:hidden; color:#adc0b6; font:.61rem/1.48 var(--sans); -webkit-line-clamp:3; -webkit-box-orient:vertical; }
743
- .night-conversation-life-memory em { margin-top:.3rem; color:#86a99b; font:.56rem/1.45 var(--sans); font-style:normal; }
744
- .night-talk-observer-reaction { margin:.6rem 0; padding:.58rem .68rem; border:1px solid rgba(112,155,139,.32); border-left:3px solid #6f9b8b; background:rgba(45,75,66,.22); }
745
- .night-talk-observer-reaction span,.night-talk-observer-reaction b { display:block; }
746
- .night-talk-observer-reaction span { color:#83a496; font:.56rem var(--sans); letter-spacing:.09em; }
747
- .night-talk-observer-reaction b { margin-top:.2rem; color:#cae0d3; font:.75rem var(--serif); }
748
- .night-talk-observer-reaction p { margin:.28rem 0 0; color:#adbbb3; font:.63rem/1.5 var(--sans); }
749
- .night-talk-stake { margin:.58rem 0; padding:.58rem .68rem; border:1px solid rgba(197,170,120,.3); border-left:3px solid #b58d52; background:linear-gradient(110deg,rgba(92,65,31,.24),rgba(0,0,0,.15)); }
750
- .night-talk-stake span,.night-talk-stake b { display:block; }
751
- .night-talk-stake span { color:#a88c61; font:.56rem var(--sans); letter-spacing:.1em; }
752
- .night-talk-stake b { margin-top:.2rem; color:#e2c995; font:.72rem/1.38 var(--serif); }
753
- .night-talk-stake p { margin:.28rem 0 0; color:#bfae8f; font:.63rem/1.5 var(--sans); }
754
- .pair-interlude-memory { margin:.55rem 0; padding:.58rem .65rem; border:1px solid rgba(111,151,131,.34); border-left:2px solid #6f9883; background:linear-gradient(110deg,rgba(35,72,58,.22),rgba(0,0,0,.14)); }
755
- .pair-interlude-memory small,.pair-interlude-memory b { display:block; }
756
- .pair-interlude-memory small { color:#78998a; font:.55rem var(--sans); letter-spacing:.08em; }
757
- .pair-interlude-memory b { margin-top:.16rem; color:#cee0d6; font:.7rem/1.35 var(--serif); }
758
- .pair-interlude-memory p { display:-webkit-box; margin:.24rem 0 0; overflow:hidden; color:#a9bcb2; font:.61rem/1.48 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
759
- .aftermath-pair-memory { margin:.45rem 0; padding:.48rem .58rem; border-left:2px solid #6f9883; color:#a5baaf; font:.6rem/1.4 var(--sans); background:rgba(35,72,58,.2); }
760
- .aftermath-pair-memory span,.aftermath-pair-memory b,.aftermath-pair-memory small { display:block; }
761
- .aftermath-pair-memory span { color:#78998a; letter-spacing:.08em; }
762
- .aftermath-pair-memory b { margin-top:.15rem; color:#cee0d6; font-size:.68rem; }
763
- .aftermath-pair-memory small { margin-top:.16rem; color:#a7b9b0; line-height:1.45; }
764
- .aftermath-stage { overflow: hidden; background: radial-gradient(circle at 70% 20%, #4a3025, #17100d 72%); }
765
- .aftermath-stage::after { background: linear-gradient(90deg, rgba(15,10,8,.96) 0%, rgba(15,10,8,.82) 39%, rgba(15,10,8,.18) 56%, transparent 72%); }
766
- .aftermath-main { position: absolute; z-index: 1; inset: 0 0 0 38%; background-position: center 14%; background-size: cover; filter: saturate(.94) brightness(.94) contrast(1.02); }
767
- .aftermath-observer { position: absolute; z-index: 4; top: auto; right: 2.5%; bottom: 4%; width: min(150px,12vw); margin: 0; color: #e5d4b8; opacity: .68; }
768
- .aftermath-observer img { display: block; width: 100%; aspect-ratio: 4/5; object-fit: cover; object-position: 50% 15%; filter: saturate(.86) brightness(.9); mask-image: linear-gradient(0deg,transparent 0%,#000 22%,#000 100%); }
769
- .aftermath-observer figcaption { display: flex; align-items: baseline; gap: .35rem; margin-top: .18rem; }
770
- .aftermath-observer figcaption span, .aftermath-observer figcaption b { display: inline; }
771
- .aftermath-observer figcaption span { color: #aa936e; font: .64rem var(--sans); letter-spacing: .08em; }
772
- .aftermath-observer figcaption b { font-size: .82rem; }
773
- .aftermath-panel { z-index: 5; left: 3.5%; top: 50%; bottom: auto; width: min(42%,640px); max-height: 88%; padding: 1.35rem; overflow: clip; transform: translateY(-50%); }
774
- .aftermath-echo { margin: .7rem 0; padding: .62rem .7rem; border-left: 2px solid var(--cinnabar); background: rgba(0,0,0,.22); }
775
- .aftermath-echo span, .aftermath-echo b, .aftermath-echo small { display: block; }
776
- .aftermath-echo span { color: #a59172; font: .6rem var(--sans); letter-spacing: .12em; }
777
- .aftermath-echo b { margin-top: .22rem; color: #dfc69d; font-size: .78rem; }
778
- .aftermath-echo small { display: -webkit-box; overflow: hidden; margin-top: .25rem; color: #9e8e78; font: .67rem/1.5 var(--sans); -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
779
- .aftermath-route-stake { margin: .6rem 0; padding: .6rem .7rem; border: 1px solid rgba(190,155,93,.3); border-left: 3px solid #b58d52; background: linear-gradient(110deg,rgba(91,63,28,.22),rgba(0,0,0,.15)); }
780
- .aftermath-route-stake span, .aftermath-route-stake b { display: block; }
781
- .aftermath-route-stake span { color: #a78a60; font: .56rem var(--sans); letter-spacing: .1em; }
782
- .aftermath-route-stake b { margin-top: .2rem; color: #e1c58f; font: .72rem/1.4 var(--serif); }
783
- .aftermath-route-stake p { margin: .28rem 0 0; color: #bca98a; font: .63rem/1.5 var(--sans); }
784
- .aftermath-question { margin: .55rem 0; color: #c7b594; font: .72rem/1.55 var(--sans); }
785
- .aftermath-story .aftermath-main { filter: saturate(.94) brightness(.94) contrast(1.02); animation: scene-enter .42s ease both; }
786
- .aftermath-stage.milestone-chapter .aftermath-main { inset: 0 0 0 34%; background-position: center; mask-image: none; filter: saturate(.92) brightness(.9) contrast(1.03); }
787
- .aftermath-stage.milestone-chapter::after { background: linear-gradient(90deg,rgba(13,9,8,.96) 0%,rgba(13,9,8,.82) 42%,rgba(13,9,8,.14) 61%,transparent 76%); }
788
- .aftermath-stage.milestone-chapter .aftermath-panel { border-color: rgba(210,160,92,.58); box-shadow: 0 22px 70px rgba(0,0,0,.56); }
789
- .aftermath-story-panel { display: flex; flex-direction: column; }
790
- .aftermath-story-quote { margin: .8rem 0; padding: .82rem .95rem; border: 0; border-left: 3px solid var(--cinnabar); background: linear-gradient(110deg,rgba(99,42,31,.18),rgba(0,0,0,.16)); }
791
- .aftermath-story-quote span, .aftermath-story-quote b { display: block; }
792
- .aftermath-story-quote span { color: #a28e70; font: .62rem var(--sans); letter-spacing: .12em; }
793
- .aftermath-story-quote b { margin-top: .25rem; color: #efd5a8; font-size: .92rem; }
794
- .aftermath-story-quote p { margin: .55rem 0 0; color: #dfcdb0; font: .88rem/1.78 var(--sans); }
795
- .aftermath-resolution .aftermath-main { filter:saturate(.94) brightness(.92) contrast(1.03); animation:scene-enter .42s ease both; }
796
- .aftermath-resolution-panel { display:flex; flex-direction:column; border-color:rgba(185,132,79,.66); }
797
- .route-resolution-transcript { display:grid; gap:.36rem; margin:.58rem 0; padding:0; list-style:none; }
798
- .route-resolution-transcript li { display:grid; grid-template-columns:1.45rem 1fr; gap:.5rem; align-items:start; padding:.48rem .56rem; border-left:1px solid rgba(166,126,83,.48); background:rgba(48,30,22,.24); }
799
- .route-resolution-transcript li > span { display:grid; place-items:center; width:1.28rem; height:1.28rem; border:1px solid rgba(190,145,92,.38); border-radius:50%; color:#b68461; font:.57rem var(--sans); }
800
- .route-resolution-transcript b { display:block; color:#ceb793; font:.65rem/1.35 var(--serif); }
801
- .route-resolution-transcript p { display:-webkit-box; margin:.17rem 0 0; overflow:hidden; color:#a79984; font:.58rem/1.45 var(--sans); -webkit-line-clamp:2; -webkit-box-orient:vertical; }
802
- .route-resolution-quote { border-left-color:#ba7b4f; background:linear-gradient(110deg,rgba(89,48,34,.28),rgba(0,0,0,.24)); }
803
- .aftermath-continue { align-self: flex-start; margin-top: .85rem; }
804
-
805
- /* 个人亲密后的余夜:主画面从册页 CG 回到她的近景,右上保留刚才那页作为记忆。 */
806
- .personal-afterglow-stage { overflow: hidden; background: radial-gradient(circle at 72% 26%,#5a372c,#170f0c 70%); }
807
- .personal-afterglow-stage::after { background: linear-gradient(90deg,rgba(14,9,7,.98) 0%,rgba(14,9,7,.8) 44%,rgba(14,9,7,.1) 76%); }
808
- .afterglow-close { position: absolute; z-index: 1; inset: 0 0 0 34%; background-position: center 16%; background-size: cover; filter: saturate(.82) brightness(.68); mask-image: linear-gradient(90deg,transparent,#000 23%); }
809
- .afterglow-memory { position: absolute; z-index: 4; top: 5%; right: 3%; width: min(240px,20vw); margin: 0; padding: .5rem; border: 1px solid rgba(222,188,123,.46); color: #c9b493; background: rgba(20,13,11,.9); box-shadow: 0 18px 50px rgba(0,0,0,.5); }
810
- .afterglow-memory img { width: 100%; aspect-ratio: 16/10; object-fit: cover; filter: saturate(.72) brightness(.78); }
811
- .afterglow-memory figcaption { margin-top: .4rem; font: .64rem/1.4 var(--sans); }
812
- .personal-afterglow-panel { z-index: 5; left: 3.5%; top: 4%; bottom: 4%; width: 46%; padding: 1.3rem; overflow: clip; }
813
- .afterglow-lead { margin: .7rem 0; padding: .65rem .75rem; border-left: 2px solid var(--gold); color: #b7a58b; font: .72rem/1.65 var(--sans); background: rgba(0,0,0,.2); }
814
-
815
- /* 个人亲密的第二章:不再“一选就天亮”,把亲近怎样进入共同生活写成三拍余夜后章。 */
816
- .personal-afterglow-aftermath-stage { overflow:hidden; background:radial-gradient(circle at 75% 20%,#59392f,#160e0c 72%); }
817
- .personal-afterglow-aftermath-stage::after { background:linear-gradient(90deg,rgba(13,8,7,.99) 0%,rgba(13,8,7,.88) 48%,rgba(13,8,7,.12) 78%),linear-gradient(0deg,rgba(70,35,23,.3),transparent 62%); }
818
- .personal-afterglow-aftermath-close { position:absolute; z-index:1; inset:0 0 0 31%; background-position:center 15%; background-size:cover; filter:saturate(.78) brightness(.66) contrast(1.04); mask-image:linear-gradient(90deg,transparent,#000 22%); }
819
- .personal-afterglow-aftermath-memory { position:absolute; z-index:4; top:4%; right:3%; width:min(230px,19vw); margin:0; padding:.45rem; border:1px solid rgba(220,184,116,.45); background:rgba(20,13,11,.92); box-shadow:0 18px 52px rgba(0,0,0,.55); }
820
- .personal-afterglow-aftermath-memory img { display:block; width:100%; aspect-ratio:16/10; object-fit:cover; filter:saturate(.7) brightness(.76); }
821
- .personal-afterglow-aftermath-memory figcaption span,.personal-afterglow-aftermath-memory figcaption b { display:block; }
822
- .personal-afterglow-aftermath-memory figcaption span { margin-top:.4rem; color:#99876e; font:.56rem var(--sans); letter-spacing:.12em; }
823
- .personal-afterglow-aftermath-memory figcaption b { margin-top:.16rem; color:#d9c29e; font:.72rem/1.35 var(--serif); }
824
- .personal-afterglow-aftermath-panel { z-index:5; left:3.5%; top:4%; bottom:4%; width:49%; padding:1.2rem 1.3rem; overflow:clip; border-color:rgba(209,159,93,.5); }
825
- .personal-afterglow-aftermath-ledger { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.45rem; margin:.75rem 0; }
826
- .personal-afterglow-aftermath-ledger span { min-width:0; padding:.65rem .7rem; border:1px solid rgba(218,181,117,.22); background:rgba(0,0,0,.23); }
827
- .personal-afterglow-aftermath-ledger span.current { border-color:rgba(191,74,56,.58); background:rgba(103,38,29,.2); }
828
- .personal-afterglow-aftermath-ledger span.settled { border-color:rgba(102,157,130,.55); background:rgba(43,83,68,.2); }
829
- .personal-afterglow-aftermath-ledger small,.personal-afterglow-aftermath-ledger b,.personal-afterglow-aftermath-ledger em { display:block; }
830
- .personal-afterglow-aftermath-ledger small { color:#9f8b6d; font:.55rem var(--sans); letter-spacing:.1em; }
831
- .personal-afterglow-aftermath-ledger b { margin-top:.24rem; color:#e3c79c; font:.72rem/1.4 var(--serif); }
832
- .personal-afterglow-aftermath-ledger em { margin-top:.28rem; color:#9f907b; font:.6rem/1.45 var(--sans); font-style:normal; }
833
- .afterglow-aftermath-question { margin:.65rem 0; padding:.62rem .72rem; border-left:2px solid var(--cinnabar); color:#c5b293; font:.7rem/1.6 var(--sans); background:rgba(0,0,0,.2); }
834
- .personal-afterglow-aftermath-choices { display:grid; grid-template-columns:1fr; gap:.45rem; }
835
- .personal-afterglow-aftermath-continue { width:100%; }
836
- .personal-afterglow-aftermath-stage.is-resolved .personal-afterglow-aftermath-panel { border-color:rgba(105,164,135,.56); }
837
-
838
- /* 连续失手后的可恢复崩盘。三人不是装饰头像,当前最可能救局的一对会被点亮。 */
839
- .house-crisis-stage { overflow: hidden; background: #120c0a; }
840
- .house-crisis-stage::after { background: linear-gradient(90deg,rgba(12,8,7,.98) 0%,rgba(12,8,7,.86) 49%,rgba(12,8,7,.18) 80%), linear-gradient(0deg,rgba(49,16,12,.52),transparent 65%); }
841
- .house-crisis-panel { z-index: 5; left: 3.5%; top: 4%; bottom: 4%; width: 49%; padding: 1.3rem; overflow: clip; border-color: rgba(195,69,55,.55); }
842
- .crisis-cast { position: absolute; z-index: 4; right: 3%; top: 7%; bottom: 7%; width: 42%; display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .55rem; align-items: center; }
843
- .crisis-cast figure { position: relative; height: 68%; min-height: 300px; margin: 0; overflow: hidden; border: 1px solid rgba(220,188,127,.22); background: rgba(18,12,10,.82); filter: saturate(.62) brightness(.72); }
844
- .crisis-cast figure.rescue-ready { border-color: rgba(224,184,104,.68); filter: saturate(.9) brightness(.92); transform: translateY(-1rem); box-shadow: 0 16px 48px rgba(0,0,0,.5); }
845
- .crisis-cast figure.answering { border-color: rgba(224,184,104,.88); filter: none; transform: translateY(-1rem); box-shadow: 0 16px 48px rgba(0,0,0,.58); }
846
- .crisis-cast img { width: 100%; height: 100%; object-fit: cover; }
847
- .crisis-cast figcaption { position: absolute; inset: auto 0 0; padding: 2.8rem .55rem .65rem; background: linear-gradient(transparent,rgba(13,9,8,.97) 48%); }
848
- .crisis-cast b, .crisis-cast small { display: block; }
849
- .crisis-cast b { color: #ecd8b7; font-size: .82rem; }
850
- .crisis-cast small { margin-top: .25rem; color: #aa987d; font: .62rem/1.35 var(--sans); }
851
- .crisis-ledger { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: .35rem; margin: .7rem 0; }
852
- .crisis-ledger span { padding: .5rem; border: 1px solid rgba(202,82,65,.25); color: #9e8973; font: .62rem var(--sans); background: rgba(54,14,12,.18); }
853
- .crisis-ledger b { display: block; margin-top: .2rem; color: #e1b58e; font-size: .72rem; }
854
- .crisis-rule { margin: .6rem 0; padding: .65rem .75rem; border-left: 2px solid var(--cinnabar); color: #b9a287; font: .7rem/1.55 var(--sans); background: rgba(0,0,0,.24); }
855
- .crisis-reply-ledger { display:grid; gap:.35rem; margin:.65rem 0; padding:0; list-style:none; }
856
- .crisis-reply-ledger li { display:grid; grid-template-columns:1.45rem 1fr; gap:.45rem; padding:.5rem .58rem; border:1px solid rgba(199,151,91,.25); background:rgba(32,22,17,.58); }
857
- .crisis-reply-ledger li > span { display:grid; width:1.35rem; height:1.35rem; place-items:center; border:1px solid rgba(204,163,101,.48); color:#d0ad76; font:.62rem var(--sans); }
858
- .crisis-reply-ledger b,.crisis-reply-ledger p,.crisis-reply-ledger small { display:block; }
859
- .crisis-reply-ledger b { color:#dbc19b; font:.68rem/1.4 var(--serif); }
860
- .crisis-reply-ledger p { margin:.18rem 0; color:#bba98e; font:.62rem/1.45 var(--sans); }
861
- .crisis-reply-ledger small { color:#877866; font:.56rem/1.45 var(--sans); }
862
- .crisis-current-reply { margin:.7rem 0 0; padding:.75rem; border:1px solid rgba(206,151,82,.48); background:linear-gradient(135deg,rgba(73,45,25,.4),rgba(20,13,11,.82)); }
863
- .crisis-current-reply header span,.crisis-current-reply header b { display:block; }
864
- .crisis-current-reply header span { color:#a98e69; font:.58rem var(--sans); letter-spacing:.08em; }
865
- .crisis-current-reply header b { margin-top:.25rem; color:#ecd3aa; font:.86rem/1.35 var(--serif); }
866
- .crisis-current-reply blockquote { margin:.55rem 0; padding:.55rem .65rem; border-left:2px solid #c67b51; color:#dcc8aa; font:.7rem/1.6 var(--serif); background:rgba(0,0,0,.22); }
867
- .crisis-current-reply dl { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.4rem; margin:0; }
868
- .crisis-current-reply dl div { padding:.5rem; border:1px solid rgba(190,142,82,.2); background:rgba(12,8,7,.3); }
869
- .crisis-current-reply dt { color:#927d63; font:.55rem var(--sans); }
870
- .crisis-current-reply dd { margin:.2rem 0 0; color:#cdb695; font:.62rem/1.45 var(--sans); }
871
- .crisis-current-reply > p { margin:.55rem 0; color:#a8977f; font:.62rem/1.5 var(--sans); }
872
- .crisis-reply-continue { width:100%; }
873
- .crisis-structure-choices { margin-top:.65rem; }
874
-
875
- /* 危机止血后的四拍制度收尾:三个人持续在场,临时救法必须接受追问。 */
876
- .crisis-aftermath-stage { overflow:hidden; background:#110b09; }
877
- .crisis-aftermath-stage::before { background-position:center; filter:saturate(.58) brightness(.36) contrast(1.1); }
878
- .crisis-aftermath-stage::after { background:linear-gradient(90deg,rgba(12,8,7,.99) 0%,rgba(12,8,7,.94) 47%,rgba(12,8,7,.16) 75%,rgba(12,8,7,.48) 100%),linear-gradient(0deg,rgba(62,18,14,.4),transparent 68%); }
879
- .crisis-aftermath-panel { z-index:5; left:3.5%; top:4%; bottom:4%; width:51%; padding:1.25rem 1.35rem; overflow:clip; border-color:rgba(182,70,54,.58); }
880
- .crisis-aftermath-cast { position:absolute; z-index:3; inset:6% 2.5% 6% 58%; display:flex; gap:.45rem; align-items:stretch; }
881
- .crisis-aftermath-cast figure { position:relative; flex:1 1 0; min-width:0; margin:0; overflow:hidden; border:1px solid rgba(206,174,119,.2); background:#17100e; opacity:.48; filter:grayscale(.32) saturate(.62); transform:translateY(.7rem); transition:flex .25s,opacity .25s,filter .25s,transform .25s; }
882
- .crisis-aftermath-cast figure.rescue-pair { border-color:rgba(205,146,83,.38); }
883
- .crisis-aftermath-cast figure.speaking { flex:1.24 1 0; opacity:1; filter:none; transform:translateY(0); border-color:rgba(220,166,89,.78); box-shadow:0 14px 40px rgba(0,0,0,.52); }
884
- .crisis-aftermath-cast img { width:100%; height:100%; object-fit:cover; object-position:center top; }
885
- .crisis-aftermath-cast figure::after { content:""; position:absolute; inset:0; background:linear-gradient(0deg,rgba(12,8,7,.96),transparent 58%); }
886
- .crisis-aftermath-cast figcaption { position:absolute; z-index:1; inset:auto 0 0; padding:2.5rem .48rem .55rem; }
887
- .crisis-aftermath-cast figcaption i { display:grid; width:1.25rem; height:1.25rem; place-items:center; margin-bottom:.3rem; border:1px solid #cba66d; color:#d5b27b; font-style:normal; }
888
- .crisis-aftermath-cast figcaption b,.crisis-aftermath-cast figcaption small { display:block; }
889
- .crisis-aftermath-cast figcaption b { color:#e6d1af; font-size:.72rem; }
890
- .crisis-aftermath-cast figcaption small { margin-top:.2rem; color:#9d8c75; font:.58rem var(--sans); }
891
- .crisis-aftermath-ledger { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:.35rem; margin:.7rem 0 .5rem; }
892
- .crisis-aftermath-ledger span { min-width:0; padding:.48rem .55rem; border:1px solid rgba(192,91,67,.24); background:rgba(61,19,15,.18); }
893
- .crisis-aftermath-ledger small,.crisis-aftermath-ledger b { display:block; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
894
- .crisis-aftermath-ledger small { color:#8d7764; font:.56rem var(--sans); letter-spacing:.08em; }
895
- .crisis-aftermath-ledger b { margin-top:.2rem; color:#d9b68d; font:.68rem var(--sans); }
896
- .crisis-aftermath-rule { margin:.55rem 0; padding:.55rem .65rem; border-left:2px solid #a74438; color:#b7a18a; background:rgba(0,0,0,.22); font:.67rem/1.52 var(--sans); }
897
- .crisis-aftermath-choices { grid-template-columns:repeat(2,minmax(0,1fr)); }
898
- .crisis-aftermath-beat-4 .crisis-aftermath-panel { border-color:rgba(108,151,126,.62); }
899
- .crisis-aftermath-beat-4 .crisis-aftermath-rule { border-color:#6e9c83; background:rgba(36,70,55,.18); }
900
-
901
- /* 双院关系事件:两个人各占半幅,不再把她们画成围绕玩家排列的门卡。 */
902
- .pair-interlude-stage { overflow: hidden; background: radial-gradient(circle at 72% 30%,#4b3328,#150e0c 72%); }
903
- .pair-interlude-stage::after { background: linear-gradient(90deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.88) 46%,rgba(13,9,8,.16) 76%); }
904
- .pair-interlude-panel { z-index: 5; left: 3.5%; top: 4%; bottom: 4%; width: 47%; padding: 1.3rem; overflow: clip; }
905
- .pair-portraits { position: absolute; z-index: 2; inset: 0 0 0 43%; display: grid; grid-template-columns: 1fr 1fr; }
906
- .pair-portraits figure { position: relative; min-width: 0; margin: 0; overflow: hidden; }
907
- .pair-portraits figure:first-child { border-right: 1px solid rgba(220,188,127,.3); }
908
- .pair-portraits img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 14%; filter: saturate(.48) brightness(.48); transition: filter .28s ease, transform .28s ease; }
909
- .pair-portraits figure.speaking img { filter: saturate(.88) brightness(.78); transform: scale(1.018); }
910
- .pair-portraits figure.waiting figcaption { opacity: .66; }
911
- .pair-portraits figcaption { position: absolute; inset: auto .7rem 4% .7rem; padding: 2.4rem .75rem .8rem; color: #ead8b9; background: linear-gradient(transparent,rgba(12,8,7,.94) 45%); }
912
- .pair-portraits span, .pair-portraits b { display: block; }
913
- .pair-portraits span { color: #ae9670; font: .62rem var(--sans); letter-spacing: .12em; }
914
- .pair-portraits b { margin-top: .2rem; font-size: 1rem; }
915
- .pair-portraits p { margin: .45rem 0 0; color: #c1ad8e; font: .7rem/1.55 var(--sans); }
916
- .pair-trust { display: flex; justify-content: space-between; gap: .8rem; margin: .7rem 0; padding: .65rem .75rem; border: 1px solid rgba(220,188,127,.24); color: #a18e73; font: .68rem var(--sans); background: rgba(0,0,0,.2); }
917
- .pair-trust b { color: #dec28f; }
918
- .pair-rule { margin: .55rem 0; color: #b5a184; font: .7rem/1.55 var(--sans); }
919
- .pair-progress { margin: .65rem 0; color: #c8ad7b; font: .66rem var(--sans); letter-spacing: .08em; }
920
- .pair-current-line { margin: .65rem 0; padding: .8rem .9rem; border-left: 2px solid var(--cinnabar); color: #dbc6a7; font: .78rem/1.7 var(--sans); background: rgba(0,0,0,.22); }
921
- .pair-current-line span { display: block; margin-bottom: .28rem; color: #d7aa69; font-size: .63rem; letter-spacing: .12em; }
922
- .pair-joint-line { margin: .65rem 0; padding: .75rem .85rem; border-left: 2px solid #7e9d8d; color: #c6d8cc; font: .75rem/1.65 var(--sans); background: rgba(49,78,67,.18); }
923
- .pair-joint-line span { display: block; margin-bottom: .28rem; color: #87aa99; font-size: .6rem; letter-spacing: .12em; }
924
- .pair-aftermath-stage { background:radial-gradient(circle at 77% 26%,#355248,#16110e 72%); }
925
- .pair-aftermath-stage::before { content:""; position:absolute; z-index:3; inset:0; pointer-events:none; opacity:.28; background:repeating-linear-gradient(104deg,transparent 0 84px,rgba(121,166,144,.14) 85px,transparent 87px); }
926
- .pair-aftermath-cast { inset:0 13% 0 43%; }
927
- .pair-aftermath-cast figure.settled img { filter:saturate(.62) brightness(.63); }
928
- .pair-aftermath-witness { position:absolute; z-index:4; top:4%; right:2%; width:min(170px,14vw); margin:0; padding:.42rem; border:1px solid rgba(124,170,147,.45); color:#d8e5dc; background:rgba(18,31,26,.9); box-shadow:0 18px 44px rgba(0,0,0,.45); transition:filter .28s ease,transform .28s ease; }
929
- .pair-aftermath-witness.waiting { filter:saturate(.52) brightness(.68); transform:translateY(2%); }
930
- .pair-aftermath-witness.speaking { border-color:rgba(148,201,174,.72); transform:translateY(0); }
931
- .pair-aftermath-witness.settled { border-color:rgba(194,153,97,.56); filter:saturate(.72) brightness(.8); transform:translateY(0); }
932
- .pair-aftermath-witness img { width:100%; aspect-ratio:4/5; object-fit:cover; object-position:50% 14%; filter:saturate(.78) brightness(.82); }
933
- .pair-aftermath-witness span,.pair-aftermath-witness b,.pair-aftermath-witness small { display:block; }
934
- .pair-aftermath-witness span { margin-top:.32rem; color:#7fa38f; font:.55rem var(--sans); letter-spacing:.1em; }
935
- .pair-aftermath-witness b { margin-top:.1rem; font-size:.76rem; }
936
- .pair-aftermath-witness small { margin-top:.22rem; color:#9fb5aa; font:.55rem/1.42 var(--sans); }
937
- .pair-aftermath-panel { border-color:rgba(111,157,134,.52); }
938
- .pair-aftermath-origin { display:grid; gap:.18rem; margin:.6rem 0; padding:.58rem .65rem; border-left:2px solid #7caa92; background:rgba(31,65,52,.22); }
939
- .pair-aftermath-origin span { color:#769481; font:.57rem var(--sans); letter-spacing:.08em; }
940
- .pair-aftermath-origin b { color:#d2e2d8; font-size:.72rem; }
941
- .pair-aftermath-origin small { color:#a9bcb1; font:.61rem/1.45 var(--sans); }
942
- .pair-aftermath-current { margin:.62rem 0; padding:.7rem .78rem; border-left:2px solid #78a68d; color:#c7d9cf; background:rgba(23,48,39,.26); }
943
- .pair-aftermath-current span,.pair-aftermath-current b { display:block; }
944
- .pair-aftermath-current span { color:#759480; font:.56rem var(--sans); letter-spacing:.1em; }
945
- .pair-aftermath-current b { margin-top:.18rem; color:#d8e7df; font-size:.76rem; }
946
- .pair-aftermath-current p { margin:.3rem 0 0; font:.68rem/1.58 var(--sans); }
947
- .pair-aftermath-current.witness-line { border-color:#c29961; background:rgba(82,54,27,.2); }
948
- .pair-aftermath-transcript { display:grid; gap:.3rem; margin:.55rem 0; padding:0; list-style:none; }
949
- .pair-aftermath-transcript li { display:grid; grid-template-columns:1.25rem 1fr; gap:.42rem; align-items:start; color:#9fb4aa; }
950
- .pair-aftermath-transcript li > span { display:grid; place-items:center; width:1.15rem; height:1.15rem; border:1px solid rgba(119,164,141,.45); color:#7fa38f; font:.52rem var(--sans); }
951
- .pair-aftermath-transcript b { display:block; color:#bdd2c7; font-size:.62rem; }
952
- .pair-aftermath-transcript p { margin:.16rem 0 0; font:.58rem/1.42 var(--sans); }
953
-
954
- /* 延迟回响:画面像一张被两日前墨迹穿透的新账页,强调这不是新随机事件,
955
- 而是玩家亲口选择的处理方式终于落到具体的人与代价上。 */
956
- .memory-reckoning-stage { overflow: hidden; background: radial-gradient(circle at 73% 28%,#514130,#16100d 70%); }
957
- .memory-reckoning-stage::before { content: ""; position: absolute; z-index: 2; inset: 0; opacity: .34; pointer-events: none; background: repeating-linear-gradient(104deg,transparent 0 72px,rgba(222,190,126,.16) 73px,transparent 75px); }
958
- .memory-reckoning-stage::after { background: linear-gradient(90deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.9) 48%,rgba(13,9,8,.13) 78%), linear-gradient(0deg,rgba(67,38,18,.28),transparent 56%); }
959
- .memory-reckoning-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 48%; padding: 1.3rem; overflow: clip; border-color: rgba(213,177,108,.48); }
960
- .memory-cast { position: absolute; z-index: 3; inset: 0 0 0 45%; display: grid; grid-template-columns: 1.08fr .92fr; }
961
- .memory-cast figure { position: relative; min-width: 0; height: 100%; margin: 0; overflow: hidden; }
962
- .memory-cast figure:not(.memory-lead) { transform: translateY(5%); filter: sepia(.12); }
963
- .memory-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 12%; filter: saturate(.72) brightness(.67); }
964
- .memory-cast .memory-lead img { filter: saturate(.86) brightness(.76); }
965
- .memory-cast figure,.memory-cast img { transition:filter .32s ease,opacity .32s ease,transform .32s ease; }
966
- .memory-cast figure.speaking { z-index:2; transform:translateY(0); filter:none; }
967
- .memory-cast figure.speaking img { filter:saturate(.96) brightness(.84); transform:scale(1.015); }
968
- .memory-cast figure.listening { opacity:.58; filter:sepia(.34); }
969
- .memory-cast figure.listening img { filter:saturate(.43) brightness(.54); }
970
- .memory-cast figure.weighing { opacity:.82; transform:translateY(1.5%); }
971
- .memory-cast figure.settled { opacity:.94; transform:translateY(0); filter:none; }
972
- .memory-step-3 .memory-reckoning-panel { border-color:rgba(220,190,126,.68); box-shadow:0 0 34px rgba(159,121,54,.16); }
973
- .memory-cast figcaption { position: absolute; inset: auto .6rem 3%; padding: 2.7rem .75rem .8rem; color: #ead8b9; background: linear-gradient(transparent,rgba(12,8,7,.96) 46%); }
974
- .memory-cast span, .memory-cast b { display: block; }
975
- .memory-cast span { color: #a99069; font: .6rem var(--sans); letter-spacing: .12em; }
976
- .memory-cast b { margin-top: .2rem; font-size: .95rem; }
977
- .memory-cast p { margin: .45rem 0 0; color: #c5b08f; font: .68rem/1.55 var(--sans); }
978
- .memory-thread { position: relative; display: grid; gap: .25rem; margin: .72rem 0; padding: .7rem .8rem .7rem 1rem; border-left: 2px solid #c7a15f; background: rgba(0,0,0,.24); }
979
- .memory-thread::before { content: "旧"; position: absolute; right: .55rem; top: .45rem; width: 1.55rem; height: 1.55rem; display: grid; place-items: center; border: 1px solid rgba(164,55,41,.62); color: rgba(199,84,63,.78); font: .72rem serif; transform: rotate(-8deg); }
980
- .memory-thread span { color: #9f8a6b; font: .6rem var(--sans); letter-spacing: .1em; }
981
- .memory-thread b { max-width: calc(100% - 2.2rem); color: #e0c48f; font-size: .78rem; }
982
- .memory-thread strong { margin-top: .15rem; color: #d2ae6f; font: 600 .64rem/1.45 var(--sans); }
983
- .memory-thread small { color: #b39f80; font: .65rem/1.45 var(--sans); }
984
- .memory-thread em { color: #d6c5a8; font: normal .66rem/1.5 var(--sans); }
985
- .memory-progress { display:grid; grid-template-columns:repeat(4,1fr); gap:.35rem; margin:0 0 .7rem; }
986
- .memory-progress span { position:relative; padding:.3rem .2rem; border-bottom:1px solid rgba(183,151,91,.22); color:#776b58; text-align:center; font:.58rem var(--sans); letter-spacing:.1em; }
987
- .memory-progress span.done { border-color:#c7a15f; color:#dfc58f; }
988
- .memory-progress span.done::before { content:""; position:absolute; left:50%; bottom:-2px; width:4px; height:4px; border-radius:50%; background:#d5ad66; box-shadow:0 0 10px rgba(213,173,102,.72); }
989
- .memory-verdict-note { margin:.6rem 0; padding:.58rem .68rem; border:1px solid rgba(190,154,87,.35); color:#d4c2a0; background:rgba(57,43,20,.28); font:.66rem/1.55 var(--sans); }
990
- .memory-story-continue { width:100%; margin-top:.55rem; }
991
-
992
- /* 人情解追账:沿用旧账页的双人构图,但用更红的封印与欠字把“另一条可行解”
993
- 明确表现为延迟成本,而不是隐藏的第二个正确答案。 */
994
- .favor-reckoning-stage { overflow:hidden; background:radial-gradient(circle at 73% 27%,#5b3c31,#160d0b 71%); }
995
- .favor-reckoning-stage::before { content:""; position:absolute; z-index:2; inset:0; opacity:.32; pointer-events:none; background:repeating-linear-gradient(102deg,transparent 0 68px,rgba(202,121,82,.15) 69px,transparent 72px); }
996
- .favor-reckoning-stage::after { background:linear-gradient(90deg,rgba(14,8,7,.99) 0%,rgba(14,8,7,.92) 48%,rgba(44,14,10,.14) 78%),linear-gradient(0deg,rgba(129,50,34,.26),transparent 58%); }
997
- .favor-reckoning-panel { z-index:6; left:3.5%; top:4%; bottom:4%; width:49%; padding:1.3rem; overflow:clip; border-color:rgba(210,125,85,.55); }
998
- .favor-cast { position:absolute; z-index:3; inset:0 0 0 45%; display:grid; grid-template-columns:1.08fr .92fr; }
999
- .favor-cast figure { position:relative; min-width:0; height:100%; margin:0; overflow:hidden; }
1000
- .favor-cast figure:not(.favor-lead) { transform:translateY(5%); filter:sepia(.18); }
1001
- .favor-cast img { width:100%; height:100%; object-fit:cover; object-position:50% 12%; filter:saturate(.7) brightness(.65); }
1002
- .favor-cast .favor-lead img { filter:saturate(.9) brightness(.76); }
1003
- .favor-cast figure,.favor-cast img { transition:filter .32s ease,opacity .32s ease,transform .32s ease; }
1004
- .favor-cast figure.speaking { z-index:2; transform:translateY(0); filter:none; }
1005
- .favor-cast figure.speaking img { filter:saturate(.98) brightness(.84); transform:scale(1.015); }
1006
- .favor-cast figure.listening { opacity:.58; filter:sepia(.36); }
1007
- .favor-cast figure.listening img { filter:saturate(.42) brightness(.53); }
1008
- .favor-cast figure.weighing { opacity:.82; transform:translateY(1.5%); }
1009
- .favor-cast figure.settled { opacity:.94; transform:translateY(0); filter:none; }
1010
- .favor-step-3 .favor-reckoning-panel { border-color:rgba(221,168,98,.7); box-shadow:0 0 34px rgba(154,72,42,.18); }
1011
- .favor-cast figcaption { position:absolute; inset:auto .6rem 3%; padding:2.7rem .75rem .8rem; color:#ead5bc; background:linear-gradient(transparent,rgba(12,7,6,.97) 46%); }
1012
- .favor-cast span,.favor-cast b { display:block; }
1013
- .favor-cast span { color:#bd896f; font:.6rem var(--sans); letter-spacing:.1em; }
1014
- .favor-cast b { margin-top:.2rem; font-size:.95rem; }
1015
- .favor-cast p { margin:.45rem 0 0; color:#ceb19d; font:.68rem/1.55 var(--sans); }
1016
- .favor-thread { position:relative; display:grid; gap:.25rem; margin:.72rem 0; padding:.7rem .8rem .7rem 1rem; border-left:2px solid #c97b57; background:rgba(43,10,7,.24); }
1017
- .favor-thread::before { content:"欠"; position:absolute; right:.55rem; top:.45rem; width:1.55rem; height:1.55rem; display:grid; place-items:center; border:1px solid rgba(187,57,40,.72); color:rgba(222,91,68,.86); font:.72rem serif; transform:rotate(-8deg); }
1018
- .favor-thread span { color:#b68d79; font:.6rem var(--sans); letter-spacing:.1em; }
1019
- .favor-thread b { max-width:calc(100% - 2.2rem); color:#e2b99f; font-size:.78rem; }
1020
- .favor-thread small { color:#bfa291; font:.65rem/1.45 var(--sans); }
1021
- .favor-thread em { color:#d8c1b1; font:normal .66rem/1.5 var(--sans); }
1022
- .favor-progress { display:grid; grid-template-columns:repeat(4,1fr); gap:.35rem; margin:0 0 .7rem; }
1023
- .favor-progress span { position:relative; padding:.3rem .2rem; border-bottom:1px solid rgba(184,111,78,.22); color:#806a5f; text-align:center; font:.58rem var(--sans); letter-spacing:.1em; }
1024
- .favor-progress span.done { border-color:#cc805c; color:#e1b59d; }
1025
- .favor-progress span.done::before { content:""; position:absolute; left:50%; bottom:-2px; width:4px; height:4px; border-radius:50%; background:#dc8e68; box-shadow:0 0 10px rgba(220,142,104,.8); }
1026
- .favor-verdict-note { margin:.6rem 0; padding:.58rem .68rem; border:1px solid rgba(196,111,76,.38); color:#d7baa9; background:rgba(76,23,15,.3); font:.66rem/1.55 var(--sans); }
1027
- .favor-story-continue { width:100%; margin-top:.55rem; }
1028
-
1029
- /* 主动邀约:主角不再从五张门卡中被动挑人。她本人占据画面,旁院只作为
1030
- 见证者留在侧边,清楚区分“她想见你”与“系统派给她一场事件”。 */
1031
- .dusk-invitation-stage { overflow: hidden; background: radial-gradient(circle at 75% 25%,#563529,#150d0b 72%); }
1032
- .dusk-invitation-stage::after { background: linear-gradient(90deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.9) 47%,rgba(13,9,8,.08) 76%), linear-gradient(0deg,rgba(123,48,34,.2),transparent 62%); }
1033
- .dusk-invitation-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 49%; padding: 1.25rem; overflow: clip; border-color: rgba(201,111,83,.5); }
1034
- .dusk-invite-cast { position: absolute; z-index: 3; inset: 0 0 0 44%; }
1035
- .dusk-invite-cast figure { margin: 0; }
1036
- .dusk-invite-cast .invite-lead { position: absolute; inset: 0 0 0 0; overflow: hidden; }
1037
- .dusk-invite-cast .invite-lead img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 12%; filter: saturate(.82) brightness(.7); }
1038
- .dusk-invite-cast .invite-lead figcaption { position: absolute; inset: auto 1rem 4%; padding: 2.5rem .75rem .65rem; background: linear-gradient(transparent,rgba(12,8,7,.94) 48%); }
1039
- .dusk-invite-cast .invite-witness { position: absolute; top: 4%; left: 18%; width: min(175px,16vw); padding: .45rem; border: 1px solid rgba(221,187,126,.38); color: #ddcdb2; background: rgba(22,14,12,.9); box-shadow: 0 18px 48px rgba(0,0,0,.5); }
1040
- .dusk-invite-cast .invite-witness img { width: 100%; aspect-ratio: 4/5; object-fit: cover; object-position: 50% 13%; filter: saturate(.68) brightness(.78); }
1041
- .dusk-invite-cast figcaption span, .dusk-invite-cast figcaption b { display: block; }
1042
- .dusk-invite-cast figcaption span { color: #bd8d72; font: .58rem var(--sans); letter-spacing: .12em; }
1043
- .dusk-invite-cast figcaption b { margin-top: .18rem; color: #ead8ba; font-size: .9rem; }
1044
- .dusk-invite-voices { display: grid; gap: .35rem; margin: .62rem 0; }
1045
- .dusk-invite-voices p { margin: 0; padding: .52rem .62rem; border-left: 2px solid rgba(201,111,83,.65); color: #cbb99e; background: rgba(61,22,17,.22); font: .68rem/1.52 var(--sans); }
1046
- .dusk-invite-voices b { margin-right: .5rem; color: #dda987; }
1047
- .dusk-invite-rule { margin: .55rem 0; color: #a99478; font: .66rem/1.5 var(--sans); }
1048
-
1049
- /* 主动邀约后续:第一次答复只决定去不去;第二组画面让邀约者与旁院把
1050
- 钥匙、记录、退出权和劳动后果说到底,第三拍才交回玩家。 */
1051
- .invitation-aftermath-stage { overflow:hidden; background:radial-gradient(circle at 76% 24%,#51342d,#130c0a 72%); }
1052
- .invitation-aftermath-stage::after { background:linear-gradient(90deg,rgba(12,8,7,.99) 0%,rgba(12,8,7,.93) 49%,rgba(12,8,7,.18) 72%),linear-gradient(0deg,rgba(137,56,39,.2),transparent 62%); }
1053
- .invitation-aftermath-stage.resolved::after { background:linear-gradient(90deg,rgba(10,15,12,.99) 0%,rgba(10,15,12,.92) 49%,rgba(18,52,37,.16) 74%),linear-gradient(0deg,rgba(49,112,77,.15),transparent 64%); }
1054
- .invitation-aftermath-cast { position:absolute; z-index:3; inset:3% 2% 3% 50%; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.55rem; }
1055
- .invitation-aftermath-cast figure { position:relative; min-width:0; height:100%; margin:0; overflow:hidden; border:1px solid rgba(218,181,120,.2); background:#17100e; filter:saturate(.55) brightness(.68); transform:translateY(2.5%); transition:filter .25s ease,transform .25s ease,border-color .25s ease; }
1056
- .invitation-aftermath-cast figure.speaking { z-index:2; filter:saturate(.9) brightness(.92); transform:translateY(-1%); border-color:rgba(224,172,103,.72); box-shadow:0 18px 44px rgba(0,0,0,.46); }
1057
- .invitation-aftermath-stage.resolved .invitation-aftermath-cast figure.speaking { border-color:rgba(91,169,117,.72); }
1058
- .invitation-aftermath-cast img { width:100%; height:100%; object-fit:cover; object-position:50% 14%; }
1059
- .invitation-aftermath-cast figcaption { position:absolute; inset:auto 0 0; padding:3rem .65rem .72rem; color:#dfceb0; background:linear-gradient(transparent,rgba(10,7,6,.97) 48%); }
1060
- .invitation-aftermath-cast figcaption span,.invitation-aftermath-cast figcaption b,.invitation-aftermath-cast figcaption small { display:block; }
1061
- .invitation-aftermath-cast figcaption span { color:#bd8e73; font:.56rem var(--sans); letter-spacing:.1em; }
1062
- .invitation-aftermath-cast figcaption b { margin-top:.16rem; font-size:.9rem; }
1063
- .invitation-aftermath-cast figcaption small { margin-top:.25rem; color:#aa9a82; font:.58rem/1.42 var(--sans); }
1064
- .invitation-aftermath-panel { z-index:6; left:3%; top:4%; bottom:4%; width:51%; padding:1.12rem; overflow:clip; border-color:rgba(198,102,73,.5); }
1065
- .invitation-aftermath-stage.resolved .invitation-aftermath-panel { border-color:rgba(80,151,102,.6); }
1066
- .invitation-aftermath-ledger { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:.35rem; margin:.68rem 0; }
1067
- .invitation-aftermath-ledger span { min-width:0; padding:.48rem .55rem; border:1px solid rgba(205,156,94,.2); background:rgba(29,18,14,.64); }
1068
- .invitation-aftermath-ledger small,.invitation-aftermath-ledger b { display:block; }
1069
- .invitation-aftermath-ledger small { color:#9f826b; font:.54rem var(--sans); letter-spacing:.08em; }
1070
- .invitation-aftermath-ledger b { margin-top:.2rem; color:#d8c39f; font:.64rem/1.38 var(--sans); }
1071
- .invitation-aftermath-rule { margin:.55rem 0 .68rem; padding:.58rem .68rem; border-left:2px solid rgba(196,94,69,.64); color:#b9a58a; background:rgba(68,25,18,.2); font:.64rem/1.5 var(--sans); }
1072
- .invitation-aftermath-stage.resolved .invitation-aftermath-rule { border-color:rgba(82,156,105,.68); background:rgba(24,67,43,.18); }
1073
- .invitation-aftermath-choices { grid-template-columns:repeat(2,minmax(0,1fr)); }
1074
- .invitation-aftermath-panel > .ink-button { min-width:12rem; }
1075
- .morning-panel { left: 4%; top: 8%; width: 47%; padding: 1.45rem; }
1076
- .tone-jealous .morning-panel { border-color: rgba(188,73,61,.72); }
1077
- .tone-backing .morning-panel { border-color: rgba(126,167,149,.65); }
1078
- .rivalry-stage::after { background: linear-gradient(90deg,rgba(13,8,7,.97) 0%,rgba(13,8,7,.88) 46%,rgba(76,21,18,.15) 72%), linear-gradient(0deg,rgba(13,8,7,.62),transparent 58%); }
1079
- .rivalry-cg { transition: background-image .38s ease, filter .38s ease; filter: brightness(.82) saturate(.82) contrast(1.06); }
1080
- .rivalry-panel { top: 4%; bottom: 4%; width: 51%; overflow: clip; border-color: rgba(190,83,65,.68); }
1081
- .rivalry-listener { position: absolute; z-index: 4; top: 4%; right: 3%; width: min(178px,17vw); margin: 0; padding: .45rem; border: 1px solid rgba(224,190,128,.48); color: #ead8bb; background: rgba(22,13,11,.91); box-shadow: 0 18px 48px rgba(0,0,0,.55); }
1082
- .rivalry-listener img { display: block; width: 100%; aspect-ratio: 4/5; object-fit: cover; object-position: 50% 14%; filter: saturate(.72) brightness(.84); }
1083
- .rivalry-listener figcaption { padding: .48rem .25rem .18rem; }
1084
- .rivalry-listener span, .rivalry-listener b, .rivalry-listener small { display: block; }
1085
- .rivalry-listener span { color: #bd8d72; font: .58rem var(--sans); letter-spacing: .12em; }
1086
- .rivalry-listener b { margin-top: .16rem; font-size: .92rem; }
1087
- .rivalry-listener small { margin-top: .22rem; color: #aa9980; font: .6rem/1.45 var(--sans); }
1088
- .rivalry-voice { margin: .8rem 0; padding: .75rem .85rem; border-left: 3px solid rgba(194,75,59,.75); background: rgba(79,25,20,.22); }
1089
- .rivalry-voice span, .rivalry-voice b { display: block; }
1090
- .rivalry-voice span { color: #c28d73; font: .58rem var(--sans); letter-spacing: .14em; }
1091
- .rivalry-voice b { margin-top: .14rem; color: #f0ddbf; font-size: .92rem; }
1092
- .rivalry-voice p { margin: .42rem 0 0; color: #d8c4a6; font: .78rem/1.72 var(--sans); }
1093
- .rivalry-question { margin: .65rem 0; color: #d9bd91; font: .72rem/1.58 var(--sans); }
1094
- .rivalry-continue { width: 100%; }
1095
- .rivalry-resolved::after { background: linear-gradient(90deg,rgba(13,8,7,.98) 0%,rgba(13,8,7,.9) 48%,rgba(113,68,35,.12) 76%), linear-gradient(0deg,rgba(13,8,7,.64),transparent 62%); }
1096
- .rivalry-result-panel { border-color: rgba(207,164,91,.72); }
1097
- .rivalry-consequence { margin: .8rem 0; padding: .55rem .7rem; border-top: 1px solid rgba(224,190,128,.24); border-bottom: 1px solid rgba(224,190,128,.24); color: #e0c38e; text-align: center; font: .7rem/1.5 var(--sans); letter-spacing: .08em; }
1098
- .rivalry-result-cast { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: .5rem; margin: .65rem 0 .85rem; }
1099
- .rivalry-result-cast span { padding: .5rem; border: 1px solid rgba(224,190,128,.28); color: #ead8bb; text-align: center; background: rgba(78,46,29,.32); font: .78rem var(--serif); }
1100
- .rivalry-result-cast i { color: #be765d; font-style: normal; }
1101
-
1102
- /* 宴席 */
1103
- /* 选择前不铺群像:宅院界画压暗加暖灯,把「中秋夜宴」的光先给到,群像留给选择之后。 */
1104
- .banquet-stage::before { background-position: center 38%; filter: saturate(.66) brightness(.68) sepia(.3) contrast(1.05); }
1105
- .banquet-stage::after { background: radial-gradient(80% 62% at 50% 32%, rgba(206,132,58,.24), transparent 62%), linear-gradient(0deg, rgba(13,9,7,.92) 0%, rgba(13,9,7,.05) 70%); }
1106
- .council-stage::before { background-position: center 42%; filter: saturate(.56) brightness(.58) contrast(1.08); }
1107
- .council-stage::after { background: radial-gradient(68% 56% at 50% 24%, rgba(176,111,64,.18), transparent 68%), linear-gradient(0deg, rgba(11,8,7,.96), rgba(11,8,7,.22) 74%); }
1108
- .council-panel { width: min(980px,92%); }
1109
- .council-cast { display: flex; justify-content: center; gap: .55rem; margin: .65rem 0 .35rem; }
1110
- .council-cast figure { width: 72px; margin: 0; text-align: center; }
1111
- .council-cast img { width: 52px; height: 52px; object-fit: cover; object-position: 50% 18%; border: 1px solid rgba(218,180,112,.45); border-radius: 50%; filter: saturate(.78); }
1112
- .council-cast figcaption { margin-top: .2rem; color: #d7c09b; font: .66rem var(--sans); letter-spacing: .12em; }
1113
- .council-note { margin: .3rem auto .7rem; color: #aa9b86; text-align: center; font: .74rem/1.45 var(--sans); }
1114
- .council-panel .choice-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
1115
- .council-aftermath-stage { overflow: hidden; background: #140d0b; }
1116
- .council-aftermath-stage::after { background: linear-gradient(90deg,rgba(12,8,7,.98) 0%,rgba(12,8,7,.9) 47%,rgba(12,8,7,.12) 76%),linear-gradient(0deg,rgba(84,48,26,.25),transparent 68%); }
1117
- .council-resolution-cast { position: absolute; z-index: 3; inset: 3% 2.5% 3% 49%; display: flex; gap: .35rem; align-items: stretch; }
1118
- .council-resolution-cast figure { position: relative; flex: 1 1 0; min-width: 0; margin: 0; overflow: hidden; border: 1px solid rgba(220,188,127,.2); background: #1a120f; filter: saturate(.5) brightness(.6); transition: filter .25s ease, transform .25s ease; }
1119
- .council-resolution-cast figure.speaking { z-index: 2; border-color: rgba(218,157,91,.72); filter: saturate(.9) brightness(.84); transform: translateY(-.7rem); box-shadow: 0 20px 55px rgba(0,0,0,.48); }
1120
- .council-resolution-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 13%; }
1121
- .council-resolution-cast figcaption { position: absolute; inset: auto 0 0; padding: 3.6rem .55rem .65rem; background: linear-gradient(transparent,rgba(12,8,7,.97) 46%); }
1122
- .council-resolution-cast b { display: block; color: #e7d2b2; font-size: .8rem; }
1123
- .council-aftermath-panel { z-index: 5; left: 3.5%; top: 50%; bottom: auto; width: 48%; max-height: 88%; padding: 1.3rem; overflow: clip; border-color: rgba(205,150,83,.55); transform: translateY(-50%); }
1124
- .council-rule-slip { margin: .75rem 0; padding: .7rem .8rem; border-left: 2px solid #a94d3d; color: #c8b696; background: rgba(70,30,23,.2); }
1125
- .council-rule-slip span, .council-rule-slip b { display: block; }
1126
- .council-rule-slip span { color: #d49e72; font: .58rem var(--sans); letter-spacing: .12em; }
1127
- .council-rule-slip b { margin-top: .3rem; font: 500 .68rem/1.55 var(--sans); }
1128
- .public-followup-stage::before { background-position: center 34%; filter: saturate(.48) brightness(.42) contrast(1.08); }
1129
- .public-followup-stage::after { background: linear-gradient(0deg, rgba(12,8,7,.98) 0%, rgba(12,8,7,.72) 52%, rgba(12,8,7,.18) 100%); }
1130
- .public-followup-panel { left: 3%; right: 3%; bottom: 3%; max-height: 94%; padding: 1rem 1.25rem; overflow: clip; }
1131
- .public-followup-panel .phase-header > p:last-child { max-width: 62rem; }
1132
- .public-followup-cast { display: flex; gap: .5rem; margin: .65rem 0 .35rem; }
1133
- .public-followup-cast figure { display: flex; align-items: center; gap: .35rem; margin: 0; padding: .25rem .45rem; border: 1px solid rgba(220,188,127,.22); background: rgba(0,0,0,.22); }
1134
- .public-followup-cast img { width: 34px; height: 34px; object-fit: cover; object-position: 50% 14%; border-radius: 50%; filter: saturate(.72); }
1135
- .public-followup-cast figcaption { color: #d4bc94; font: .64rem var(--sans); }
1136
- .public-followup-note { margin: .45rem 0 .7rem; padding-left: .65rem; border-left: 2px solid var(--cinnabar); color: #b1a18a; font: .7rem/1.55 var(--sans); }
1137
- .public-followup-panel .choice-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
1138
-
1139
- .public-evidence-stage { overflow: hidden; background: #100b09; }
1140
- .public-evidence-stage::before { background-position: center 34%; filter: saturate(.48) brightness(.3) contrast(1.12); }
1141
- .public-evidence-stage::after { background: linear-gradient(90deg,rgba(9,6,5,.98),rgba(9,6,5,.82) 58%,rgba(9,6,5,.28)),linear-gradient(0deg,rgba(114,74,27,.22),transparent 70%); }
1142
- .public-evidence-panel { left: 3%; right: 3%; top: 50%; bottom: auto; max-height: 94%; padding: 1rem 1.2rem; overflow: clip; border-color: rgba(181,145,72,.68); transform: translateY(-50%); }
1143
- .public-evidence-panel .phase-header > p:last-child { max-width: 68rem; }
1144
- .external-witnesses { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .5rem; margin: .7rem 0; }
1145
- .external-witnesses article { padding: .52rem .62rem; border: 1px solid rgba(190,155,87,.25); background: rgba(26,18,13,.8); }
1146
- .external-witnesses small,.external-witnesses b { display: block; }
1147
- .external-witnesses small { color: #af8c54; font: .72rem var(--sans); letter-spacing: .06em; }
1148
- .external-witnesses b { margin: .12rem 0 .18rem; color: #e0c796; font-size: .8rem; }
1149
- .external-witnesses p { margin: 0; color: #b4a792; font: .72rem/1.45 var(--serif); }
1150
- .evidence-chain-slots { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .45rem; margin: .65rem 0; padding: 0; list-style: none; }
1151
- .evidence-chain-slots li { min-height: 58px; display: grid; grid-template-columns: 1.4rem 1fr; grid-template-rows: auto auto; align-content: center; column-gap: .38rem; padding: .48rem .55rem; border: 1px dashed rgba(194,161,101,.25); background: rgba(9,7,6,.58); color: #73695d; }
1152
- .evidence-chain-slots i { grid-row: 1 / 3; align-self: center; width: 1.25rem; height: 1.25rem; display: grid; place-items: center; border: 1px solid currentColor; border-radius: 50%; font: normal .72rem var(--sans); }
1153
- .evidence-chain-slots span,.evidence-chain-slots b { display: block; }
1154
- .evidence-chain-slots span { color: #b4a690; font: .72rem/1.3 var(--serif); }
1155
- .evidence-chain-slots b { margin-top: .12rem; color: #8f806c; font: .72rem var(--sans); letter-spacing: .04em; }
1156
- .evidence-chain-slots li.filled { border-style: solid; border-color: rgba(194,161,101,.48); color: #c6a15e; }
1157
- .evidence-chain-slots li.strength-2 { box-shadow: inset 0 0 0 1px rgba(171,120,49,.16); background: rgba(82,57,24,.2); }
1158
- .evidence-chain-slots li.strength-2 b { color: #c9ad75; }
1159
- .evidence-chain-slots li.strength-0 { border-color: rgba(150,58,42,.62); color: #b85c49; }
1160
- .evidence-chain-slots li.strength-0 b { color: #c87866; }
1161
- .evidence-resistance,.public-evidence-echo { margin: .55rem 0; padding: .52rem .65rem; border-left: 2px solid #9f4e3e; background: rgba(90,32,24,.18); }
1162
- .evidence-resistance span,.public-evidence-echo span { display: block; margin-bottom: .16rem; color: #d08067; font: .72rem var(--sans); letter-spacing: .06em; }
1163
- .evidence-resistance p,.public-evidence-echo p { margin: 0; color: #c0ad97; font: .72rem/1.5 var(--serif); }
1164
- .public-evidence-rule { margin: .5rem 0; color: #b8a68e; font: .72rem/1.5 var(--serif); }
1165
- .public-evidence-choices { grid-template-columns: repeat(4,minmax(0,1fr)); }
1166
- .public-evidence-choices .choice-button { min-height: 76px; }
1167
- .evidence-verdict { margin-top: .65rem; padding: .7rem .78rem; border: 1px solid rgba(190,155,87,.44); background: rgba(34,23,13,.88); }
1168
- .evidence-verdict small { color: #c39c55; font: .72rem var(--sans); letter-spacing: .06em; }
1169
- .evidence-verdict h3 { margin: .18rem 0 .28rem; color: #ead5a6; font-size: 1.05rem; }
1170
- .evidence-verdict p { margin: 0 0 .6rem; color: #c9b9a3; font: .72rem/1.55 var(--serif); }
1171
- .evidence-verdict .ink-button { min-width: 18rem; }
1172
- .result-broken .evidence-verdict { border-color: rgba(156,61,45,.66); background: rgba(62,24,19,.88); }
1173
- .public-evidence-echo { border-left-color: #aa7c36; background: rgba(104,73,27,.16); }
1174
- .public-evidence-echo span { color: #d0aa64; }
1175
- .public-evidence-echo b { display: block; margin-bottom: .2rem; color: #d8c29b; font: .62rem/1.35 var(--serif); }
1176
-
1177
- .public-aftermath-stage { overflow: hidden; background: #120b0a; }
1178
- .public-aftermath-stage::before { background-position: center 32%; filter: saturate(.52) brightness(.38) contrast(1.08); }
1179
- .public-aftermath-stage::after { background: linear-gradient(90deg,rgba(11,7,6,.98) 0%,rgba(11,7,6,.91) 48%,rgba(11,7,6,.16) 78%),linear-gradient(0deg,rgba(93,38,25,.28),transparent 68%); }
1180
- .public-aftermath-cast { position: absolute; z-index: 3; inset: 3% 2.2% 3% 50%; display: flex; gap: .3rem; align-items: stretch; }
1181
- .public-aftermath-cast figure { position: relative; flex: 1 1 0; min-width: 0; margin: 0; overflow: hidden; border: 1px solid rgba(220,188,127,.16); background: #160e0d; filter: saturate(.38) brightness(.48); transition: filter .25s ease, transform .25s ease, flex .25s ease; }
1182
- .public-aftermath-cast figure.speaking { z-index: 2; flex-grow: 1.28; border-color: rgba(203,126,75,.82); filter: saturate(.92) brightness(.86); transform: translateY(-.65rem); box-shadow: 0 22px 58px rgba(0,0,0,.52); }
1183
- .public-aftermath-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 14%; }
1184
- .public-aftermath-cast figcaption { position: absolute; inset: auto 0 0; padding: 4.2rem .48rem .62rem; background: linear-gradient(transparent,rgba(10,6,6,.98) 50%); }
1185
- .public-aftermath-cast b { display: block; color: #ddc8a9; font-size: .72rem; }
1186
- .public-aftermath-panel { z-index: 5; left: 3.5%; top: 50%; bottom: auto; width: 49%; max-height: 89%; padding: 1.25rem 1.35rem; overflow: clip; border-color: rgba(188,101,58,.64); transform: translateY(-50%); }
1187
- .public-aftermath-panel .phase-header > p:last-child { max-width: 42rem; }
1188
- .public-aftermath-ledger { margin: .75rem 0 .9rem; padding: .65rem .75rem; border-left: 2px solid #a64831; background: linear-gradient(90deg,rgba(119,45,30,.2),transparent); }
1189
- .public-aftermath-ledger span, .public-aftermath-ledger b { display: block; }
1190
- .public-aftermath-ledger span { margin-bottom: .24rem; color: #d69c6c; font: .58rem var(--sans); letter-spacing: .1em; }
1191
- .public-aftermath-ledger b { color: #c9b89e; font: 400 .7rem/1.52 var(--serif); }
1192
- .public-aftermath-panel > .ink-button { min-width: 14rem; }
1193
- .public-day-10 .public-aftermath-panel { border-color: rgba(91,150,138,.62); }
1194
- .public-day-10 .public-aftermath-ledger { border-left-color: #527f78; background: linear-gradient(90deg,rgba(43,103,93,.2),transparent); }
1195
- .public-day-10 .public-aftermath-ledger span { color: #8ab8ae; }
1196
- .public-day-15 .public-aftermath-panel { border-color: rgba(181,145,72,.68); }
1197
- .public-day-15 .public-aftermath-ledger { border-left-color: #a57c34; background: linear-gradient(90deg,rgba(124,91,34,.2),transparent); }
1198
- .public-day-15 .public-aftermath-ledger span { color: #d1ad64; }
1199
- .act-transition-stage::before { background-position: center 30%; filter: saturate(.42) brightness(.38) contrast(1.12); }
1200
- .act-transition-stage::after { background: radial-gradient(62% 70% at 72% 20%, rgba(164,70,43,.2), transparent 70%), linear-gradient(90deg, rgba(12,8,7,.98) 0%, rgba(12,8,7,.82) 55%, rgba(12,8,7,.22) 100%); }
1201
- .act-transition-3::after { background: radial-gradient(60% 70% at 74% 18%, rgba(64,108,102,.2), transparent 70%), linear-gradient(90deg, rgba(10,10,9,.98), rgba(12,15,14,.78) 58%, rgba(10,12,11,.2)); }
1202
- .act-transition-4::after { background: radial-gradient(60% 70% at 74% 18%, rgba(140,36,28,.25), transparent 70%), linear-gradient(90deg, rgba(12,7,6,.99), rgba(27,10,8,.8) 58%, rgba(10,7,6,.18)); }
1203
- .act-transition-panel { z-index: 5; left: 3.5%; top: 4%; bottom: 4%; width: min(760px,58%); padding: 1.25rem; overflow: clip; }
1204
- .act-transition-panel .choice-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
1205
- .act-reveal { margin: .75rem 0; padding: .65rem .8rem; border: 1px solid rgba(215,173,100,.32); border-left: 3px solid var(--cinnabar); color: #dbc7a6; font: .78rem/1.65 var(--serif); background: rgba(0,0,0,.24); }
1206
- .act-reveal span { display: block; margin-bottom: .2rem; color: #b18d5e; font: .6rem var(--sans); letter-spacing: .14em; }
1207
- .act-source-echo { margin: .65rem 0; padding: .58rem .7rem; border: 1px solid rgba(180,132,78,.24); background: rgba(31,24,19,.7); }
1208
- .act-source-echo span, .act-source-echo b { display: block; }
1209
- .act-source-echo span { color: #b89568; font: .54rem var(--sans); letter-spacing: .09em; }
1210
- .act-source-echo b { margin: .18rem 0; color: #e0c499; font: .69rem var(--serif); }
1211
- .act-source-echo p { margin: 0; color: #aa9a84; font: .61rem/1.55 var(--sans); }
1212
-
1213
- .act-aftermath-stage { overflow: hidden; background: #110c0a; }
1214
- .act-aftermath-stage::before { background-position: center 31%; filter: saturate(.45) brightness(.35) contrast(1.1); }
1215
- .act-aftermath-stage::after { background: linear-gradient(90deg,rgba(11,8,7,.98) 0%,rgba(11,8,7,.92) 49%,rgba(11,8,7,.15) 80%),radial-gradient(58% 72% at 78% 22%,rgba(154,69,43,.22),transparent 72%); }
1216
- .act-aftermath-cast { position: absolute; z-index: 3; inset: 3% 2.2% 3% 50%; display: flex; gap: .3rem; align-items: stretch; }
1217
- .act-aftermath-cast figure { position: relative; flex: 1 1 0; min-width: 0; margin: 0; overflow: hidden; border: 1px solid rgba(220,188,127,.16); background: #160f0d; filter: saturate(.38) brightness(.49); transition: filter .25s ease, transform .25s ease, flex .25s ease; }
1218
- .act-aftermath-cast figure.speaking { z-index: 2; flex-grow: 1.28; border-color: rgba(202,142,76,.78); filter: saturate(.92) brightness(.86); transform: translateY(-.65rem); box-shadow: 0 22px 58px rgba(0,0,0,.52); }
1219
- .act-aftermath-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 14%; }
1220
- .act-aftermath-cast figcaption { position: absolute; inset: auto 0 0; padding: 4.1rem .48rem .62rem; background: linear-gradient(transparent,rgba(10,7,6,.98) 50%); }
1221
- .act-aftermath-cast b { display: block; color: #ddc8a9; font-size: .72rem; }
1222
- .act-aftermath-panel { z-index: 5; left: 3.5%; top: 50%; bottom: auto; width: 49%; max-height: 89%; padding: 1.25rem 1.35rem; overflow: clip; border-color: rgba(188,117,57,.6); transform: translateY(-50%); }
1223
- .act-aftermath-rule { margin: .75rem 0 .9rem; padding: .65rem .75rem; border-left: 2px solid #a86e36; background: linear-gradient(90deg,rgba(122,74,31,.2),transparent); }
1224
- .act-aftermath-rule span, .act-aftermath-rule b { display: block; }
1225
- .act-aftermath-rule span { margin-bottom: .24rem; color: #d0a05d; font: .58rem var(--sans); letter-spacing: .1em; }
1226
- .act-aftermath-rule b { color: #c9b89e; font: 400 .7rem/1.52 var(--serif); }
1227
- .act-aftermath-panel > .ink-button { min-width: 14rem; }
1228
- .act-aftermath-3 .act-aftermath-panel { border-color: rgba(79,145,134,.62); }
1229
- .act-aftermath-3 .act-aftermath-rule { border-left-color: #4f8078; background: linear-gradient(90deg,rgba(44,101,91,.2),transparent); }
1230
- .act-aftermath-3 .act-aftermath-rule span { color: #88b8ae; }
1231
- .act-aftermath-4 .act-aftermath-panel { border-color: rgba(172,119,79,.7); }
1232
- .act-aftermath-4 .act-aftermath-rule { border-left-color: #985d43; background: linear-gradient(90deg,rgba(116,57,42,.22),transparent); }
1233
- .act-aftermath-4 .act-aftermath-rule span { color: #d39474; }
1234
- .act-internal-practice { margin: .65rem 0; padding: .58rem .68rem; border: 1px solid rgba(190,145,84,.2); background: rgba(55,34,23,.3); }
1235
- .act-internal-practice span, .act-internal-practice b, .act-internal-practice p { display: block; }
1236
- .act-internal-practice span { color: #b68c5e; font: .54rem var(--sans); letter-spacing: .08em; }
1237
- .act-internal-practice b { margin: .18rem 0; color: #ddc29b; font: .68rem var(--serif); }
1238
- .act-internal-practice p { margin: 0; color: #aa9a83; font: .61rem/1.5 var(--sans); }
1239
- .external-rebuttal { margin-top: .7rem; }
1240
- .external-rebuttal-context { margin-top: 0; }
1241
- .external-rebuttal-context-pages { min-width: 0; }
1242
- .external-rebuttal-context-pages > header { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .3rem; }
1243
- .external-rebuttal-context-pages > header div { min-width: 0; padding: .42rem .48rem; border: 1px solid rgba(201,144,81,.24); background: rgba(16,9,7,.58); }
1244
- .external-rebuttal-context-pages > header small, .external-rebuttal-context-pages > header b { display: block; }
1245
- .external-rebuttal-context-pages > header small { color: #8f7b67; font: .49rem var(--sans); }
1246
- .external-rebuttal-context-pages > header b { overflow: hidden; margin-top: .12rem; color: #d6b27b; font: .58rem var(--serif); text-overflow: ellipsis; white-space: nowrap; }
1247
- .external-rebuttal-voices { display: grid; gap: .3rem; margin: .5rem 0; padding: 0; list-style: none; }
1248
- .external-rebuttal-voices li { display: grid; grid-template-columns: 22px minmax(0,1fr); gap: .45rem; padding: .46rem .52rem; border-left: 2px solid #8d4d37; background: linear-gradient(90deg,rgba(104,48,35,.22),rgba(0,0,0,.12)); }
1249
- .external-rebuttal-voices i { display: grid; place-items: center; width: 20px; height: 20px; border: 1px solid rgba(214,153,91,.42); border-radius: 50%; color: #d3a260; font: .54rem var(--sans); }
1250
- .external-rebuttal-voices span, .external-rebuttal-voices b { display: block; }
1251
- .external-rebuttal-voices span { color: #9e8a79; font: .72rem/1.3 var(--sans); }
1252
- .external-rebuttal-voices b { margin: .08rem 0 .15rem; color: #dfc39a; font: .78rem var(--serif); }
1253
- .external-rebuttal-voices p { margin: 0; color: #c2b099; font: .72rem/1.5 var(--sans); }
1254
- .external-rebuttal-question { margin: .45rem 0 .55rem; color: #e4c9a5; font: .76rem/1.55 var(--serif); }
1255
- .external-rebuttal-choices { grid-template-columns: repeat(3,minmax(0,1fr)); }
1256
- .external-rebuttal-result { margin: .7rem 0; padding: .68rem .75rem; border: 1px solid rgba(190,124,76,.38); border-left: 3px solid #a7553c; background: linear-gradient(90deg,rgba(109,48,34,.25),rgba(0,0,0,.12)); }
1257
- .external-rebuttal-result span, .external-rebuttal-result b { display: block; }
1258
- .external-rebuttal-result span { color: #d38d68; font: .72rem var(--sans); letter-spacing: .06em; }
1259
- .external-rebuttal-result b { margin: .22rem 0; color: #ebcba5; font: .82rem var(--serif); }
1260
- .external-rebuttal-result p { margin: 0; color: #c8b79d; font: .72rem/1.55 var(--sans); }
1261
- .council-external-echo { margin: .55rem 0; padding: .52rem .65rem; border-left: 2px solid #a4573e; background: linear-gradient(90deg,rgba(111,48,35,.2),transparent); }
1262
- .council-external-echo span, .council-external-echo b { display: block; }
1263
- .council-external-echo span { color: #c48162; font: .52rem var(--sans); letter-spacing: .08em; }
1264
- .council-external-echo b { margin: .16rem 0; color: #ddc19a; font: .67rem var(--serif); }
1265
- .council-external-echo p { margin: 0; color: #a99982; font: .6rem/1.5 var(--sans); }
1266
- .act-transition-cast { position: absolute; z-index: 4; top: 7%; right: 3.5%; display: grid; grid-template-columns: repeat(2,92px); gap: .55rem; }
1267
- .act-transition-cast figure { position: relative; overflow: hidden; width: 92px; height: 122px; margin: 0; border: 1px solid rgba(220,188,127,.3); background: #1c1310; }
1268
- .act-transition-cast figure:last-child { grid-column: 1 / -1; justify-self: center; }
1269
- .act-transition-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 14%; filter: saturate(.62) brightness(.72); }
1270
- .act-transition-cast figcaption { position: absolute; inset: auto 0 0; padding: .25rem; color: #dac39b; text-align: center; font: .62rem var(--sans); background: rgba(12,8,7,.82); }
1271
- .final-reckoning-stage::before { background-position: center 34%; filter: saturate(.35) brightness(.32) contrast(1.15); }
1272
- .final-reckoning-stage::after { background: radial-gradient(60% 90% at 84% 12%, rgba(150,37,28,.22), transparent 72%), linear-gradient(90deg, rgba(10,7,6,.99) 0%, rgba(19,10,8,.88) 57%, rgba(10,7,6,.3) 100%); }
1273
- .final-reckoning-panel { z-index: 5; left: 3%; right: 3%; bottom: 3%; max-height: 94%; padding: 1rem 1.2rem; overflow: clip; }
1274
- .final-reckoning-panel .phase-header > p:last-child { max-width: 64rem; }
1275
- .final-reckoning-panel .choice-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
1276
- .final-reckoning-cast { display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .45rem; margin: .65rem 0; }
1277
- .final-reckoning-cast figure { display: flex; align-items: center; gap: .45rem; min-width: 0; margin: 0; padding: .38rem; border: 1px solid rgba(220,188,127,.22); background: rgba(0,0,0,.25); }
1278
- .final-reckoning-cast img { flex: 0 0 42px; width: 42px; height: 50px; object-fit: cover; object-position: 50% 14%; filter: saturate(.66); }
1279
- .final-reckoning-cast figcaption { min-width: 0; color: #dfc89e; font: .68rem var(--sans); }
1280
- .final-reckoning-cast small { display: -webkit-box; overflow: hidden; margin-top: .18rem; color: #938571; font: .58rem/1.35 var(--sans); -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1281
- .reckoning-note { margin: .45rem 0 .7rem; padding: .55rem .7rem; border-left: 2px solid var(--gold); color: #c2ae8d; font: .7rem/1.55 var(--sans); background: rgba(0,0,0,.2); }
1282
- .reckoning-ledgers { position: absolute; z-index: 4; top: 4%; right: 4%; display: flex; gap: .7rem; transform: rotate(4deg); }
1283
- .reckoning-ledgers i { display: grid; place-items: center; width: 74px; height: 112px; border: 1px solid rgba(216,171,94,.5); color: #d7b573; font: 1.25rem var(--serif); background: linear-gradient(110deg,#3b2018,#170e0b); box-shadow: 0 14px 30px rgba(0,0,0,.5); }
1284
-
1285
- .final-aftermath-stage { overflow: hidden; background: #0d0908; }
1286
- .final-aftermath-stage::before { background-position: center 35%; filter: saturate(.38) brightness(.3) contrast(1.15); }
1287
- .final-aftermath-stage::after { background: linear-gradient(90deg,rgba(9,6,5,.99) 0%,rgba(14,8,7,.94) 49%,rgba(9,6,5,.16) 81%),radial-gradient(58% 75% at 82% 18%,rgba(157,43,31,.25),transparent 72%); }
1288
- .final-aftermath-cast { position: absolute; z-index: 3; inset: 3% 2.1% 3% 50%; display: flex; gap: .28rem; align-items: stretch; }
1289
- .final-aftermath-cast figure { position: relative; flex: 1 1 0; min-width: 0; margin: 0; overflow: hidden; border: 1px solid rgba(221,183,112,.14); background: #150d0c; filter: saturate(.34) brightness(.44); transition: filter .25s ease, transform .25s ease, flex .25s ease; }
1290
- .final-aftermath-cast figure.speaking { z-index: 2; flex-grow: 1.32; border-color: rgba(204,119,72,.86); filter: saturate(.92) brightness(.84); transform: translateY(-.7rem); box-shadow: 0 24px 64px rgba(0,0,0,.56); }
1291
- .final-aftermath-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 14%; }
1292
- .final-aftermath-cast figcaption { position: absolute; inset: auto 0 0; padding: 4.2rem .46rem .62rem; background: linear-gradient(transparent,rgba(9,6,5,.99) 51%); }
1293
- .final-aftermath-cast b { display: block; color: #e2ccb0; font-size: .72rem; }
1294
- .final-aftermath-panel { z-index: 6; left: 3.4%; top: 50%; bottom: auto; width: 49%; max-height: 91%; padding: 1.25rem 1.35rem; overflow: clip; border-color: rgba(184,79,55,.7); transform: translateY(-50%); }
1295
- .final-custody-rule { margin: .75rem 0 .9rem; padding: .68rem .78rem; border: 1px solid rgba(209,150,91,.18); border-left: 2px solid #a84f38; background: linear-gradient(90deg,rgba(124,42,31,.22),transparent); }
1296
- .final-custody-rule span, .final-custody-rule b { display: block; }
1297
- .final-custody-rule span { margin-bottom: .24rem; color: #df966b; font: .58rem var(--sans); letter-spacing: .1em; }
1298
- .final-custody-rule b { color: #cdbb9f; font: 400 .7rem/1.52 var(--serif); }
1299
- .final-aftermath-choices { grid-template-columns: repeat(2,minmax(0,1fr)); }
1300
- .final-aftermath-panel > .ink-button { min-width: 15rem; }
1301
- .final-aftermath-ledgers { position: absolute; z-index: 5; top: 3%; right: 2.8%; display: flex; gap: .35rem; transform: rotate(3deg); pointer-events: none; }
1302
- .final-aftermath-ledgers i { display: grid; place-items: center; width: 42px; height: 64px; border: 1px solid rgba(216,151,89,.44); color: #d3a064; font: .82rem var(--serif); background: linear-gradient(115deg,#351a15,#120b09); box-shadow: 0 10px 26px rgba(0,0,0,.52); }
1303
- .final-approach-final_pay_receipt .final-custody-rule { border-left-color: #a9853e; background: linear-gradient(90deg,rgba(115,86,31,.22),transparent); }
1304
- .final-approach-final_pay_receipt .final-custody-rule span { color: #d5b56f; }
1305
- .final-approach-final_five_custody .final-custody-rule { border-left-color: #4f8178; background: linear-gradient(90deg,rgba(39,98,88,.22),transparent); }
1306
- .final-approach-final_five_custody .final-custody-rule span { color: #8ebcb2; }
1307
- .banquet-panel { left: 3%; right: 3%; bottom: 3%; padding: 1rem 1.25rem; }
1308
- .banquet-panel .phase-header > p:last-child { max-width: 58rem; }
1309
- .banquet-panel .choice-grid { grid-template-columns: repeat(4,minmax(0,1fr)); margin-top: .8rem; }
1310
- .banquet-panel .choice-button { min-height: 68px; }
1311
-
1312
- /* 第二十夜共同议事:选择前仍不泄露奖励 CG,五人立绘与宅院只说明“都到了”。 */
1313
- .shared-stage::before { filter: saturate(.55) brightness(.58) sepia(.22); }
1314
- .shared-stage::after { background: radial-gradient(65% 75% at 50% 24%, rgba(196,123,54,.2), transparent 65%), linear-gradient(0deg, rgba(12,8,7,.95), rgba(12,8,7,.12) 78%); }
1315
- .shared-panel { left: 3%; right: 3%; bottom: 3%; padding: 1rem 1.25rem; }
1316
- .shared-panel .phase-header > p:last-child { max-width: 58rem; }
1317
- .shared-panel .shared-seals { max-width: 42rem; margin: .65rem 0; }
1318
- .shared-proof { margin: -.2rem 0 .65rem; color: #c8b38f; font: .68rem var(--sans); }
1319
- .shared-panel .choice-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
1320
- .shared-panel .choice-button { min-height: 68px; }
1321
-
1322
- /* 一院结局也要走完三拍:主角占据画面,另外四院仍作为有权利的人留在构图里。 */
1323
- .personal-finale-stage { overflow: hidden; background: #130e0c; }
1324
- .personal-finale-stage::after { background: linear-gradient(90deg,rgba(13,9,8,.99) 0%,rgba(13,9,8,.91) 48%,rgba(13,9,8,.15) 76%), linear-gradient(0deg,rgba(95,38,24,.24),transparent 60%); }
1325
- .personal-finale-main { position: absolute; z-index: 1; inset: 0; background-size: cover; background-position: center; filter: saturate(.76) brightness(.69) contrast(1.04); }
1326
- .personal-finale-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 50%; padding: 1.3rem; overflow: clip; border-color: rgba(195,141,89,.48); }
1327
- .personal-finale-panel .choice-grid { grid-template-columns: 1fr 1fr; }
1328
- .personal-finale-voice { margin: .65rem 0; padding: .65rem .78rem; border-left: 2px solid var(--cinnabar); background: rgba(99,38,28,.18); }
1329
- .personal-finale-voice b { color: #deb780; font: .72rem var(--serif); letter-spacing: .08em; }
1330
- .personal-finale-voice p { margin: .22rem 0 0; color: #decdb4; font: .72rem/1.65 var(--serif); }
1331
- .personal-finale-last { margin: .6rem 0; padding: .62rem .72rem; border-left: 2px solid rgba(201,156,92,.55); color: #cbbca6; background: rgba(0,0,0,.25); font: .67rem/1.58 var(--sans); }
1332
- .personal-finale-last span { display: block; margin-bottom: .2rem; color: #b78d58; font-size: .57rem; letter-spacing: .11em; }
1333
- .personal-finale-others { position: absolute; z-index: 4; right: 1.8%; bottom: 2%; display: flex; gap: .35rem; }
1334
- .personal-finale-others figure { position: relative; width: 64px; height: 86px; margin: 0; overflow: hidden; border: 1px solid rgba(219,187,129,.28); background: #17110f; opacity: .82; }
1335
- .personal-finale-others img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 14%; filter: grayscale(.35) saturate(.55) brightness(.65); }
1336
- .personal-finale-others figcaption { position: absolute; inset: auto 0 0; padding: 1.1rem .2rem .2rem; color: #d8c09a; text-align: center; font: .55rem var(--sans); background: linear-gradient(transparent,rgba(12,8,7,.94) 56%); }
1337
- .personal-finale-others small { display: none; }
1338
- .personal-finale-result-stage { overflow: hidden; background: #100e0b; }
1339
- .personal-finale-result-stage::after { background: radial-gradient(54% 72% at 68% 26%,rgba(179,125,67,.18),transparent 68%),linear-gradient(90deg,rgba(10,9,8,.99) 0%,rgba(10,9,8,.92) 51%,rgba(10,9,8,.18) 78%),linear-gradient(0deg,rgba(45,82,65,.22),transparent 62%); }
1340
- .personal-finale-result-main { background-position: 58% 18%; filter: saturate(.88) brightness(.76) contrast(1.06); transform: scale(1.035); }
1341
- .personal-finale-result-panel { border-color: rgba(111,174,144,.55); background: linear-gradient(145deg,rgba(19,25,21,.97),rgba(18,13,11,.94)); }
1342
- .personal-finale-response { margin: .68rem 0; padding: .7rem .82rem; border: 1px solid rgba(111,174,144,.23); border-left: 3px solid #639985; background: linear-gradient(90deg,rgba(39,89,72,.24),rgba(22,18,15,.08)); }
1343
- .personal-finale-response b,.personal-finale-response p { display: block; }
1344
- .personal-finale-response b { color: #9ec3b2; font: .68rem var(--sans); letter-spacing: .1em; }
1345
- .personal-finale-response p { margin: .28rem 0 0; color: #e2d2b9; font: .78rem/1.72 var(--serif); }
1346
- .personal-finale-agreements { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .42rem; margin: .65rem 0; }
1347
- .personal-finale-agreements header { grid-column: 1 / -1; display: flex; justify-content: space-between; align-items: center; color: #9e8a69; font: .58rem var(--sans); letter-spacing: .08em; }
1348
- .personal-finale-agreements header b { color: #c8aa77; font-weight: 600; }
1349
- .personal-finale-agreements > div { min-width: 0; padding: .55rem .62rem; border: 1px solid rgba(205,164,101,.2); background: rgba(82,55,30,.13); }
1350
- .personal-finale-agreements small,.personal-finale-agreements b,.personal-finale-agreements p { display: block; }
1351
- .personal-finale-agreements small { color: #9d7c52; font: .52rem var(--sans); }
1352
- .personal-finale-agreements b { margin-top: .18rem; color: #d9bd8d; font: .66rem var(--serif); }
1353
- .personal-finale-agreements p { margin: .25rem 0 0; color: #bfb09a; font: .59rem/1.5 var(--sans); }
1354
- .personal-finale-no-agreement { margin: .65rem 0; padding: .52rem .62rem; border-left: 2px solid rgba(174,141,92,.42); color: #aa9b87; background: rgba(0,0,0,.18); font: .61rem/1.5 var(--sans); }
1355
- .personal-finale-result-ledger { display: grid; grid-template-columns: auto minmax(0,1fr); gap: .18rem .55rem; align-items: baseline; margin: .68rem 0; padding: .58rem .66rem; border-top: 1px solid rgba(111,174,144,.2); border-bottom: 1px solid rgba(111,174,144,.2); }
1356
- .personal-finale-result-ledger span { color: #76a48f; font: .56rem var(--sans); letter-spacing: .1em; }
1357
- .personal-finale-result-ledger b { color: #d9c29a; font: .7rem var(--serif); }
1358
- .personal-finale-result-ledger em { grid-column: 2; color: #948775; font: normal .56rem var(--sans); }
1359
- .personal-finale-result-continue { min-width: 14rem; border-color: rgba(111,174,144,.54); }
1360
- .result-witnesses { opacity: .66; }
1361
- .result-witnesses figure { transition: opacity .18s ease, transform .18s ease, border-color .18s ease; }
1362
- .result-witnesses figure.is-responding { opacity: 1; transform: translateY(-.28rem); border-color: rgba(220,180,109,.72); box-shadow: 0 .45rem 1.4rem rgba(0,0,0,.36); }
1363
- .result-witnesses figure.is-responding figcaption { color: #ead2a5; }
1364
- .personal-departure-stage .personal-finale-result-panel { border-color: rgba(205,164,101,.58); background: linear-gradient(145deg,rgba(29,25,18,.97),rgba(17,17,14,.95)); }
1365
- .personal-departure-reasons { margin: .62rem 0; padding: .62rem .7rem; border: 1px solid rgba(205,164,101,.22); background: rgba(72,53,30,.14); }
1366
- .personal-departure-reasons header { display: flex; justify-content: space-between; gap: .6rem; color: #a68d68; font: .56rem var(--sans); letter-spacing: .06em; }
1367
- .personal-departure-reasons header b { color: #d3b780; font-weight: 600; }
1368
- .personal-departure-reasons ol { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .34rem .75rem; margin: .5rem 0 0; padding: 0; list-style: none; counter-reset: departure-reason; }
1369
- .personal-departure-reasons li { position: relative; padding-left: 1.15rem; color: #bfb3a0; font: .57rem/1.55 var(--sans); counter-increment: departure-reason; }
1370
- .personal-departure-reasons li::before { content: counter(departure-reason); position: absolute; left: 0; top: .04rem; width: .82rem; height: .82rem; border: 1px solid rgba(205,164,101,.35); border-radius: 50%; color: #c4a36e; font: .46rem/.78rem var(--sans); text-align: center; }
1371
-
1372
- /* 逐院问灯:第十九夜只给候选权,第二十夜由本人逐一决定是否落席。 */
1373
- .alliance-assembly-stage { overflow: hidden; background: radial-gradient(circle at 74% 22%,#4a4234,#120e0c 72%); }
1374
- .alliance-assembly-stage::after { background: linear-gradient(90deg,rgba(13,9,7,.985) 0%,rgba(13,9,7,.91) 51%,rgba(13,9,7,.12) 81%),linear-gradient(0deg,rgba(103,71,36,.18),transparent 60%); }
1375
- .alliance-assembly-panel { z-index:6; left:3.5%; top:4%; bottom:4%; width:49%; padding:1.2rem; overflow:clip; border-color:rgba(205,164,101,.45); }
1376
- .alliance-assembly-cast { position:absolute; z-index:3; inset:0 0 0 48%; display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); grid-auto-rows:minmax(0,1fr); }
1377
- .alliance-assembly-cast.alliance-count-2 { grid-template-rows:1fr; }
1378
- .alliance-assembly-cast.alliance-count-3 { grid-template-columns:repeat(3,minmax(0,1fr)); grid-template-rows:1fr; }
1379
- .alliance-assembly-cast figure { position:relative; min-width:0; min-height:0; margin:0; overflow:hidden; border:1px solid rgba(205,164,101,.12); opacity:.5; }
1380
- .alliance-assembly-cast figure.is-responding,.alliance-assembly-cast figure[class*="outcome-"] { opacity:1; }
1381
- .alliance-assembly-cast figure.is-responding { border-color:rgba(225,188,115,.72); box-shadow:inset 0 0 0 2px rgba(225,188,115,.18); }
1382
- .alliance-assembly-cast figure.outcome-withdraw { opacity:.72; filter:saturate(.58); }
1383
- .alliance-assembly-cast img { width:100%; height:100%; object-fit:cover; object-position:50% 16%; filter:saturate(.76) brightness(.68); }
1384
- .alliance-assembly-cast figcaption { position:absolute; inset:auto 0 0; padding:2.5rem .6rem .55rem; color:#ead7b6; background:linear-gradient(transparent,rgba(11,8,6,.96) 48%); }
1385
- .alliance-assembly-cast span,.alliance-assembly-cast b,.alliance-assembly-cast small,.alliance-assembly-cast em { display:block; }
1386
- .alliance-assembly-cast span { color:#a58a64; font:.52rem var(--sans); }
1387
- .alliance-assembly-cast b { margin:.12rem 0; font-size:.78rem; }
1388
- .alliance-assembly-cast small { color:#c9b18a; font:.55rem var(--sans); }
1389
- .alliance-assembly-cast em { margin-top:.16rem; color:#9d917f; font:normal .5rem/1.35 var(--sans); }
1390
- .alliance-assembly-answer { margin:.62rem 0; padding:.68rem .75rem; border-left:2px solid #c49a5b; background:rgba(92,63,27,.18); }
1391
- .alliance-assembly-answer span,.alliance-assembly-answer b,.alliance-assembly-answer em { display:block; }
1392
- .alliance-assembly-answer span { color:#a98755; font:.55rem var(--sans); letter-spacing:.06em; }
1393
- .alliance-assembly-answer b { margin:.24rem 0; color:#e0c28d; }
1394
- .alliance-assembly-answer p { margin:.26rem 0; color:#e1d1b7; font:.73rem/1.6 var(--serif); }
1395
- .alliance-assembly-answer em { color:#aca08d; font:normal .57rem/1.45 var(--sans); }
1396
- .alliance-assembly-reasons { display:grid; gap:.3rem; margin:.55rem 0; }
1397
- .alliance-assembly-reasons p { margin:0; padding:.42rem .52rem; border-left:1px solid rgba(205,164,101,.42); color:#b8ad9a; background:rgba(62,45,25,.12); font:.56rem/1.5 var(--sans); }
1398
- .alliance-assembly-summary { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:.35rem; margin:.58rem 0; }
1399
- .alliance-assembly-summary p { margin:0; padding:.48rem .55rem; border:1px solid rgba(205,164,101,.2); background:rgba(57,39,19,.16); }
1400
- .alliance-assembly-summary b,.alliance-assembly-summary span,.alliance-assembly-summary em { display:block; }
1401
- .alliance-assembly-summary b { color:#d6b879; font:.62rem var(--serif); }
1402
- .alliance-assembly-summary span { margin:.16rem 0; color:#c8baa3; font:.55rem/1.4 var(--sans); }
1403
- .alliance-assembly-summary em { color:#928879; font:normal .5rem/1.35 var(--sans); }
1404
- .alliance-assembly-chain { margin:.45rem 0; padding:.42rem .52rem; border-left:2px solid rgba(111,174,157,.55); color:#9eb5aa; background:rgba(16,49,42,.17); font:.56rem/1.45 var(--sans); }
1405
- .alliance-assembly-chain b { display:block; margin-bottom:.22rem; color:#d6b879; font:.62rem var(--serif); }
1406
- .alliance-assembly-chain span { display:flex; align-items:baseline; justify-content:space-between; gap:.55rem; padding:.12rem 0; border-top:1px solid rgba(214,184,121,.09); }
1407
- .alliance-assembly-chain em { color:#948a7d; font:normal .5rem/1.35 var(--sans); text-align:right; }
1408
-
1409
- /* 双院/三院/四院终章:成员并排占据画面,不把她们缩成五院终章的缺席头像。 */
1410
- .alliance-night-stage { overflow: hidden; background: radial-gradient(circle at 72% 28%,#3f493d,#130f0d 72%); }
1411
- .alliance-night-stage::after { background: linear-gradient(90deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.9) 48%,rgba(13,9,8,.1) 78%), linear-gradient(0deg,rgba(26,77,65,.24),transparent 62%); }
1412
- .alliance-night-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 48%; padding: 1.3rem; overflow: clip; border-color: rgba(111,174,157,.48); }
1413
- .alliance-night-panel .choice-grid { grid-template-columns: 1fr 1fr; }
1414
- .alliance-cast { position: absolute; z-index: 3; inset: 0 0 0 45%; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); }
1415
- .alliance-size-3 .alliance-cast { grid-template-columns: repeat(3,minmax(0,1fr)); }
1416
- .alliance-size-4 .alliance-cast { grid-template-columns:repeat(2,minmax(0,1fr)); grid-template-rows:repeat(2,minmax(0,1fr)); }
1417
- .alliance-size-4 .alliance-cast figure:nth-child(even) { transform:none; }
1418
- .alliance-cast figure { position: relative; min-width: 0; height: 100%; margin: 0; overflow: hidden; border-left: 1px solid rgba(218,190,136,.2); }
1419
- .alliance-cast figure:nth-child(even) { transform: translateY(3.5%); }
1420
- .alliance-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 12%; filter: saturate(.75) brightness(.67); }
1421
- .alliance-cast figcaption { position: absolute; inset: auto .45rem 3%; padding: 2.8rem .65rem .7rem; color: #ead8b9; background: linear-gradient(transparent,rgba(11,8,7,.96) 45%); }
1422
- .alliance-cast span, .alliance-cast b { display: block; }
1423
- .alliance-cast span { color: #86a99c; font: .58rem var(--sans); letter-spacing: .11em; }
1424
- .alliance-cast b { margin-top: .18rem; font-size: .9rem; }
1425
- .alliance-cast p { display: none; }
1426
- .alliance-voices-inline { display: grid; gap: .38rem; margin: .65rem 0; }
1427
- .alliance-voices-inline p { margin: 0; padding: .52rem .62rem; border-left: 2px solid rgba(111,174,157,.6); color: #c6b79f; background: rgba(16,45,39,.2); font: .67rem/1.5 var(--sans); }
1428
- .alliance-voices-inline b { margin-right: .55rem; color: #9cc1b6; font-size: .7rem; }
1429
- .alliance-last-result { margin: .65rem 0; padding: .65rem .75rem; border-left: 2px solid #6d9e90; color: #cbbda7; background: rgba(16,49,42,.22); font: .68rem/1.55 var(--sans); }
1430
- .alliance-last-result span { display: block; margin-bottom: .22rem; color: #82a99c; font-size: .58rem; letter-spacing: .1em; }
1431
- .alliance-night-result-stage::after { background: radial-gradient(55% 78% at 73% 28%,rgba(74,126,103,.24),transparent 68%),linear-gradient(90deg,rgba(11,13,11,.99) 0%,rgba(11,13,11,.92) 50%,rgba(11,13,11,.12) 80%); }
1432
- .alliance-result-cast figure { filter: none; }
1433
- .alliance-result-cast img { filter: saturate(.86) brightness(.76) contrast(1.04); }
1434
- .alliance-result-panel { border-color: rgba(109,166,139,.62); background: linear-gradient(145deg,rgba(15,26,21,.98),rgba(17,13,11,.95)); }
1435
- .alliance-result-voices { display: grid; gap: .38rem; margin: .62rem 0; }
1436
- .alliance-result-voices blockquote { margin: 0; padding: .52rem .62rem; border-left: 2px solid rgba(109,166,139,.64); background: rgba(27,72,56,.18); }
1437
- .alliance-result-voices b,.alliance-result-voices p { display: block; }
1438
- .alliance-result-voices b { color: #9ac1ae; font: .62rem var(--sans); letter-spacing: .08em; }
1439
- .alliance-result-voices p { margin: .18rem 0 0; color: #d6c6ad; font: .66rem/1.55 var(--serif); }
1440
- .alliance-result-ledger { display: grid; grid-template-columns: auto minmax(0,1fr); gap: .15rem .5rem; margin: .62rem 0; padding: .55rem .62rem; border: 1px solid rgba(197,158,96,.2); background: rgba(78,50,27,.12); }
1441
- .alliance-result-ledger span { color: #9b8058; font: .55rem var(--sans); letter-spacing: .08em; }
1442
- .alliance-result-ledger b { color: #d5b982; font: .68rem var(--serif); }
1443
- .alliance-result-ledger em { grid-column: 2; color: #a89b87; font: normal .57rem/1.45 var(--sans); }
1444
- .alliance-result-bonds { display: flex; flex-wrap: wrap; gap: .28rem; margin: .5rem 0 .65rem; }
1445
- .alliance-result-bonds span { padding: .3rem .42rem; border: 1px solid rgba(109,166,139,.24); color: #9dafa2; font: .54rem var(--sans); }
1446
- .alliance-result-bonds b { margin-left: .35rem; color: #92c0a9; }
1447
- .alliance-result-continue { min-width: 15rem; border-color: rgba(109,166,139,.58); }
1448
-
1449
- /* 五院尾章:共同办事之后保留三拍夜话与一拍次晨,避免按钮后直接结算。 */
1450
- .afterglow-stage::before { background-position: center; filter: saturate(.68) brightness(.58) blur(1px); transform: scale(1.02); }
1451
- .afterglow-stage::after { background: radial-gradient(60% 70% at 65% 30%, rgba(174,83,45,.18), transparent 70%), linear-gradient(90deg, rgba(13,8,7,.94), rgba(13,8,7,.28) 64%, rgba(13,8,7,.5)); }
1452
- .afterglow-panel { left: 4%; top: 10%; width: min(680px, 52%); max-height: 78%; padding: 1.45rem; overflow: clip; }
1453
- .afterglow-panel .choice-grid, .shared-dawn-panel .choice-grid { grid-template-columns: 1fr; margin-top: 1rem; }
1454
- .afterglow-panel .choice-button, .shared-dawn-panel .choice-button { min-height: 64px; }
1455
- .shared-afterglow-result-stage::before { background-position: 55% center; filter: saturate(.62) brightness(.56) blur(1px); transform: scale(1.02); }
1456
- .shared-afterglow-result-stage::after { background: radial-gradient(52% 72% at 76% 28%,rgba(77,133,107,.2),transparent 68%),linear-gradient(90deg,rgba(12,13,11,.99) 0%,rgba(12,13,11,.94) 53%,rgba(12,13,11,.24) 82%); }
1457
- .shared-result-cast { position: absolute; z-index: 3; inset: 3% 2.5% 3% 57%; display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .22rem; }
1458
- .shared-result-cast figure { position: relative; min-width: 0; height: 100%; margin: 0; overflow: hidden; border: 1px solid rgba(214,181,121,.2); background: #130f0d; }
1459
- .shared-result-cast figure:nth-child(even) { transform: translateY(2.5%); }
1460
- .shared-result-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 75% 12%; filter: saturate(.72) brightness(.7); }
1461
- .shared-result-cast figcaption { position: absolute; inset: auto 0 0; padding: 3.8rem .25rem .55rem; text-align: center; background: linear-gradient(transparent,rgba(10,8,7,.96) 55%); }
1462
- .shared-result-cast b,.shared-result-cast span { display: block; }
1463
- .shared-result-cast b { color: #dfc99f; font: .68rem var(--serif); }
1464
- .shared-result-cast span { margin-top: .15rem; color: #8ca89a; font: .49rem var(--sans); }
1465
- .shared-afterglow-result-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 53%; padding: 1.15rem 1.25rem; overflow: clip; border-color: rgba(109,166,139,.58); background: linear-gradient(145deg,rgba(15,25,20,.98),rgba(18,13,11,.95)); }
1466
- .shared-result-voices { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .36rem; margin: .62rem 0; }
1467
- .shared-result-voices blockquote { margin: 0; padding: .48rem .56rem; border-left: 2px solid rgba(109,166,139,.56); background: rgba(25,72,55,.17); }
1468
- .shared-result-voices blockquote:last-child { grid-column: 1 / -1; }
1469
- .shared-result-voices b { color: #93bca8; font: .59rem var(--sans); letter-spacing: .08em; }
1470
- .shared-result-voices p { margin: .18rem 0 0; color: #d2c2aa; font: .61rem/1.5 var(--serif); }
1471
- .shared-result-choice { display: grid; grid-template-columns: auto minmax(0,1fr); gap: .15rem .5rem; margin: .58rem 0; padding: .5rem .58rem; border-top: 1px solid rgba(205,168,105,.19); border-bottom: 1px solid rgba(205,168,105,.19); }
1472
- .shared-result-choice span { color: #8fae9f; font: .54rem var(--sans); letter-spacing: .08em; }
1473
- .shared-result-choice b { color: #d7bc86; font: .66rem var(--serif); }
1474
- .shared-result-choice em { grid-column: 2; color: #9d907f; font: normal .56rem/1.42 var(--sans); }
1475
- .shared-result-continue { min-width: 15rem; border-color: rgba(109,166,139,.58); }
1476
- .shared-dawn-stage::before { background-position: 58% center; filter: saturate(.52) brightness(.72) sepia(.18); }
1477
- .shared-dawn-stage::after { background: linear-gradient(90deg, rgba(20,14,12,.95) 0%, rgba(20,14,12,.48) 52%, rgba(223,185,127,.08)); }
1478
- .shared-dawn-panel { left: 4%; top: 10%; width: min(700px, 54%); max-height: 78%; padding: 1.45rem; overflow: clip; }
1479
- .shared-dawn-result-stage::before { background-position: 58% center; filter: saturate(.48) brightness(.78) sepia(.2); }
1480
- .shared-dawn-result-stage::after { background: radial-gradient(52% 74% at 76% 24%,rgba(224,184,115,.18),transparent 68%),linear-gradient(90deg,rgba(18,13,10,.99) 0%,rgba(18,13,10,.93) 55%,rgba(52,39,25,.2) 83%); }
1481
- .shared-dawn-result-cast { position: absolute; z-index: 3; inset: 3% 2.5% 3% 59%; display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .2rem; }
1482
- .shared-dawn-result-cast figure { position: relative; min-width: 0; height: 100%; margin: 0; overflow: hidden; border: 1px solid rgba(218,181,116,.23); background: #15110d; }
1483
- .shared-dawn-result-cast figure:nth-child(even) { transform: translateY(2%); }
1484
- .shared-dawn-result-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 75% 12%; filter: saturate(.68) brightness(.76) sepia(.08); }
1485
- .shared-dawn-result-cast figcaption { position: absolute; inset: auto 0 0; padding: 3.2rem .2rem .55rem; text-align: center; background: linear-gradient(transparent,rgba(12,9,7,.96) 56%); }
1486
- .shared-dawn-result-cast b,.shared-dawn-result-cast span { display: block; }
1487
- .shared-dawn-result-cast b { color: #e3c99a; font: .65rem var(--serif); }
1488
- .shared-dawn-result-cast span { margin-top: .15rem; color: #a78e68; font: .48rem var(--sans); }
1489
- .shared-dawn-result-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 55%; padding: 1.15rem 1.25rem; overflow: clip; border-color: rgba(205,164,92,.52); background: linear-gradient(145deg,rgba(27,22,15,.985),rgba(16,12,9,.97)); }
1490
- .shared-dawn-result-voices { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .34rem; margin: .58rem 0; }
1491
- .shared-dawn-result-voices blockquote { margin: 0; padding: .46rem .54rem; border-left: 2px solid rgba(206,166,96,.52); background: rgba(103,78,35,.15); }
1492
- .shared-dawn-result-voices blockquote:last-child { grid-column: 1 / -1; }
1493
- .shared-dawn-result-voices b { color: #c9a96f; font: .58rem var(--sans); letter-spacing: .08em; }
1494
- .shared-dawn-result-voices p { margin: .18rem 0 0; color: #d5c4a8; font: .6rem/1.5 var(--serif); }
1495
- .shared-dawn-result-ledger { display: grid; grid-template-columns: auto minmax(0,1fr); gap: .16rem .5rem; margin: .58rem 0; padding: .52rem .58rem; border-top: 1px solid rgba(205,164,92,.22); border-bottom: 1px solid rgba(205,164,92,.22); }
1496
- .shared-dawn-result-ledger span { color: #a98a57; font: .55rem var(--sans); letter-spacing: .09em; }
1497
- .shared-dawn-result-ledger b { color: #dfc28f; font: .68rem var(--serif); }
1498
- .shared-dawn-result-ledger em { grid-column: 2; color: #a99a83; font: normal .57rem/1.48 var(--sans); }
1499
- .shared-dawn-result-continue { min-width: 15rem; border-color: rgba(205,164,92,.58); }
1500
-
1501
- /* 破局终章:坏结局也要经过三拍因果、一次取舍与五人回应。 */
1502
- .collapse-finale-stage::before,.collapse-result-stage::before { background-position: center; filter: saturate(.35) brightness(.38) sepia(.28); transform: scale(1.03); }
1503
- .collapse-finale-stage::after,.collapse-result-stage::after { background: radial-gradient(48% 68% at 76% 25%,rgba(139,54,42,.2),transparent 68%),linear-gradient(90deg,rgba(12,8,7,.995) 0%,rgba(19,11,9,.94) 56%,rgba(32,15,12,.32) 84%); }
1504
- .collapse-cast,.collapse-result-cast { position: absolute; z-index: 3; inset: 3% 2.5% 3% 59%; display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .2rem; }
1505
- .collapse-cast figure,.collapse-result-cast figure { position: relative; min-width: 0; height: 100%; margin: 0; overflow: hidden; border: 1px solid rgba(186,107,81,.19); background: #120c0a; transition: opacity .2s,border-color .2s,transform .2s; }
1506
- .collapse-cast figure:not(.speaking) { opacity: .46; transform: translateY(2%); }
1507
- .collapse-cast figure.speaking { z-index: 2; border-color: rgba(211,135,101,.72); box-shadow: 0 0 0 1px rgba(211,135,101,.16),0 0 32px rgba(101,40,29,.28); }
1508
- .collapse-result-cast figure:not(.speaking) { opacity:.38; transform:translateY(2%); }
1509
- .collapse-result-cast figure.heard { opacity:.58; }
1510
- .collapse-result-cast figure.speaking { z-index:2; opacity:1; transform:none; border-color:rgba(211,135,101,.78); box-shadow:0 0 0 1px rgba(211,135,101,.18),0 0 34px rgba(101,40,29,.32); }
1511
- .collapse-cast img,.collapse-result-cast img { width: 100%; height: 100%; object-fit: cover; object-position: 75% 12%; filter: saturate(.52) brightness(.62) contrast(1.06); }
1512
- .collapse-cast figure.speaking img { filter: saturate(.74) brightness(.76) contrast(1.03); }
1513
- .collapse-result-cast figure.speaking img { filter:saturate(.76) brightness(.78) contrast(1.03); }
1514
- .collapse-cast figcaption,.collapse-result-cast figcaption { position: absolute; inset: auto 0 0; padding: 3rem .25rem .55rem; text-align: center; background: linear-gradient(transparent,rgba(10,7,6,.97) 55%); }
1515
- .collapse-cast b,.collapse-cast span,.collapse-result-cast b,.collapse-result-cast span { display: block; }
1516
- .collapse-cast b,.collapse-result-cast b { color: #d7b398; font: .65rem var(--serif); }
1517
- .collapse-cast span,.collapse-result-cast span { margin-top: .16rem; color: #9b7569; font: .48rem/1.35 var(--sans); }
1518
- .collapse-finale-panel,.collapse-result-panel { z-index: 6; left: 3.5%; top: 4%; bottom: 4%; width: 55%; padding: 1.15rem 1.25rem; overflow: clip; border-color: rgba(177,88,64,.54); background: linear-gradient(145deg,rgba(27,15,12,.985),rgba(15,10,9,.97)); }
1519
- .collapse-current-voice { margin: .75rem 0; padding: .72rem .78rem; border-left: 3px solid rgba(200,107,78,.68); background: rgba(92,37,27,.2); }
1520
- .collapse-current-voice b { color: #d89575; font: .66rem var(--sans); letter-spacing: .1em; }
1521
- .collapse-current-voice p { margin: .28rem 0 0; color: #ddc7b5; font: .76rem/1.68 var(--serif); }
1522
- .collapse-cause-ledger,.collapse-result-ledger { display: grid; grid-template-columns: auto minmax(0,1fr); gap: .18rem .55rem; margin: .65rem 0; padding: .58rem .64rem; border-top: 1px solid rgba(191,105,76,.23); border-bottom: 1px solid rgba(191,105,76,.23); }
1523
- .collapse-cause-ledger span,.collapse-result-ledger span { color: #a86b57; font: .55rem var(--sans); letter-spacing: .09em; }
1524
- .collapse-cause-ledger b,.collapse-result-ledger b { color: #d9af8f; font: .68rem var(--serif); }
1525
- .collapse-cause-ledger em,.collapse-result-ledger em { grid-column: 2; color: #a89080; font: normal .57rem/1.48 var(--sans); }
1526
- .collapse-final-question { margin: .7rem 0; padding: .7rem .78rem; border: 1px solid rgba(201,117,85,.28); background: rgba(113,42,29,.14); }
1527
- .collapse-final-question span,.collapse-final-question b { display: block; }
1528
- .collapse-final-question span { color: #a66c59; font: .56rem var(--sans); letter-spacing: .12em; }
1529
- .collapse-final-question b { margin-top: .24rem; color: #dfbea2; font: .76rem var(--serif); }
1530
- .collapse-final-question p { margin: .3rem 0 0; color: #ae9988; font: .6rem/1.5 var(--sans); }
1531
- .collapse-final-choices { grid-template-columns: 1fr 1fr; }
1532
- .collapse-continue,.collapse-result-continue { min-width: 15rem; border-color: rgba(198,103,75,.58); }
1533
- .collapse-result-current-voice { margin:.62rem 0; padding:.72rem .78rem; border-left:3px solid rgba(202,108,78,.72); background:rgba(96,38,27,.22); }
1534
- .collapse-result-current-voice b { color:#dc9271; font:.62rem var(--sans); letter-spacing:.1em; }
1535
- .collapse-result-current-voice p { margin:.3rem 0 0; color:#e0cbbb; font:.74rem/1.66 var(--serif); }
1536
- .collapse-result-transcript { display:grid; gap:.3rem; margin:.58rem 0; padding:0; list-style:none; }
1537
- .collapse-result-transcript li { display:grid; grid-template-columns:1.35rem 1fr; gap:.42rem; padding:.42rem .5rem; border:1px solid rgba(181,103,75,.2); background:rgba(65,27,21,.14); }
1538
- .collapse-result-transcript li > span { display:grid; width:1.2rem; height:1.2rem; place-items:center; border:1px solid rgba(192,111,80,.42); color:#bd7f68; font:.52rem var(--sans); }
1539
- .collapse-result-transcript b { color:#c98e75; font:.57rem var(--sans); }
1540
- .collapse-result-transcript p { margin:.16rem 0 0; color:#aa988b; font:.56rem/1.45 var(--serif); }
1541
- .collapse-current-memory > div { margin-top:.5rem; padding:.52rem .58rem; border-left:2px solid rgba(199,139,88,.48); background:rgba(42,27,19,.34); }
1542
- .collapse-current-memory > div b,.collapse-current-memory > div p,.collapse-current-memory > div em { display:block; }
1543
- .collapse-current-memory > div b { color:#d0ad80; font:.62rem/1.4 var(--serif); }
1544
- .collapse-current-memory > div p { margin:.28rem 0; color:#b9aa96; font:.58rem/1.52 var(--sans); }
1545
- .collapse-current-memory > div em { color:#937f6d; font:normal .55rem/1.48 var(--sans); }
1546
-
1547
- /* 五张身份母版的人物都站在画面右半。窄卡若按几何中心裁切,会把正脸推到卡缝上。 */
1548
- img[alt="吴月娘"] { --heroine-focus-x: 72%; }
1549
- img[alt="潘金莲"] { --heroine-focus-x: 73%; }
1550
- img[alt="李瓶儿"] { --heroine-focus-x: 69%; }
1551
- img[alt="孟玉楼"] { --heroine-focus-x: 71%; }
1552
- img[alt="孙雪娥"] { --heroine-focus-x: 68%; }
1553
- .dialogue-wu_yueniang { --heroine-focus-x: 72%; }
1554
- .dialogue-pan_jinlian { --heroine-focus-x: 73%; }
1555
- .dialogue-li_pinger { --heroine-focus-x: 69%; }
1556
- .dialogue-meng_yulou { --heroine-focus-x: 71%; }
1557
- .dialogue-sun_xuee { --heroine-focus-x: 68%; }
1558
- :is(
1559
- .precedent-cast,
1560
- .private-price-offers,
1561
- .private-price-coalition,
1562
- .private-price-ledger,
1563
- .opening-aftermath-cast,
1564
- .day-aftermath-reactions,
1565
- .aftermath-observer,
1566
- .crisis-cast,
1567
- .crisis-aftermath-cast,
1568
- .pair-portraits,
1569
- .pair-aftermath-witness,
1570
- .memory-cast,
1571
- .favor-cast,
1572
- .dusk-invite-cast,
1573
- .invitation-aftermath-cast,
1574
- .rivalry-listener,
1575
- .council-cast,
1576
- .council-resolution-cast,
1577
- .public-followup-cast,
1578
- .public-aftermath-cast,
1579
- .act-aftermath-cast,
1580
- .act-transition-cast,
1581
- .final-reckoning-cast,
1582
- .final-aftermath-cast,
1583
- .personal-finale-others,
1584
- .alliance-assembly-cast,
1585
- .alliance-cast,
1586
- .shared-result-cast,
1587
- .shared-dawn-result-cast,
1588
- .collapse-cast,
1589
- .collapse-result-cast,
1590
- .alliance-tableau-members,
1591
- .alliance-tableau-actions
1592
- ) img { object-position: var(--heroine-focus-x,50%) 14%; }
1593
-
1594
- /* 亲密与尾章进入专注模式:经营账暂时收起,画面和对白拿回舞台。 */
1595
- .game-shell:is([data-phase="scene"], [data-phase="personal_finale"], [data-phase="personal_finale_result"], [data-phase="alliance_night_result"], [data-phase="shared_afterglow"], [data-phase="shared_afterglow_result"], [data-phase="shared_dawn"], [data-phase="shared_dawn_result"], [data-phase="collapse_finale"], [data-phase="collapse_finale_result"]) { grid-template-rows: 48px 1fr; }
1596
- .game-shell:is([data-phase="scene"], [data-phase="personal_finale"], [data-phase="personal_finale_result"], [data-phase="alliance_night_result"], [data-phase="shared_afterglow"], [data-phase="shared_afterglow_result"], [data-phase="shared_dawn"], [data-phase="shared_dawn_result"], [data-phase="collapse_finale"], [data-phase="collapse_finale_result"]) .topbar { opacity: .72; }
1597
- .game-shell:is([data-phase="scene"], [data-phase="personal_finale"], [data-phase="personal_finale_result"], [data-phase="alliance_night_result"], [data-phase="shared_afterglow"], [data-phase="shared_afterglow_result"], [data-phase="shared_dawn"], [data-phase="shared_dawn_result"], [data-phase="collapse_finale"], [data-phase="collapse_finale_result"]) .play-area { grid-template-columns: 1fr; }
1598
- .game-shell:is([data-phase="scene"], [data-phase="personal_finale"], [data-phase="personal_finale_result"], [data-phase="alliance_night_result"], [data-phase="shared_afterglow"], [data-phase="shared_afterglow_result"], [data-phase="shared_dawn"], [data-phase="shared_dawn_result"], [data-phase="collapse_finale"], [data-phase="collapse_finale_result"]) .relation-rail { display: none; }
1599
-
1600
- /* 场景 CG */
1601
- .scene-view { position: absolute; inset: 0; background: #100d0b; overflow: hidden; }
1602
- .scene-view > img { --scene-scale: 1; width: 100%; height: 100%; object-fit: cover; object-position: center; animation: scene-enter .55s ease both; }
1603
- .scene-view:is([data-scene-tier="prelude"], [data-scene-tier="explicit"])[data-scene-beat="1"] > img { --scene-scale: 1.035; object-position: 54% center; }
1604
- .scene-view:is([data-scene-tier="prelude"], [data-scene-tier="explicit"])[data-scene-beat="2"] > img { --scene-scale: 1.07; object-position: 60% center; }
1605
- .scene-scrim { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(12,8,7,.92) 0%, rgba(12,8,7,.38) 42%, transparent 72%), linear-gradient(0deg, rgba(12,8,7,.45), transparent 58%); }
1606
- .scene-caption { position: absolute; z-index: 2; left: 4.5%; bottom: 7%; width: min(430px, 38%); color: #eee1cb; }
1607
- .scene-caption h2 { margin: 0 0 .75rem; font-size: clamp(2rem, 3.6vw, 4rem); letter-spacing: .1em; }
1608
- .scene-chapter-kicker { margin: -.35rem 0 .45rem; color: #d3a85e !important; font: .66rem/1.4 var(--sans) !important; letter-spacing: .08em; }
1609
- .scene-caption > p:not(.eyebrow) { color: #d5c4aa; font: .9rem/1.9 var(--sans); }
1610
- .scene-meta { display: flex; gap: 1rem; margin: 1rem 0; color: #ad9878; font: .68rem var(--sans); }
1611
- .scene-meta span { padding: .3rem .5rem; border: 1px solid rgba(213,182,122,.32); }
1612
- /* 起始不透明度 .38、时长 .55s:任何时刻截图都不会拍到接近全黑的半淡入帧。 */
1613
- @keyframes scene-enter { from { opacity: .38; transform: scale(calc(var(--scene-scale) + .018)); filter: saturate(.7); } to { opacity: 1; transform: scale(var(--scene-scale)); filter: saturate(.9); } }
1614
-
1615
- /* 结算 */
1616
- .ending-view { position: absolute; inset: 0; display: grid; grid-template-columns: 55% 45%; background: #130e0c; color: #eee1cc; }
1617
- .ending-art { background-size: cover; background-position: center; }
1618
- /* 四个结局四盏灯:专一暖、群像原色、权谋冷灰、不稳熄火。 */
1619
- .ending-view[data-ending="exclusive"] .ending-art { background-position: 50% 10%; filter: saturate(.95) brightness(.92); }
1620
- .ending-view[data-ending="intrigue"] .ending-art { filter: saturate(.5) brightness(.58) contrast(1.08); }
1621
- .ending-view[data-ending="unstable"] .ending-art { filter: saturate(.42) brightness(.62); }
1622
- .ending-copy { display: flex; min-height: 0; flex-direction: column; justify-content: flex-start; padding: 4.5vh 5vw 4vh 3.5vw; overflow-y: auto; }
1623
- .ending-copy h1 { margin: 0 0 .3rem; font-size: clamp(2.5rem, 4vw, 4.8rem); letter-spacing: .13em; }
1624
- .ending-tag { color: var(--gold-bright); font-size: 1.1rem; }
1625
- .ending-copy > p:not(.eyebrow):not(.ending-tag):not(.ending-note) { color: #cbbba4; font: .9rem/1.9 var(--sans); }
1626
- .ending-ledger { display: grid; grid-template-columns: repeat(2,1fr); gap: .55rem; margin: 1rem 0; }
1627
- .ending-ledger span { display: flex; flex-direction: column; padding: .7rem; border: 1px solid rgba(214,180,113,.24); color: #948674; font: .75rem var(--sans); }
1628
- .ending-ledger b { margin-top: .2rem; color: #d8c5a3; font-size: .8rem; }
1629
- .ending-habits { margin: 0 0 .8rem; padding: .65rem .72rem; border: 1px solid rgba(214,180,113,.22); background: rgba(0,0,0,.16); }
1630
- .ending-habits > header { display: flex; justify-content: space-between; gap: .8rem; color: #9d8b72; font: .63rem var(--sans); }
1631
- .ending-habits > header b { color: #d7bc89; font-size: .7rem; }
1632
- .ending-habits > div { display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .35rem; margin-top: .5rem; }
1633
- .ending-habits article { min-width: 0; padding: .4rem .45rem; border-left: 2px solid rgba(171,116,63,.62); background: rgba(92,58,34,.14); }
1634
- .ending-habits article.unformed { border-left-color: rgba(140,130,114,.28); opacity: .68; }
1635
- .ending-habits article span, .ending-habits article b, .ending-habits article small { display: block; }
1636
- .ending-habits article span { color: #8d7f6d; font: .54rem var(--sans); }
1637
- .ending-habits article b { margin-top: .12rem; color: #d8c39b; font: .66rem var(--serif); }
1638
- .ending-habits article small { display: -webkit-box; margin-top: .2rem; overflow: hidden; color: #93836f; font: .54rem/1.35 var(--sans); -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1639
- .ending-note { color: #918473; font: .8rem/1.6 var(--sans); }
1640
- .household-ending { display: grid; grid-template-columns: 1fr; gap: .4rem; margin: 0 0 .75rem; }
1641
- .household-ending span { display: flex; flex-direction: column; padding: .5rem .6rem; border-left: 2px solid rgba(210,174,107,.42); color: #8f8271; font: .67rem/1.45 var(--sans); }
1642
- .household-ending b { color: #cdbb9e; font-size: .72rem; }
1643
- .household-ending small { margin-top: .2rem; color: #8f8271; font: .62rem/1.45 var(--sans); }
1644
-
1645
- /* 结局后日谈:不是统一胜利字幕,而是五个人各自继续生活的六页短章。 */
1646
- .epilogue-overlay { position: fixed; z-index: 560; inset: 0; display: grid; place-items: center; padding: 3vh 3vw; background: rgba(9,6,5,.91); backdrop-filter: blur(10px); }
1647
- .epilogue-book { width: min(1080px,94vw); height: min(720px,92vh); display: grid; grid-template-columns: minmax(0,46%) minmax(0,54%); overflow: hidden; border: 1px solid rgba(222,188,123,.58); color: #eadcc5; background: #120d0b; box-shadow: 0 34px 100px rgba(0,0,0,.78); }
1648
- .epilogue-art { position: relative; min-width: 0; overflow: hidden; background: #0d0908; }
1649
- .epilogue-art::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, transparent 55%, rgba(18,13,11,.86)), linear-gradient(0deg, rgba(18,13,11,.7), transparent 48%); }
1650
- .epilogue-art img { width: 100%; height: 100%; object-fit: cover; filter: saturate(.72) contrast(1.04); }
1651
- .epilogue-art > span { position: absolute; z-index: 1; left: 1.2rem; bottom: .7rem; color: rgba(235,209,160,.32); font: 5rem/1 var(--serif); }
1652
- .epilogue-copy { min-width: 0; min-height: 0; display: grid; grid-template-rows: auto minmax(0,1fr) auto; overflow: hidden; padding: 1.2rem 1.45rem 1.35rem; background: radial-gradient(circle at 30% 20%,rgba(129,82,40,.14),transparent 38%), linear-gradient(145deg,#211713,#120d0b 68%); }
1653
- .epilogue-copy > header { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding-bottom: .75rem; border-bottom: 1px solid rgba(220,188,127,.2); }
1654
- .epilogue-copy > header p { margin: .25rem 0 0; }
1655
- .epilogue-scroll { min-height: 0; padding: clamp(1.2rem,3vh,2.25rem) .35rem 1rem; overflow-y: auto; }
1656
- .epilogue-progress { margin: 0 0 .65rem; color: #ad956f; font: .7rem var(--sans); letter-spacing: .12em; }
1657
- .epilogue-copy h2 { margin: 0 0 1rem; color: #f0dfbf; font-size: clamp(1.8rem,3vw,3.2rem); line-height: 1.2; letter-spacing: .08em; }
1658
- .epilogue-body { margin: 0; color: #d3c1a6; font: .92rem/2 var(--sans); }
1659
- .epilogue-relations { display: flex; gap: .5rem; margin: 1.1rem 0 0; }
1660
- .epilogue-relations span { flex: 1; padding: .5rem .6rem; border: 1px solid rgba(220,188,127,.2); color: #94836e; font: .68rem var(--sans); }
1661
- .epilogue-relations b { display: block; margin-top: .2rem; color: #d6bc8c; font-size: .76rem; }
1662
- .epilogue-route-note { margin: 1.1rem 0 0; padding: .85rem 1rem; border-left: 2px solid var(--cinnabar); color: #a99578; font: .77rem/1.75 var(--sans); background: rgba(0,0,0,.2); }
1663
- .epilogue-habit { margin: 1.05rem 0 0; padding: .75rem .85rem; border: 1px solid rgba(112,155,139,.3); background: rgba(45,75,66,.18); }
1664
- .epilogue-habit span, .epilogue-habit b { display: block; }
1665
- .epilogue-habit span { color: #8fafa2; font: .62rem var(--sans); letter-spacing: .1em; }
1666
- .epilogue-habit b { margin-top: .28rem; color: #cae0d3; font: .9rem var(--serif); }
1667
- .epilogue-habit p { margin: .35rem 0 0; color: #aebdb2; font: .7rem/1.55 var(--sans); }
1668
- .epilogue-night-conversations { margin: .8rem 0 0; padding: .75rem .85rem; border: 1px solid rgba(177,126,75,.28); background: rgba(91,48,31,.16); }
1669
- .epilogue-night-conversations header span,.epilogue-night-conversations header b { display:block; }
1670
- .epilogue-night-conversations header span { color:#a88468; font:.58rem var(--sans); letter-spacing:.1em; }
1671
- .epilogue-night-conversations header b { margin-top:.24rem; color:#ddc3a4; font:.78rem var(--serif); }
1672
- .epilogue-night-conversations ol { display:grid; gap:.58rem; margin:.65rem 0 0; padding:0; list-style:none; }
1673
- .epilogue-night-conversations li { padding:.55rem .62rem; border-left:2px solid rgba(177,126,75,.55); background:rgba(0,0,0,.13); }
1674
- .epilogue-night-conversations li small,.epilogue-night-conversations li b,.epilogue-night-conversations li .stake { display:block; }
1675
- .epilogue-night-conversations li small { color:#997b65; font:.55rem var(--sans); }
1676
- .epilogue-night-conversations li b { margin-top:.16rem; color:#d4b898; font:.68rem var(--serif); }
1677
- .epilogue-night-conversations li .stake { margin-top:.2rem; color:#c6a573; font:.56rem/1.45 var(--sans); }
1678
- .epilogue-night-conversations li p { margin:.24rem 0 0; color:#b5a590; font:.63rem/1.52 var(--sans); }
1679
- .epilogue-night-conversations li em { display:block; margin-top:.34rem; padding-top:.3rem; border-top:1px solid rgba(177,126,75,.16); color:#88a89b; font:.57rem/1.48 var(--sans); font-style:normal; }
1680
- .epilogue-copy > footer { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: .8rem; padding-top: .9rem; border-top: 1px solid rgba(220,188,127,.2); }
1681
- .epilogue-copy > footer > span { display: flex; justify-content: center; gap: .35rem; }
1682
- .epilogue-copy > footer i { width: 5px; height: 5px; border-radius: 50%; background: rgba(219,186,122,.24); }
1683
- .epilogue-copy > footer i.current { background: var(--gold-bright); box-shadow: 0 0 0 3px rgba(219,186,122,.1); }
1684
-
1685
- /* 原著命数三页:不把固定死亡做成奖励页。空宅横幅始终在场,选择只改变
1686
- 谁能带走名字、私契、证物与做法,不提供“数值够高便救回”的按钮。 */
1687
- .fate-coda-overlay { position: fixed; z-index: 570; inset: 0; display: grid; place-items: center; padding: 2.5vh 2.5vw; background: rgba(5,7,8,.94); backdrop-filter: blur(12px); }
1688
- .fate-coda-book { position: relative; width: min(1220px,95vw); height: min(760px,94vh); overflow: hidden; border: 1px solid rgba(180,190,182,.34); color: #e4e0d7; background: #090d0e; box-shadow: 0 38px 110px rgba(0,0,0,.85); }
1689
- .fate-coda-art { position: absolute; inset: 0; background-position: center; background-size: cover; filter: saturate(.7) brightness(.78) contrast(1.06); }
1690
- .fate-coda-art::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg,rgba(7,11,12,.98) 0%,rgba(7,11,12,.94) 28%,rgba(7,11,12,.58) 48%,rgba(7,11,12,.08) 72%), linear-gradient(0deg,rgba(7,10,11,.6),transparent 42%); }
1691
- .fate-coda-copy { position: absolute; inset: 0 46% 0 0; display: grid; grid-template-rows: auto minmax(0,1fr) auto; padding: 1.25rem 1.6rem 1.35rem; background: linear-gradient(90deg,rgba(11,15,16,.98),rgba(11,15,16,.84) 72%,transparent); }
1692
- .fate-coda-copy > header { display: flex; justify-content: space-between; align-items: flex-start; gap: 1rem; padding-bottom: .8rem; border-bottom: 1px solid rgba(198,204,195,.18); }
1693
- .fate-coda-copy > header p { margin: .15rem 0 0; color: #949b93; font: .68rem/1.5 var(--sans); }
1694
- .fate-coda-copy > header .eyebrow { margin: 0; color: #b2ad98; }
1695
- .fate-coda-scroll { min-height: 0; padding: clamp(1rem,3vh,2.1rem) .3rem 1rem 0; overflow-y: auto; scrollbar-color: rgba(190,185,158,.38) transparent; }
1696
- .fate-coda-progress { display: flex; gap: .4rem; margin-bottom: .9rem; }
1697
- .fate-coda-progress i { display: grid; place-items: center; width: 1.55rem; height: 1.55rem; border: 1px solid rgba(174,180,171,.24); border-radius: 50%; color: #70766f; font: .58rem var(--sans); }
1698
- .fate-coda-progress i.past { border-color: rgba(154,165,155,.42); color: #a8afa6; background: rgba(89,105,96,.16); }
1699
- .fate-coda-progress i.current { border-color: rgba(202,186,143,.72); color: #e0ca99; box-shadow: 0 0 0 4px rgba(184,153,96,.08); }
1700
- .fate-coda-progress i span { font-style: normal; }
1701
- .fate-coda-variants { margin: 0 0 1rem; padding: .65rem .7rem; border: 1px solid rgba(184,178,155,.18); background: rgba(18,22,20,.45); }
1702
- .fate-coda-variants > span { display: block; margin-bottom: .45rem; color: #a49d87; font: .6rem var(--sans); letter-spacing: .08em; }
1703
- .fate-coda-variants > div { display: flex; gap: .35rem; overflow-x: auto; padding-bottom: .1rem; }
1704
- .fate-coda-variants button { display: grid; grid-template-columns: 1.25rem minmax(8rem,1fr); align-items: center; gap: .35rem; flex: 0 0 auto; max-width: 14rem; padding: .38rem .48rem; border: 1px solid rgba(171,164,139,.22); color: #aaa89d; text-align: left; background: rgba(5,8,8,.48); cursor: pointer; }
1705
- .fate-coda-variants button.current { border-color: rgba(202,186,143,.72); color: #e0ca99; background: rgba(113,91,54,.22); }
1706
- .fate-coda-variants button b { display: grid; place-items: center; width: 1.15rem; height: 1.15rem; border-radius: 50%; background: rgba(196,174,128,.12); font: .58rem var(--sans); }
1707
- .fate-coda-variants button small { overflow: hidden; font: .58rem/1.35 var(--sans); text-overflow: ellipsis; white-space: nowrap; }
1708
- .fate-coda-copy h2 { margin: 0 0 .9rem; color: #eee4ce; font-size: clamp(2rem,3.5vw,3.8rem); line-height: 1.18; letter-spacing: .08em; }
1709
- .fate-coda-body { margin: 0; color: #c8c7bd; font: .9rem/1.95 var(--sans); white-space: pre-line; }
1710
- .fate-coda-sections { display: grid; gap: .85rem; margin-top: 1.15rem; }
1711
- .fate-coda-ledger-section { padding: .85rem; border: 1px solid rgba(184,178,155,.18); background: rgba(18,22,20,.45); }
1712
- .fate-coda-ledger-section > header span,.fate-coda-ledger-section article > span { color: #878f88; font: .6rem var(--sans); letter-spacing: .12em; }
1713
- .fate-coda-ledger-section > header h3 { margin: .22rem 0 .68rem; color: #dfca9e; font: 1rem/1.45 var(--serif); }
1714
- .fate-coda-ledger-section > div { display: grid; gap: .58rem; }
1715
- .fate-coda-ledger-section article { padding: .62rem .72rem; border-left: 2px solid rgba(154,128,96,.68); background: rgba(45,48,44,.48); }
1716
- .fate-coda-ledger-section article > span,.fate-coda-ledger-section article > b { display: block; }
1717
- .fate-coda-ledger-section article > b { margin-top: .2rem; color: #d7c7a7; font: .78rem/1.5 var(--serif); }
1718
- .fate-coda-ledger-section article > p { margin: .32rem 0 0; color: #b7bab2; font: .72rem/1.72 var(--sans); }
1719
- .fate-coda-decision { margin-top: 1.1rem; padding-top: .9rem; border-top: 1px solid rgba(188,194,185,.17); }
1720
- .fate-coda-decision > p { margin: 0 0 .7rem; color: #ddd1b8; font: .8rem/1.7 var(--sans); }
1721
- .fate-coda-decision .choice-stack { grid-template-columns: 1fr; gap: .45rem; }
1722
- .fate-coda-decision .choice-button { min-height: 58px; border-color: rgba(172,178,169,.26); background: linear-gradient(90deg,rgba(73,82,77,.2),rgba(17,22,22,.62)); }
1723
- .fate-coda-decision .choice-button:hover { border-color: rgba(214,192,145,.58); transform: translateX(3px); }
1724
- .fate-coda-result { margin-top: 1.15rem; padding: .85rem 1rem; border-left: 2px solid #9a8060; background: rgba(36,39,36,.68); }
1725
- .fate-coda-result span,.fate-coda-result b { display: block; }
1726
- .fate-coda-result span { color: #8d948d; font: .62rem var(--sans); letter-spacing: .12em; }
1727
- .fate-coda-result b { margin-top: .28rem; color: #dfca9e; font: .92rem var(--serif); }
1728
- .fate-coda-result p { margin: .42rem 0 0; color: #bcbdb5; font: .75rem/1.75 var(--sans); }
1729
- .fate-coda-combination { margin-top: .78rem; padding-top: .7rem; border-top: 1px solid rgba(190,183,157,.2); }
1730
- .fate-coda-combination > span,.fate-coda-combination > b { display: block; }
1731
- .fate-coda-combination > span { color: #a49d87; }
1732
- .fate-coda-combination > b { color: #ead6a9; }
1733
- .fate-coda-combination > p { color: #c5c7be; }
1734
- .fate-coda-copy > footer { display: flex; justify-content: flex-end; align-items: center; gap: .55rem; min-height: 3.3rem; padding-top: .8rem; border-top: 1px solid rgba(198,204,195,.18); }
1735
- .fate-coda-copy > footer > span { color: #777f79; font: .65rem var(--sans); letter-spacing: .04em; }
1736
- .fate-coda-copy > footer .ink-button { border-color: rgba(181,169,133,.46); }
1737
-
1738
- /* 场景册 */
1739
- .gallery-overlay { position: fixed; z-index: 500; inset: 0; display: grid; place-items: center; padding: 3vh 3vw; background: rgba(10,7,6,.88); backdrop-filter: blur(8px); }
1740
- .gallery-book { width: min(1180px, 92vw); height: min(780px, 91vh); display: grid; grid-template-rows: auto auto 1fr; overflow: hidden; border: 1px solid rgba(220,188,127,.48); color: #e8dac1; background: linear-gradient(120deg, #211713, #120d0b); box-shadow: 0 30px 80px rgba(0,0,0,.65); }
1741
- .gallery-book > header { display: flex; align-items: center; justify-content: space-between; padding: 1.2rem 1.45rem; border-bottom: 1px solid rgba(220,188,127,.25); }
1742
- .gallery-book h2 { margin: 0; font-size: 1.8rem; letter-spacing: .1em; }
1743
- .gallery-book header p:last-child { margin: .35rem 0 0; color: #948674; font: .75rem var(--sans); }
1744
- .ending-archive { display: grid; gap: .7rem; padding: .8rem 1.35rem; border-bottom: 1px solid rgba(220,188,127,.2); background: rgba(238,221,188,.025); }
1745
- .ending-goals { display: grid; grid-template-columns: repeat(6,minmax(0,1fr)); gap: .45rem; }
1746
- .ending-goal { display: flex; align-items: flex-start; gap: .45rem; min-width: 0; padding: .48rem; border: 1px solid rgba(220,188,127,.16); color: #847869; background: rgba(0,0,0,.12); }
1747
- .ending-goal i { display: grid; place-items: center; flex: 0 0 1.45rem; height: 1.45rem; border: 1px solid rgba(220,188,127,.25); border-radius: 50%; font: .64rem var(--sans); }
1748
- .ending-goal b, .ending-goal small { display: block; }
1749
- .ending-goal b { color: #a99a83; font-size: .75rem; }
1750
- .ending-goal small { margin-top: .18rem; font: .62rem/1.35 var(--sans); }
1751
- .ending-goal.complete { border-color: rgba(202,164,91,.5); color: #b9aa90; background: rgba(151,103,45,.13); }
1752
- .ending-goal.complete i, .ending-goal.complete b { color: #e1c991; border-color: rgba(220,188,127,.62); }
1753
- .ending-records { display: flex; gap: .55rem; min-height: 5.2rem; overflow-x: auto; padding-bottom: .15rem; }
1754
- .ending-records > p { margin: auto 0; color: #978975; font: .76rem/1.6 var(--sans); }
1755
- .ending-record { flex: 0 0 min(280px,75vw); padding: .55rem .65rem; border: 0; border-left: 2px solid #9c743d; color: inherit; text-align: left; font: inherit; background: rgba(0,0,0,.2); }
1756
- .ending-record p { display: flex; justify-content: space-between; gap: .5rem; margin: 0; color: #a89473; font: .65rem var(--sans); }
1757
- .ending-record h3 { display: flex; align-items: baseline; gap: .45rem; margin: .3rem 0 .2rem; color: #ead7b6; font-size: .9rem; }
1758
- .ending-record h3 em { color: #b7a17d; font: .66rem var(--sans); }
1759
- .ending-record > b, .ending-record > small { display: block; }
1760
- .ending-record > b { color: #cfb682; font: .68rem var(--sans); }
1761
- .ending-record > small { display: -webkit-box; overflow: hidden; margin-top: .28rem; color: #998b77; font: .66rem/1.45 var(--sans); -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
1762
- .ending-record-actions { display: flex; flex-wrap: wrap; gap: .32rem; margin-top: .5rem; }
1763
- .ending-record-actions button { flex: 1 1 9rem; min-height: 2rem; padding: .35rem .45rem; border: 1px solid rgba(192,159,101,.28); color: #d2b478; text-align: left; background: rgba(116,74,30,.13); font: .61rem/1.35 var(--sans); letter-spacing: .025em; cursor: pointer; }
1764
- .ending-record-actions button:hover,.ending-record-actions button:focus-visible { border-color: rgba(225,189,120,.72); color: #eed39b; background: rgba(138,91,41,.24); }
1765
- .gallery-grid { min-height: 0; display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 1rem; padding: 1rem 1.35rem 1.4rem; overflow-y: auto; }
1766
- .gallery-grid section h3 { margin: 0 0 .6rem; color: #b79f76; font-size: .9rem; letter-spacing: .12em; }
1767
- .gallery-grid section > div { display: flex; flex-direction: column; gap: .75rem; }
1768
- .gallery-card { overflow: hidden; padding: 0; border: 1px solid rgba(220,188,127,.22); color: inherit; text-align: left; font: inherit; background: rgba(238,221,188,.045); cursor: pointer; }
1769
- .gallery-card:disabled { opacity: 1; cursor: default; }
1770
- .gallery-card.unlocked:hover, .gallery-card.unlocked:focus-visible { border-color: rgba(226,191,124,.72); background: rgba(238,221,188,.09); transform: translateY(-2px); }
1771
- .gallery-card img, .locked-art { width: 100%; aspect-ratio: 16/10; display: block; object-fit: cover; }
1772
- .gallery-card img { filter: saturate(.72); }
1773
- .locked-art { display: grid; place-content: center; color: rgba(229,204,158,.22); font-size: 4rem; background: repeating-linear-gradient(135deg, rgba(224,197,145,.045) 0 2px, transparent 2px 9px); }
1774
- .gallery-card > div:last-child { padding: .68rem; }
1775
- .gallery-card b, .gallery-card small { display: block; }
1776
- .gallery-card small { margin-top: .28rem; color: #918474; font: .75rem var(--sans); }
1777
- .gallery-card.locked { filter: grayscale(.7); }
1778
- .gallery-replay { position: absolute; z-index: 2; inset: 3vh 3vw; display: grid; grid-template-columns: minmax(0,1fr) minmax(330px,38%); overflow: hidden; border: 1px solid rgba(226,191,124,.68); color: #eadcc4; background: #110d0b; box-shadow: 0 30px 90px rgba(0,0,0,.8); }
1779
- .gallery-replay > img { width: 100%; height: 100%; object-fit: cover; }
1780
- .gallery-replay-copy { min-height: 0; display: flex; flex-direction: column; justify-content: flex-start; padding: clamp(1.5rem,3vw,3.5rem); overflow-y: auto; background: linear-gradient(135deg,#211713,#120d0b); }
1781
- .gallery-replay-copy h2 { margin: .2rem 0 .8rem; font-size: clamp(2rem,3vw,3.5rem); letter-spacing: .1em; }
1782
- .gallery-replay-copy > p:not(.eyebrow) { color: #cfbea5; font: .9rem/1.85 var(--sans); }
1783
- .gallery-archive-summary { margin: 0 0 1rem; }
1784
- .gallery-variant-nav { display: flex; flex-wrap: wrap; gap: .45rem; margin: 0 0 1rem; padding: .65rem 0; border-block: 1px solid rgba(220,188,127,.2); }
1785
- .gallery-variant-nav .plain-button { padding: .4rem .58rem; color: #9e907c; font-size: .68rem; }
1786
- .gallery-variant-nav .plain-button.active { border-color: rgba(226,191,124,.72); color: #ead09b; background: rgba(169,112,48,.2); }
1787
- .gallery-archive-pages { display: flex; flex-direction: column; gap: .8rem; }
1788
- .gallery-archive-page { padding: .85rem .9rem; border: 1px solid rgba(220,188,127,.2); border-left: 3px solid rgba(181,128,61,.7); background: rgba(0,0,0,.16); }
1789
- .gallery-archive-page .gallery-archive-kicker { margin: 0; color: #aa9067; font: .62rem/1.45 var(--sans); letter-spacing: .06em; }
1790
- .gallery-archive-page h3 { margin: .24rem 0 .5rem; color: #ead7b6; font-size: 1.05rem; }
1791
- .gallery-archive-page > p:not(.gallery-archive-kicker) { margin: 0; color: #c9b9a1; font: .78rem/1.72 var(--sans); }
1792
- .gallery-archive-details { display: grid; gap: .36rem; margin: .65rem 0 0; padding: .65rem .7rem .65rem 1.65rem; color: #ad9d87; background: rgba(229,208,169,.035); font: .68rem/1.62 var(--sans); }
1793
- .gallery-archive-actions, .gallery-archive-nonmembers { margin-top: .7rem; padding-top: .65rem; border-top: 1px solid rgba(220,188,127,.16); }
1794
- .gallery-archive-actions h4, .gallery-archive-nonmembers h4 { margin: 0 0 .45rem; color: #ba9e72; font: .65rem var(--sans); letter-spacing: .08em; }
1795
- .gallery-archive-actions p, .gallery-archive-nonmembers p { display: grid; grid-template-columns: minmax(6.2rem,auto) 1fr; gap: .55rem; margin: .32rem 0; color: #a99a85; font: .66rem/1.55 var(--sans); }
1796
- .gallery-archive-actions b, .gallery-archive-nonmembers b { color: #d2b985; font-weight: 600; }
1797
- .gallery-archive-nonmembers { border-color: rgba(148,73,64,.32); }
1798
- .gallery-archive-nonmembers b { color: #c58f82; }
1799
- .gallery-replay-copy .replay-note { margin: 1rem 0; padding-top: .8rem; border-top: 1px solid rgba(220,188,127,.22); color: #9c8d78; font-size: .78rem; }
1800
- .gallery-replay-copy .ink-button { align-self: flex-start; }
1801
-
1802
- .toast { position: fixed; z-index: 900; left: 50%; bottom: 4vh; transform: translate(-50%, 20px); opacity: 0; pointer-events: none; padding: .72rem 1rem; border: 1px solid #a9473a; color: #f4dfca; background: rgba(75,24,20,.94); font: .78rem var(--sans); transition: opacity .2s, transform .2s; }
1803
- .toast.show { opacity: 1; transform: translate(-50%,0); }
1804
-
1805
- /* 选择回响留在下一幕上,但不再抢焦点、锁背景、逼玩家每步按一次“接下去”。 */
1806
- .result-feedback { position: fixed; z-index: 420; right: 2.4vw; bottom: 2.5vh; width: min(650px, calc(100vw - 4.8vw)); pointer-events: none; }
1807
- .result-card { position: relative; padding: .78rem 3.4rem .8rem 1rem; border: 1px solid rgba(226,191,124,.5); color: #eadcc4; background: linear-gradient(135deg, rgba(35,23,18,.96), rgba(18,13,11,.96)); box-shadow: 0 16px 45px rgba(0,0,0,.58), inset 3px 0 #a43a31; }
1808
- .result-card .eyebrow { margin-bottom: .15rem; font-size: .55rem; }
1809
- .result-card h2 { margin: 0 0 .25rem; font-size: 1rem; letter-spacing: .08em; }
1810
- .result-card > p:not(.eyebrow) { margin: 0; max-height: 4.8em; overflow: auto; color: #d5c4aa; font: .72rem/1.6 var(--sans); }
1811
- .result-card #btn-result-dismiss { position: absolute; top: .6rem; right: .65rem; pointer-events: auto; }
1812
-
1813
- .confirm-overlay { position: fixed; z-index: 650; inset: 0; display: grid; place-items: center; padding: 5vw; background: rgba(8,5,4,.88); backdrop-filter: blur(8px); }
1814
- .confirm-card { width: min(580px,92vw); padding: 1.5rem; border: 1px solid rgba(226,191,124,.6); color: #e9dcc5; background: linear-gradient(145deg,#2a1c17,#120d0b); box-shadow: 0 28px 80px rgba(0,0,0,.72); }
1815
- .confirm-card h2 { margin: .1rem 0 .65rem; font-size: 1.8rem; }
1816
- .confirm-card > p:not(.eyebrow) { color: #cbbba4; font: .9rem/1.8 var(--sans); }
1817
- .roster-overlay { position: fixed; z-index: 610; inset: 0; display: grid; place-items: center; padding: 3vh 3vw; background: rgba(8,5,4,.9); backdrop-filter: blur(8px); }
1818
- .roster-sheet { width: min(760px,94vw); max-height: 92vh; display: grid; grid-template-rows: auto minmax(0,1fr); overflow: hidden; border: 1px solid rgba(226,191,124,.55); color: #eadcc4; background: linear-gradient(145deg,#2a1c17,#120d0b); }
1819
- .roster-sheet > header { display: flex; align-items: center; justify-content: space-between; padding: 1rem; border-bottom: 1px solid rgba(226,191,124,.2); }
1820
- .roster-sheet h2 { margin: 0; }
1821
- .roster-scroll { min-height: 0; display: flex; flex-direction: column; gap: .45rem; padding: .8rem; overflow-y: auto; }
1822
- .ledger-status { padding: .68rem .72rem; border: 1px solid rgba(205,168,104,.28); background: rgba(81,54,32,.16); }
1823
- .ledger-status > header { display: flex; align-items: baseline; justify-content: space-between; gap: .75rem; color: #d5b67e; font: .7rem var(--sans); }
1824
- .ledger-status > header span { color: #8f806d; font-size: .58rem; }
1825
- .ledger-resources { display: grid; grid-template-columns: repeat(6,minmax(0,1fr)); gap: .42rem; margin-top: .58rem; }
1826
- .ledger-resources .resource-chip { justify-content: center; min-width: 0; padding: .42rem .28rem; border-top: 1px solid currentColor; background: rgba(0,0,0,.16); }
1827
- .roster-relations { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .45rem; }
1828
- .roster-relations .relation-card:last-child { grid-column: 1 / -1; }
1829
-
1830
- /* 四幕不仅换题签:同一宅院在偏宠、证据合流、总账危机里逐幕改色。 */
1831
- .game-shell .visual-stage::after { transition: box-shadow .55s ease, background-color .55s ease; }
1832
- .game-shell[data-act="2"] .visual-stage::after { box-shadow: inset 0 0 0 100vmax rgba(104,42,35,.055); }
1833
- .game-shell[data-act="3"] .visual-stage::after { box-shadow: inset 0 0 0 100vmax rgba(30,65,60,.075); }
1834
- .game-shell[data-act="4"] .visual-stage::after { box-shadow: inset 0 0 0 100vmax rgba(50,25,42,.11); }
1835
-
1836
- @media (max-width: 900px) {
1837
- .result-feedback { right: .75rem; bottom: .75rem; width: calc(100vw - 1.5rem); }
1838
- .result-card { padding: .65rem 3rem .65rem .8rem; }
1839
- html, body { min-width: 0; width: 100%; height: 100%; overflow: hidden; }
1840
- body { min-width: 0; }
1841
- #app { width: 100%; height: 100svh; overflow: hidden; }
1842
-
1843
- .age-gate { padding: 1.35rem; }
1844
- .age-gate::before { width: calc(100vw - 1.2rem); height: calc(100svh - 1.2rem); }
1845
- .age-gate { --age-safe-inline: min(32rem, calc(100vw - 2.7rem)); }
1846
- .age-gate h1 { font-size: clamp(1.75rem,9vw,3rem); }
1847
- .age-gate p:not(.eyebrow) { line-height: 1.65; }
1848
-
1849
- .title-screen { display: block; }
1850
- .title-art { background-position: 42% center; }
1851
- .title-art::after { background: linear-gradient(0deg, rgba(12,8,7,.98) 0%, rgba(12,8,7,.78) 54%, rgba(12,8,7,.2) 100%); }
1852
- .title-copy { position: absolute; inset: 0; display: flex; justify-content: flex-end; padding: 1.4rem 1.15rem 1.6rem; background: none; overflow-y: auto; }
1853
- .title-copy::before { display: none; }
1854
- .title-copy h1 { white-space: normal; font-size: clamp(2.15rem,11vw,3.4rem); }
1855
- .title-subtitle { margin-bottom: .65rem; font-size: .95rem; }
1856
- .identity-line { margin-bottom: .85rem; font-size: .82rem; line-height: 1.65; }
1857
- .title-actions { margin-bottom: .7rem; }
1858
- .title-actions .ink-button { flex: 1 1 8rem; min-width: 0; }
1859
- .rating-line, .save-note { margin: .25rem 0; font-size: .68rem; }
1860
-
1861
- .game-shell { grid-template-rows: 58px minmax(0,1fr); }
1862
- .topbar { grid-template-columns: minmax(0,1fr) auto; grid-template-rows: 58px; }
1863
- .day-mark { min-width: 0; padding: 0 .65rem; border-right: 0; }
1864
- .day-mark b { font-size: .78rem; }
1865
- .day-mark span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: .6rem; }
1866
- .hud-notice { display: none; }
1867
- .top-actions { padding: 0 .45rem; gap: .25rem; }
1868
- .top-actions .plain-button { padding: .38rem .48rem; font-size: .66rem; }
1869
- .play-area { grid-template-columns: minmax(0,1fr); }
1870
- .relation-rail { display: none; }
1871
- .phase-stage { min-width: 0; min-height: 0; }
1872
- .phase-header h2 { font-size: 1.42rem; }
1873
- .phase-header > p:last-child { max-width: 30rem; font-size: .8rem; line-height: 1.58; }
1874
- .opening-panel, .act-transition-panel, .day-panel, .joint-result-panel, .banquet-panel, .public-evidence-panel, .public-followup-panel, .final-reckoning-panel, .personal-finale-panel, .alliance-assembly-panel, .alliance-night-panel, .shared-afterglow-result-panel, .shared-dawn-result-panel, .collapse-finale-panel, .collapse-result-panel, .shared-panel { left: 2.5%; right: 2.5%; top: auto; width: auto; bottom: 2%; max-height: 94%; padding: .8rem; overflow: clip; transform: none; }
1875
- .opening-panel { left: 3%; right: 3%; width: auto; }
1876
- .opening-aftermath-stage::after { background:linear-gradient(0deg,rgba(13,8,7,.995) 0%,rgba(13,8,7,.86) 66%,rgba(13,8,7,.08) 93%); }
1877
- .opening-aftermath-cast { inset:1% 2% auto; height:27%; display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); grid-template-rows:1fr; gap:.18rem; }
1878
- .opening-aftermath-cast figure:last-child { grid-column:auto; }
1879
- .opening-aftermath-cast figcaption { padding:1.1rem .18rem .2rem; text-align:center; }
1880
- .opening-aftermath-cast figcaption i,.opening-aftermath-cast figcaption small { display:none; }
1881
- .opening-aftermath-cast figcaption b { font-size:.52rem; }
1882
- .opening-aftermath-panel { left:3%; right:3%; top:auto; bottom:2%; width:auto; max-height:72%; padding:.82rem; overflow:clip; transform:none; }
1883
- .opening-aftermath-panel .phase-header h2 { margin-bottom:.34rem; font-size:1.24rem; }
1884
- .opening-aftermath-panel .phase-header > p:last-child { font-size:.69rem; line-height:1.42; }
1885
- .opening-origin { gap:.08rem; margin:.34rem 0; padding:.34rem .46rem; }
1886
- .opening-origin small { display:none; }
1887
- .opening-aftermath-transcript { gap:.18rem; margin:.3rem 0; }
1888
- .opening-aftermath-transcript li { padding:.28rem .34rem; }
1889
- .opening-aftermath-transcript p { display:none; }
1890
- .opening-aftermath-voices { grid-template-columns:repeat(2,minmax(0,1fr)); gap:.24rem; margin:.38rem 0; }
1891
- .opening-aftermath-voices blockquote { padding:.32rem .4rem; }
1892
- .opening-aftermath-voices p { margin-top:.12rem; font-size:.54rem; line-height:1.32; }
1893
- .opening-aftermath-continue { min-height:44px; padding:.55rem .65rem; }
1894
- .choice-grid { grid-template-columns: 1fr; }
1895
- .day-panel { overflow: clip; }
1896
- .day-context-details { margin: .42rem 0; }
1897
- .day-context-details > summary, .evidence-board > summary, .joint-offers > summary { gap: .35rem; padding: .36rem .44rem; }
1898
- .day-context-details > summary span, .evidence-board > summary span, .joint-offers > summary span { display: none; }
1899
- .day-context-details > div { grid-template-columns: 1fr; max-height: 30svh; padding: 0 .42rem .42rem; }
1900
- .evidence-board > div, .joint-offers > .joint-actions { max-height: 54svh; padding: 0 .42rem .42rem; }
1901
- .supporting-context { margin: .42rem 0; }
1902
- .supporting-context > summary { padding: .36rem .44rem; }
1903
- .supporting-context > summary span { display: none; }
1904
- .supporting-context-pages { grid-template-columns: 1fr; max-height: 54svh; padding: 0 .42rem .42rem; }
1905
- .day-actions { grid-template-columns: repeat(2,minmax(0,1fr)); }
1906
- .day-actions .choice-button { min-height: 78px; }
1907
- .joint-actions { grid-template-columns: repeat(2,minmax(0,1fr)); }
1908
- .joint-actions .choice-button { min-height: 70px; }
1909
- .choice-button { min-height: 68px; }
1910
- .choice-button b { font-size: .8rem; }
1911
- .choice-button span { font-size: .72rem; }
1912
- .route-branch-memory { margin-bottom: .55rem; padding: .55rem .62rem; }
1913
- .route-branch-memory b { font-size: .7rem; }
1914
- .route-branch-memory p { font-size: .62rem; line-height: 1.48; }
1915
-
1916
- .visit-prompt { top: 1.5%; left: 2.5%; right: 2.5%; display: block; max-height: 30%; padding: .65rem .7rem; overflow-y: auto; }
1917
- .visit-prompt .phase-header h2 { font-size: 1.2rem; }
1918
- .visit-prompt .phase-header > p:last-child { font-size: .7rem; }
1919
- .accord-panel { margin-top: .45rem; padding: .45rem 0 0; border-left: 0; border-top: 1px solid rgba(220,188,127,.24); }
1920
- .accord-heading { align-items: flex-start; gap: .3rem; font-size: .62rem; }
1921
- .accord-heading span { text-align: right; }
1922
- .accord-seals { gap: .18rem; }
1923
- .accord-seal { justify-content: center; padding: .22rem .15rem; font-size: .56rem; }
1924
- .accord-seal i { display: none; }
1925
- .heroine-doors, .evening.has-shared .heroine-doors { inset: 32% 2.5% 2%; display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); grid-auto-rows: minmax(220px,38vh); gap: .45rem; overflow-y: auto; padding-right: .15rem; }
1926
- .door-card > div { padding: 2.8rem .55rem .55rem; }
1927
- .door-card b { font-size: .78rem; }
1928
- .door-card small, .door-card em, .door-knock { font-size: .6rem; }
1929
- .door-forecast dt,.door-due { font-size:.53rem; }
1930
- .door-forecast dd { font-size:.56rem; }
1931
-
1932
- .dialogue-panel, .night-talk-panel, .aftermath-panel, .personal-afterglow-panel, .personal-afterglow-aftermath-panel, .house-crisis-panel, .pair-interlude-panel, .favor-reckoning-panel, .memory-reckoning-panel, .dusk-invitation-panel, .morning-panel, .household-panel, .afterglow-panel, .shared-dawn-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 94%; padding: .9rem; overflow: clip; }
1933
- .dialogue-panel { max-height: 94%; }
1934
- .dialogue-panel > .choice-stack { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .5rem; margin-top: .65rem; }
1935
- .dialogue-panel > .choice-stack .choice-button { min-height: 88px; padding: .62rem .68rem; }
1936
- .dialogue-panel .consent-note { margin-top: .55rem; }
1937
- .night-talk-prop { top: 1.5%; right: 2.5%; bottom: auto; width: min(112px,29vw); }
1938
- .night-talk-prop span { font-size: .76rem; }
1939
- .night-talk-stage::after { background: linear-gradient(0deg,rgba(13,8,7,.99) 0%,rgba(13,8,7,.82) 54%,rgba(13,8,7,.05) 84%); }
1940
- .night-talk-voice { margin: .55rem 0; padding: .58rem .65rem; }
1941
- .night-talk-voice p { font-size: .7rem; line-height: 1.58; }
1942
- .night-talk-memory, .night-talk-continuity { margin: .5rem 0; padding: .52rem .58rem; }
1943
- .night-talk-memory p, .night-talk-continuity p { font-size: .62rem; line-height: 1.48; }
1944
- .night-talk-result-panel { max-height: 74%; }
1945
- .night-talk-panel .intimacy-memory { margin: .4rem 0; padding: .46rem .5rem; }
1946
- .night-talk-panel .intimacy-memory header { margin-bottom: .28rem; }
1947
- .night-talk-panel .intimacy-memory > div { padding: .34rem .4rem; }
1948
- .night-talk-panel .intimacy-memory small,
1949
- .night-talk-panel .intimacy-memory p,
1950
- .night-talk-panel .intimacy-memory em,
1951
- .night-talk-result-panel .night-talk-stake p { display: none; }
1952
- .rivalry-panel { max-height: 94%; }
1953
- .rivalry-listener { top: 1.5%; right: 2.5%; width: min(122px,31vw); padding: .3rem; }
1954
- .rivalry-listener figcaption { padding: .28rem .15rem .08rem; }
1955
- .rivalry-listener figcaption small { display: none; }
1956
- .rivalry-stage::after { background: linear-gradient(0deg,rgba(13,8,7,.99) 0%,rgba(13,8,7,.84) 52%,rgba(76,21,18,.08) 83%); }
1957
- .rivalry-voice { margin: .55rem 0; padding: .58rem .65rem; }
1958
- .rivalry-voice p { font-size: .7rem; line-height: 1.58; }
1959
- .aftermath-main { inset: 0 0 auto; height: 56%; background-position: var(--heroine-focus-x,68%) 10%; mask-image: linear-gradient(0deg,transparent 0%,#000 18%,#000 100%); }
1960
- .aftermath-observer { top: 2%; left: 2.5%; right: auto; bottom: auto; width: min(94px,24vw); opacity: .58; }
1961
- .aftermath-observer figcaption { display: block; margin-top: .08rem; }
1962
- .aftermath-observer figcaption span, .aftermath-observer figcaption b { display: block; }
1963
- .aftermath-observer figcaption span { font-size: .58rem; }
1964
- .aftermath-observer figcaption b { margin-top: .06rem; font-size: .72rem; }
1965
- .aftermath-panel { max-height: 72%; overflow: clip; transform: none; }
1966
- .aftermath-stage::after { background: linear-gradient(0deg, rgba(14,9,7,.98) 0%, rgba(14,9,7,.8) 48%, rgba(14,9,7,.08) 82%); }
1967
- .aftermath-stage.milestone-chapter .aftermath-main { inset: 0 0 auto; background-position: 70% 8%; }
1968
- .aftermath-stage.milestone-chapter::after { background: linear-gradient(0deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.8) 49%,rgba(13,9,8,.05) 84%); }
1969
- .aftermath-story-panel { max-height: 72%; }
1970
- .public-evidence-panel { max-height: 96%; }
1971
- .personal-afterglow-stage::after { background: linear-gradient(0deg,rgba(14,9,7,.98) 0%,rgba(14,9,7,.77) 58%,rgba(14,9,7,.08) 86%); }
1972
- .afterglow-close { inset: 0; mask-image: linear-gradient(0deg,transparent 0%,#000 24%,#000 100%); }
1973
- .afterglow-memory { top: 1.5%; right: 2.5%; width: min(150px,38vw); padding: .35rem; }
1974
- .personal-afterglow-aftermath-stage::after { background:linear-gradient(0deg,rgba(13,8,7,.99) 0%,rgba(13,8,7,.82) 61%,rgba(13,8,7,.06) 89%); }
1975
- .personal-afterglow-aftermath-close { inset:0; mask-image:linear-gradient(0deg,transparent 0%,#000 24%,#000 100%); }
1976
- .personal-afterglow-aftermath-memory { top:1.5%; right:2.5%; width:min(145px,37vw); padding:.32rem; }
1977
- .personal-afterglow-aftermath-ledger { grid-template-columns:1fr; gap:.3rem; }
1978
- .personal-afterglow-aftermath-ledger span { padding:.48rem .55rem; }
1979
- .personal-afterglow-aftermath-ledger em { display:none; }
1980
- .house-crisis-stage::after { background: linear-gradient(0deg,rgba(12,8,7,.98) 0%,rgba(12,8,7,.79) 58%,rgba(12,8,7,.08) 88%); }
1981
- .crisis-cast { right: 2%; top: 1%; bottom: auto; width: 96%; height: 34%; align-items: stretch; }
1982
- .crisis-cast figure, .crisis-cast figure.rescue-ready { height: 100%; min-height: 0; transform: none; }
1983
- .crisis-cast figcaption small { display: none; }
1984
- .crisis-ledger { grid-template-columns: repeat(2,minmax(0,1fr)); }
1985
- .crisis-aftermath-stage::after { background:linear-gradient(0deg,rgba(12,8,7,.995) 0%,rgba(12,8,7,.88) 64%,rgba(12,8,7,.08) 92%); }
1986
- .crisis-aftermath-cast { inset:1.5% 2.5% auto; height:34%; gap:.22rem; }
1987
- .crisis-aftermath-cast figure,.crisis-aftermath-cast figure.speaking { min-height:0; transform:none; }
1988
- .crisis-aftermath-cast figcaption { padding:1.75rem .25rem .3rem; }
1989
- .crisis-aftermath-cast figcaption i,.crisis-aftermath-cast figcaption small { display:none; }
1990
- .crisis-aftermath-cast figcaption b { font-size:.58rem; }
1991
- .crisis-aftermath-panel { left:3%; right:3%; top:auto; bottom:2%; width:auto; max-height:72%; padding:.86rem; transform:none; }
1992
- .crisis-aftermath-ledger { gap:.2rem; }
1993
- .crisis-aftermath-ledger span { padding:.38rem .3rem; }
1994
- .crisis-aftermath-ledger small { font-size:.5rem; }
1995
- .crisis-aftermath-ledger b { font-size:.57rem; }
1996
- .crisis-aftermath-choices { grid-template-columns:1fr; }
1997
- .crisis-aftermath-panel > .ink-button { width:100%; }
1998
- .pair-interlude-stage::after { background: linear-gradient(0deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.78) 58%,rgba(13,9,8,.05) 88%); }
1999
- .pair-portraits { inset: 0 0 auto; height: 35%; }
2000
- .pair-portraits figcaption { inset: auto .25rem 0; padding: 1.8rem .45rem .4rem; }
2001
- .pair-portraits p { display: none; }
2002
- .pair-interlude-panel { max-height: 94%; }
2003
- .pair-trust { display: grid; gap: .25rem; }
2004
- .pair-aftermath-cast { inset:0 0 auto; height:34%; padding-right:27%; }
2005
- .pair-aftermath-witness { top:1%; right:2%; width:min(112px,27vw); padding:.28rem; }
2006
- .pair-aftermath-witness small { display:none; }
2007
- .pair-aftermath-panel { max-height:94%; }
2008
- .personal-finale-stage::after { background: linear-gradient(0deg,rgba(13,9,8,.99) 0%,rgba(13,9,8,.83) 60%,rgba(13,9,8,.06) 89%); }
2009
- .personal-finale-main { inset: 0; background-position: 70% 10%; }
2010
- .personal-finale-panel { top: auto; max-height: 69%; }
2011
- .personal-finale-panel .choice-grid { grid-template-columns: 1fr; }
2012
- .personal-finale-others { top: 1.5%; right: 2%; bottom: auto; }
2013
- .personal-finale-others figure { width: 46px; height: 62px; }
2014
- .personal-finale-others figcaption { padding-top: .8rem; font-size: .48rem; }
2015
- .personal-finale-result-stage::after { background: linear-gradient(0deg,rgba(10,9,8,.995) 0%,rgba(10,9,8,.86) 63%,rgba(29,67,55,.08) 91%); }
2016
- .personal-finale-result-main { background-position: 68% 10%; transform: scale(1.02); }
2017
- .personal-finale-result-panel { top: auto; max-height: 72%; }
2018
- .personal-finale-agreements { grid-template-columns: 1fr; gap: .3rem; }
2019
- .personal-finale-agreements > div { padding: .46rem .52rem; }
2020
- .personal-finale-agreements p { font-size: .57rem; }
2021
- .personal-finale-result-ledger { margin: .52rem 0; padding: .48rem .52rem; }
2022
- .personal-finale-result-continue { width: 100%; min-width: 0; }
2023
- .result-witnesses { opacity: .48; }
2024
- .personal-departure-reasons ol { grid-template-columns: 1fr; }
2025
- .alliance-assembly-stage::after { background:linear-gradient(0deg,rgba(13,9,7,.99) 0%,rgba(13,9,7,.84) 62%,rgba(13,9,7,.06) 91%); }
2026
- .alliance-assembly-cast { inset:0 0 auto; height:34%; grid-template-columns:repeat(4,minmax(0,1fr)); grid-template-rows:1fr; }
2027
- .alliance-assembly-cast.alliance-count-2 { grid-template-columns:repeat(2,minmax(0,1fr)); }
2028
- .alliance-assembly-cast.alliance-count-3 { grid-template-columns:repeat(3,minmax(0,1fr)); }
2029
- .alliance-assembly-cast figcaption { padding:1.65rem .22rem .3rem; }
2030
- .alliance-assembly-cast figcaption span,.alliance-assembly-cast figcaption em { display:none; }
2031
- .alliance-assembly-cast figcaption b { font-size:.55rem; }
2032
- .alliance-assembly-cast figcaption small { font-size:.45rem; }
2033
- .alliance-assembly-panel { top:auto; max-height:70%; }
2034
- .alliance-assembly-summary { grid-template-columns:1fr; }
2035
- .alliance-night-stage::after { background: linear-gradient(0deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.81) 58%,rgba(13,9,8,.06) 88%); }
2036
- .alliance-cast { inset: 0 0 auto; height: 38%; }
2037
- .alliance-cast figure:nth-child(even) { transform: none; }
2038
- .alliance-cast figcaption { inset: auto .2rem 0; padding: 1.7rem .35rem .35rem; }
2039
- .alliance-night-panel { top: auto; max-height: 67%; }
2040
- .alliance-night-panel .choice-grid { grid-template-columns: 1fr; }
2041
- .alliance-night-result-stage::after { background: linear-gradient(0deg,rgba(11,13,11,.99) 0%,rgba(11,13,11,.84) 62%,rgba(32,76,58,.08) 90%); }
2042
- .alliance-result-cast { height: 34%; }
2043
- .alliance-result-panel { top: auto; max-height: 72%; }
2044
- .alliance-result-voices { gap: .28rem; }
2045
- .alliance-result-voices blockquote { padding: .44rem .5rem; }
2046
- .alliance-result-bonds { gap: .2rem; }
2047
- .alliance-result-continue { width: 100%; min-width: 0; }
2048
- .shared-afterglow-result-stage::after { background: linear-gradient(0deg,rgba(12,13,11,.995) 0%,rgba(12,13,11,.87) 66%,rgba(36,78,61,.08) 92%); }
2049
- .shared-result-cast { inset: 0 0 auto; height: 31%; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .1rem; }
2050
- .shared-result-cast figure:nth-child(even) { transform: none; }
2051
- .shared-result-cast figcaption { padding: 1.6rem .1rem .28rem; }
2052
- .shared-result-cast b { font-size: .55rem; }
2053
- .shared-result-cast span { display: none; }
2054
- .shared-afterglow-result-panel { top: auto; max-height: 75%; }
2055
- .shared-result-voices { grid-template-columns: 1fr; gap: .26rem; }
2056
- .shared-result-voices blockquote:last-child { grid-column: auto; }
2057
- .shared-result-voices blockquote { padding: .42rem .48rem; }
2058
- .shared-result-choice { margin: .45rem 0; padding: .42rem .48rem; }
2059
- .shared-result-continue { width: 100%; min-width: 0; }
2060
- .shared-dawn-result-stage::after { background: linear-gradient(0deg,rgba(17,12,8,.995) 0%,rgba(24,18,11,.86) 65%,rgba(211,169,91,.08) 92%); }
2061
- .shared-dawn-result-cast { inset: 0 0 auto; height: 31%; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .1rem; }
2062
- .shared-dawn-result-cast figure:nth-child(even) { transform: none; }
2063
- .shared-dawn-result-cast figcaption { padding: 1.55rem .1rem .28rem; }
2064
- .shared-dawn-result-cast b { font-size: .54rem; }
2065
- .shared-dawn-result-cast span { display: none; }
2066
- .shared-dawn-result-panel { top: auto; max-height: 75%; }
2067
- .shared-dawn-result-voices { grid-template-columns: 1fr; gap: .26rem; }
2068
- .shared-dawn-result-voices blockquote:last-child { grid-column: auto; }
2069
- .shared-dawn-result-voices blockquote { padding: .42rem .48rem; }
2070
- .shared-dawn-result-ledger { margin: .45rem 0; padding: .42rem .48rem; }
2071
- .shared-dawn-result-continue { width: 100%; min-width: 0; }
2072
- .collapse-finale-stage::after,.collapse-result-stage::after { background: linear-gradient(0deg,rgba(13,8,7,.995) 0%,rgba(18,10,8,.88) 66%,rgba(111,45,31,.08) 92%); }
2073
- .collapse-cast,.collapse-result-cast { inset: 0 0 auto; height: 31%; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .1rem; }
2074
- .collapse-cast figure:not(.speaking) { transform: none; }
2075
- .collapse-cast figcaption,.collapse-result-cast figcaption { padding: 1.55rem .1rem .28rem; }
2076
- .collapse-cast b,.collapse-result-cast b { font-size: .54rem; }
2077
- .collapse-cast span,.collapse-result-cast span { display: none; }
2078
- .collapse-finale-panel,.collapse-result-panel { top: auto; max-height: 94%; }
2079
- .collapse-final-choices,.collapse-result-voices { grid-template-columns: 1fr; gap: .26rem; }
2080
- .collapse-current-voice { padding: .55rem .62rem; }
2081
- .collapse-cause-ledger,.collapse-result-ledger { margin: .45rem 0; padding: .42rem .48rem; }
2082
- .collapse-continue,.collapse-result-continue { width: 100%; min-width: 0; }
2083
- .memory-reckoning-stage::after { background: linear-gradient(0deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.8) 58%,rgba(13,9,8,.06) 88%); }
2084
- .memory-cast { inset: 0 0 auto; height: 39%; }
2085
- .memory-cast figure:not(.memory-lead) { transform: none; }
2086
- .memory-cast figcaption { inset: auto .25rem 0; padding: 1.8rem .45rem .4rem; }
2087
- .memory-cast p { display: none; }
2088
- .favor-reckoning-stage::after { background:linear-gradient(0deg,rgba(13,8,7,.99) 0%,rgba(13,8,7,.82) 58%,rgba(48,13,9,.08) 88%); }
2089
- .favor-cast { inset:0 0 auto; height:39%; }
2090
- .favor-cast figure:not(.favor-lead) { transform:none; }
2091
- .favor-cast figcaption { inset:auto .25rem 0; padding:1.8rem .45rem .4rem; }
2092
- .favor-cast p { display:none; }
2093
- .dusk-invitation-stage::after { background: linear-gradient(0deg,rgba(13,9,8,.98) 0%,rgba(13,9,8,.79) 58%,rgba(13,9,8,.05) 88%); }
2094
- .dusk-invite-cast { inset: 0 0 auto; height: 39%; }
2095
- .dusk-invite-cast .invite-witness { top: 3%; left: 3%; width: min(98px,28vw); padding: .25rem; }
2096
- .dusk-invite-cast .invite-witness figcaption span { display: none; }
2097
- .dusk-invite-cast .invite-lead figcaption { inset: auto .4rem 0; padding: 1.8rem .45rem .4rem; }
2098
- .dusk-invite-rule { display: none; }
2099
- .close-cg::after, .morning-cg::after { background: linear-gradient(0deg, rgba(14,9,7,.98) 0%, rgba(14,9,7,.82) 46%, rgba(14,9,7,.06) 76%); }
2100
- .morning-scene { height: 5rem; }
2101
- .act-transition-panel .choice-grid, .banquet-panel .choice-grid, .public-evidence-panel .choice-grid, .public-followup-panel .choice-grid, .final-reckoning-panel .choice-grid, .council-panel .choice-grid, .shared-panel .choice-grid { grid-template-columns: 1fr; }
2102
- .external-witnesses { grid-template-columns: 1fr; gap: .25rem; }
2103
- .external-witnesses article { display: grid; grid-template-columns: auto auto 1fr; align-items: baseline; gap: .35rem; padding: .38rem .45rem; }
2104
- .external-witnesses b { margin: 0; }
2105
- .external-witnesses p { font-size: .72rem; }
2106
- .evidence-chain-slots { gap: .2rem; }
2107
- .evidence-chain-slots li { min-height: 48px; grid-template-columns: 1fr; padding: .34rem .28rem; text-align: center; }
2108
- .evidence-chain-slots i { display: none; }
2109
- .evidence-chain-slots span, .evidence-chain-slots b { font-size: .72rem; }
2110
- .evidence-verdict .ink-button { width: 100%; min-width: 0; }
2111
- .final-reckoning-cast { grid-template-columns: 1fr; max-height: 122px; overflow-y: auto; }
2112
- .final-reckoning-cast figure { min-height: 54px; }
2113
- .reckoning-ledgers { top: 1.5%; right: 2.5%; gap: .3rem; }
2114
- .reckoning-ledgers i { width: 42px; height: 58px; font-size: .78rem; }
2115
- .act-transition-cast { top: 1.5%; right: 2.5%; display: flex; gap: .25rem; }
2116
- .act-transition-cast figure { width: 46px; height: 58px; }
2117
- .act-transition-cast figure:last-child { grid-column: auto; }
2118
- .public-followup-cast { overflow-x: auto; }
2119
- .public-followup-cast figure { flex: 0 0 auto; }
2120
- .council-cast figure { width: 54px; }
2121
- .council-cast img { width: 42px; height: 42px; }
2122
-
2123
- .scene-caption, .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption { left: 3%; right: 3%; bottom: 2%; width: auto; max-height: 58%; display: block; padding: .9rem; overflow-y: auto; border-left: 2px solid var(--cinnabar); background: rgba(12,8,6,.9); }
2124
- .scene-caption h2, .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption h2 { font-size: 1.55rem; }
2125
- .scene-caption > p:not(.eyebrow) { font-size: .76rem; line-height: 1.65; }
2126
- .scene-meta { flex-wrap: wrap; gap: .35rem; }
2127
-
2128
- .ending-view { display: block; overflow-y: auto; }
2129
- .ending-art { position: absolute; inset: 0; opacity: .55; }
2130
- .ending-copy { position: relative; min-height: 100%; justify-content: flex-start; padding: 3rem 1.15rem 1.5rem; background: linear-gradient(0deg, rgba(18,12,10,.98) 0%, rgba(18,12,10,.86) 62%, rgba(18,12,10,.15) 100%); }
2131
- .ending-copy h1 { font-size: 2.45rem; }
2132
- .ending-ledger { grid-template-columns: 1fr 1fr; }
2133
- .ending-habits > header { align-items: flex-start; flex-direction: column; gap: .2rem; }
2134
- .ending-habits > div { grid-template-columns: repeat(2,minmax(0,1fr)); }
2135
- .ending-habits article:last-child { grid-column: 1 / -1; }
2136
- .ending-habits article small { -webkit-line-clamp: 1; }
2137
-
2138
- .epilogue-overlay { padding: 0; }
2139
- .epilogue-book { width: 100vw; height: 100svh; grid-template-columns: 1fr; grid-template-rows: minmax(220px,38svh) minmax(0,1fr); border: 0; }
2140
- .epilogue-art::after { background: linear-gradient(0deg,rgba(18,13,11,.9),transparent 62%); }
2141
- .epilogue-art > span { font-size: 3.5rem; }
2142
- .epilogue-copy { padding: .8rem; }
2143
- .epilogue-copy > header { padding-bottom: .55rem; }
2144
- .epilogue-scroll { padding: .9rem .15rem .7rem; }
2145
- .epilogue-copy h2 { font-size: 1.75rem; }
2146
- .epilogue-body { font-size: .8rem; line-height: 1.75; }
2147
- .epilogue-route-note { font-size: .7rem; line-height: 1.55; }
2148
- .epilogue-habit { margin-top: .8rem; padding: .65rem .72rem; }
2149
- .epilogue-copy > footer { gap: .4rem; }
2150
-
2151
- .gallery-overlay { padding: 0; }
2152
- .gallery-book { width: 100vw; height: 100svh; border: 0; }
2153
- .gallery-book > header { padding: .8rem; }
2154
- .gallery-book h2 { font-size: 1.35rem; }
2155
- .ending-archive { padding: .65rem .8rem; }
2156
- .ending-goals { grid-template-columns: repeat(3,minmax(0,1fr)); }
2157
- .ending-goal small { display: none; }
2158
- .ending-records { min-height: 4.7rem; }
2159
- .gallery-grid { grid-template-columns: 1fr; padding: .8rem; }
2160
- .gallery-replay { inset: 0; grid-template-columns: 1fr; grid-template-rows: 42svh minmax(0,1fr); }
2161
- .gallery-replay-copy { justify-content: flex-start; padding: 1rem; overflow-y: auto; }
2162
- .gallery-replay-copy h2 { font-size: 1.8rem; }
2163
- .gallery-archive-actions p, .gallery-archive-nonmembers p { grid-template-columns: 1fr; gap: .15rem; }
2164
- .result-card { width: 100%; max-height: 74svh; padding: 1rem; overflow-y: auto; }
2165
- .confirm-overlay { padding: .8rem; }
2166
- .confirm-card { width: 100%; }
2167
- .roster-overlay { padding: 0; }
2168
- .roster-sheet { width: 100vw; height: 100svh; max-height: none; border: 0; }
2169
- .ledger-status > header { align-items: flex-start; flex-direction: column; gap: .18rem; }
2170
- .ledger-resources { grid-template-columns: repeat(3,minmax(0,1fr)); gap: .28rem; }
2171
- .roster-relations { grid-template-columns: 1fr; }
2172
- .roster-relations .relation-card:last-child { grid-column: auto; }
2173
- }
2174
-
2175
- @media (max-height: 830px) {
2176
- .game-shell { grid-template-rows: 60px 1fr; }
2177
- .play-area { grid-template-columns: minmax(0,1fr); }
2178
- .relation-rail { gap: .25rem; padding: .42rem .55rem; }
2179
- .relation-card { padding: .38rem .52rem; }
2180
- .relation-card p { min-height: 0; font-size: .6rem; }
2181
- .relation-tiers { margin: .45rem 0; }
2182
- .day-panel { padding: .8rem 1rem; }
2183
- .phase-header h2 { font-size: 1.55rem; margin-bottom: .35rem; }
2184
- .phase-header > p:last-child { font-size: .88rem; line-height: 1.55; }
2185
- .choice-button { min-height: 58px; padding: .58rem .68rem; }
2186
- .choice-button b { font-size: .82rem; }
2187
- .joint-offers { margin-top: .5rem; padding-top: .45rem; }
2188
- .joint-actions .choice-button { min-height: 52px; padding: .5rem; }
2189
- .joint-actions .choice-button span { font-size: .6rem; }
2190
- .joint-result-panel { padding: .8rem 1rem; }
2191
- .dialogue-panel { top: 3%; bottom: 3%; padding: 1.1rem; }
2192
- .heroine-doors { top: 23%; }
2193
- .evening.has-shared .heroine-doors { top: 34%; }
2194
- .visit-prompt { padding: .65rem .8rem; }
2195
- .accord-seal { padding: .28rem .35rem; }
2196
- }
2197
-
2198
- @media (min-width: 901px) and (max-height: 830px) {
2199
- .opening-aftermath-panel { padding:.88rem 1rem; }
2200
- .opening-aftermath-panel .phase-header h2 { margin-bottom:.3rem; font-size:1.42rem; }
2201
- .opening-aftermath-panel .phase-header > p:last-child { font-size:.76rem; line-height:1.45; }
2202
- .opening-origin { gap:.08rem; margin:.35rem 0; padding:.38rem .48rem; }
2203
- .opening-origin small { display:none; }
2204
- .opening-aftermath-transcript { gap:.18rem; margin:.3rem 0; }
2205
- .opening-aftermath-transcript li { padding:.28rem .34rem; }
2206
- .opening-aftermath-transcript p { display:none; }
2207
- .opening-aftermath-voices { gap:.24rem; margin:.35rem 0; }
2208
- .opening-aftermath-voices blockquote { padding:.34rem .42rem; }
2209
- .opening-aftermath-voices p { margin-top:.12rem; font-size:.54rem; line-height:1.32; }
2210
- .opening-aftermath-continue { min-height:44px; padding:.55rem .65rem; }
2211
- .aftermath-panel { width:49%; padding:.9rem 1rem; }
2212
- .aftermath-story-quote { margin:.5rem 0; padding:.65rem .75rem; }
2213
- .aftermath-story-quote p { margin-top:.35rem; font-size:.72rem; line-height:1.6; }
2214
- .day-aftermath-panel { padding:.9rem 1rem; }
2215
- .day-speaker { margin:.45rem 0; padding:.52rem .62rem; font-size:.66rem; line-height:1.5; }
2216
- .collapse-result-panel { padding:.8rem 1rem; }
2217
- .collapse-result-current-voice { margin:.4rem 0; padding:.52rem .6rem; }
15
+ html, body { margin: 0; height: 100%; background: #140f18; color: var(--ink); font-family: var(--sans); overflow: hidden; }
16
+ button { font: inherit; color: inherit; cursor: pointer; }
17
+ button:disabled { cursor: not-allowed; }
18
+ [hidden] { display: none !important; }
19
+ #app, .screen { position: fixed; inset: 0; }
20
+ .btn {
21
+ padding: 0.6em 1.5em; border: 1px solid var(--gold-soft); border-radius: 999px;
22
+ background: linear-gradient(180deg, #fffdf8, var(--paper-2)); color: var(--ink);
23
+ letter-spacing: 0.12em; transition: transform 0.15s, box-shadow 0.15s, background 0.15s;
24
+ }
25
+ .btn:hover:not(:disabled) { box-shadow: 0 0 0 3px rgba(195, 154, 82, 0.25); transform: translateY(-1px); }
26
+ .btn:focus-visible, .tab:focus-visible, .slot:focus-visible, .cg-cell:focus-visible, .scene-cell:focus-visible, .panel header .close:focus-visible { outline: 2px solid var(--rose); outline-offset: 2px; }
27
+ :focus:not(:focus-visible) { outline: none; }
28
+ .btn.primary { background: linear-gradient(180deg, #d0697a, #a9475a); color: #fff; border-color: #a9475a; }
29
+ .btn:disabled { opacity: 0.45; }
30
+
31
+ /* ---------- 年龄门 ---------- */
32
+ #gate { display: grid; place-items: center; background: radial-gradient(circle at 50% 30%, #3a2737, #140f18 70%); }
33
+ .gate-card { width: min(520px, 90vw); padding: 44px 40px; text-align: center; color: #f6ece0; border: 1px solid var(--gold-soft); border-radius: 18px; background: rgba(20, 12, 22, 0.6); }
34
+ .gate-card h1 { font-family: var(--serif); font-weight: 600; letter-spacing: 0.2em; margin: 16px 0; }
35
+ .gate-card p { line-height: 1.9; color: #e3d5c8; }
36
+ .gate-seal { display: inline-grid; place-items: center; width: 72px; height: 72px; border-radius: 50%; border: 2px solid var(--rose); color: var(--rose); font: 700 24px var(--serif); transform: rotate(-8deg); }
37
+ .gate-actions { display: flex; gap: 14px; justify-content: center; margin-top: 26px; flex-wrap: wrap; }
38
+
39
+ /* ---------- 标题 ---------- */
40
+ #title { overflow: hidden; background: #f4ece4; }
41
+ .title-bg { position: absolute; inset: -3%; background: url("../assets/cg/group/title_new_guofeng.webp") 65% 30% / cover no-repeat; transform: scale(1.06); transition: transform 0.6s ease-out; animation: title-in 2.4s ease-out both; }
42
+ @keyframes title-in { from { opacity: 0; filter: blur(6px); } to { opacity: 1; filter: none; } }
43
+ #petals { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 2; }
44
+ .title-veil { position: absolute; inset: 0; background: linear-gradient(90deg, rgba(251, 246, 238, 0.97) 0%, rgba(251, 246, 238, 0.86) 26%, rgba(251, 246, 238, 0) 52%); z-index: 1; }
45
+ .title-logo { position: absolute; left: clamp(28px, 7vw, 120px); top: 13vh; z-index: 3; animation: rise 1.6s 0.4s ease-out both; }
46
+ .title-logo h1 { margin: 0; font-family: var(--serif); font-weight: 700; color: var(--ink); line-height: 1; }
47
+ .title-logo h1 span { display: block; font-size: clamp(54px, 7.4vw, 108px); letter-spacing: 0.12em; text-shadow: 0 2px 0 #fff; }
48
+ .title-logo h1 small { display: inline-block; margin-top: 18px; padding: 6px 18px; font-size: clamp(20px, 2.2vw, 30px); letter-spacing: 0.6em; color: #fff; background: var(--rose); border-radius: 2px; }
49
+ .title-logo p { margin: 22px 0 0; font: 18px var(--serif); color: var(--ink-soft); letter-spacing: 0.18em; }
50
+ .title-menu { position: absolute; left: clamp(28px, 7vw, 120px); bottom: 12vh; z-index: 3; display: grid; gap: 6px; animation: rise 1.4s 1s ease-out both; }
51
+ .title-menu button { position: relative; width: 210px; padding: 9px 0 9px 22px; border: 0; background: none; text-align: left; font: 22px var(--serif); letter-spacing: 0.32em; color: var(--ink); transition: color 0.2s, padding 0.2s; }
52
+ .title-menu button::before { content: ""; position: absolute; left: 0; top: 50%; width: 8px; height: 8px; background: var(--rose); transform: translateY(-50%) rotate(45deg) scale(0); transition: transform 0.2s; }
53
+ .title-menu button:hover:not(:disabled), .title-menu button:focus-visible { color: var(--rose); padding-left: 30px; outline: none; }
54
+ .title-menu button:hover:not(:disabled)::before, .title-menu button:focus-visible::before { transform: translateY(-50%) rotate(45deg) scale(1); }
55
+ .title-menu button:disabled { color: #b9adb0; }
56
+ .title-foot { position: absolute; left: clamp(28px, 7vw, 120px); bottom: 4vh; z-index: 3; margin: 0; font-size: 13px; color: var(--ink-soft); letter-spacing: 0.12em; }
57
+ @keyframes rise { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
58
+
59
+ /* ---------- 舞台 ---------- */
60
+ #game { background: #000; overflow: hidden; user-select: none; }
61
+ #stage { position: absolute; inset: 0; overflow: hidden; }
62
+ #stage.shake { animation: shake 0.42s; }
63
+ @keyframes shake { 20% { transform: translate(-8px, 2px); } 40% { transform: translate(7px, -2px); } 60% { transform: translate(-5px, 1px); } 80% { transform: translate(3px, 0); } }
64
+ .bg { position: absolute; inset: 0; background: center / cover no-repeat; opacity: 0; transition: opacity 0.9s ease; }
65
+ .bg.on { opacity: 1; }
66
+ #sprites { position: absolute; inset: 0; z-index: 0; pointer-events: none; } /* 自成层叠上下文:立绘的 z-index 只在这里面排,永远压不过 CG */
67
+ .sprite {
68
+ position: absolute; bottom: -12vh; height: 104vh; aspect-ratio: 2 / 3; transform: translateX(-50%);
69
+ transition: left 0.5s ease, opacity 0.45s ease, filter 0.3s ease, transform 0.45s ease;
70
+ filter: drop-shadow(0 12px 24px rgba(20, 10, 20, 0.28));
71
+ }
72
+ .sprite img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; object-position: bottom center; }
73
+ .sprite img.swap { opacity: 0; transition: opacity 0.25s ease; }
74
+ .sprite img.swap.in { opacity: 1; }
75
+ .sprite[data-pos="left"] { left: 22%; }
76
+ .sprite[data-pos="center"] { left: 50%; }
77
+ .sprite[data-pos="right"] { left: 78%; }
78
+ .sprite.entering { opacity: 0; transform: translateX(-50%) translateY(3vh); }
79
+ .sprite.leaving { opacity: 0; transform: translateX(-50%) translateY(2vh); }
80
+ .sprite.no-anim { transition: none; }
81
+ .sprite { z-index: 1; }
82
+ .sprite.dim { z-index: 0; filter: brightness(0.62) saturate(0.7) drop-shadow(0 12px 24px rgba(20, 10, 20, 0.2)); }
83
+ .sprite.speaking { z-index: 2; transform: translateX(-50%) scale(1.015); }
84
+ #sprites[data-count="2"] .sprite[data-pos="left"] { left: 30%; }
85
+ #sprites[data-count="2"] .sprite[data-pos="right"] { left: 70%; }
86
+ #sprites[data-count="3"] .sprite { height: 96vh; bottom: -8vh; }
87
+ #sprites[data-count="3"] .sprite[data-pos="left"] { left: 19%; }
88
+ #sprites[data-count="3"] .sprite[data-pos="right"] { left: 81%; }
89
+ #sprites .sprite.jolt img:last-child { animation: jolt 0.35s ease-out; }
90
+ @keyframes jolt { 30% { transform: translateY(-14px); } 60% { transform: translateY(4px); } }
91
+ .bg.on.night ~ #sprites .sprite { filter: brightness(0.82) saturate(0.85) drop-shadow(0 12px 24px rgba(0, 0, 20, 0.35)); }
92
+ .bg.on.night ~ #sprites .sprite.dim { filter: brightness(0.5) saturate(0.6); }
93
+ #game.choosing #sprites .sprite { filter: brightness(0.78); }
94
+ #cg { position: absolute; inset: 0; opacity: 0; pointer-events: none; transition: opacity 0.8s ease; background: #0c0910; }
95
+ #cg.on { opacity: 1; }
96
+ #cg img { width: 100%; height: 100%; object-fit: cover; }
97
+ /* 人物在右、左侧留白的 CG:裁到右侧(与 stage.js FOCUS_ZOOM 一致) */
98
+ img.focus-right { object-fit: cover; object-position: 100% 50%; transform: scale(1.3); transform-origin: right center; }
99
+ /* 成人画面关闭:一道落下的纱帘,后面是暗下去的内室 */
100
+ #cg.veiled { overflow: hidden; }
101
+ #cg.veiled img { display: none; }
102
+ #cg.veiled::before { content: ""; position: absolute; inset: -20px; background: url("../assets/bg/chamber.webp") center / cover; filter: blur(6px) brightness(0.45); }
103
+ #cg.veiled::after { content: ""; position: absolute; inset: 0; background:
104
+ repeating-linear-gradient(90deg, rgba(255, 222, 228, 0.13) 0, rgba(110, 36, 56, 0.2) 70px, rgba(255, 222, 228, 0.13) 140px),
105
+ linear-gradient(180deg, rgba(60, 20, 34, 0.35), rgba(194, 90, 108, 0.12) 45%, rgba(200, 140, 70, 0.16)); }
106
+ #flash { position: absolute; inset: 0; background: #fff; opacity: 0; pointer-events: none; }
107
+ #flash.go { animation: flash 0.6s ease-out; }
108
+ @keyframes flash { 0% { opacity: 0.85; } 100% { opacity: 0; } }
109
+
110
+ /* ---------- 文本框 ---------- */
111
+ #ui { position: absolute; left: 50%; bottom: 14px; width: min(1180px, calc(100vw - 28px)); transform: translateX(-50%); z-index: 5; transition: opacity 0.25s; }
112
+ #game.ui-hidden #ui, #game.ui-hidden #mode-badge, #game.ui-hidden #choices, #game.carding #ui, #game.carding #mode-badge { opacity: 0; pointer-events: none; }
113
+ #game.replay #quickmenu :is([data-act="qsave"], [data-act="qload"], [data-act="save"], [data-act="rollback"]) { display: none; }
114
+ #textbox {
115
+ position: relative; min-height: clamp(140px, 21vh, 190px); padding: 30px clamp(22px, 4vw, 54px) 22px;
116
+ border-radius: 16px; border: 1px solid rgba(195, 154, 82, 0.55);
117
+ background: linear-gradient(180deg, rgba(255, 252, 246, var(--box-alpha, 0.9)), rgba(246, 237, 224, calc(var(--box-alpha, 0.9) + 0.04)));
118
+ box-shadow: var(--shadow), inset 0 0 0 4px rgba(255, 255, 255, 0.35);
119
+ backdrop-filter: blur(calc((var(--box-alpha, 0.9) - 0.4) * 10px));
120
+ }
121
+ #textbox::after { content: ""; position: absolute; inset: 6px; border: 1px solid rgba(195, 154, 82, 0.22); border-radius: 12px; pointer-events: none; }
122
+ #nameplate {
123
+ --plate: #6b4b2e;
124
+ position: absolute; left: clamp(18px, 3vw, 40px); top: -20px; min-width: 120px; padding: 7px 26px;
125
+ font: 600 21px var(--serif); letter-spacing: 0.24em; color: #fff; text-align: center;
126
+ background: linear-gradient(135deg, var(--plate), color-mix(in srgb, var(--plate) 70%, #000));
127
+ border-radius: 6px 18px 6px 18px; box-shadow: 0 6px 16px rgba(0, 0, 0, 0.25);
128
+ }
129
+ #nameplate small { font: 13px var(--sans); letter-spacing: 0.12em; opacity: 0.85; }
130
+ #text { margin: 0; font: clamp(18px, 1.55vw, 23px) / 1.85 var(--serif); letter-spacing: 0.06em; color: var(--ink); white-space: pre-wrap; min-height: 3.6em; }
131
+ #textbox.narration #text { color: #3c3240; }
132
+ #textbox.read #text { color: #574c5c; }
133
+ #next-ind { position: absolute; right: 30px; bottom: 18px; width: 12px; height: 12px; background: var(--rose); transform: rotate(45deg); opacity: 0; }
134
+ #next-ind.on { opacity: 1; animation: bob 1s ease-in-out infinite; }
135
+ @keyframes bob { 50% { transform: translateY(5px) rotate(45deg); } }
136
+ #quickmenu { display: flex; justify-content: flex-end; gap: 2px; margin-top: 6px; flex-wrap: wrap; }
137
+ #quickmenu button { border: 0; background: rgba(20, 12, 22, 0.42); color: #f4e9dc; font-size: 13px; letter-spacing: 0.14em; padding: 4px 11px; border-radius: 999px; transition: background 0.15s; }
138
+ #quickmenu button:hover, #quickmenu button:focus-visible { background: rgba(194, 90, 108, 0.85); outline: none; }
139
+ #quickmenu button.on { background: var(--rose); }
140
+ #mode-badge { position: absolute; right: 22px; top: 18px; z-index: 6; padding: 6px 14px; border-radius: 999px; background: rgba(20, 12, 22, 0.6); color: #fff; font-size: 13px; letter-spacing: 0.2em; }
141
+
142
+ /* ---------- 选项 ---------- */
143
+ #choices { position: absolute; inset: 0 0 26vh; z-index: 7; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; gap: 12px; padding-bottom: 3vh; background: radial-gradient(ellipse at 50% 90%, rgba(20, 12, 22, 0.35), transparent 70%); animation: fade 0.3s ease; outline: none; }
144
+ #choices.branch { justify-content: center; padding-bottom: 0; background: radial-gradient(ellipse at center, rgba(20, 12, 22, 0.55), transparent 75%); }
145
+ .choice-head { margin: 0 0 6px; font: 22px var(--serif); color: #fff; letter-spacing: 0.3em; text-shadow: 0 2px 10px rgba(0, 0, 0, 0.6); }
146
+ .choice {
147
+ --accent: var(--gold);
148
+ position: relative; width: min(640px, 88vw); padding: 13px 26px 13px 58px; text-align: left;
149
+ border: 1px solid rgba(195, 154, 82, 0.6); border-left: 5px solid var(--accent); border-radius: 10px;
150
+ background: linear-gradient(90deg, rgba(255, 251, 244, 0.97), rgba(247, 238, 226, 0.94));
151
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.25); transition: transform 0.15s, box-shadow 0.15s;
152
+ }
153
+ .choice i { position: absolute; left: 18px; top: 50%; transform: translateY(-50%); width: 26px; height: 26px; display: grid; place-items: center; border-radius: 50%; font: normal 13px var(--sans); color: #fff; background: var(--accent); }
154
+ .choice b { display: block; font: 600 19px/1.5 var(--serif); letter-spacing: 0.05em; }
155
+ .choice small { display: block; margin-top: 2px; font-size: 13px; color: var(--ink-soft); }
156
+ .choice:hover:not(:disabled), .choice:focus-visible { transform: translateX(6px); box-shadow: 0 10px 26px rgba(194, 90, 108, 0.35); outline: none; }
157
+ .choice:disabled { opacity: 0.55; filter: grayscale(0.8); }
158
+ .choice.seen b { color: var(--ink-soft); }
159
+ .seen-tag { position: absolute; right: 14px; top: 50%; transform: translateY(-50%); padding: 1px 8px; border: 1px solid var(--gold-soft); border-radius: 999px; font-size: 12px; color: var(--ink-soft); letter-spacing: 0.1em; }
160
+ /* 院门:每行一个小像;没留够分量的门是熄了灯的深色行,字仍清楚可读 */
161
+ .choice.door { padding-left: 128px; min-height: 76px; }
162
+ .choice .bust { position: absolute; left: 56px; top: 50%; width: 56px; height: 56px; transform: translateY(-50%); border-radius: 50%; object-fit: cover; object-position: 50% 8%; background: var(--paper-2); border: 2px solid var(--accent); }
163
+ .choice.locked { background: rgba(30, 20, 28, 0.82); border-color: rgba(203, 191, 198, 0.3); color: #cbbfc6; cursor: not-allowed; }
164
+ .choice.locked b, .choice.locked small { color: #cbbfc6; }
165
+ .choice.locked .bust { filter: grayscale(1) brightness(0.7); border-color: #6d6070; }
166
+ .choice.locked i { background: #6d6070; }
167
+ .choice.locked:hover, .choice.locked:focus-visible { transform: none; box-shadow: 0 8px 22px rgba(0, 0, 0, 0.25); }
168
+ .choice .wick { position: absolute; right: 18px; top: 50%; transform: translateY(-50%); width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%; border: 1px solid #6d6070; font: 15px var(--serif); color: #9c8f98; }
169
+ @keyframes fade { from { opacity: 0; } }
170
+
171
+ /* ---------- 章节卡、结局、命数 ---------- */
172
+ #card { position: absolute; inset: 0; z-index: 8; display: grid; place-items: center; animation: fade 0.6s ease; cursor: pointer; }
173
+ #card.chapter { background: radial-gradient(ellipse at center, rgba(28, 18, 30, 0.88), rgba(10, 6, 12, 0.96)); }
174
+ .chapter-inner { text-align: center; color: #f5e9da; }
175
+ .chapter-inner small { letter-spacing: 0.6em; color: var(--gold); font-size: 13px; }
176
+ .chapter-inner h2 { margin: 14px 0 10px; font: 600 clamp(34px, 4vw, 54px) var(--serif); letter-spacing: 0.32em; animation: rise 1s ease both; }
177
+ .chapter-inner p { margin: 0; font: clamp(20px, 2vw, 28px) var(--serif); letter-spacing: 0.5em; color: #e9cdd2; animation: rise 1s 0.35s ease both; }
178
+ .chapter-inner::after { content: ""; display: block; width: 0; height: 1px; margin: 22px auto 0; background: var(--gold); animation: line 1.4s 0.5s ease forwards; }
179
+ @keyframes line { to { width: 220px; } }
180
+ /* 结局:CG 留在上面,标题落在下三分之一的一道纸色(错过结局为墨色)带子里 */
181
+ #card.ending { background: transparent; place-items: end stretch; }
182
+ .ending-band { position: relative; padding: 70px 24px 6vh; text-align: center; background: linear-gradient(180deg, rgba(251, 246, 238, 0), rgba(251, 246, 238, 0.9) 38%, var(--paper)); }
183
+ #card.ending.bad .ending-band { background: linear-gradient(180deg, rgba(14, 10, 16, 0), rgba(20, 14, 22, 0.88) 38%, #120d14); color: #eadfe6; }
184
+ .ending-band small { letter-spacing: 0.4em; color: var(--accent); font-size: 14px; }
185
+ #card.ending.bad .ending-band small { color: #c9b6c4; }
186
+ .ending-band h2 { margin: 12px 0 0; font: 600 clamp(34px, 4.2vw, 58px) var(--serif); letter-spacing: 0.28em; animation: rise 1.2s ease both; }
187
+ .ending-band .seal { position: absolute; right: clamp(24px, 12vw, 200px); bottom: calc(6vh + 18px); display: grid; place-items: center; width: 64px; height: 64px; border: 2px solid var(--rose); border-radius: 8px; color: var(--rose); font: 700 30px var(--serif); transform: rotate(-8deg); animation: appear 0.8s 0.9s ease both; }
188
+ .ending-band em { display: block; margin-top: 14px; font-style: normal; font-size: 13px; opacity: 0.6; letter-spacing: 0.3em; }
189
+ #card.fate { background: #0e0a10; color: #eee3d6; }
190
+ .fate-bg { position: absolute; inset: 0; background: center / cover; opacity: 0.32; filter: grayscale(0.4); animation: fade 2s ease; }
191
+ .fate-inner { position: relative; width: min(760px, 88vw); }
192
+ .fate-inner small { letter-spacing: 0.5em; color: var(--gold); }
193
+ .fate-inner h2 { margin: 10px 0 26px; font: 600 40px var(--serif); letter-spacing: 0.3em; }
194
+ .fate-inner p { font: 20px/2 var(--serif); letter-spacing: 0.08em; margin: 0 0 8px; opacity: 0; animation: rise 1.4s ease forwards; }
195
+ .fate-inner em { display: block; margin-top: 30px; font-style: normal; font-size: 14px; color: #b9a8b2; letter-spacing: 0.16em; opacity: 0; animation: appear 1s 4.8s ease forwards; }
196
+ #card.fate.reveal .fate-inner :is(p, em) { animation: none; opacity: 1; }
197
+ @keyframes appear { from { opacity: 0; } to { opacity: 1; } }
198
+ #toast { position: fixed; left: 50%; top: 22px; z-index: 30; transform: translateX(-50%); padding: 9px 22px; border-radius: 999px; background: rgba(20, 12, 22, 0.82); color: #fff; letter-spacing: 0.12em; font-size: 14px; animation: fade 0.25s ease; }
199
+
200
+ /* ---------- 覆盖层面板 ---------- */
201
+ #overlay { position: fixed; inset: 0; z-index: 20; display: grid; place-items: center; background: rgba(16, 10, 18, 0.55); backdrop-filter: blur(3px); animation: fade 0.2s ease; }
202
+ .panel { width: min(1120px, calc(100vw - 28px)); max-height: calc(100vh - 40px); display: flex; flex-direction: column; border-radius: 16px; border: 1px solid var(--gold-soft); background: linear-gradient(180deg, #fffdf8, var(--paper-2)); box-shadow: var(--shadow); overflow: hidden; }
203
+ .panel.small { width: min(460px, 90vw); padding: 28px 30px; text-align: center; line-height: 1.8; }
204
+ .panel header { display: flex; align-items: center; gap: 18px; padding: 16px 24px; border-bottom: 1px solid var(--gold-soft); flex-wrap: wrap; }
205
+ .panel h2 { margin: 0; font: 600 24px var(--serif); letter-spacing: 0.3em; }
206
+ .panel header .close { margin-left: auto; border: 0; background: none; color: var(--rose); letter-spacing: 0.2em; }
207
+ .panel-body { padding: 20px 24px 26px; overflow: auto; flex: 1; }
208
+ .panel.tall { height: min(800px, calc(100vh - 40px)); }
209
+ .panel.slots-panel { height: min(560px, calc(100vh - 40px)); }
210
+ .row { display: flex; gap: 12px; justify-content: center; margin-top: 18px; flex-wrap: wrap; }
211
+ .tabs { display: flex; gap: 6px; flex-wrap: wrap; }
212
+ .tab { padding: 4px 14px; border: 1px solid var(--gold-soft); border-radius: 999px; background: transparent; font-size: 14px; }
213
+ .tab.on { background: var(--rose); border-color: var(--rose); color: #fff; }
214
+ .count { margin: 0 0 12px; color: var(--ink-soft); font-size: 14px; letter-spacing: 0.1em; }
215
+
216
+ .backlog { list-style: none; margin: 0; padding: 0; }
217
+ .backlog li { padding: 10px 4px; border-bottom: 1px dashed rgba(195, 154, 82, 0.35); }
218
+ .backlog b { display: block; font: 600 15px var(--serif); letter-spacing: 0.2em; margin-bottom: 2px; }
219
+ .backlog p { margin: 0; font: 17px/1.8 var(--serif); }
220
+ .backlog .chosen p { color: var(--rose); }
221
+
222
+ .slots { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
223
+ .slot-hint { margin: 14px 0 0; font-size: 12px; }
224
+ .slot { min-width: 0; display: flex; gap: 12px; padding: 10px; text-align: left; border: 1px solid var(--gold-soft); border-radius: 10px; background: rgba(255, 255, 255, 0.6); transition: box-shadow 0.15s, transform 0.15s; }
225
+ .slot:hover:not(:disabled), .slot:focus-visible { box-shadow: 0 6px 18px rgba(194, 90, 108, 0.25); transform: translateY(-2px); outline: none; }
226
+ .slot:disabled { opacity: 0.5; }
227
+ .thumb { flex: 0 0 auto; width: 136px; aspect-ratio: 16 / 9; display: grid; place-items: center; border-radius: 6px; background: #e8dccb center / cover; color: #b4a48f; font-size: 13px; }
228
+ .meta { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
229
+ .meta b { font-size: 14px; letter-spacing: 0.1em; }
230
+ .meta em { font: normal 15px var(--serif); color: var(--rose); }
231
+ .meta small { color: var(--ink-soft); }
232
+ .meta q { color: var(--ink-soft); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; quotes: none; }
233
+
234
+ .cfg-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px 34px; }
235
+ .cfg { display: grid; grid-template-columns: 7em 1fr 3em; align-items: center; gap: 12px; }
236
+ .cfg span { letter-spacing: 0.1em; }
237
+ .cfg small { display: block; font-size: 12px; color: var(--ink-soft); }
238
+ .cfg.toggle { grid-template-columns: 1fr auto; }
239
+ .cfg input[type="range"] { accent-color: var(--rose); }
240
+ .cfg input[type="checkbox"] { width: 20px; height: 20px; accent-color: var(--rose); }
241
+ .cfg output { text-align: right; color: var(--ink-soft); }
242
+ .cfg-preview { margin: 22px 0 0; min-height: 3.2em; padding: 12px 22px; border-radius: 8px; background: rgba(255, 255, 255, 0.6); font: 19px/1.8 var(--serif); color: var(--ink); }
243
+ .cfg-keys { margin: 10px 0 0; font-size: 13px; color: var(--ink-soft); text-align: center; letter-spacing: 0.08em; }
244
+
245
+ .sys { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }
246
+ .sys .btn { padding: 14px; font-size: 17px; }
247
+ .peek-note { margin: 0 0 14px; color: var(--ink-soft); font: 15px var(--serif); }
248
+ .peek { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
249
+ .peek-card { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 10px 8px 14px; border-radius: 12px; border-top: 4px solid var(--accent); background: rgba(255, 255, 255, 0.6); }
250
+ .peek-card img { width: 100%; aspect-ratio: 1; object-fit: cover; object-position: 50% 6%; border-radius: 8px; }
251
+ .peek-card b { font: 600 16px var(--serif); letter-spacing: 0.12em; }
252
+ .lantern { margin-top: 4px; padding: 2px 10px; border-radius: 999px; font: 13px var(--serif); letter-spacing: 0.12em; }
253
+ .lantern.lit { background: rgba(214, 140, 60, 0.16); color: #a2531f; box-shadow: 0 0 10px rgba(240, 170, 80, 0.35); }
254
+ .lantern.dim { background: rgba(60, 50, 64, 0.08); color: #7d7280; }
255
+
256
+ .cg-group { display: flex; align-items: baseline; gap: 10px; margin: 18px 0 10px; font: 600 17px var(--serif); letter-spacing: 0.2em; }
257
+ .cg-group small { font: 13px var(--sans); color: var(--ink-soft); letter-spacing: 0.05em; }
258
+ .cg-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 12px; }
259
+ .cg-thumb { display: block; overflow: hidden; aspect-ratio: 16 / 9; }
260
+ .cg-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
261
+ .cg-cell { padding: 0; border: 1px solid var(--gold-soft); border-radius: 8px; overflow: hidden; background: #2a2030; text-align: left; }
262
+ .cg-cell img, .cg-cell span { display: grid; place-items: center; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; color: #8d7a8c; font: 28px var(--serif); }
263
+ .cg-cell.locked span, .cg-cell:disabled span { background: repeating-linear-gradient(45deg, #2a2030 0 10px, #31263a 10px 20px); font-size: 22px; }
264
+ .cg-cell small { display: block; padding: 6px 10px; background: var(--paper); font-size: 13px; }
265
+ .cgview { position: fixed; inset: 0; margin: 0; display: grid; place-items: center; background: #0b080d; cursor: pointer; }
266
+ .cg-frame { width: min(100vw, calc((100vh - 40px) * 16 / 9)); aspect-ratio: 16 / 9; overflow: hidden; }
267
+ .cg-frame img { display: block; width: 100%; height: 100%; object-fit: contain; }
268
+ .cg-frame img.focus-right { object-fit: cover; }
269
+ .cgview figcaption { color: #cdbfcf; letter-spacing: 0.2em; font-size: 14px; }
270
+ .scene-list { display: grid; grid-template-columns: repeat(5, 1fr); gap: 12px; }
271
+ .scene-cell { display: flex; flex-direction: column; gap: 4px; padding: 0 0 12px; border: 1px solid var(--gold-soft); border-top: 4px solid var(--accent); border-radius: 10px; background: rgba(255, 255, 255, 0.6); overflow: hidden; }
272
+ .scene-cell img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; object-position: 50% 4%; }
273
+ .scene-cell:disabled img { filter: brightness(0) opacity(0.25); }
274
+ .scene-cell b { padding: 0 10px; font: 600 16px var(--serif); }
275
+ .scene-cell small { padding: 0 10px; color: var(--ink-soft); font-size: 12px; }
276
+ .music { margin: 0; padding: 0; list-style: none; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
277
+ .music .btn { width: 100%; text-align: left; border-radius: 10px; }
278
+ .flow-root { margin: 0 auto 16px; width: fit-content; padding: 10px 26px; border-radius: 999px; background: var(--ink); color: #fff; letter-spacing: 0.2em; }
279
+ .flow-routes { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; }
280
+ .flow-col { display: flex; flex-direction: column; gap: 8px; }
281
+ .flow-head { padding: 8px; text-align: center; border-radius: 8px; background: var(--accent, #6d6070); color: #fff; font: 600 15px var(--serif); letter-spacing: 0.1em; }
282
+ .flow-col.lonely { --accent: #6d6070; }
283
+ .end-cell { padding: 8px 10px; border-radius: 8px; border: 1px dashed var(--gold-soft); background: rgba(255, 255, 255, 0.4); color: #a99aa4; }
284
+ .end-cell small { display: block; font-size: 11px; letter-spacing: 0.2em; }
285
+ .end-cell b { font: 600 15px var(--serif); }
286
+ .end-cell.ok { border-style: solid; color: var(--ink); background: #fff; }
287
+ .end-cell.ok.good { box-shadow: inset 3px 0 0 #c25a6c; }
288
+ .end-cell.ok.normal { box-shadow: inset 3px 0 0 #c39a52; }
289
+ .end-cell.ok.bad { box-shadow: inset 3px 0 0 #6d6070; }
290
+
291
+ /* ---------- 窄屏 ---------- */
292
+ @media (max-width: 760px) {
293
+ .title-veil { background: linear-gradient(180deg, rgba(251, 246, 238, 0.95) 0%, rgba(251, 246, 238, 0.4) 45%, rgba(251, 246, 238, 0.92) 100%); }
294
+ .title-logo { top: 7vh; }
295
+ .title-menu { bottom: 9vh; }
296
+ .title-menu button { font-size: 19px; padding: 6px 0 6px 20px; }
297
+ .sprite { height: 92vh; bottom: -6vh; }
298
+ .sprite[data-pos="left"] { left: 18%; }
299
+ .sprite[data-pos="right"] { left: 82%; }
300
+ #textbox { padding: 26px 18px 18px; }
301
+ #nameplate { font-size: 17px; min-width: 96px; padding: 5px 16px; }
302
+ #quickmenu button { font-size: 12px; padding: 3px 8px; }
303
+ .slots, .cfg-grid, .music { grid-template-columns: minmax(0, 1fr); }
304
+ .peek, .scene-list { grid-template-columns: repeat(2, 1fr); }
305
+ .flow-routes { grid-template-columns: repeat(2, 1fr); }
2218
306
  }
2219
-
2220
- @media (min-width: 1800px) and (min-height: 1000px) {
2221
- .play-area { grid-template-columns: minmax(0,1fr); }
2222
- .relation-rail { padding: 1.4rem 1rem; gap: 1rem; }
2223
- .relation-card { padding: 1rem; }
2224
- .relation-card p { font-size: .76rem; }
2225
- .dialogue-panel { width: 37%; padding: 2rem; }
2226
- .choice-button { min-height: 80px; }
2227
- }
2228
-
2229
307
  @media (prefers-reduced-motion: reduce) {
2230
- *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; transition-duration: .001ms !important; }
2231
- }
2232
-
2233
- /* 关系场景使用专属近景册页;完整奖励在解锁时全屏展开。 */
2234
- /* 单张整版:一张图、一次曝光、一条 100° 斜向 scrim(光从右上斜入,对齐 CG 里的灯笼),
2235
- 不再左右对接两张图。 */
2236
- .close-cg, .morning-cg {
2237
- position: absolute;
2238
- z-index: 1;
2239
- inset: 0;
2240
- background-size: cover;
2241
- /* 夜间立绘是 1280×853 完整构图(人物在右 55–70%,左三是留给面板的暗部),
2242
- 不是人物切片;用 center 保住整版构图,第一批的 50% 12% 会把头切掉。 */
2243
- background-position: center;
2244
- filter: saturate(.82) brightness(.86) contrast(1.04);
2245
- }
2246
- .close-cg::after, .morning-cg::after {
2247
- content: "";
2248
- position: absolute;
2249
- inset: 0;
2250
- background:
2251
- linear-gradient(100deg, rgba(14,9,7,.95) 0%, rgba(14,9,7,.90) 24%, rgba(14,9,7,.52) 42%, rgba(14,9,7,.08) 60%, rgba(14,9,7,.30) 100%),
2252
- radial-gradient(115% 88% at 70% 42%, transparent 38%, rgba(10,7,6,.58) 100%);
2253
- }
2254
- .close-cg.closer { filter: saturate(.9) brightness(.8) contrast(1.06); transform: scale(1.025); transform-origin: center; }
2255
- /* 次晨沿用同一整版构图,只叠一层晨光;亮度别压过灯焰,夜灯要还活着。 */
2256
- .morning-cg { filter: brightness(1.1) sepia(.12) saturate(.88) contrast(1.0); }
2257
- .title-copy h1 { font-size: clamp(2.35rem, 3.35vw, 4.5rem); white-space: nowrap; }
2258
-
2259
- /* 视觉裁决 iteration 2:群像曝光、次晨角色一致性、人物账可读性。 */
2260
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-scrim {
2261
- background: linear-gradient(0deg, rgba(12,8,7,.82) 0%, rgba(12,8,7,.14) 44%, rgba(12,8,7,.03) 72%);
2262
- }
2263
- /* 整宽底栏:说明文字退出 x 34–70%, y 60–84% 的保护区(账簿、两把钥匙、月娘的手),
2264
- 任何截图都不会再盖住这一帧的因果器物。 */
2265
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption {
2266
- left: 0;
2267
- right: 0;
2268
- bottom: 0;
2269
- width: auto;
2270
- padding: 3.4rem 6% 2rem;
2271
- border-left: 0;
2272
- background: linear-gradient(0deg, rgba(12,8,6,.96) 0%, rgba(12,8,6,.86) 42%, transparent 100%);
2273
- backdrop-filter: none;
2274
- display: grid;
2275
- grid-template-columns: 1fr auto;
2276
- align-items: end;
2277
- gap: .3rem 1.5rem;
2278
- }
2279
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption .eyebrow,
2280
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption h2,
2281
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption > p { grid-column: 1; }
2282
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption h2 { margin-bottom: .5rem; font-size: clamp(1.7rem, 2.8vw, 2.9rem); }
2283
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption .scene-meta { grid-column: 2; grid-row: 1 / span 2; margin: 0; justify-content: flex-end; }
2284
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption .ink-button { grid-column: 2; }
2285
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) > img { filter: saturate(.92) brightness(1.08); }
2286
- .scene-view[data-scene-id="inner_court_accord"] .scene-caption { max-height: 76%; overflow-y: auto; }
2287
- .shared-night-accord-overview,.shared-night-accord-entry { grid-column: 1 / -1; margin-top: .45rem; padding: .58rem .68rem; border: 1px solid rgba(211,173,104,.28); background: rgba(15,10,8,.54); }
2288
- .shared-night-accord-overview header,.shared-night-accord-entry > header { display: flex; justify-content: space-between; gap: .75rem; color: #a58c68; font: .56rem var(--sans); letter-spacing: .06em; }
2289
- .shared-night-accord-overview header b,.shared-night-accord-entry > header b { color: #dfbf84; font-weight: 600; }
2290
- .shared-night-accord-overview > div { display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: .32rem; margin-top: .48rem; }
2291
- .shared-night-accord-overview > div > span { min-width: 0; padding: .42rem .46rem; border-left: 2px solid rgba(205,164,101,.52); background: rgba(69,48,27,.24); }
2292
- .shared-night-accord-overview b,.shared-night-accord-overview em,.shared-night-accord-overview small { display: block; }
2293
- .shared-night-accord-overview b { color: #ead5af; font: .64rem var(--serif); }
2294
- .shared-night-accord-overview em { margin-top: .12rem; color: #c9a66e; font: normal .54rem var(--sans); }
2295
- .shared-night-accord-overview small { margin-top: .12rem; color: #a99a84; font: .49rem/1.35 var(--sans); }
2296
- .shared-night-accord-ledger { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .38rem; margin-top: .48rem; }
2297
- .shared-night-accord-ledger article { min-width: 0; padding: .5rem .55rem; border-top: 1px solid rgba(205,164,101,.25); background: rgba(54,39,25,.18); }
2298
- .shared-night-accord-ledger small,.shared-night-accord-ledger b,.shared-night-accord-ledger p { display: block; }
2299
- .shared-night-accord-ledger small { color: #9f8259; font: .5rem var(--sans); letter-spacing: .06em; }
2300
- .shared-night-accord-ledger b { margin-top: .14rem; color: #ddc397; font: .6rem/1.4 var(--serif); }
2301
- .shared-night-accord-ledger blockquote { margin: .28rem 0; padding-left: .42rem; border-left: 2px solid rgba(184,130,73,.62); color: #ddcdb4; font: .58rem/1.45 var(--serif); }
2302
- .shared-night-accord-ledger p,.shared-night-accord-conclusion { color: #b7aa97; font: .53rem/1.48 var(--sans); }
2303
- .shared-night-accord-ledger p { margin: .22rem 0 0; }
2304
- .shared-night-accord-conclusion { margin: .48rem 0 0; padding: .42rem .5rem; border-left: 2px solid rgba(104,159,132,.58); background: rgba(33,73,57,.14); }
2305
- .scene-view[data-scene-id="inner_court_alliance"] > img { filter: saturate(.7) brightness(.62) contrast(1.08); }
2306
- .scene-view[data-scene-id="inner_court_alliance"] .scene-caption { left: 2.5%; bottom: 2.5%; width: min(940px,78%); max-height: 92%; padding: 1rem 1.1rem; overflow-y: auto; border-left: 2px solid rgba(164,118,78,.72); background: linear-gradient(135deg,rgba(18,14,11,.97),rgba(36,27,20,.9)); }
2307
- .alliance-tableau-overview,.alliance-tableau-entry { margin-top: .5rem; padding: .62rem .7rem; border: 1px solid rgba(185,145,94,.3); background: rgba(58,42,25,.22); }
2308
- .alliance-tableau-overview > header,.alliance-tableau-entry > header { display: flex; justify-content: space-between; gap: .8rem; color: #ad9270; font: .57rem var(--sans); letter-spacing: .05em; }
2309
- .alliance-tableau-overview > header b,.alliance-tableau-entry > header b { color: #e0bd85; font-weight: 600; }
2310
- .alliance-tableau-overview > p,.alliance-tableau-entry > p { margin: .42rem 0; color: #d7c4a8; font: .59rem/1.52 var(--sans); }
2311
- .alliance-tableau-members { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: .34rem; }
2312
- .alliance-tableau-members figure { position: relative; min-width: 0; min-height: 3.5rem; margin: 0; overflow: hidden; border-bottom: 1px solid rgba(197,154,93,.35); background: rgba(22,16,11,.48); }
2313
- .alliance-tableau-members img { position: absolute; inset: 0 auto 0 0; width: 42%; height: 100%; object-fit: cover; object-position: top center; filter: saturate(.72) brightness(.78); }
2314
- .alliance-tableau-members figcaption { position: relative; z-index: 1; min-height: 3.5rem; padding: .65rem .4rem .4rem 44%; background: linear-gradient(90deg,transparent,rgba(20,14,10,.94) 42%); }
2315
- .alliance-tableau-members b,.alliance-tableau-members span { display: block; }
2316
- .alliance-tableau-members b { color: #dfbe8c; font: .61rem var(--serif); }
2317
- .alliance-tableau-members span { margin-top: .12rem; color: #9f8a70; font: .48rem var(--sans); }
2318
- .alliance-tableau-path { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .34rem; margin-top: .42rem; }
2319
- .alliance-tableau-path > span { min-width: 0; padding: .42rem .46rem; border-left: 2px solid rgba(181,133,76,.5); background: rgba(25,18,12,.38); }
2320
- .alliance-tableau-path small,.alliance-tableau-path b,.alliance-tableau-path em { display: block; }
2321
- .alliance-tableau-path small { color: #8f7b65; font: .48rem var(--sans); }
2322
- .alliance-tableau-path b { margin-top: .12rem; color: #d9b984; font: .59rem var(--serif); }
2323
- .alliance-tableau-path em { margin-top: .12rem; color: #b7a486; font: normal .49rem/1.35 var(--sans); }
2324
- .alliance-tableau-nonmembers { margin-top: .42rem; padding: .42rem .5rem; border-top: 1px solid rgba(130,151,127,.25); background: rgba(28,48,38,.14); }
2325
- .alliance-tableau-nonmembers > b { display: block; color: #a8bca7; font: .53rem var(--sans); }
2326
- .alliance-tableau-nonmembers p { display: grid; grid-template-columns: 7.5rem 1fr; gap: .45rem; margin: .28rem 0 0; color: #9dac9d; font: .49rem/1.4 var(--sans); }
2327
- .alliance-tableau-nonmembers strong { color: #c2d0be; font-weight: 600; }
2328
- .alliance-tableau-actions { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .34rem; }
2329
- .alliance-tableau-actions article { display: grid; grid-template-columns: 2.8rem 1fr; gap: .45rem; min-width: 0; padding: .4rem .46rem; background: rgba(21,15,10,.42); }
2330
- .alliance-tableau-actions img { width: 2.8rem; height: 3.4rem; object-fit: cover; object-position: top center; filter: saturate(.68) brightness(.75); }
2331
- .alliance-tableau-actions b { display: block; color: #dcb77f; font: .56rem var(--serif); }
2332
- .alliance-tableau-actions p { margin: .13rem 0 0; color: #bcae99; font: .5rem/1.42 var(--sans); }
2333
- .alliance-tableau-entry > blockquote { margin: .48rem 0 0; padding: .42rem .5rem; border-left: 2px solid rgba(102,147,124,.58); color: #b9c9ba; background: rgba(30,57,44,.14); font: .53rem/1.46 var(--sans); }
2334
- .scene-view[data-scene-id="inner_court_afterglow"] .scene-caption { left: 3%; bottom: 3%; width: min(760px,62%); max-height: 88%; padding: 1rem 1.1rem; overflow-y: auto; border-left: 2px solid rgba(191,137,116,.68); background: linear-gradient(135deg,rgba(21,13,14,.96),rgba(36,21,24,.88)); }
2335
- .shared-afterglow-tableau-overview,.shared-afterglow-tableau-entry { margin-top: .5rem; padding: .62rem .7rem; border: 1px solid rgba(201,151,126,.28); background: rgba(61,32,38,.18); }
2336
- .shared-afterglow-tableau-overview header,.shared-afterglow-tableau-entry > header { display: flex; justify-content: space-between; gap: .75rem; color: #b58d83; font: .57rem var(--sans); letter-spacing: .06em; }
2337
- .shared-afterglow-tableau-overview header b,.shared-afterglow-tableau-entry > header b { color: #e1baaa; font-weight: 600; }
2338
- .shared-afterglow-tableau-overview > div { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: .36rem; margin-top: .48rem; }
2339
- .shared-afterglow-tableau-overview > div > span { min-width: 0; padding: .46rem .5rem; border-top: 1px solid rgba(209,160,134,.3); background: rgba(31,18,21,.34); }
2340
- .shared-afterglow-tableau-overview small,.shared-afterglow-tableau-overview b,.shared-afterglow-tableau-overview em { display: block; }
2341
- .shared-afterglow-tableau-overview small { color: #9e7b73; font: .49rem var(--sans); }
2342
- .shared-afterglow-tableau-overview b { margin-top: .12rem; color: #e0c2b6; font: .62rem var(--serif); }
2343
- .shared-afterglow-tableau-overview em { margin-top: .16rem; color: #b49b91; font: normal .51rem/1.35 var(--sans); }
2344
- .shared-afterglow-tableau-entry > p { margin: .42rem 0; color: #d7c1b7; font: .61rem/1.55 var(--sans); }
2345
- .shared-afterglow-tableau-actions { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: .34rem; }
2346
- .shared-afterglow-tableau-actions article { min-width: 0; padding: .42rem .48rem; border-left: 2px solid rgba(187,125,110,.5); background: rgba(20,13,15,.35); }
2347
- .shared-afterglow-tableau-actions article:last-child { grid-column: 1 / -1; }
2348
- .shared-afterglow-tableau-actions b { display: block; color: #d8aa9b; font: .56rem var(--serif); }
2349
- .shared-afterglow-tableau-actions p { margin: .16rem 0 0; color: #bfa9a1; font: .52rem/1.42 var(--sans); }
2350
- .shared-afterglow-tableau-entry > blockquote { margin: .48rem 0 0; padding: .42rem .5rem; border-left: 2px solid rgba(118,165,145,.55); color: #b9cfc4; background: rgba(31,68,54,.14); font: .54rem/1.48 var(--sans); }
2351
- .relation-card p { color: #b9ac99; font-size: .75rem; }
2352
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-scrim {
2353
- background: linear-gradient(0deg, rgba(12,8,7,.54) 0%, rgba(12,8,7,0) 36%);
2354
- }
2355
-
2356
- .fast .scene-view > img { animation: none; filter: saturate(.92) brightness(1.06); }
2357
-
2358
- /* 必须置于视觉裁决覆盖之后,避免桌面整版规则重新把窄屏文字挤出画面。 */
2359
- @media (max-width: 900px) {
2360
- .title-copy h1 { white-space: normal; font-size: clamp(2.15rem,11vw,3.4rem); }
2361
- .fate-coda-overlay { padding: 0; }
2362
- .fate-coda-book { width: 100vw; height: 100svh; border: 0; }
2363
- .fate-coda-art { background-position: 64% top; }
2364
- .fate-coda-art::after { background: linear-gradient(0deg,rgba(7,11,12,.99) 0%,rgba(7,11,12,.95) 62%,rgba(7,11,12,.18) 90%), linear-gradient(90deg,rgba(7,11,12,.35),transparent 75%); }
2365
- .fate-coda-copy { inset: 28svh 0 0; padding: .78rem .85rem .9rem; background: linear-gradient(0deg,rgba(10,14,15,.995),rgba(10,14,15,.94) 78%,transparent); }
2366
- .fate-coda-copy > header { padding-bottom: .55rem; }
2367
- .fate-coda-copy > header p:not(.eyebrow) { display: none; }
2368
- .fate-coda-scroll { padding: .75rem .05rem .65rem 0; }
2369
- .fate-coda-progress { margin-bottom: .55rem; }
2370
- .fate-coda-progress i { width: 1.35rem; height: 1.35rem; }
2371
- .fate-coda-copy h2 { margin-bottom: .55rem; font-size: clamp(1.65rem,8.5vw,2.25rem); }
2372
- .fate-coda-body { font-size: .76rem; line-height: 1.7; }
2373
- .fate-coda-sections { gap: .62rem; margin-top: .8rem; }
2374
- .fate-coda-ledger-section { padding: .65rem; }
2375
- .fate-coda-ledger-section > header h3 { margin-bottom: .5rem; font-size: .86rem; }
2376
- .fate-coda-ledger-section article { padding: .52rem .58rem; }
2377
- .fate-coda-ledger-section article > p { font-size: .66rem; line-height: 1.6; }
2378
- .fate-coda-decision { margin-top: .7rem; padding-top: .65rem; }
2379
- .fate-coda-decision > p { margin-bottom: .5rem; font-size: .72rem; line-height: 1.55; }
2380
- .fate-coda-decision .choice-button { min-height: 50px; padding: .5rem .6rem; }
2381
- .fate-coda-result { margin-top: .7rem; padding: .65rem .72rem; }
2382
- .fate-coda-result p { font-size: .68rem; line-height: 1.55; }
2383
- .fate-coda-copy > footer { min-height: 2.8rem; padding-top: .55rem; }
2384
- .close-cg::after, .morning-cg::after { background: linear-gradient(0deg, rgba(14,9,7,.98) 0%, rgba(14,9,7,.82) 46%, rgba(14,9,7,.06) 76%); }
2385
- .day-aftermath-stage::after { background: linear-gradient(0deg,rgba(13,9,8,.99) 0%,rgba(13,9,8,.84) 57%,rgba(13,9,8,.05) 88%); }
2386
- .day-aftermath-lead { inset: 0; background-position: 60% 10%; mask-image: linear-gradient(0deg,transparent 0%,#000 24%,#000 100%); }
2387
- .day-aftermath-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 94%; padding: .9rem; transform: none; }
2388
- .day-aftermath-reactions { inset: 1.5% 2.5% auto; height: 35%; gap: .4rem; }
2389
- .day-aftermath-reactions figure:only-child { width: 48%; }
2390
- .day-aftermath-reactions figcaption { padding: 2.1rem .45rem .45rem; }
2391
- .day-aftermath-reactions p { display: -webkit-box; overflow: hidden; font-size: .6rem; line-height: 1.42; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
2392
- .day-speaker, .day-consequence { margin: .45rem 0; padding: .52rem .6rem; }
2393
- .story-progress { margin: .45rem 0; }
2394
- .joint-story-row { align-items: flex-start; flex-direction: column; gap: .4rem; }
2395
- .joint-story-row .joint-payoff { text-align: left; }
2396
- .council-aftermath-stage::after { background: linear-gradient(0deg,rgba(12,8,7,.99) 0%,rgba(12,8,7,.82) 58%,rgba(12,8,7,.06) 89%); }
2397
- .council-resolution-cast { inset: 1.5% 2% auto; height: 37%; gap: .2rem; }
2398
- .council-resolution-cast figure.speaking { transform: translateY(-.25rem); }
2399
- .council-resolution-cast figcaption { padding: 1.8rem .25rem .35rem; }
2400
- .council-resolution-cast figcaption span { display: none; }
2401
- .council-resolution-cast b { font-size: .62rem; }
2402
- .council-aftermath-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 67%; padding: .9rem; transform: none; }
2403
- .public-aftermath-stage::after { background: linear-gradient(0deg,rgba(11,7,6,.99) 0%,rgba(11,7,6,.84) 61%,rgba(11,7,6,.08) 91%); }
2404
- .public-aftermath-cast { inset: 1.5% 2% auto; height: 34%; gap: .18rem; }
2405
- .public-aftermath-cast figure.speaking { transform: translateY(-.22rem); }
2406
- .public-aftermath-cast figcaption { padding: 1.8rem .2rem .3rem; }
2407
- .public-aftermath-cast figcaption span { display: none; }
2408
- .public-aftermath-cast b { font-size: .56rem; }
2409
- .public-aftermath-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 94%; padding: .88rem; transform: none; }
2410
- .public-aftermath-panel > .ink-button { min-width: 0; width: 100%; }
2411
- .act-aftermath-stage::after { background: linear-gradient(0deg,rgba(11,8,7,.99) 0%,rgba(11,8,7,.84) 61%,rgba(11,8,7,.08) 91%); }
2412
- .act-aftermath-cast { inset: 1.5% 2% auto; height: 34%; gap: .18rem; }
2413
- .act-aftermath-cast figure.speaking { transform: translateY(-.22rem); }
2414
- .act-aftermath-cast figcaption { padding: 1.8rem .2rem .3rem; }
2415
- .act-aftermath-cast figcaption span { display: none; }
2416
- .act-aftermath-cast b { font-size: .56rem; }
2417
- .act-aftermath-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 94%; padding: .88rem; transform: none; }
2418
- .act-aftermath-panel > .ink-button { min-width: 0; width: 100%; }
2419
- .external-rebuttal-context-pages > header { grid-template-columns: 1fr; }
2420
- .external-rebuttal-context-pages > header div { display: grid; grid-template-columns: 7rem minmax(0,1fr); align-items: baseline; gap: .35rem; padding: .3rem .4rem; }
2421
- .external-rebuttal-context-pages > header b { margin: 0; white-space: normal; }
2422
- .external-rebuttal-voices li { padding: .34rem .4rem; }
2423
- .external-rebuttal-voices p { font-size: .72rem; }
2424
- .external-rebuttal-choices { grid-template-columns: 1fr; }
2425
- .final-aftermath-stage::after { background: linear-gradient(0deg,rgba(9,6,5,.995) 0%,rgba(9,6,5,.86) 63%,rgba(9,6,5,.08) 92%); }
2426
- .final-aftermath-cast { inset: 1.5% 2% auto; height: 33%; gap: .16rem; }
2427
- .final-aftermath-cast figure.speaking { transform: translateY(-.2rem); }
2428
- .final-aftermath-cast figcaption { padding: 1.7rem .18rem .28rem; }
2429
- .final-aftermath-cast figcaption span { display: none; }
2430
- .final-aftermath-cast b { font-size: .55rem; }
2431
- .final-aftermath-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 94%; padding: .86rem; transform: none; }
2432
- .final-aftermath-choices { grid-template-columns: 1fr; }
2433
- .final-aftermath-panel > .ink-button { min-width: 0; width: 100%; }
2434
- .final-aftermath-ledgers { top: 1%; right: 2%; gap: .15rem; }
2435
- .final-aftermath-ledgers i { width: 28px; height: 38px; font-size: .58rem; }
2436
- .jiaoer-aftermath-stage::after { background: linear-gradient(0deg,rgba(12,8,7,.995) 0%,rgba(12,8,7,.88) 64%,rgba(12,8,7,.08) 92%); }
2437
- .jiaoer-aftermath-cast { inset: 1.5% 2.5% auto; height: 34%; gap: .22rem; }
2438
- .jiaoer-aftermath-cast figure,.jiaoer-aftermath-cast figure.speaking { min-height:0; transform:none; }
2439
- .jiaoer-aftermath-cast figcaption { padding:1.75rem .25rem .3rem; font-size:.57rem; }
2440
- .jiaoer-aftermath-cast figcaption i { display:none; }
2441
- .jiaoer-aftermath-panel { left:3%; right:3%; top:auto; bottom:2%; width:auto; max-height:94%; padding:.86rem; transform:none; }
2442
- .jiaoer-aftermath-ledger { grid-template-columns:repeat(3,minmax(0,1fr)); gap:.2rem; }
2443
- .jiaoer-aftermath-ledger span { padding:.38rem .32rem; }
2444
- .jiaoer-aftermath-ledger small { font-size:.52rem; }
2445
- .jiaoer-aftermath-ledger b { font-size:.57rem; }
2446
- .jiaoer-aftermath-choices { grid-template-columns:1fr; }
2447
- .jiaoer-aftermath-panel > .ink-button { width:100%; }
2448
- .invitation-aftermath-stage::after { background:linear-gradient(0deg,rgba(12,8,7,.995) 0%,rgba(12,8,7,.88) 63%,rgba(12,8,7,.07) 91%); }
2449
- .invitation-aftermath-cast { inset:1.5% 2.5% auto; height:36%; gap:.3rem; }
2450
- .invitation-aftermath-cast figure,.invitation-aftermath-cast figure.speaking { min-height:0; transform:none; }
2451
- .invitation-aftermath-cast figcaption { padding:1.9rem .35rem .35rem; }
2452
- .invitation-aftermath-cast figcaption small { display:none; }
2453
- .invitation-aftermath-cast figcaption b { font-size:.66rem; }
2454
- .invitation-aftermath-panel { left:3%; right:3%; top:auto; bottom:2%; width:auto; max-height:94%; padding:.86rem; transform:none; }
2455
- .invitation-aftermath-ledger { gap:.2rem; }
2456
- .invitation-aftermath-ledger span { padding:.35rem .3rem; }
2457
- .invitation-aftermath-ledger small { font-size:.48rem; }
2458
- .invitation-aftermath-ledger b { font-size:.55rem; }
2459
- .invitation-aftermath-rule { margin:.42rem 0 .55rem; padding:.48rem .55rem; font-size:.58rem; }
2460
- .invitation-aftermath-choices { grid-template-columns:1fr; }
2461
- .invitation-aftermath-panel > .ink-button { width:100%; min-width:0; }
2462
- .council-rule-slip { margin: .45rem 0; padding: .52rem .6rem; }
2463
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption {
2464
- left: 3%; right: 3%; bottom: 2%; width: auto; max-height: 58%; display: block;
2465
- padding: .9rem; overflow-y: auto; border-left: 2px solid var(--cinnabar); background: rgba(12,8,6,.9);
2466
- }
2467
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption h2 { font-size: 1.55rem; }
2468
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption .scene-meta,
2469
- .scene-view:is([data-scene-tier="public"], [data-scene-tier="ensemble"]) .scene-caption .ink-button { display: flex; margin: .55rem 0 0; }
2470
- .scene-view[data-scene-id="inner_court_accord"] .scene-caption { max-height: 68%; }
2471
- .shared-night-accord-overview > div { grid-template-columns: repeat(2,minmax(0,1fr)); }
2472
- .shared-night-accord-ledger { grid-template-columns: 1fr; }
2473
- .scene-view[data-scene-id="inner_court_alliance"] .scene-caption { left: 3%; right: 3%; bottom: 2%; width: auto; max-height: 76%; padding: .85rem; }
2474
- .alliance-tableau-members,.alliance-tableau-path,.alliance-tableau-actions { grid-template-columns: 1fr; }
2475
- .alliance-tableau-nonmembers p { grid-template-columns: 1fr; gap: .12rem; }
2476
- .scene-view[data-scene-id="inner_court_afterglow"] .scene-caption { left: 3%; right: 3%; bottom: 2%; width: auto; max-height: 72%; padding: .85rem; }
2477
- .shared-afterglow-tableau-overview > div,.shared-afterglow-tableau-actions { grid-template-columns: 1fr; }
2478
- .shared-afterglow-tableau-actions article:last-child { grid-column: auto; }
2479
- }
2480
-
2481
- /* 侧栏仍在的窄桌面实际只给舞台留下约七百像素,沿用横向双栏会像坏掉的裁图。 */
2482
- @media (min-width: 901px) and (max-width: 1100px) {
2483
- .day-aftermath-stage::after,
2484
- .pair-interlude-stage::after { background: linear-gradient(0deg,rgba(13,9,8,.99) 0%,rgba(13,9,8,.84) 57%,rgba(13,9,8,.05) 88%); }
2485
- .day-aftermath-lead { inset: 0; background-position: 68% 10%; mask-image: linear-gradient(0deg,transparent 0%,#000 24%,#000 100%); }
2486
- .day-aftermath-reactions { inset: 1.5% 2.5% auto; height: 35%; gap: .4rem; }
2487
- .day-aftermath-reactions figure:only-child { width: 48%; }
2488
- .day-aftermath-reactions figcaption { padding: 2.1rem .45rem .45rem; }
2489
- .day-aftermath-reactions p { display: -webkit-box; overflow: hidden; font-size: .6rem; line-height: 1.42; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
2490
- .day-aftermath-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 94%; padding: .9rem; transform: none; }
2491
- .pair-portraits { inset: 0 0 auto; height: 35%; }
2492
- .pair-portraits figcaption { inset: auto .25rem 0; padding: 1.8rem .45rem .4rem; }
2493
- .pair-portraits p { display: none; }
2494
- .pair-interlude-panel { left: 3%; right: 3%; top: auto; bottom: 2%; width: auto; max-height: 80%; padding: .9rem; overflow: clip; }
2495
- .pair-aftermath-cast { inset: 0 0 auto; height: 34%; padding-right: 27%; }
2496
- .pair-aftermath-panel { max-height: 63%; }
2497
- }
2498
-
2499
- @media (max-width: 900px) {
2500
- :is(
2501
- .dialogue-stage .close-cg,
2502
- .night-talk-stage .close-cg,
2503
- .aftermath-stage .aftermath-main,
2504
- .personal-afterglow-stage .afterglow-close,
2505
- .personal-afterglow-aftermath-stage .personal-afterglow-aftermath-close,
2506
- .day-aftermath-stage .day-aftermath-lead
2507
- ) { background-position: var(--heroine-focus-x,68%) 12%; }
2508
- }
308
+ *, *::before, *::after { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
309
+ }
310
+
311
+ /* ---------- 天气与呼吸 ---------- */
312
+ #weather { position: absolute; inset: 0; pointer-events: none; }
313
+ #weather.rain {
314
+ background-image: repeating-linear-gradient(104deg, rgba(220, 230, 255, 0.0) 0 22px, rgba(220, 230, 255, 0.28) 22px 23px, rgba(220, 230, 255, 0) 23px 47px);
315
+ background-size: 140px 220px; animation: rain 0.45s linear infinite; mix-blend-mode: screen;
316
+ }
317
+ #weather.rain::after { content: ""; position: absolute; inset: 0; background: rgba(20, 28, 50, 0.3); }
318
+ @keyframes rain { to { background-position: -40px 220px; } }
319
+ #weather.petals::before, #weather.petals::after {
320
+ content: ""; position: absolute; inset: -10% 0 0; background-image:
321
+ radial-gradient(ellipse 7px 4px at 10% 20%, rgba(255, 200, 215, 0.9) 60%, transparent 62%),
322
+ radial-gradient(ellipse 6px 4px at 35% 60%, rgba(255, 210, 222, 0.85) 60%, transparent 62%),
323
+ radial-gradient(ellipse 8px 5px at 62% 30%, rgba(255, 196, 210, 0.9) 60%, transparent 62%),
324
+ radial-gradient(ellipse 6px 4px at 85% 75%, rgba(255, 214, 226, 0.85) 60%, transparent 62%);
325
+ background-size: 420px 380px; animation: petals 14s linear infinite;
326
+ }
327
+ #weather.petals::after { background-size: 560px 520px; animation-duration: 21s; opacity: 0.7; }
328
+ @keyframes petals { to { background-position: 160px 380px; } }
329
+ .sprite.speaking img:last-child { animation: breathe 5s ease-in-out infinite; transform-origin: 50% 100%; }
330
+ @keyframes breathe { 50% { transform: scaleY(1.006); } }
331
+ #hint { position: absolute; left: clamp(22px, 4vw, 54px); bottom: 12px; font-size: 12px; letter-spacing: 0.14em; color: #9a8a92; }