@lemoncat7/dsh-partner 2.8.0 → 2.8.2

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 (793) hide show
  1. package/docs/THIRD_PARTY_LICENSES.md +10 -0
  2. package/docs/blocked-delivery-recovery.md +7 -0
  3. package/docs/concern-attention.md +19 -0
  4. package/docs/observation-contract.md +11 -0
  5. package/docs/releases/2.8.1.md +11 -0
  6. package/docs/releases/2.8.2.md +7 -0
  7. package/lib/agent-runtime.d.ts +7 -0
  8. package/lib/agent-runtime.d.ts.map +1 -1
  9. package/lib/agent-runtime.js +110 -32
  10. package/lib/agent-runtime.js.map +1 -1
  11. package/lib/api.js +28 -6
  12. package/lib/api.js.map +1 -1
  13. package/lib/autonomy.d.ts.map +1 -1
  14. package/lib/autonomy.js +5 -0
  15. package/lib/autonomy.js.map +1 -1
  16. package/lib/channel-message.d.ts +2 -0
  17. package/lib/channel-message.d.ts.map +1 -1
  18. package/lib/channel-message.js.map +1 -1
  19. package/lib/channels/manager.d.ts.map +1 -1
  20. package/lib/channels/manager.js +4 -3
  21. package/lib/channels/manager.js.map +1 -1
  22. package/lib/channels/notification-delivery.d.ts.map +1 -1
  23. package/lib/channels/notification-delivery.js +10 -0
  24. package/lib/channels/notification-delivery.js.map +1 -1
  25. package/lib/channels/weixin/connect.d.ts.map +1 -1
  26. package/lib/client-api.d.ts +7 -2
  27. package/lib/client-api.d.ts.map +1 -1
  28. package/lib/client-api.js +8 -1
  29. package/lib/client-api.js.map +1 -1
  30. package/lib/client.d.ts.map +1 -1
  31. package/lib/client.js +2115 -1884
  32. package/lib/client.js.map +4 -4
  33. package/lib/collaboration/composition.js +1 -1
  34. package/lib/collaboration/composition.js.map +1 -1
  35. package/lib/concern-attention.d.ts +19 -0
  36. package/lib/concern-attention.d.ts.map +1 -0
  37. package/lib/concern-attention.js +36 -0
  38. package/lib/concern-attention.js.map +1 -0
  39. package/lib/concern-domain.d.ts +7 -1
  40. package/lib/concern-domain.d.ts.map +1 -1
  41. package/lib/concern-domain.js +4 -0
  42. package/lib/concern-domain.js.map +1 -1
  43. package/lib/concern-execution-notes.d.ts +18 -0
  44. package/lib/concern-execution-notes.d.ts.map +1 -0
  45. package/lib/concern-execution-notes.js +41 -0
  46. package/lib/concern-execution-notes.js.map +1 -0
  47. package/lib/concern-execution-receipt.d.ts +4 -0
  48. package/lib/concern-execution-receipt.d.ts.map +1 -0
  49. package/lib/concern-execution-receipt.js +28 -0
  50. package/lib/concern-execution-receipt.js.map +1 -0
  51. package/lib/concern-execution.d.ts +30 -0
  52. package/lib/concern-execution.d.ts.map +1 -0
  53. package/lib/concern-execution.js +86 -0
  54. package/lib/concern-execution.js.map +1 -0
  55. package/lib/concern-management-tool.d.ts.map +1 -1
  56. package/lib/concern-management-tool.js +21 -19
  57. package/lib/concern-management-tool.js.map +1 -1
  58. package/lib/concern-note-source.d.ts +7 -0
  59. package/lib/concern-note-source.d.ts.map +1 -0
  60. package/lib/concern-note-source.js +25 -0
  61. package/lib/concern-note-source.js.map +1 -0
  62. package/lib/concern-resources.d.ts +27 -0
  63. package/lib/concern-resources.d.ts.map +1 -0
  64. package/lib/concern-resources.js +36 -0
  65. package/lib/concern-resources.js.map +1 -0
  66. package/lib/concern-sources.d.ts +1 -1
  67. package/lib/concern-sources.d.ts.map +1 -1
  68. package/lib/concern-store.d.ts +9 -1
  69. package/lib/concern-store.d.ts.map +1 -1
  70. package/lib/concern-store.js +111 -34
  71. package/lib/concern-store.js.map +1 -1
  72. package/lib/concern-tool.d.ts +1 -0
  73. package/lib/concern-tool.d.ts.map +1 -1
  74. package/lib/concern-tool.js +8 -4
  75. package/lib/concern-tool.js.map +1 -1
  76. package/lib/decision/conversation.d.ts +11 -0
  77. package/lib/decision/conversation.d.ts.map +1 -0
  78. package/lib/decision/conversation.js +52 -0
  79. package/lib/decision/conversation.js.map +1 -0
  80. package/lib/decision/events.d.ts +16 -0
  81. package/lib/decision/events.d.ts.map +1 -0
  82. package/lib/decision/events.js +9 -0
  83. package/lib/decision/events.js.map +1 -0
  84. package/lib/domain.d.ts +2 -0
  85. package/lib/domain.d.ts.map +1 -1
  86. package/lib/domain.js.map +1 -1
  87. package/lib/heartbeat.d.ts +12 -10
  88. package/lib/heartbeat.d.ts.map +1 -1
  89. package/lib/heartbeat.js +54 -26
  90. package/lib/heartbeat.js.map +1 -1
  91. package/lib/index.d.ts.map +1 -1
  92. package/lib/index.js +3 -0
  93. package/lib/index.js.map +1 -1
  94. package/lib/memory-prompt-context.js +1 -0
  95. package/lib/memory-prompt-context.js.map +1 -1
  96. package/lib/memory-reflection.js +1 -1
  97. package/lib/observation-contract.d.ts +9 -0
  98. package/lib/observation-contract.d.ts.map +1 -0
  99. package/lib/observation-contract.js +19 -0
  100. package/lib/observation-contract.js.map +1 -0
  101. package/lib/observation-executor.d.ts +5 -0
  102. package/lib/observation-executor.d.ts.map +1 -1
  103. package/lib/observation-executor.js +17 -1
  104. package/lib/observation-executor.js.map +1 -1
  105. package/lib/observation-loop.d.ts +5 -0
  106. package/lib/observation-loop.d.ts.map +1 -1
  107. package/lib/observation-loop.js +36 -3
  108. package/lib/observation-loop.js.map +1 -1
  109. package/lib/observation-sources.d.ts +14 -0
  110. package/lib/observation-sources.d.ts.map +1 -0
  111. package/lib/observation-sources.js +12 -0
  112. package/lib/observation-sources.js.map +1 -0
  113. package/lib/requirements/service.d.ts.map +1 -1
  114. package/lib/requirements/service.js +2 -0
  115. package/lib/requirements/service.js.map +1 -1
  116. package/lib/requirements/worker.d.ts.map +1 -1
  117. package/lib/requirements/worker.js +1 -0
  118. package/lib/requirements/worker.js.map +1 -1
  119. package/lib/scheduler/continuations.d.ts.map +1 -1
  120. package/lib/scheduler/continuations.js +17 -3
  121. package/lib/scheduler/continuations.js.map +1 -1
  122. package/lib/skills/builtin.d.ts.map +1 -1
  123. package/lib/skills/builtin.js +2 -0
  124. package/lib/skills/builtin.js.map +1 -1
  125. package/lib/skills/drama-builtin.d.ts.map +1 -1
  126. package/lib/skills/drama-builtin.js +13 -1
  127. package/lib/skills/drama-builtin.js.map +1 -1
  128. package/lib/skills/story-builtins.d.ts +3 -0
  129. package/lib/skills/story-builtins.d.ts.map +1 -0
  130. package/lib/skills/story-builtins.js +72 -0
  131. package/lib/skills/story-builtins.js.map +1 -0
  132. package/lib/skills/viora-canvas-builtin.d.ts.map +1 -1
  133. package/lib/skills/viora-canvas-builtin.js +12 -1
  134. package/lib/skills/viora-canvas-builtin.js.map +1 -1
  135. package/lib/snapshot-cache.d.ts +7 -0
  136. package/lib/snapshot-cache.d.ts.map +1 -0
  137. package/lib/snapshot-cache.js +26 -0
  138. package/lib/snapshot-cache.js.map +1 -0
  139. package/lib/tasks/result.js +1 -1
  140. package/lib/tasks/result.js.map +1 -1
  141. package/lib/ui/memory/concern-board.d.ts +1 -1
  142. package/lib/ui/memory/concern-board.d.ts.map +1 -1
  143. package/lib/ui/memory/concern-board.js +12 -6
  144. package/lib/ui/memory/concern-board.js.map +1 -1
  145. package/lib/ui/memory/concern-deletion.d.ts.map +1 -1
  146. package/lib/ui/memory/concern-deletion.js +2 -1
  147. package/lib/ui/memory/concern-deletion.js.map +1 -1
  148. package/lib/ui/memory/concern-editor.d.ts.map +1 -1
  149. package/lib/ui/memory/concern-editor.js +5 -3
  150. package/lib/ui/memory/concern-editor.js.map +1 -1
  151. package/lib/ui/memory/concern-execution-fields.d.ts +7 -0
  152. package/lib/ui/memory/concern-execution-fields.d.ts.map +1 -0
  153. package/lib/ui/memory/concern-execution-fields.js +8 -0
  154. package/lib/ui/memory/concern-execution-fields.js.map +1 -0
  155. package/lib/ui/memory/concern-feedback.d.ts +15 -0
  156. package/lib/ui/memory/concern-feedback.d.ts.map +1 -0
  157. package/lib/ui/memory/concern-feedback.js +13 -0
  158. package/lib/ui/memory/concern-feedback.js.map +1 -0
  159. package/lib/ui/memory/concern-panel.d.ts.map +1 -1
  160. package/lib/ui/memory/concern-panel.js +11 -3
  161. package/lib/ui/memory/concern-panel.js.map +1 -1
  162. package/package.json +6 -1
  163. package/resources/skills/novel-game-creation/manifest.json +393 -0
  164. package/resources/skills/novel-game-creation/upstream/LICENSE +21 -0
  165. package/resources/skills/novel-game-creation/upstream/README.md +420 -0
  166. package/resources/skills/novel-game-creation/upstream/README_ZH.md +421 -0
  167. package/resources/skills/novel-game-creation/upstream/VERSION +1 -0
  168. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/BUILD_BRIEF.md +219 -0
  169. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/.vercelignore +3 -0
  170. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/RUN.md +138 -0
  171. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/bg/compound_new_guofeng.webp +0 -0
  172. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/finale/fate_coda.webp +0 -0
  173. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/finale/meng.webp +0 -0
  174. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/finale/pan.webp +0 -0
  175. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/finale/pinger.webp +0 -0
  176. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/finale/xuee.webp +0 -0
  177. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/finale/yue.webp +0 -0
  178. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_accord_five.webp +0 -0
  179. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_afterglow_five.webp +0 -0
  180. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/group/inner_court_alliance.webp +0 -0
  181. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/group/public_day10.webp +0 -0
  182. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/group/public_day15.webp +0 -0
  183. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/group/public_day5.webp +0 -0
  184. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/group/title_new_guofeng.webp +0 -0
  185. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/joint/pan_pinger.webp +0 -0
  186. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/joint/pan_xuee.webp +0 -0
  187. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/joint/yue_meng.webp +0 -0
  188. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pan.webp +0 -0
  189. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/joint/yue_pinger.webp +0 -0
  190. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/meng/explicit.webp +0 -0
  191. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/meng/prelude.webp +0 -0
  192. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/milestone/meng.webp +0 -0
  193. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/milestone/pan.webp +0 -0
  194. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/milestone/pinger.webp +0 -0
  195. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/milestone/xuee.webp +0 -0
  196. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/milestone/yue.webp +0 -0
  197. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/pan/explicit.webp +0 -0
  198. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/pan/prelude.webp +0 -0
  199. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/pinger/explicit.webp +0 -0
  200. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/pinger/prelude.webp +0 -0
  201. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/xuee/explicit.webp +0 -0
  202. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/xuee/prelude.webp +0 -0
  203. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/yue/explicit.webp +0 -0
  204. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/cg/yue/prelude.webp +0 -0
  205. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/heroine/meng/night.webp +0 -0
  206. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/heroine/pan/night.webp +0 -0
  207. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/heroine/pinger/night.webp +0 -0
  208. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/heroine/xuee/night.webp +0 -0
  209. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/heroine/yue/night.webp +0 -0
  210. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/household/li_jiaoer.webp +0 -0
  211. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/assets/scene/gate_collector.webp +0 -0
  212. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/css/new-guofeng.css +1494 -0
  213. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/css/style.css +2508 -0
  214. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/index.html +18 -0
  215. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/js/assets.js +147 -0
  216. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/js/audio.js +332 -0
  217. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/js/data.js +7470 -0
  218. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/js/engine.js +13066 -0
  219. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/js/main.js +3051 -0
  220. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/js/text.js +32 -0
  221. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/package.json +11 -0
  222. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/app/vercel.json +23 -0
  223. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/build/art/generated-art.json +161 -0
  224. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/example.json +12 -0
  225. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/qa/README.md +26 -0
  226. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/qa/playable-model.json +99 -0
  227. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/qa/verification.json +41 -0
  228. package/resources/skills/novel-game-creation/upstream/examples/jin-ping-mei/qa/verify_playable_model.mjs +152 -0
  229. package/resources/skills/novel-game-creation/upstream/manifest.json +498 -0
  230. package/resources/skills/novel-game-creation/upstream/skills/game-art-direction/SKILL.md +47 -0
  231. package/resources/skills/novel-game-creation/upstream/skills/game-art-direction/agents/openai.yaml +4 -0
  232. package/resources/skills/novel-game-creation/upstream/skills/game-art-direction/references/art-direction-method.md +40 -0
  233. package/resources/skills/novel-game-creation/upstream/skills/game-build/SKILL.md +66 -0
  234. package/resources/skills/novel-game-creation/upstream/skills/game-build/agents/openai.yaml +4 -0
  235. package/resources/skills/novel-game-creation/upstream/skills/game-build/references/blender-asset-workflow.md +24 -0
  236. package/resources/skills/novel-game-creation/upstream/skills/game-build/references/build-brief-contract.md +72 -0
  237. package/resources/skills/novel-game-creation/upstream/skills/game-build/references/generative-media-pipeline.md +25 -0
  238. package/resources/skills/novel-game-creation/upstream/skills/game-build/references/playable-model-contract.md +46 -0
  239. package/resources/skills/novel-game-creation/upstream/skills/game-build/references/tts-production-contract.md +23 -0
  240. package/resources/skills/novel-game-creation/upstream/skills/game-concept/SKILL.md +54 -0
  241. package/resources/skills/novel-game-creation/upstream/skills/game-concept/agents/openai.yaml +4 -0
  242. package/resources/skills/novel-game-creation/upstream/skills/game-concept/references/concept-method.md +47 -0
  243. package/resources/skills/novel-game-creation/upstream/skills/game-qa/SKILL.md +39 -0
  244. package/resources/skills/novel-game-creation/upstream/skills/game-qa/agents/openai.yaml +4 -0
  245. package/resources/skills/novel-game-creation/upstream/skills/game-qa/references/qa-contract.md +66 -0
  246. package/resources/skills/novel-game-creation/upstream/skills/game-qa/references/test-design-method.md +49 -0
  247. package/resources/skills/novel-game-creation/upstream/skills/game-world-design/SKILL.md +50 -0
  248. package/resources/skills/novel-game-creation/upstream/skills/game-world-design/agents/openai.yaml +4 -0
  249. package/resources/skills/novel-game-creation/upstream/skills/game-world-design/references/narrative-design-method.md +35 -0
  250. package/resources/skills/novel-game-creation/upstream/skills/game-world-design/references/numeric-design-method.md +22 -0
  251. package/resources/skills/novel-game-creation/upstream/skills/game-world-design/references/world-design-method.md +57 -0
  252. package/resources/skills/novel-game-creation/upstream/skills/novel-game-analyze/SKILL.md +68 -0
  253. package/resources/skills/novel-game-creation/upstream/skills/novel-game-analyze/agents/openai.yaml +4 -0
  254. package/resources/skills/novel-game-creation/upstream/skills/novel-game-analyze/references/gameability-protocol.md +65 -0
  255. package/resources/skills/novel-game-creation/upstream/skills/novel-to-game/SKILL.md +54 -0
  256. package/resources/skills/novel-game-creation/upstream/skills/novel-to-game/agents/openai.yaml +4 -0
  257. package/resources/skills/novel-game-creation/upstream/skills/novel-to-game/references/intake-method.md +50 -0
  258. package/resources/skills/novel-game-creation/upstream/skills/novel-to-game/references/pipeline-contract.md +60 -0
  259. package/resources/skills/story-creation/manifest.json +1477 -0
  260. package/resources/skills/story-creation/upstream/LICENSE.upstream +21 -0
  261. package/resources/skills/story-creation/upstream/manifest.json +1861 -0
  262. package/resources/skills/story-creation/upstream/roles/chapter-extractor.md +254 -0
  263. package/resources/skills/story-creation/upstream/roles/character-designer.md +168 -0
  264. package/resources/skills/story-creation/upstream/roles/consistency-checker.md +192 -0
  265. package/resources/skills/story-creation/upstream/roles/narrative-writer.md +105 -0
  266. package/resources/skills/story-creation/upstream/roles/story-architect.md +139 -0
  267. package/resources/skills/story-creation/upstream/roles/story-explorer.md +262 -0
  268. package/resources/skills/story-creation/upstream/roles/story-researcher.md +303 -0
  269. package/resources/skills/story-creation/upstream/skills/browser-cdp/SKILL.md +175 -0
  270. package/resources/skills/story-creation/upstream/skills/story/SKILL.md +129 -0
  271. package/resources/skills/story-creation/upstream/skills/story/VERSION +1 -0
  272. package/resources/skills/story-creation/upstream/skills/story/references/author-memory-maintenance.md +75 -0
  273. package/resources/skills/story-creation/upstream/skills/story/references/author-memory.md +117 -0
  274. package/resources/skills/story-creation/upstream/skills/story/scripts/author_memory_commit.py +1635 -0
  275. package/resources/skills/story-creation/upstream/skills/story-cover/SKILL.md +336 -0
  276. package/resources/skills/story-creation/upstream/skills/story-cover/references/cover-styles.md +210 -0
  277. package/resources/skills/story-creation/upstream/skills/story-deslop/SKILL.md +274 -0
  278. package/resources/skills/story-creation/upstream/skills/story-deslop/references/agent-calls.md +5 -0
  279. package/resources/skills/story-creation/upstream/skills/story-deslop/references/anti-ai-writing.md +556 -0
  280. package/resources/skills/story-creation/upstream/skills/story-deslop/references/author-memory-maintenance.md +75 -0
  281. package/resources/skills/story-creation/upstream/skills/story-deslop/references/author-memory.md +117 -0
  282. package/resources/skills/story-creation/upstream/skills/story-deslop/references/banned-words.md +151 -0
  283. package/resources/skills/story-creation/upstream/skills/story-deslop/references/deslop-gates.md +171 -0
  284. package/resources/skills/story-creation/upstream/skills/story-deslop/references/style-resolution.md +27 -0
  285. package/resources/skills/story-creation/upstream/skills/story-deslop/scripts/author_memory_commit.py +1635 -0
  286. package/resources/skills/story-creation/upstream/skills/story-deslop/scripts/check-ai-patterns.js +1586 -0
  287. package/resources/skills/story-creation/upstream/skills/story-deslop/scripts/check-degeneration.js +349 -0
  288. package/resources/skills/story-creation/upstream/skills/story-deslop/scripts/normalize-punctuation.js +415 -0
  289. package/resources/skills/story-creation/upstream/skills/story-deslop/scripts/style-whitelist.js +39 -0
  290. package/resources/skills/story-creation/upstream/skills/story-import/SKILL.md +127 -0
  291. package/resources/skills/story-creation/upstream/skills/story-import/references/character-state-reverse.md +82 -0
  292. package/resources/skills/story-creation/upstream/skills/story-import/references/deep-analysis.md +47 -0
  293. package/resources/skills/story-creation/upstream/skills/story-import/references/format-and-structure.md +168 -0
  294. package/resources/skills/story-creation/upstream/skills/story-import/references/import-report.md +64 -0
  295. package/resources/skills/story-creation/upstream/skills/story-import/references/import-special-cases.md +34 -0
  296. package/resources/skills/story-creation/upstream/skills/story-import/references/import-tracking.md +95 -0
  297. package/resources/skills/story-creation/upstream/skills/story-import/references/length-routing.md +134 -0
  298. package/resources/skills/story-creation/upstream/skills/story-import/references/outline-reverse-rules.md +79 -0
  299. package/resources/skills/story-creation/upstream/skills/story-import/references/outline-reverse.md +24 -0
  300. package/resources/skills/story-creation/upstream/skills/story-import/references/state-tracking.md +43 -0
  301. package/resources/skills/story-creation/upstream/skills/story-import/references/structure-mapping-long.md +448 -0
  302. package/resources/skills/story-creation/upstream/skills/story-import/references/structure-mapping-short.md +187 -0
  303. package/resources/skills/story-creation/upstream/skills/story-import/references/tracking-initialization.md +31 -0
  304. package/resources/skills/story-creation/upstream/skills/story-import/references/tracking-transaction.md +146 -0
  305. package/resources/skills/story-creation/upstream/skills/story-import/scripts/build_outline_brief.py +332 -0
  306. package/resources/skills/story-creation/upstream/skills/story-import/scripts/check-outline-contract.js +520 -0
  307. package/resources/skills/story-creation/upstream/skills/story-import/scripts/tracking_commit.py +1691 -0
  308. package/resources/skills/story-creation/upstream/skills/story-import/scripts/wordcount_core.py +405 -0
  309. package/resources/skills/story-creation/upstream/skills/story-long-analyze/SKILL.md +140 -0
  310. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/author-facing.md +252 -0
  311. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/deconstruction-notes.md +270 -0
  312. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/final-checks.md +19 -0
  313. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/index-rebuild.md +11 -0
  314. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/inspiration-library.md +105 -0
  315. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/pipeline-ops.md +154 -0
  316. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/semantic-acceptance-fixtures.md +84 -0
  317. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/stage1-golden-chapters.md +128 -0
  318. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/stage2-extraction.md +229 -0
  319. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/stage3-plot-rhythm.md +480 -0
  320. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/stage4-characters-settings.md +195 -0
  321. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/stage5-report.md +33 -0
  322. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/style-profile-generator.md +76 -0
  323. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/style-profile-protocol.md +133 -0
  324. package/resources/skills/story-creation/upstream/skills/story-long-analyze/references/synthesis-inputs.md +39 -0
  325. package/resources/skills/story-creation/upstream/skills/story-long-analyze/scripts/build_chapter_index.py +466 -0
  326. package/resources/skills/story-creation/upstream/skills/story-long-analyze/scripts/inspect_existing_assets.py +702 -0
  327. package/resources/skills/story-creation/upstream/skills/story-long-analyze/scripts/inspiration_index.py +864 -0
  328. package/resources/skills/story-creation/upstream/skills/story-long-analyze/scripts/manage_analysis_run.py +1145 -0
  329. package/resources/skills/story-creation/upstream/skills/story-long-analyze/scripts/render_relation_chart.py +425 -0
  330. package/resources/skills/story-creation/upstream/skills/story-long-scan/SKILL.md +193 -0
  331. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/genre-trends.md +197 -0
  332. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/platform-ciweimao.md +19 -0
  333. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/platform-fanqie.md +45 -0
  334. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/platform-jjwxc.md +28 -0
  335. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/platform-qidian.md +35 -0
  336. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/platform-qimao.md +27 -0
  337. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/publishing-guide.md +114 -0
  338. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/reader-profiling.md +105 -0
  339. package/resources/skills/story-creation/upstream/skills/story-long-scan/references/topic-decision.md +82 -0
  340. package/resources/skills/story-creation/upstream/skills/story-long-scan/scripts/aggregate-rank.js +682 -0
  341. package/resources/skills/story-creation/upstream/skills/story-long-scan/scripts/cdp-utils.js +242 -0
  342. package/resources/skills/story-creation/upstream/skills/story-long-scan/scripts/ciweimao-rank-scraper.js +240 -0
  343. package/resources/skills/story-creation/upstream/skills/story-long-scan/scripts/fanqie-rank-scraper.js +658 -0
  344. package/resources/skills/story-creation/upstream/skills/story-long-scan/scripts/jjwxc-rank-scraper.js +400 -0
  345. package/resources/skills/story-creation/upstream/skills/story-long-scan/scripts/qidian-rank-scraper.js +592 -0
  346. package/resources/skills/story-creation/upstream/skills/story-long-scan/scripts/qimao-rank-scraper.js +435 -0
  347. package/resources/skills/story-creation/upstream/skills/story-long-write/SKILL.md +136 -0
  348. package/resources/skills/story-creation/upstream/skills/story-long-write/references/agent-calls.md +47 -0
  349. package/resources/skills/story-creation/upstream/skills/story-long-write/references/anti-ai-writing.md +556 -0
  350. package/resources/skills/story-creation/upstream/skills/story-long-write/references/artifact-protocols.md +183 -0
  351. package/resources/skills/story-creation/upstream/skills/story-long-write/references/author-memory-maintenance.md +75 -0
  352. package/resources/skills/story-creation/upstream/skills/story-long-write/references/author-memory.md +117 -0
  353. package/resources/skills/story-creation/upstream/skills/story-long-write/references/banned-words.md +151 -0
  354. package/resources/skills/story-creation/upstream/skills/story-long-write/references/benchmark-recall.md +16 -0
  355. package/resources/skills/story-creation/upstream/skills/story-long-write/references/character-basics.md +445 -0
  356. package/resources/skills/story-creation/upstream/skills/story-long-write/references/character-design-methods.md +428 -0
  357. package/resources/skills/story-creation/upstream/skills/story-long-write/references/character-relations.md +433 -0
  358. package/resources/skills/story-creation/upstream/skills/story-long-write/references/commercial-core-methods.md +502 -0
  359. package/resources/skills/story-creation/upstream/skills/story-long-write/references/cross-book-recall.md +88 -0
  360. package/resources/skills/story-creation/upstream/skills/story-long-write/references/deslop-gates.md +171 -0
  361. package/resources/skills/story-creation/upstream/skills/story-long-write/references/dialogue-mastery.md +288 -0
  362. package/resources/skills/story-creation/upstream/skills/story-long-write/references/emotion-on-page.md +116 -0
  363. package/resources/skills/story-creation/upstream/skills/story-long-write/references/emotional-arc-design.md +313 -0
  364. package/resources/skills/story-creation/upstream/skills/story-long-write/references/emotional-methods.md +209 -0
  365. package/resources/skills/story-creation/upstream/skills/story-long-write/references/female-audience-writing.md +188 -0
  366. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
  367. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
  368. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
  369. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
  370. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
  371. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
  372. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
  373. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
  374. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
  375. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
  376. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
  377. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
  378. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
  379. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
  380. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
  381. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
  382. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
  383. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
  384. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
  385. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
  386. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
  387. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
  388. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
  389. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
  390. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
  391. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
  392. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
  393. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
  394. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
  395. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
  396. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
  397. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
  398. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-prose-cards.md +91 -0
  399. package/resources/skills/story-creation/upstream/skills/story-long-write/references/genre-readers.md +235 -0
  400. package/resources/skills/story-creation/upstream/skills/story-long-write/references/long-chapter-hooks.md +225 -0
  401. package/resources/skills/story-creation/upstream/skills/story-long-write/references/long-chapter-quality.md +177 -0
  402. package/resources/skills/story-creation/upstream/skills/story-long-write/references/long-format.md +36 -0
  403. package/resources/skills/story-creation/upstream/skills/story-long-write/references/long-genre-catalog.md +394 -0
  404. package/resources/skills/story-creation/upstream/skills/story-long-write/references/long-genre-mechanics.md +415 -0
  405. package/resources/skills/story-creation/upstream/skills/story-long-write/references/long-reversal.md +335 -0
  406. package/resources/skills/story-creation/upstream/skills/story-long-write/references/long-suspense.md +352 -0
  407. package/resources/skills/story-creation/upstream/skills/story-long-write/references/opening-design.md +349 -0
  408. package/resources/skills/story-creation/upstream/skills/story-long-write/references/outline-conflict.md +457 -0
  409. package/resources/skills/story-creation/upstream/skills/story-long-write/references/outline-methods.md +287 -0
  410. package/resources/skills/story-creation/upstream/skills/story-long-write/references/outline-rhythm.md +389 -0
  411. package/resources/skills/story-creation/upstream/skills/story-long-write/references/outline-structure-theory.md +273 -0
  412. package/resources/skills/story-creation/upstream/skills/story-long-write/references/plot-core-methods.md +522 -0
  413. package/resources/skills/story-creation/upstream/skills/story-long-write/references/plot-emotion-system.md +354 -0
  414. package/resources/skills/story-creation/upstream/skills/story-long-write/references/plot-frameworks.md +711 -0
  415. package/resources/skills/story-creation/upstream/skills/story-long-write/references/plot-special-topics.md +622 -0
  416. package/resources/skills/story-creation/upstream/skills/story-long-write/references/project-files.md +114 -0
  417. package/resources/skills/story-creation/upstream/skills/story-long-write/references/reader-contract-and-progression.md +117 -0
  418. package/resources/skills/story-creation/upstream/skills/story-long-write/references/reference-index.md +86 -0
  419. package/resources/skills/story-creation/upstream/skills/story-long-write/references/stop-and-fix.md +9 -0
  420. package/resources/skills/story-creation/upstream/skills/story-long-write/references/style-combat-face.md +352 -0
  421. package/resources/skills/story-creation/upstream/skills/story-long-write/references/style-craft.md +327 -0
  422. package/resources/skills/story-creation/upstream/skills/story-long-write/references/style-genre-modules.md +510 -0
  423. package/resources/skills/story-creation/upstream/skills/story-long-write/references/style-resolution.md +27 -0
  424. package/resources/skills/story-creation/upstream/skills/story-long-write/references/tracking-initialization.md +31 -0
  425. package/resources/skills/story-creation/upstream/skills/story-long-write/references/tracking-transaction.md +146 -0
  426. package/resources/skills/story-creation/upstream/skills/story-long-write/references/workflow-chapter.md +104 -0
  427. package/resources/skills/story-creation/upstream/skills/story-long-write/references/workflow-daily.md +75 -0
  428. package/resources/skills/story-creation/upstream/skills/story-long-write/references/workflow-outline.md +157 -0
  429. package/resources/skills/story-creation/upstream/skills/story-long-write/references/workflow-revision.md +89 -0
  430. package/resources/skills/story-creation/upstream/skills/story-long-write/references/workflow-setup.md +170 -0
  431. package/resources/skills/story-creation/upstream/skills/story-long-write/references/workflow-volume.md +142 -0
  432. package/resources/skills/story-creation/upstream/skills/story-long-write/references/writer-prompt-fallback.md +24 -0
  433. package/resources/skills/story-creation/upstream/skills/story-long-write/references/writing-craft.md +442 -0
  434. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/author_memory_commit.py +1635 -0
  435. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/build_architect_brief.py +260 -0
  436. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/build_writer_prompt.py +611 -0
  437. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/check-ai-patterns.js +1586 -0
  438. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/check-degeneration.js +349 -0
  439. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/check-outline-contract.js +520 -0
  440. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/check-outline-copy.js +313 -0
  441. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/normalize-punctuation.js +415 -0
  442. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/outline_view.py +286 -0
  443. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/storyctl.py +561 -0
  444. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/style-whitelist.js +39 -0
  445. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/tracking_commit.py +1691 -0
  446. package/resources/skills/story-creation/upstream/skills/story-long-write/scripts/wordcount_core.py +405 -0
  447. package/resources/skills/story-creation/upstream/skills/story-review/SKILL.md +231 -0
  448. package/resources/skills/story-creation/upstream/skills/story-review/references/agent-prompts.md +184 -0
  449. package/resources/skills/story-creation/upstream/skills/story-review/references/anti-ai-writing.md +556 -0
  450. package/resources/skills/story-creation/upstream/skills/story-review/references/author-memory-maintenance.md +75 -0
  451. package/resources/skills/story-creation/upstream/skills/story-review/references/author-memory.md +117 -0
  452. package/resources/skills/story-creation/upstream/skills/story-review/references/banned-words.md +151 -0
  453. package/resources/skills/story-creation/upstream/skills/story-review/references/batch-review.md +19 -0
  454. package/resources/skills/story-creation/upstream/skills/story-review/references/character-relations.md +433 -0
  455. package/resources/skills/story-creation/upstream/skills/story-review/references/dialogue-mastery.md +288 -0
  456. package/resources/skills/story-creation/upstream/skills/story-review/references/plot-core-methods.md +522 -0
  457. package/resources/skills/story-creation/upstream/skills/story-review/references/quality-rubric.md +55 -0
  458. package/resources/skills/story-creation/upstream/skills/story-review/references/review-quality.md +246 -0
  459. package/resources/skills/story-creation/upstream/skills/story-review/references/review-tracking.md +10 -0
  460. package/resources/skills/story-creation/upstream/skills/story-review/references/rubrics/fanqie.md +18 -0
  461. package/resources/skills/story-creation/upstream/skills/story-review/references/rubrics/qidian.md +19 -0
  462. package/resources/skills/story-creation/upstream/skills/story-review/references/rubrics/zhihu.md +20 -0
  463. package/resources/skills/story-creation/upstream/skills/story-review/references/solo.md +52 -0
  464. package/resources/skills/story-creation/upstream/skills/story-review/references/style-resolution.md +27 -0
  465. package/resources/skills/story-creation/upstream/skills/story-review/references/tracking-initialization.md +31 -0
  466. package/resources/skills/story-creation/upstream/skills/story-review/references/tracking-transaction.md +146 -0
  467. package/resources/skills/story-creation/upstream/skills/story-review/scripts/author_memory_commit.py +1635 -0
  468. package/resources/skills/story-creation/upstream/skills/story-review/scripts/check-ai-patterns.js +1586 -0
  469. package/resources/skills/story-creation/upstream/skills/story-review/scripts/check-degeneration.js +349 -0
  470. package/resources/skills/story-creation/upstream/skills/story-review/scripts/normalize-punctuation.js +415 -0
  471. package/resources/skills/story-creation/upstream/skills/story-review/scripts/style-whitelist.js +39 -0
  472. package/resources/skills/story-creation/upstream/skills/story-review/scripts/tracking_commit.py +1691 -0
  473. package/resources/skills/story-creation/upstream/skills/story-review/scripts/wordcount_core.py +405 -0
  474. package/resources/skills/story-creation/upstream/skills/story-setup/SKILL.md +165 -0
  475. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/agent-quality.md +72 -0
  476. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/agent-reference-profiles.md +55 -0
  477. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/anti-ai-writing.md +556 -0
  478. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/banned-words.md +151 -0
  479. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/benchmark-style-load.md +107 -0
  480. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/character-basics.md +445 -0
  481. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/character-design-methods.md +428 -0
  482. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/character-relations.md +433 -0
  483. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/deslop-gates.md +171 -0
  484. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/dialogue-mastery.md +288 -0
  485. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/emotion-on-page.md +116 -0
  486. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/emotional-arc-design.md +313 -0
  487. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/format-and-structure.md +168 -0
  488. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//344/270/234/346/226/271/344/273/231/344/276/240.md +51 -0
  489. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//344/274/240/347/273/237/347/216/204/345/271/273.md +51 -0
  490. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/345/217/244/344/273/243.md +51 -0
  491. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/216/206/345/217/262/350/204/221/346/264/236.md +51 -0
  492. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/217/214/347/224/267/344/270/273.md +53 -0
  493. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/350/250/200/350/204/221/346/264/236.md +51 -0
  494. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/217/244/351/243/216/344/270/226/346/203/205.md +51 -0
  495. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/346/202/254/347/226/221.md +51 -0
  496. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/245/263/351/242/221/347/247/215/347/224/260.md +51 -0
  497. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/256/253/346/226/227/345/256/205/346/226/227.md +51 -0
  498. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/271/264/344/273/243.md +53 -0
  499. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//345/277/253/347/251/277.md +51 -0
  500. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/347/201/265/345/274/202.md +51 -0
  501. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//346/202/254/347/226/221/350/204/221/346/264/236.md +51 -0
  502. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//346/210/230/347/245/236/350/265/230/345/251/277.md +51 -0
  503. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//346/212/227/346/210/230/350/260/215/346/210/230.md +51 -0
  504. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//346/230/237/345/205/211/347/222/200/347/222/250.md +51 -0
  505. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//346/260/221/345/233/275/350/250/200/346/203/205.md +51 -0
  506. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//346/270/270/346/210/217/344/275/223/350/202/262.md +51 -0
  507. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/204/221/346/264/236.md +53 -0
  508. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//347/216/204/345/271/273/350/250/200/346/203/205.md +51 -0
  509. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//347/216/260/350/250/200/350/204/221/346/264/236.md +51 -0
  510. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//347/247/221/345/271/273/346/234/253/344/270/226.md +51 -0
  511. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//350/201/214/345/234/272/345/251/232/346/201/213.md +51 -0
  512. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//350/245/277/346/226/271/345/245/207/345/271/273.md +51 -0
  513. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//350/261/252/351/227/250/346/200/273/350/243/201.md +53 -0
  514. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/344/277/256/347/234/237.md +51 -0
  515. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/346/227/245/345/270/270.md +53 -0
  516. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/347/247/215/347/224/260.md +51 -0
  517. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/350/204/221/346/264/236.md +53 -0
  518. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//351/203/275/345/270/202/351/253/230/346/255/246.md +53 -0
  519. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards//351/235/222/346/230/245/347/224/234/345/256/240.md +51 -0
  520. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-prose-cards.md +91 -0
  521. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/genre-readers.md +235 -0
  522. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/long-chapter-hooks.md +225 -0
  523. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/long-emotional-methods.md +209 -0
  524. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/long-genre-catalog.md +394 -0
  525. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/long-genre-mechanics.md +415 -0
  526. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/long-quality.md +42 -0
  527. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/long-reversal.md +335 -0
  528. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/long-suspense.md +352 -0
  529. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/opening-design.md +349 -0
  530. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/outline-conflict.md +457 -0
  531. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/outline-methods.md +287 -0
  532. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/outline-rhythm.md +389 -0
  533. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/plot-core-methods.md +522 -0
  534. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/short-chapter-hooks.md +225 -0
  535. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/short-emotional-methods.md +179 -0
  536. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/short-genre-formulas.md +417 -0
  537. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/short-paragraph-hooks.md +146 -0
  538. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/short-quality.md +39 -0
  539. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/short-reversal.md +355 -0
  540. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/short-suspense.md +352 -0
  541. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/style-combat-face.md +352 -0
  542. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/style-genre-modules.md +510 -0
  543. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/style-resolution.md +27 -0
  544. package/resources/skills/story-creation/upstream/skills/story-setup/references/agent-references/writing-craft.md +442 -0
  545. package/resources/skills/story-creation/upstream/skills/story-setup/references/diagnostics.md +38 -0
  546. package/resources/skills/story-creation/upstream/skills/story-short-analyze/SKILL.md +224 -0
  547. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-character-basics.md +453 -0
  548. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-character-design.md +438 -0
  549. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-character-relations.md +395 -0
  550. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-method.md +42 -0
  551. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-paragraph-hooks.md +146 -0
  552. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-reader-profile.md +245 -0
  553. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-report-style.md +45 -0
  554. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-short-genres.md +65 -0
  555. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-short-hooks.md +77 -0
  556. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-short-mechanics.md +82 -0
  557. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-short-patterns.md +50 -0
  558. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-short-suspense.md +98 -0
  559. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/analysis-writing-techniques.md +477 -0
  560. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/deconstruction-examples.md +79 -0
  561. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/optional-modules.md +97 -0
  562. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/output-contract.md +127 -0
  563. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/quality-checklist.md +80 -0
  564. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/real-market-data.md +90 -0
  565. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/source-story-quality.md +221 -0
  566. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/stage2-3-structure-emotion.md +308 -0
  567. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/stage4-6-reversal-summary.md +611 -0
  568. package/resources/skills/story-creation/upstream/skills/story-short-analyze/references/zhihu-style.md +54 -0
  569. package/resources/skills/story-creation/upstream/skills/story-short-scan/SKILL.md +182 -0
  570. package/resources/skills/story-creation/upstream/skills/story-short-scan/references/manual-rank-input.md +36 -0
  571. package/resources/skills/story-creation/upstream/skills/story-short-scan/references/platform-dianzhong.md +24 -0
  572. package/resources/skills/story-creation/upstream/skills/story-short-scan/references/platform-heiyan.md +21 -0
  573. package/resources/skills/story-creation/upstream/skills/story-short-scan/references/real-market-data.md +90 -0
  574. package/resources/skills/story-creation/upstream/skills/story-short-scan/references/topic-match.md +38 -0
  575. package/resources/skills/story-creation/upstream/skills/story-short-scan/scripts/aggregate-rank.js +682 -0
  576. package/resources/skills/story-creation/upstream/skills/story-short-scan/scripts/cdp-utils.js +242 -0
  577. package/resources/skills/story-creation/upstream/skills/story-short-scan/scripts/dz-browse-scraper.js +232 -0
  578. package/resources/skills/story-creation/upstream/skills/story-short-scan/scripts/heiyan-booklist-scraper.js +345 -0
  579. package/resources/skills/story-creation/upstream/skills/story-short-write/SKILL.md +136 -0
  580. package/resources/skills/story-creation/upstream/skills/story-short-write/references/agent-calls.md +13 -0
  581. package/resources/skills/story-creation/upstream/skills/story-short-write/references/author-memory-maintenance.md +75 -0
  582. package/resources/skills/story-creation/upstream/skills/story-short-write/references/author-memory.md +117 -0
  583. package/resources/skills/story-creation/upstream/skills/story-short-write/references/banned-words.md +151 -0
  584. package/resources/skills/story-creation/upstream/skills/story-short-write/references/benchmark-recall.md +40 -0
  585. package/resources/skills/story-creation/upstream/skills/story-short-write/references/cross-book-recall.md +62 -0
  586. package/resources/skills/story-creation/upstream/skills/story-short-write/references/dialogue-mastery.md +288 -0
  587. package/resources/skills/story-creation/upstream/skills/story-short-write/references/emotional-methods.md +179 -0
  588. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//344/270/226/346/203/205/346/211/223/350/204/270.md +159 -0
  589. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//345/217/214/347/224/267/344/270/273.md +156 -0
  590. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//345/244/215/344/273/207/346/211/223/350/204/270.md +163 -0
  591. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//345/256/205/346/226/227/345/256/253/346/226/227.md +167 -0
  592. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//346/200/273/350/243/201/350/261/252/351/227/250.md +178 -0
  593. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//346/202/254/347/226/221.md +166 -0
  594. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//346/260/221/344/277/227/346/200/252/350/260/210.md +159 -0
  595. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//346/262/231/351/233/225/350/204/221/346/264/236.md +151 -0
  596. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//347/224/234/345/256/240.md +153 -0
  597. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-styles//350/277/275/345/246/273/347/201/253/350/221/254/345/234/272.md +210 -0
  598. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-writing-formulas.md +417 -0
  599. package/resources/skills/story-creation/upstream/skills/story-short-write/references/genre-writing-techniques.md +490 -0
  600. package/resources/skills/story-creation/upstream/skills/story-short-write/references/hooks-chapter.md +225 -0
  601. package/resources/skills/story-creation/upstream/skills/story-short-write/references/hooks-paragraph.md +146 -0
  602. package/resources/skills/story-creation/upstream/skills/story-short-write/references/output-contract.md +127 -0
  603. package/resources/skills/story-creation/upstream/skills/story-short-write/references/reference-index.md +23 -0
  604. package/resources/skills/story-creation/upstream/skills/story-short-write/references/scene-craft.md +40 -0
  605. package/resources/skills/story-creation/upstream/skills/story-short-write/references/short-craft.md +147 -0
  606. package/resources/skills/story-creation/upstream/skills/story-short-write/references/short-deslop.md +133 -0
  607. package/resources/skills/story-creation/upstream/skills/story-short-write/references/short-format.md +199 -0
  608. package/resources/skills/story-creation/upstream/skills/story-short-write/references/short-prose-quality.md +224 -0
  609. package/resources/skills/story-creation/upstream/skills/story-short-write/references/short-reversal.md +355 -0
  610. package/resources/skills/story-creation/upstream/skills/story-short-write/references/short-suspense.md +352 -0
  611. package/resources/skills/story-creation/upstream/skills/story-short-write/references/style-resolution.md +27 -0
  612. package/resources/skills/story-creation/upstream/skills/story-short-write/references/submission-craft.md +35 -0
  613. package/resources/skills/story-creation/upstream/skills/story-short-write/references/villain-and-reveal.md +153 -0
  614. package/resources/skills/story-creation/upstream/skills/story-short-write/references/workflow-design.md +85 -0
  615. package/resources/skills/story-creation/upstream/skills/story-short-write/references/workflow-draft.md +116 -0
  616. package/resources/skills/story-creation/upstream/skills/story-short-write/references/workflow-revision.md +99 -0
  617. package/resources/skills/story-creation/upstream/skills/story-short-write/references/writing-workflow.md +50 -0
  618. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/author_memory_commit.py +1635 -0
  619. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/check-ai-patterns.js +1586 -0
  620. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/check-degeneration.js +349 -0
  621. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/check-delivery-contract.js +241 -0
  622. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/check-outline-copy.js +313 -0
  623. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/check-phase2-contract.js +363 -0
  624. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/normalize-punctuation.js +415 -0
  625. package/resources/skills/story-creation/upstream/skills/story-short-write/scripts/style-whitelist.js +39 -0
  626. package/resources/skills/video-recap-production/manifest.json +673 -0
  627. package/resources/skills/video-recap-production/upstream/CHANGELOG.md +371 -0
  628. package/resources/skills/video-recap-production/upstream/LICENSE +21 -0
  629. package/resources/skills/video-recap-production/upstream/README.en.md +468 -0
  630. package/resources/skills/video-recap-production/upstream/README.md +459 -0
  631. package/resources/skills/video-recap-production/upstream/manifest.json +839 -0
  632. package/resources/skills/video-recap-production/upstream/skills/video-assemble/SKILL.md +112 -0
  633. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/audio-modes.md +63 -0
  634. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/explicit-audio-mix.md +75 -0
  635. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/foreground-compose.md +118 -0
  636. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/LICENSE.duo-video +21 -0
  637. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/SOURCE.md +15 -0
  638. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_draft_meta_info.json +69 -0
  639. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_combination_segment.json +84 -0
  640. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_combination_video_material.json +98 -0
  641. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_draft.json +204 -0
  642. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_material_video.json +83 -0
  643. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_meta_material_value.json +23 -0
  644. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_project_info.json +133 -0
  645. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_segment.json +70 -0
  646. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_jy_text_styles.json +30 -0
  647. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_yj_material_audio.json +41 -0
  648. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/jianying/empty_yj_material_text.json +109 -0
  649. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/narration-adoption.md +103 -0
  650. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/packaging.md +45 -0
  651. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/pair-media.md +74 -0
  652. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/source-score.md +147 -0
  653. package/resources/skills/video-recap-production/upstream/skills/video-assemble/references/subtitle-track.md +202 -0
  654. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/adoption/__init__.py +1 -0
  655. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/adoption/audio_mix_binding.py +279 -0
  656. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/adoption/frozen_audio.py +187 -0
  657. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/adoption/narration_binding.py +323 -0
  658. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/adoption/strict_inputs.py +109 -0
  659. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/adoption/strict_publish.py +130 -0
  660. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/artifacts.py +47 -0
  661. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/assemble.py +591 -0
  662. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/assemble_constants.py +51 -0
  663. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/assembly_contract.py +318 -0
  664. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/assembly_settings.py +138 -0
  665. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/audio_automation.py +195 -0
  666. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/audio_mix.py +465 -0
  667. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/compose_foreground.py +293 -0
  668. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/export_jianying.py +254 -0
  669. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/__init__.py +1 -0
  670. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/builders.py +718 -0
  671. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/model.py +105 -0
  672. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/optional.py +23 -0
  673. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/schema.py +53 -0
  674. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/templates.py +37 -0
  675. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/timeline_contract.py +223 -0
  676. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/tracks.py +72 -0
  677. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/jianying/writer.py +383 -0
  678. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/lib.py +218 -0
  679. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/media.py +190 -0
  680. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/narration_audio.py +413 -0
  681. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/packaging.py +122 -0
  682. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/pair_media.py +216 -0
  683. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/render_preflight.py +33 -0
  684. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/source_score.py +469 -0
  685. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/source_subtitles.py +423 -0
  686. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/subtitles/__init__.py +1 -0
  687. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/subtitles/core.py +330 -0
  688. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/subtitles/render.py +82 -0
  689. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/subtitles/track.py +324 -0
  690. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/subtitles/track_binding.py +200 -0
  691. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/timeline.py +217 -0
  692. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/timeline_emit.py +167 -0
  693. package/resources/skills/video-recap-production/upstream/skills/video-assemble/scripts/visual_render.py +448 -0
  694. package/resources/skills/video-recap-production/upstream/skills/video-cut/SKILL.md +108 -0
  695. package/resources/skills/video-recap-production/upstream/skills/video-cut/references/shot-review.md +50 -0
  696. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/cut.py +41 -0
  697. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/cut_cli.py +308 -0
  698. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/cut_contract.py +424 -0
  699. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/cut_render.py +304 -0
  700. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/lib.py +114 -0
  701. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/media_geometry.py +238 -0
  702. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/narration_mapping.py +71 -0
  703. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/narrative_selection.py +244 -0
  704. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/sentence_boundaries.py +585 -0
  705. package/resources/skills/video-recap-production/upstream/skills/video-cut/scripts/shot_review.py +357 -0
  706. package/resources/skills/video-recap-production/upstream/skills/video-recap/SKILL.md +260 -0
  707. package/resources/skills/video-recap-production/upstream/skills/video-recap/references/audio-routing.md +126 -0
  708. package/resources/skills/video-recap-production/upstream/skills/video-recap/references/config-playbook.md +65 -0
  709. package/resources/skills/video-recap-production/upstream/skills/video-recap/references/data-schema.md +545 -0
  710. package/resources/skills/video-recap-production/upstream/skills/video-recap/references/resource-library.md +151 -0
  711. package/resources/skills/video-recap-production/upstream/skills/video-recap/references/shift-left-qc-schema.md +23 -0
  712. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/doctor.py +556 -0
  713. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/final_qc.py +527 -0
  714. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/lib.py +220 -0
  715. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/library.py +509 -0
  716. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/materials.py +406 -0
  717. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/mimo_qc.py +33 -0
  718. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/project_binding.py +286 -0
  719. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/__init__.py +1 -0
  720. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/mimo_client.py +13 -0
  721. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/mimo_contract.py +9 -0
  722. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/mimo_evidence.py +287 -0
  723. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/mimo_observations.py +175 -0
  724. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/mimo_payload.py +206 -0
  725. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/mimo_report.py +318 -0
  726. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc/mimo_runner.py +130 -0
  727. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/qc_contract.py +320 -0
  728. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap.py +9 -0
  729. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_cli.py +209 -0
  730. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_inspect.py +452 -0
  731. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_review.py +70 -0
  732. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_runner.py +696 -0
  733. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_runtime.py +260 -0
  734. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_source.py +278 -0
  735. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_stage_qc.py +160 -0
  736. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/recap_timeline.py +621 -0
  737. package/resources/skills/video-recap-production/upstream/skills/video-recap/scripts/resource_lock.py +162 -0
  738. package/resources/skills/video-recap-production/upstream/skills/video-script/SKILL.md +251 -0
  739. package/resources/skills/video-recap-production/upstream/skills/video-script/references/creative-editing-playbook.md +229 -0
  740. package/resources/skills/video-recap-production/upstream/skills/video-script/references/promotional-copy.md +68 -0
  741. package/resources/skills/video-recap-production/upstream/skills/video-script/references/research-guide.md +75 -0
  742. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/agent_text.py +301 -0
  743. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/deslop_qc.py +211 -0
  744. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/evidence_bundle.py +440 -0
  745. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/lib.py +254 -0
  746. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/narration_lint.py +707 -0
  747. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/review.py +40 -0
  748. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/review_grounding.py +238 -0
  749. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/review_response.py +669 -0
  750. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/review_runner.py +186 -0
  751. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/speech_ownership.py +143 -0
  752. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/timeline_fusion.py +108 -0
  753. package/resources/skills/video-recap-production/upstream/skills/video-script/scripts/validate.py +175 -0
  754. package/resources/skills/video-recap-production/upstream/skills/video-understanding/SKILL.md +77 -0
  755. package/resources/skills/video-recap-production/upstream/skills/video-understanding/references/data-schema.md +193 -0
  756. package/resources/skills/video-recap-production/upstream/skills/video-understanding/references/prompt-templates.md +37 -0
  757. package/resources/skills/video-recap-production/upstream/skills/video-understanding/references/research-guide.md +74 -0
  758. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/agent_text.py +301 -0
  759. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/asr.py +279 -0
  760. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/asr_timing_evidence.py +270 -0
  761. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/brief.py +9 -0
  762. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/briefing/__init__.py +1 -0
  763. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/briefing/builder.py +402 -0
  764. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/briefing/context.py +317 -0
  765. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/briefing/inputs.py +268 -0
  766. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/briefing/timeline.py +326 -0
  767. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/consolidate.py +596 -0
  768. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/deslop_qc.py +211 -0
  769. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/detect.py +504 -0
  770. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/extract.py +62 -0
  771. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/lib.py +419 -0
  772. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/narration_lint.py +707 -0
  773. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/speech_ownership.py +143 -0
  774. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/storyboard.py +445 -0
  775. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/timeline_fusion.py +108 -0
  776. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/understand.py +9 -0
  777. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/understanding_brief.py +190 -0
  778. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/understanding_cache.py +345 -0
  779. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/understanding_runner.py +387 -0
  780. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/understanding_storyboard.py +167 -0
  781. package/resources/skills/video-recap-production/upstream/skills/video-understanding/scripts/vlm.py +674 -0
  782. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/SKILL.md +91 -0
  783. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/references/index-tts.md +31 -0
  784. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/approved_text_policy.py +123 -0
  785. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/dub.py +623 -0
  786. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/lib.py +352 -0
  787. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/providers/__init__.py +1 -0
  788. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/providers/fish_audio.py +91 -0
  789. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/providers/index_tts.py +184 -0
  790. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/tts_audio.py +102 -0
  791. package/resources/skills/video-recap-production/upstream/skills/video-voiceover/scripts/voiceover.py +771 -0
  792. package/resources/skills/viora-canvas-production/manifest.json +5 -1
  793. package/resources/skills/viora-canvas-production/references/story-handoff.md +49 -0
@@ -0,0 +1,2508 @@
1
+ :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;
17
+ }
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
+ * { 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; }
2218
+ }
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
+ @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
+ }